Senin, 24 Februari 2014

Arduino Basic - Membaca Nilai Analog dari Sensor Temperatur

Jika sebelumnya kita hanya menggunakan pin yang menerima input digital (memiliki nilai 0 dan 1), pada percobaan ini kita mencoba menggunakan pin dengan nilai analog. Nilai analog pada Arduino Uno memiliki rentang antara 0 (jika diberi tegangan 0 V) sampai 1023 (jika diberi tegangan 5 V). Di dalam percobaan ini kita membaca nilai analog dari sebuah sensor temperatur LM-35 dan menampilkan temperatur lingkungan ke komputer.

Peralatan yang digunakan
  • Arduino Uno + Konektor PC
  • Kabel Tembaga
  • Sensor LM-35
LM-35

Rangkaian

Foto

 

Source Code


/*
lm35 sketch
prints the temperature to the Serial Monitor
*/
const int inPin = 0; // analog pin


void setup(){
     Serial.begin(9600);
}


void loop(){
     int value = analogRead(inPin);
     Serial.print(value); Serial.print(" > ");
     float millivolts = (value / 1024.0) * 5000;
     float celsius = millivolts / 10; // sensor output is 10mV per degree Celsius
     Serial.print(celsius);
     Serial.print(" degrees Celsius, ");
     Serial.print( (celsius * 9)/ 5 + 32 ); // converts to fahrenheit
     Serial.println(" degrees Fahrenheit");
     delay(1000); // wait for one second
}





Penjelasan

Ketika program dijalankan, fungsi loop() akan dieksekusi secara berulang. Pertama, nilai pin analog akan disimpan di dalam variabel value

      int value = analogRead(inPin);
 
Nilai pin analog memiliki rentang antara 0 (0 V) sampai 1023 (5 V). Contoh, jika tegangan pada pin adalah 2,5 V, nilai yang dihasilkan adalah sekitar 511. Sensor temperatur LM-35 menghasilkan output sebesar 10 mV setiap 1 derajat Celsius dengan ketelitian 0,5 derajat Celsius. Misalnya jika output dari sensor LM-35 adalah 240 mV, maka temperatur lingkungan sekitar 24 derajat Celsius. Nilai yang dapat dibaca dari pin input sensor adalah nilai analog. Untuk mendapatkan temperatur, kita memerlukan nilai tegangan dalam miliVolt pada pin sensor. Nilai tegangan sensor dalam miliVolt dapat diperoleh dengan cara

tegangan dalam miliVolt = nilai analog pin sensor/rentang nilai analog*tegangan pada nilai analog maksimum dalam miliVolt

Diketahui rentang nilai analog antara 0-1023 berjumlah 1024 dan tegangan pada nilai 1023 adalah 5 V atau 5000 mV. Maka di dalam source code 

       float millivolts = (value / 1024.0) * 5000;
 
Setelah diperoleh nilai tegangan dalam miliVolt, dapat diperoleh temperatur. Telah diketahui sebelumnya setiap 1 derajat Celsius sensor LM-35 menghasilkan output 10 mV. Maka 

temperatur dalam Celsius = tegangan dalam miliVolt/10

di dalam source code 

      float celsius = millivolts / 10;

Kemudian ditampilkan ke serial terminal

     Serial.print(celsius);
     Serial.print(" degrees Celsius, "); 

Untuk mendapatkan temperatur dalam derajat Fahrenheit, kita dapat menggunakan sensor LM-34. Kita juga dapat menggunakan sensor LM-35 dengan mengonversi dari Celsius ke Fahrenheit. Diketahui persamaan konversi dari Celsius ke Fahrenheit adalah

    Fahrenheit = (Celsius*9/5) + 32

Di dalam source code, nilai temperatur dalam Fahrenheit ditampilkan ke serial terminal

     Serial.print( (celsius * 9)/ 5 + 32 );
     Serial.println(" degrees Fahrenheit");
    
 
Program akan kembali ke awal setelah 1 detik

     delay(1000); // wait for one second

Hasil


Screenshoot IDE
Screenshoot Serial Terminal

Senin, 10 Februari 2014

Arduino Basic - Mengatur Intensitas Cahaya LED



Pada percobaan dalam posting sebelumnya, kita sudah mencoba menyalakan dan memadamkan LED pada board dan menerima input dari pushbutton untuk mengatur LED. Pada percobaan ini, kita akan mencoba mengendalikan intensitas cahaya dari LED, bukan hanya menyalakan dan memadamkan saja.

