Jumat, 24 Oktober 2014

Arduino Membuat LED Animation

Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula dengan menggunakan LED sebagai indikator output. Tutorial akan disusun secara bertahap mulai dari tingkat dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan aplikasi lainnya. Delapan buah LED tersebut dirangkai secara common cathode, dimana cathode dari setiap LED disambungkan ke ground Arduino Uno. Sedangkan anode dari 8 buah LED memperoleh arus dari pin 0 hingga 7 Arduino Uno, yang terlebih dahulu melalui resistor sebagai pembatas arus. Untuk resistor pembatas arus tersebut bisa bernilai 330 ohm atau 470 ohm, semakin besar nilai hambatan resistor maka semakin redup nyala dari LED tersebut. Rangkaian LED secara common cathode ini dimaksudkan karena untuk program yang akan dibuat menggunakan prinsip active high, dimana bila diberikan logika high 1, LED akan menyala. Demikian sebaliknya, nyala LED akan padam bila diberikan logika low 0.
Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan Arduino IDE.

<img src="common_cathode.png" alt="common_cathode">


Berikut ini adalah source code (sketch) untuk LED animation, nyala LED bergeser dari LSB (Least Significant Bit) ke MSB (Most Significant Bit), yang mana dikonfigurasikan bahwa pin 0 Arduino Uno sebagai LSB dan pin 7 sebagai MSB.

/*
Program LED animation

LED menyala dari LSB ke MSB
Loki Lang
*/
void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed = 1;
  PORTD = dataLed;
  delay(1000);
  for(int i = 1; i <= 7; i++)
  {
    PORTD = dataLed << i;
    delay(1000);
  }
}

Penjelasan program ialah sebagai berikut ini.
  • DDRD digunakan untuk mendefinisikan PORTD apakah sebagai input atau output, disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu bila diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Untuk variable dataLed dalam byte (8 bit), dengan nilai awal adalah 1, atau B00000001, dimana dataLed merupakan representasi nilai data yang akan digunakan untuk mengatur LED mana yang menyala dan padam
  • Dengan perulangan menggunakan variable i, dari 1 hingga 7, untuk pergeseran nilai bit ke kiri
  • Setelah itu nilai dataLed akan digeser ke kiri sesuai dengan nilai i, yang akan diberikan ke PORTD sebagai nyala LED
  • Sebagai contoh dengan nilai dataLed awal adalah 1, B00000001, digeser satu kali ke kiri (i = 1), maka nilai dataLed menjadi 2, atau B00000010
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kiri sama saja seperti mengalikan nilai bit dengan pengali dua
  • Nyala LED akan berubah mulai LSB, pin 0 Arduino Uno, menuju MSB, pin 7
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delay(), semakin besar nilai yang diberikan maka akan semakin lama durasinya. Adapun source code (sketch) cara lain dengan hasil nyala LED animation bergerak dari MSB ke LSB, atau dari LED yang terhubung dengan pin 7 Arduino Uno ke pin 0.

/*
Program LED animation

LED menyala dari MSB ke LSB 
Loki Lang
*/
void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed = 1;
  PORTD = dataLed;
  delay(1000);
  for(int i = 1; i <= 7; i++)
  {
    PORTD = dataLed >> i;
    delay(1000);
  }
}

Penjelasan program ialah sebagai berikut ini.
  • DDRD digunakan untuk mendefinisikan PORTD apakah sebagai input atau output. Disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu bila diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Untuk variable dataLed dalam byte (8 bit), dengan nilai awal adalah 128, atau B10000000, dimana dataLed merupakan representasi nilai data yang akan digunakan untuk mengatur LED mana yang menyala dan padam
  • Dengan perulangan menggunakan variable i, dari 1 hingga 7, untuk pergeseran nilai bit ke kanan
  • Setelah itu nilai dataLed akan digeser ke kanan sesuai dengan nilai i, yang akan diberikan ke PORTD sebagai nyala LED
  • Sebagai contoh dengan nilai dataLed awal adalah 128, B10000000, digeser satu kali ke kanan (i = 1), maka nilai dataLed menjadi 64, atau B01000000
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms atau sama dengan 1 detik
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kanan sama saja seperti membagi nilai bit dengan pembagi dua
  • Nyala LED akan berubah mulai MSB, pin 7 Arduino Uno, menuju LSB, pin 0
Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking.

Kamis, 23 Oktober 2014

Arduino Membuat LED Blinking

