Tampilkan postingan dengan label ARDUINO LANJUTAN. Tampilkan semua postingan
Tampilkan postingan dengan label ARDUINO LANJUTAN. Tampilkan semua postingan

SENSOR SUHU LM35 DENGAN JAM & TANGGAL YANG BISA DIATUR DENGAN TOMBOL

Penjelasan Singkat:
Hai sobat semua, kali ini kita akan membuat sebuah alat yang dapat memonitoring suhu dan menampilkannya pada layar LCD 16x2 dengan waktu dan tanggal yang dapat di atur dengan menggunakan 3 buah tombol. Disini waktu dan tanggal tidak menggunakan modul RTC melainkan memanfaatkan library time.h pada arduino. Berikut penampkannya.


Setelah dilakukan pengujian, nilai suhu yang dihasilkan oleh rangkaian arduino dengan sensor LM35 bisa dikatakan akurat setelah dibandingkan dengan termometer manual. Adapun pin yang digunakan pada arduino adalah sebagai berikut:
          Pin Tombol : 2 , 3 dan 4
          Pin LM35   : A0
Setelah merangkainya keatas papan breadboard maka sobat bisa langsung coba sketch dibawah ini:

Sketch Arduino
// Membuat Jam sederhana menggunakan library time.h
// Menampilkan nilai Suhu menggunakan LM35
// Waktu dan Tanggal tanpa menggunakan RTC
//---------------------------------------------------------------------------------------------------

// Library yang digunakan
//---------------------------------------------------------------------------------------------------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Time.h>

// Inisialisi library LCD 16x2
//----------------------------------------------------------------------------------------------------
#define I2C_ADDR          0x27
#define BACKLIGHT_PIN     3
#define En_pin            2
#define Rw_pin            1
#define Rs_pin            0
#define D4_pin            4
#define D5_pin            5
#define D6_pin            6
#define D7_pin            7
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

// Pendeklarasian pin arduino
//----------------------------------------------------------------------------------------------------
const int   pSuhu = A0;
float       suhu, data;
char        ico_temp;