Sebelumnya, pin yang digunakan hanya dapat mengeluarkan dua nilai saja yaitu LOW dan HIGH. Pada percobaan ini, kita akan memakai pin yang dapat mengeluarkan nilai di antara LOW dan HIGH dengan teknik pulse width modulation (PWM).  Pin tersebut memiliki range antara 0 sampai 255. Dengan rentang nilai tersebut kita dapat mengendalikan intensitas cahaya LED antara padam (0) sampai paling terang (255), tidak terbatas menyalakan dan memadamkan saja.


 Peralatan yang digunakan pada percobaan ini adalah
  • Board Arduino Uno + konektor PC
  • LED
  • Pushbutton
  • Resistor 10K Ohm
  • Kabel tembaga 


Memberikan Efek Fade-in dan Fade-out pada LED


Pada percobaan ini intensitas cahaya LED akan dinaikkan kemudian diturunkan secara periodik untuk menciptakan efek fade.
 

 
Rangkaian

Source Code

const int LED = 7; // LED pada pin 7 

int i = 0; // Nilai output

void setup() {
    pinMode(LED, OUTPUT); //Set pin 7 sebagai output
}

void loop(){
    for (i = 0; i < 255; i++) { // loop nilai i dari 0 ke 255
        analogWrite(LED, i); // mengeluarkan nilai i pada pin LED
        delay(10); // Jeda 10 ms agar hasilnya kelihatan
   }

    for (i = 255; i > 0; i--) { // loop nilai i dari 0 ke 255

       analogWrite(LED, i); // mengeluarkan nilai i pada pin LED
       delay(10); // Jeda 10 ms agar hasilnya kelihatan
    }
}

Penjelasan  :

 

Intensitas cahaya LED ditentukan oleh variabel i yang memiliki nilai minimum 0 (padam) dan nilai maksimum 255 (paling terang). Nilai variabel inilah yang akan terus berubah selama program berjalan. Ketika fungsi loop() dijalankan, perintah iterasi untuk menaikkan nilai i sampai batas maksimum (255) kemudian menurunkan nilai i sampai batas minimum (0) terus diulang. Nilai i naik/turun dalam waktu 10 ms agar perubahan tidak terlalu cepat sehingga dapat dilihat. Nilai i yang terus berubah naik turun secara periodik menghasilkan efek fade pada LED.


Video 

 




Menyalakan LED jika Pushbutton Ditekan, Mengubah Tingkat Intensitas LED jika Pushbutton Ditahan  

 

Pada percobaan ini LED bertransisi antara menyala dan padam ketika pushbutton ditekan dan mengalami perubahan intensitas cahaya jika pushbutton ditahan selama 0,5 detik dalam keadaan menyala.

 
Rangkaian

 Source Code

const int LED = 9; //LED pada pin 9
const int BUTTON = 7; // Pushbutton pada pin 7

int val = 0; // Nilai input
int old_val = 0; // Nilai input sebelumnya

int state = 0; // 0 = LED padam, 1 = LED menyala
int brightness = 128; // Nilai intensitas cahaya LED

unsigned long startTime = 0; // Waktu mulai

void setup() {
    pinMode(LED, OUTPUT);
    pinMode(BUTTON, INPUT);
}

void loop() {

    val = digitalRead(BUTTON); // baca nilai input pushbutton
      
    //Memeriksa apakah pushbbutton sedang ditekan
    //Nilai input pushbutton HIGH, sementara nilai input sebelumnya LOW
    if ((val == HIGH) && (old_val == LOW)) {

        state = 1 - state; //Mengganti state LED antara menyala dan padam
        startTime = millis();//Waktu mulai
        delay(10);//Filter
    }

    // Memeriksa apakah pushbbutton sedang ditahan
   
// Nilai input pushbutton dan sebelumnya HIGH,
    if ((val == HIGH) && (old_val == HIGH)) {
        // Jika pushbutton ditahan lebih dari 500 ms dan LED sedang menyala
        if (state == 1 && (millis() - startTime) > 500) {
           brightness++; // Menaikkan tingkat intensitas cahaya LED sebesar 1
           delay(10); //Jeda 10 ms agar perubahan dapat terlihat
           if (brightness > 255) { //Jika sudah mencapai nilai maksimum
                brightness = 0; // Kembali ke 0
            }
        }
    }

    old_val = val; // Menyimpan nilai input pushbutton yang lama

    if (state == 1) {
        analogWrite(LED, brightness);
             // Menyalakan LED dengan intensitas tertentu

    } else {
        analogWrite(LED, 0); //Memadamkan LED
    }

}