Berikut adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula dengan menggunakan LED sebagai indikator output. Tutorial disusun secara bertahap mulai dari tingkat dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan aplikasi lainnya. Terdapat delapan buah LED tersebut dirangkai secara common cathode, dimana cathode dari setiap LED disambungkan ke ground Arduino. Sedangkan anode dari 8 buah LED memperoleh arus dari pin 0 hingga 7 Arduino Uno, yang terlebih dahulu melalui resistor sebagai pembatas arus. Untuk resistor pembatas arus tersebut bisa bernilai 330 ohm atau 470 ohm, semakin besar nilai hambatan resistor maka semakin redup nyala dari LED tersebut. Rangkaian LED secara common cathode ini dimaksudkan karena untuk program yang akan dibuat menggunakan prinsip active high, dimana bila diberikan logika high 1, LED akan menyala. Demikian sebaliknya, nyala LED akan padam bila diberikan logika low 0.
Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan Arduino IDE.

<img src="common_cathode.png" alt="common_cathode">


Berikut ini adalah source code (sketch) untuk LED blinking, nyala mati bergantian.

/*
Program menyalakan dan menghidupkan LED secara bergantian
Loki Lang
*/
void setup()
{
  DDRD = 255;
}

void loop()
{
  PORTD = 255;
  delay(1000);
  PORTD = 0;
  delay(1000);
}

Penjelasan program ialah sebagai berikut.
  • DDRD digunakan untuk mendefinisikan PORTD apakah sebagai input atau output, disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu bila diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Setelah didefinisikan sebagai output, PORTD digunakan untuk memberikan nilai data output apakah 1 atau 0
  • Pada saat diberikan nilai data 1, maka akan mengeluarkan tegangan 5 volt untuk menyalakan LED, sedangkan bila data bernilai 0, maka tidak ada tegangan yang keluar dan nyala LED kemudian akan padam
  • Ada delapan pin dalam PORTD yang digunakan dan diberikan nilai 255 (B11111111) untuk menyalakan LED, sedangkan nilai 0 (B00000000) untuk memadamkannya
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delay(), semakin besar nilai yang diberikan maka akan semakin lama durasinya. Adapun source code (sketch) cara lain dengan hasil yang kurang lebih sama sebagai berikut.

/*
Program menyalakan dan menghidupkan LED secara bergantian
Loki Lang
*/
int ledPins[] = {0,1,2,3,4,5,6,7};
void setup()
{
  int i;
  for(i = 0; i <= 7; i++)
  {
    pinMode(ledPins[i],OUTPUT);
  }
}

void loop()
{
  int i;
  for(i = 0; i <= 7; i++)
  {
    digitalWrite(ledPins[i],HIGH);
    }
    delay(1000);
  for(i = 0; i <= 7; i++)
  {
    digitalWrite(ledPins[i],LOW);
    }
    delay(1000);
}

Penjelasan program ialah sebagai berikut
  • Digunakan variable array ledPins dengan data integer 0 hingga 7
  • Untuk index 0 hingga 7 dari array ledPins diakses dengan variable i melalui perulangan menggunakan for
  • Perulangan dengan for dimulai dari index 0, hingga index 7 (yang merupakan representasi pin Arduino), dengan increment 1 kali tiap langkahnya
  • Untuk mendefinisikan PORTD sebagai output, digunakan instruksi pinMode(ledPins[i],OUTPUT), sehingga LED yang terhubung dengan pin Arduino 0 hingga 7 akan didefinisikan sebagai OUTPUT
  • Untuk memberikankan nilai data output pada PORTD, digunakan instruksi digitalWrite(ledPins[i],HIGH) untuk menyalakan LED, atau digitalWrite(ledPins[i],LOW) untuk mematikan nyala LED tersebut
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lihat juga mengenai tutorial dan penjelasan project Arduino Uno LED animation.

Rabu, 22 Oktober 2014

Pengenalan Dasar Arduino

Arduino ialah perangkat yang dirancang dengan kemampuan komputasi yang dapat berinteraksi secara lebih dekat dengan dunia nyata dibandingkan sebuah komputer biasa. Ada satu hal yang perlu dicatat, yakni Arduino bersifat open source, baik untuk microcontroller board yang dapat dimodifikasi, begitu juga dengan development environment yang digunakan untuk menuliskan source code program, yang disebut dengan istilah sketch.

<img src="arduino.png" alt="arduino">