char *hari[] ={"Kamis ", "Jumat", "Sabtu ", "Minggu  ", "Senin ", "Selasa", "Rabu  "};
int maxday[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// Animasi Loading
//----------------------------------------------------------------------------------------------------
byte p1[8]      = {0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};
byte p2[8]      = {0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
byte p3[8]      = {0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};
byte p4[8]      = {0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E};
byte p5[8]      = {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
byte temp [8]   = {B00100,B01010,B01010,B01110,B01110,B11111,B11111,B01110};

int detik       = 20;
int menit       = 10;
int jam         = 01;
int tanggal     = 01;
int bulan       = 12;
int tahun       = 2016;
int blinkState  = LOW;

unsigned long timer1;
unsigned long timer2; //update detik1
int curX;
int curY;
int set         = 6;

void setup() {
  lcd.begin (16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);

  analogReference(INTERNAL);                //Jalankan tegangan referensi internal untuk suhu [LM35]
  lcd.createChar(ico_temp,temp);            //Buat karakter Suhu

  // Pin A0[pSuhu],2,3 & 4 jadikan sebagai masukan
  //----------------------------------------------
  pinMode(pSuhu,INPUT);
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  pinMode(4,INPUT);
  
  // Buat dan Jalankan animasi loding
  //--------------------------------------------------------------------------------------------------
  lcd.createChar(1, p1);
  lcd.createChar(2, p2);
  lcd.createChar(3, p3);
  lcd.createChar(4, p4);
  lcd.createChar(5, p5);
  loadanim();
  
  // Tampilkan data waktu dan tanggal pada LCD.
  //--------------------------------------------------------------------------------------------------
  setTime(jam, menit, detik, tanggal, bulan, tahun); 
}

void loop() {
  unsigned long currentMillis = millis();
  int t1  = digitalRead(2);               // Tombol Down
  int t2  = digitalRead(3);               // Tombol Up
  int t3  = digitalRead(4);               // Tombol Setting
  
  detik   = second();
  menit   = minute();
  jam     = hour();
  tanggal = day();
  bulan   = month();
  tahun   = year();
   
  // Jika tombol Setting di tekan
  //------------------------------------
  if (t3 == HIGH){
       set = set +1;
        delay(250);
       if (set > 6){
         set=0;
       }
  }
  
  // Setting waktu kedip-kedip
  //-------------------------------------
  if(currentMillis - timer1 > 300) {
     timer1 = currentMillis;  
    if (blinkState == LOW){
      blinkState = HIGH;  
    }
    else {
      blinkState = LOW;
    }
  } 
  
  // Setting pada posisi kedap-kedip
  //--------------------------------------------------------------------------------------
  if (set == 0)             //Jika posisi kedip pd tanggal, cek penekanan tombol up & down.
  {  
    curX = 0;
    curY = 0;
    if (t1 == HIGH){                                          //Jika tombol up ditekan
      tanggal = tanggal +1;                                   //Tanggal tambah dengan 1
      delay(100);                                             //Jeda 0,1 detik
      if (tanggal > maxday[bulan] ) {                         //Jika tanggal terakhir
        tanggal=1;                                            //Kembali ke tanggal awal
      }
    }
    if (t2 == HIGH){                                          //Jika tombol down yang ditekan
      tanggal = tanggal -1;                                   //Tanggal kurang dengan 1
      delay(100);                                             //Jeda 0,1 detik
      if (tanggal < 1 ) {                                     //Jika tanggal awal
        tanggal=maxday[bulan];                                //Kembali ketanggal akhir
      }
    }
    setTime(jam, menit, detik, tanggal, bulan, tahun);  
  }

  if (set == 1)           //Jika posisi kedip pd bulan, cek penekanan tombol up & down.
  {
    curX = 3;
    curY = 0;
    if (t1 == HIGH) {
      bulan = bulan +1;
      delay(100);
      if (bulan > 12 ) {
        bulan=1;
      }
    }
    if (t2 == HIGH) {
      bulan = bulan -1;
      delay(100);
      if (bulan < 1 ) {
        bulan=12;
      }
    }
    setTime(jam, menit, detik, tanggal, bulan, tahun);
  }
  
  if (set == 2)           //Jika posisi kedip pd tahun, cek penekanan tombol up & down.
  {
    curX = 6;
    curY = 0;
    if (t1 == HIGH) {
      tahun = tahun +1;
      delay(100);
      if (tahun > 3000 ) {
        tahun=2000;
      }
    }
    if (t2 == HIGH){
      tahun = tahun -1;
      delay(100);
      if (tahun < 2000 ) {
        tahun=3000;
      }
    }
    setTime(jam, menit, detik, tanggal, bulan, tahun);
  }
  
  if (set == 3) {           //Jika posisi kedip pd jam, cek penekanan tombol up & down.
    curX = 0;
    curY = 1;
    if (t1 == HIGH){
      jam = jam +1;
      delay(100);
      if (jam > 23 ) {
        jam=0;
      }
    }
    if (t2 == HIGH){
      jam = jam -1;
      delay(100);
      if (jam < 0 ) {
        jam=23;
      }
    }
    setTime(jam, menit, detik, tanggal, bulan, tahun);
  }
  
  if (set == 4) {           //Jika posisi kedip pd menit, cek penekanan tombol up & down.
    curX = 3;
    curY = 1;
    if (t1 == HIGH){
      menit = menit +1;
      delay(100);
      if (menit > 59 ) {
        menit=0;
      }
    }
    if (t2 == HIGH){
      menit = menit -1;
      delay(100);
      if (menit < 0 ) {
        menit=59;
      }
    }
    setTime(jam, menit, detik, tanggal, bulan, tahun);
  }
  
  if (set == 5) {           //Jika posisi kedip pd detik, cek penekanan tombol up & down.
    curX = 6;
    curY = 1;
    if (t1 == HIGH){
      detik = detik +1;
      delay(100);
      if (detik > 59 ) {
        detik=0;
      }
    }
    if (t2 == HIGH){
      detik = detik -1;
      delay(100);
      if (detik < 0 ) {
        detik=59;
      }
    }
    setTime(jam, menit, detik, tanggal, bulan, tahun);
  }

  //Jika kursor tidak pada posisi setting
  //-------------------------------------
  if (blinkState == LOW) {
    if (set != 6){
      lcd.setCursor(curX,curY);
      lcd.print("  ");
    }
  }
  
  
  // Tampilkan Jam Kalender
  //------------------------ 
  if (blinkState == HIGH) {
  lcd.setCursor(0, 0);
  if (tanggal < 10) lcd.print('0');
  lcd.print(tanggal);
  lcd.print("/");
  if (bulan < 10) lcd.print('0');
  lcd.print(bulan);
  lcd.print("/");
  lcd.print(tahun-2000);      // Tampilkan tahun dua digit saja
  
  lcd.setCursor(0,1);
  if (jam < 10) lcd.print('0');
  lcd.print(jam);
  lcd.print(":");
  if (minute() < 10) lcd.print('0');
  lcd.print(menit);
  lcd.print(":");
  if (second() < 10) lcd.print('0');
  lcd.print(detik);
  lcd.print("  ");
  lcd.setCursor(10, 0);
  lcd.print(hari[jumlahhari()%7]);  // Tampilkan Hari
  lcd.setCursor(10, 1);
  }
  // End // Tampilkan Jam Kalender
  
  data_suhu();                // Panggil fungsi pengecekan nilai suhu
}

// Digunakan untuk menghitung hari pasaran
//----------------------------------------
int jumlahhari(){   
  int d= day();
  int m= month();
  int y= year();
  int hb[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
  int ht = (y - 1970) * 365 - 1;
  int hs = hb[m - 1] + d;
  int kab = 0;
  int i;
  if(y % 4 == 0) {
    if(m > 2) {
    hs++;
    }
  }
  for(i = 1970; i < y; i++) {
    if(i % 4 == 0) {
    kab++;
    }
  }
  return (ht + hs + kab); 
}

void data_suhu(){  
  lcd.setCursor(10, 1);
  lcd.write(ico_temp);        //Custom icon temperatur
  //lcd.print(":");
  
  data = analogRead(pSuhu);   //Baca nilai tegangan pin A0 = Output LM35
  suhu = data / 9.309;        //Konversikan nilai tegangan ke Celcius


  lcd.setCursor(12, 1);
  lcd.print((int)suhu);        //Bulatkan nilai Suhu
  
  lcd.print((char)223);        //Simbol Derajat
  lcd.print("C");
  delay(100);
  } 
  
// Animasi pada saat loading
//----------------------------------------------------------------------------------------------------
void loadanim(){
  lcd.setCursor(5,0);
  lcd.print("LOADING");
  lcd.setCursor(0,1);
  for (int loadbar = 0; loadbar < 16; loadbar++) {
    lcd.setCursor(loadbar,1);  
    lcd.setCursor(loadbar,1);
    lcd.write(1);
    delay(10);
    lcd.setCursor(loadbar,1);
    lcd.write(2);
    delay(10);
    lcd.setCursor(loadbar,1);
    lcd.write(3);
    delay(10);
    lcd.setCursor(loadbar,1);
    lcd.write(4);
    delay(10);
    lcd.setCursor(loadbar,1);
    lcd.write(5);
    delay(10);
  } 
  
  delay(800);
  lcd.clear();
  
//----------------------------------------------------------------------------------------------------

}


Download Sketch & Library:
download[4]



RANGKAIAN KENDALI 3 LAMPU DENGAN 3 TOMBOL ON/OFF (ARDUINO UNO)

Penjelasan Singkat:
Hai sobat semua, kali ini kita akan membuat rangkaian pengembangan dari artikel Rangkaian Kendali 1 Lampu dengan 1 Tombol ON/OFF.  Pada rangkaian kali ini kita akan menggunakan 3 tombol dan 3 lampu LED yang masing-masing tombol akan di fungsikan sebagai saklar bagi tiap-tiap lampu LED, dan setiap lampu dimatikan, kita akan mengirimkan pesan ke Serial Monitor yang memberitahukan bahwa lampu mana yang sedang di nyalakan dan di matikan. Tujuan dari perancangan ini adalah untuk lebih memahami cara mengembangkan rangkaian dan cara memprogram tiap-tiap kaki arduino yang kita perlukan agar dapat bekerja sesuai dengan yang kita inginkan. Baiklah sobat sekalian, langsung saja kita perhatikan susunan rangkaian yang akan kita buat. Sobat bisa membuat nya langsung di atas papan breadboard sesuai gambar rangkaian di bawah ini.
Gambar Rangkaian:


Cara Kerja Rangkaian:
Pertama sekali program akan memeriksa tombol mana yang ditekan, Jika Tombol S1 di Tekan maka Nilai dari Pin A0 akan bernilai HIGH, dan selanjutnya rangkaian akan membaca kondisi lampu LED1, jika lampu LED1 mati maka LED1 akan di nyalakan dan sebaliknya.Jika Tombol S2 yang di tekan maka Nilai dari Pin A1 yang akan bernilai HIGH dan akan merubah kondisi LED2 dari mati ke hidup atau sebaliknya, dan jika Tombol S3 yang ditekan maka LED3 yang akan di nyalakan atau dimatikan sesuai dengan kondisi terakhir dari lampu LED3 tersebut. 

Sketch Arduino
int tombol1 = A0;                       //jadikan pin A0 sebagai tombol1
int tombol2 = A1;                       //jadikan pin A1 sebagai tombol2
int tombol3 = A2;                       //jadikan pin A2 sebagai tombol3
int led1 = 8;                               //jadikan pin 8 sebagai led1
int led2 = 9;                               //jadikan pin 9 sebagai led2
int led3 = 10;                             //jadikan pin 10 sebagai led3

void setup() {
    Serial.begin(9600);                        //aktfikan port serial untku komunikasi dengan pc
    pinMode (tombol1, INPUT);           //set tombol1 sebagai input
    pinMode (tombol2, INPUT);           //set tombol2 sebagai input
    pinMode (tombol3, INPUT);           //set tombol3 sebagai input
    pinMode(led1, OUTPUT);              //set led1 sebagai output
    pinMode(led2, OUTPUT);              //set led2 sebagai output
    pinMode(led3, OUTPUT);              //set led3 sebagai output
    }
void loop() {
    if (digitalRead(tombol1) == HIGH)  //jika tombol1 ditekan
    if (digitalRead(led1) == LOW) {       //cek jika led1 mati
        digitalWrite (led1, HIGH);            //hidupkan led1
        Serial.println("LED1 HIDUP");     //kirim pemberitahuan ke pc "LED1 HIDUP"
        delay(500);                                  //beri delay sebesar 500ms
    }
     else {                                                //sebaliknya, jika led1 hidup
        digitalWrite (led1, LOW);             //matikan led1
        Serial.println("LED1 MATI");        //kirim pemberitahuan ke pc "LED1 MATI"
        delay(500);                                  //beri delay sebesar 500ms
    }
    else if (digitalRead(tombol2== HIGH)   //jika tombol2 yang ditekan
    if (digitalRead(led2== LOW) {               //cek jika led2 mati
        digitalWrite (led2, HIGH);                    //hidupkan led2
        Serial.println("LED2 HIDUP");             //kirim pemberitahuan ke pc "LED2 HIDUP"
        delay(500);                                          //beri delay sebesar 500ms
     }
      else {                                                      //sebaliknya, jika led2 hidup
        digitalWrite (led2, LOW);                     //matikan led2
        Serial.println("LED2 MATI");                //kirim pemberitahuan ke pc "LED2 MATI"
        delay(500)                                         //beri delay sebesar 500ms
     }
    else if (digitalRead(tombol3) == HIGH)    //jika tombol3 yang ditekan
    if (digitalRead(led3== LOW) {                //cek jika led3 mati
        digitalWrite (led3, HIGH);                     //hidupkan led3
        Serial.println("LED3 HIDUP");              //kirim pemberitahuan ke pc "LED3 HIDUP"
        delay(500);                                           //beri delay sebesar 500ms
    }
     else {                                                        //sebaliknya, jika led3 hidup
        digitalWrite (led3, LOW);                     //matikan led3
        Serial.println("LED3 MATI");                //kirim pemberitahuan ke pc "LED3 HIDUP"
        delay(500);                                          //beri delay sebesar 500ms
    }
}


Penjelasan Potongan Program
int tombol1 = A0;                       //jadikan pin A0 sebagai tombol1
int tombol2 = A1;                       //jadikan pin A1 sebagai tombol2
int tombol3 = A2;                       //jadikan pin A2 sebagai tombol3
int led1 = 8;                               //jadikan pin 8 sebagai led1
int led2 = 9;                               //jadikan pin 9 sebagai led2
int led3 = 10;                             //jadikan pin 10 sebagai led3
Perintah diatas adalah pendeklarasian tiap pin arduino yang akan digunakan sebagai led dan tombol.

void setup() {
    Serial.begin(9600);                        //aktfikan port serial untku komunikasi dengan pc
    pinMode (tombol1, INPUT);           //set tombol1 sebagai input
    pinMode (tombol2, INPUT);           //set tombol2 sebagai input
    pinMode (tombol3, INPUT);           //set tombol3 sebagai input
    pinMode(led1, OUTPUT);              //set led1 sebagai output
    pinMode(led2, OUTPUT);              //set led2 sebagai output
    pinMode(led3, OUTPUT);              //set led3 sebagai output
    }
Serial.begin(9600); adalah perintah yang digunakan untuk mengaktifkan komunikasi dengan dunia luar melalui port USB dengan kecepatan 9600 bit/s. Pada aplikasi ini kita akan memantau keluaran arduino melalui port USB dengan Serial Monitor milik Aplikasi Arduino.
Selebihnya adalah perintah untuk mengkonfigurasi pin arduino yang telah di deklarasikan sebelumnya, agar pada saat program dijalankan, arduino akan mengubah status pin menjadi keluaran atau masukan sesuai dengan konfigurasai masing-masing pin.
       Keterangan Singkat:
      * Masukan [INPUT] berarti program dapat membaca nilai dari pin apakah bernilai HIGH atau LOW.
      * Keluaran [OUTPUT] berarti program dapat merubah status pin menjadi HIGH atau LOW.
      * Pada Rangkaian, Nilai HIGH berarti bahwa keluaran berada pada tegangan 5V, lampu      
        menyala atau tombol dalam keadaan ditekan sehingga pin terhubung ke positif catu daya [5V].
      * Pada Rangkaian, Nilai LOW berarti bahwa keluaran berada pada tegangan 0V, Lampu Mati 
        atau tombol dalam keadaan ditekan sehingga pin terhubung ke negative catu daya [0V].

void loop() {
    if (digitalRead(tombol1) == HIGH)  //jika tombol1 ditekan
    if (digitalRead(led1) == LOW) {       //cek jika led1 mati
        digitalWrite (led1, HIGH);            //hidupkan led1
        Serial.println("LED1 HIDUP");     //kirim pemberitahuan ke pc "LED1 HIDUP"
        delay(500);                                  //beri delay sebesar 500ms
    }
     else {                                                //sebaliknya, jika led1 hidup
        digitalWrite (led1, LOW);             //matikan led1
        Serial.println("LED1 MATI");        //kirim pemberitahuan ke pc "LED1 MATI"
        delay(500);                                  //beri delay sebesar 500ms
    }
    else if (digitalRead(tombol2== HIGH)   //jika tombol2 yang ditekan
    if (digitalRead(led2== LOW) {               //cek jika led2 mati
        digitalWrite (led2, HIGH);                    //hidupkan led2
        Serial.println("LED2 HIDUP");             //kirim pemberitahuan ke pc "LED2 HIDUP"
        delay(500);                                          //beri delay sebesar 500ms
     }
      else {                                                      //sebaliknya, jika led2 hidup
        digitalWrite (led2, LOW);                     //matikan led2
        Serial.println("LED2 MATI");                //kirim pemberitahuan ke pc "LED2 MATI"
        delay(500)                                         //beri delay sebesar 500ms
     }
    else if (digitalRead(tombol3) == HIGH)    //jika tombol3 yang ditekan
    if (digitalRead(led3== LOW) {                //cek jika led3 mati
        digitalWrite (led3, HIGH);                     //hidupkan led3
        Serial.println("LED3 HIDUP");              //kirim pemberitahuan ke pc "LED3 HIDUP"
        delay(500);                                           //beri delay sebesar 500ms
    }
     else {                                                        //sebaliknya, jika led3 hidup
        digitalWrite (led3, LOW);                     //matikan led3
        Serial.println("LED3 MATI");                //kirim pemberitahuan ke pc "LED3 HIDUP"
        delay(500);                                          //beri delay sebesar 500ms
    }
}
Di dalam void loop() {}; Program akan menguji tombol mana yang sedang ditekan, sobat bisa perhatikan keterangan tiap baris perintah pada sketch diatas. Perintah if (digitalRead(tombol1) == HIGHakan menguji apakah tombol satu sedang ditekan dan jika iya maka perintah if (digitalRead(led1) == LOW);  akan melanjutkan pengujian dengan melihat kondisi lampu led1 apakah mati. Jika lampu mati maka lampu led1 akan dinyalakan dengan perintah digitalWrite (led1, HIGH) dengan memberi nilai HIGH pada led1. Selanjutnya program akan mengirimkan keterangan LED1 HIDUP ke USB serial dengan perintah Serial.println("LED1 HIDUP"); yang kemudian akan kita tampilkan pada Serial Monitor. Berikut tampilan dari Serial Monitor pada Aplikasi Arduino.

Disamping dapat kita lihat keterangan yang muncul pada Serial Monitor yang bertuliskan LED1 HIDUP dan seterusnya. keterangan akan muncul setiap kali ada perubahan kondisi pada led yang sedang di nyalakan atau dimatikan.
Kembali ke Program. Selanjutnya perintah delay(500)memberikan waktu tunda selama 500ms untuk mengecek penekanan tombol berikutnya. Dan perintah di dalam else {}; akan dijalankan jika pada pengujian sebelumnya status  lampu led1 dalam kondisi hidup sehingga baris perintah didalam nya yang akan dijalankan dan memberi  nilai led1 menjadi LOW  sehingga lampu led1 mati   dan mengirimkan keterangan ke Serial Monitor "LED1 MATI".
                                                  
Demikian juga dengan baris perintah dibawah nya, selebihnya berfungsi untuk menguji kondisi lampu led2 dan led3 apakah dalam kondisi HIGH atau LOW.. Sehingga kondisi dari lampu led yang dituju akan diubah kondisi nya dari HIGH ke LOW atau sebaliknya.

Demikianlah cara kerja dari rangkaian dan program arduino yang telah kita buat. Semoga sobat semua sudah bisa mengembangkan sendiri rangkaian dan program yang sudah kita coba dan sobat juga bisa mencoba membuat sebuah rangkaian baru yang lebih kreatif  sesuai dengan yang sobat inginkan.



Trims
Sobat Arduino.