Penjelasan  :

 

Intensitas cahaya LED ditentukan oleh variabel brightness yang memiliki nilai minimum 0 (padam) dan nilai maksimum 255 (paling terang). Ketika program dijalankan, board sudah siap menerima input dari pushbutton. Saat pushbutton ditekan, val bernilai HIGH sehingga program menjalankan perintah untuk mengganti state LED antara menyala dan padam. Selain itu waktu ketika pushbutton ditekan disimpan di dalam variabel startTime.

Jika pushbutton ditahan selama 0,5 detik dan LED dalam keadaan menyala, nilai variabel brightness  bertambah sebesar 1 setiap 10 ms selama pushbutton belum dilepas. Nilai variabel akan kembali ke 0 (LED padam) setelah
nilai variabel mencapai nilai 255 (LED menyala paling terang). Intensitas LED akan terus berubah dari padam ke terang kemudian padam lagi selama pushbutton ditahan.



Video 

 


Senin, 03 Februari 2014

Arduino Basic - Mengendalikan LED dengan Pushbutton

Menggunakan pushbutton untuk menyalakan dan mematikan LED pada board. Peralatan yang digunatakan pada percobaan adalah :

  • Board Arduino Uno + konektor PC
  • LED (optional, pada board Arduino Uno sudah ada LED yang terhubung pada pin 13)
  • Pushbutton
  • Resistor 10K Ohm
  • Kabel tembaga
  1. LED menyala jika pushbutton ditekan, padam ketika dilepas
    Pada contoh ini, LED pada board akan menyala jika pushbutton dilepas dan akan padam jika ditekan.

    Rangkaian


    Source code :

    //Program untuk mengatur nyala LED pada board menggunakan pushbutton
    //Ketika tombol ditekan akan menyalakan LED

    int ledPin = 13; //LED pada pin 13
    int button = 7; //Pushbutton pada pin 7

    void setup(){
      pinMode(ledPin,OUTPUT);
      pinMode(button,INPUT);
    }

    void loop(){
      digitalWrite(ledPin,digitalRead(button)); 
    }


    Hasil percobaan



  2. LED menyala jika pushbutton dilepas, padam ketika ditekan
    Pada contoh ini, LED pada board akan menyala jika pushbutton dilepas dan akan padam jika ditekan.


    Rangkaian percobaan 2



    Source code :

    //Program untuk mengatur nyala LED pada board menggunakan pushbutton
    //Ketika tombol ditekan akan menyalakan LED

    int ledPin = 13; //LED pada pin 13
    int button = 7; //LED pada pin 7

    void setup(){
      pinMode(ledPin,OUTPUT);
      pinMode(button,INPUT);
    }

    void loop(){
      int val = digitalRead(button);
      if (val == HIGH){
        digitalWrite(ledPin,LOW);
      } else {
        digitalWrite(ledPin,HIGH);
      }   
    }

    Hasil percobaan



  3. Pushbutton mengubah keaadan LED

    Pada contoh ini, setiap pushbutton ditekan akan mengganti state LED antara menyala dan padam.


    Rangkaian percobaan 3


    Source code :

    //Program untuk mengatur nyala LED pada board menggunakan pushbutton
    //Setiap tombol ditekan akan mengganti state LED antara menyala dan padam

    int ledPin = 13; //LED pada pin 13
    int button = 7; //Pushbutton pada pin 7

    int state = 0; /*0 LED mati, 1 LED menyala*/
    int buttonState = 0; /*0 tombol dilepas, 1 tombol ditekan*/

    void setup(){

      pinMode(ledPin,OUTPUT);
      pinMode(button,INPUT);

    }

    void loop(){
     
      int prevButtonState = buttonState; 
     
      if (digitalRead(button)==HIGH ){    //Jika pin pushbutton dialiri arus listrik
        buttonState = 1; //pushbutton  sedang ditekan 
        delay(50); //Filter
      } else {  
        buttonState = 0; //pushbutton  sedang ditekan 
      }
     
      if (buttonState == 1 & prevButtonState == 0){ //pushbutton ketika mulai ditekan   
        if (state == 1){ //Jika LED dalam keadaan menyala
          state = 0; //Padamkan LED
          digitalWrite(ledPin,LOW);
        } else { //LED dalam keadaan padam
          state = 1; //Nyalakan LED
          digitalWrite(ledPin,HIGH);
        } 
      }
     
    }


    Hasil percobaan :