Arduino dapat digunakan untuk mengembangkan suatu sistem interaktif, yang menerima input dari bermacam switch atau sensor, dan mengendalikan bermacam hal semisal lampu, motor, dan jenis output lainnya.
Meski ada berbagai macam jenis microcontroller dan platform yang tersedia untuk keperluan komputasi fisik, namun ada nilai lebih dari Arduino. Arduino dirancang secara sederhana dan mudah dipelajari, dikembangkan untuk keperluan project tugas sekolah, kuliah, ataupun tugas akhir. Adapun kelebihan yang coba ditawarkan Arduino antara lain.
  • Relatif murah
  • Bersifat cross-platform dapat dijalankan di berbagai operating system seperti Windows, Macintosh OSX, dan Linux
  • Sederhana, dengan programming environment turunan dari bahasa pemrograman C yang mudah dimengerti
  • Baik hardware maupun software bersifat open source
Untuk dasar tutorial pemrograman Arduino berikut ini beberapa function yang biasa digunakan.

setup()
Digunakan untuk inisialisasi variable, pin mode, penggunaan library, dan lain sebagainya. Hanya dijalankan sekali, pada saat Arduino pertama kali dinyalakan, atau setelah reset.

loop()
Setelah function setup(), digunakan function loop() yang sesuai dengan namanya, untuk menjalankan program utama dalam Arduino secara berulang terus-menerus, hingga Arduino dimatikan atau reset.

pinMode()
Digunakan untuk melakukan konfigurasi secara spesifik fungsi dari sebuah pin, apakah digunakan sebagai input atau sebagai output. Contoh penggunaan function pinMode() ialah sebagai berikut.
  • pinMode(0, INPUT) konfigurasi pin 0 Arduino sebagai pin input
  • pinMode(13, OUTPUT) konfigurasi pin 13 Arduino sebagai pin output

digitalRead()
Digunakan untuk membaca nilai pin digital yang spesifik, apakah bernilai HIGH atau LOW. Contoh penggunaan function digitalRead() ialah sebagai berikut.
  • digitalRead(0) membaca nilai digital dari pin 0 Arduino

digitalWrite()
Selain membaca nilai, ada juga function untuk menuliskan atau memberikan nilai pada suatu pin digital secara spesifik. Dengan function digitalWrite() memberikan nilai pin digital yang spesifik apakah bernilai HIGH atau LOW, dapat dilakukan. Contoh penggunaan function digitalWrite() ialah sebagai berikut.
  • digitalWrite(13, HIGH) memberikan nilai digital HIGH pada pin 13 Arduino

delay()
Sesuai dengan namanya, function delay() digunakan untuk memberikan waktu tundaan (dalam satuan millisecond) untuk mengerjakan satu baris program ke baris selanjutnya. Contoh penggunaan function delay() ialah sebagai berikut.
  • delay(1000) memberikan waktu tundaan 1000 millisecond, atau setara dengan 1 detik sebelum melanjutkan mengerjakan perintah baris program selanjutnya

analogRead()
Selain membaca nilai digital, Arduino juga dapat digunakan untuk membaca nilai analog. Dengan menggunakan function analogRead(), untuk membaca nilai analog melalui pin analog. Untuk board Arduino UNO memiliki 6 channel analog, Arduino Mini dan Nano 8 channel, sedangkan Arduino Mega 10 channel, dengan resolusi 10 bit analog to digital converter. Dengan resolusi 10 bit memungkinkan pemetaan tegangan antara 0 volt hingga 5 volt dalam nilai integer dari 0 hingga 1023. Sehingga resolusi pembacaan nilai analog ialah 5 volt dibagi 1024 unit, atau sekitar 4,9 mV per unit. Dibutuhkan sekitar 100 microsecond untuk membaca suatu input analog, dengan kata lain tingkat pembacaan maximum nilai analog ialah 10000 kali dalam satu detik. Contoh penggunaan analogRead() ialah sebagai berikut.
  • analogRead(3) membaca nilai analog pada pin 3 Arduino

analogReference(type)
Digunakan untuk memberikan nilai tegangan referensi untuk input analog, dengan pilihan type yang ada antara lain.
  • DEFAULT, nilai tegangan default untuk board Arduino ialah 5 volt atau 3,3 volt
  • INTERNAL, sebuah referensi built-in, setara tegangan 1,1 volt pada ATmega168 atau ATMega 328, dan 2,56 volt untuk ATMega8
  • INTERNAL1V1, sebuah referensi built-in, tegangan 1,1 volt, untuk Arduino Mega
  • INTERNAL2V56, sebuah referensi built-in, tegangan 2,56 volt, untuk Arduino Mega
  • EXTERNAL, sebuah referensi referensi dari pin AREF, nilai tegangan berkisar anatar 0 volt hingga 5 volt

Untuk informasi lebih lanjut silahkan kunjungi situs halaman Arduino.