MODUL PEMBELAJARAN MIKROKONTROLER ARDUINO
1.
Pengenalan Mikrokontroler Arduino
mikrokontroler adalah komputer yang berukuran mikro dalam satu chip IC (integrated circuit) yang terdiri dari processor, memory, dan antarmuka yang bisa diprogram. Sedangkan Arduino adalah sebuah platform dari physical computing yang berbasis open-source. Untuk memahami Arduino, terlebih dahulu kita harus memahami terlebih dahulu apa yang dimaksud dengan physical computing. Physical computing adalah membuat sebuah sistem atau perangkat fisik dengan menggunakan software dan hardware yang sifatnya interaktif yaitu dapat menerima rangsangan dari lingkungan dan merespon balik. Physical computing merupakan sebuah konsep untuk memahami hubungan antara lingkungan yang sifat alaminya adalah analog dengan dunia digital. Pada prakteknya konsep ini diaplikasikan dalam desain-desain alat atau projek-projek yang menggunakan sensor dan microcontroller untuk menerjemahkan input analog ke dalam sistem software untuk mengontrol gerakan alat-alat elektro-mekanik seperti lampu, motor dan sebagainya. Saat ini komunitas Arduino berkembang dengan pesat dan dinamis di berbagai belahan dunia. Bermacam-macam kegiatan yang berkaitan dengan projek-projek Arduino bermunculan dimana-mana, termasuk di Indonesia. Hal yang membuat Arduino dengan cepat diterima oleh orang-orang adalah karena:
Murah, dibandingkan platform yang lain. Lintas platform, software Arduino dapat dijalankan pada system operasi Windows, Macintosh OSX dan Linux Sangat mudah dipelajari dan digunakan. Processing adalah bahasa pemrograman yang digunakan untuk menulis program di dalam Arduino. Processing adalah bahasa pemrograman tingkat tinggi yang dialeknya sangat mirip dengan C++ dan Java, sehingga pengguna yang sudah terbiasa dengan kedua bahasa tersebut tidak akan menemui kesulitan dengan Processing. Sistem yang terbuka, baik dari sisi hardware maupun software-nya. Dapat diprogram melalui kabel USB, bukan serial port. Fitur ini sangat berguna karena kebanyakan komputer modern tidak memiliki serial port.
Arduino terdiri dari 2 komponen utama yaitu board Arduino, komponen hardware dari Arduino tempat kita mengerjakan proyek dan Arduino IDE (Integrated Development Environment), software yang bekerja di komputer. Kita menggunakan IDE untuk membuat sketch (Program Arduino) yang kemudian di upload ke board Arduino.
1
1.1 Board Arduino Komponen utama di dalam board Arduino adalah sebuah mikrokontroler 8 bit dengan merk ATmega yang dibuat oleh perusahaan Atmel Corporation. Berbagai board Arduino menggunakan tipe ATmega yang berbeda-beda tergantung dari spesifikasinya, sebagai contoh Arduino Uno menggunakan ATmega328 sedangkan Arduino Mega 2560 yang lebih canggih menggunakan ATmega2560. Untuk memberikan gambaran mengenai apa saja yang terdapat di dalam sebuah mikrokontroler, pada gambar berikut ini diperlihatkan contoh diagram blok sederhana dari mikrokontroler ATmega328 (dipakai pada Arduino UNO).
Gambar 1 Diagram Blok ATmega328
Blok-blok di atas dijelaskan sebagai berikut:
Universal Asynchronous Receiver/Transmitter (UART) adalah antar muka yang digunakan untuk komunikasi serial seperti pada RS-232, RS-422 dan RS-485.
2KB RAM pada memory kerja bersifat volatile (hilang saat daya dimatikan), digunakan oleh variable-variabel di dalam program.
32KB RAM flash memory bersifat non-volatile, digunakan untuk menyimpan program yang dimuat dari komputer. Selain program, flash memory juga menyimpan bootloader. Bootloader adalah program inisiasi yang ukurannya kecil,
2
dijalankan oleh CPU saat daya dihidupkan. Setelah bootloader selesai dijalankan, berikutnya program di dalam RAM akan dieksekusi.
1KB EEPROM bersifat non-volatile, digunakan untuk menyimpan data yang tidak boleh hilang saat daya dimatikan. Tidak digunakan pada board Arduino.
Central Processing Unit (CPU), bagian dari microcontroller untuk menjalankan setiap instruksi dari program.
Port input/output, pin-pin untuk menerima data (input) digital atau analog, dan mengeluarkan data (output) digital atau analog.
Dengan mengambil contoh sebuah board Arduino UNO, bagian-bagiannya dapat dijelaskan sebagai berikut.
Gambar 2 Bagian-bagian di dalam Board Arduino UNO
3
4
1.2 Arduino IDE Untuk memprogram board Arduino, kita butuh aplikasi IDE (Integrated Development Environment) bawaan dari Arduino. Aplikasi ini berguna untuk membuat, membuka, dan mengedit source code Arduino (Sketches). Sketch merupakan source code yang berisi logika dan algoritma yang akan diupload ke dalam IC mikrokontroller (Arduino).
Gambar 3 Tampilan Arduino IDE Interface Arduino IDE tampak seperti gambar 3. Dari kiri ke kanan dan atas ke bawah, bagian-bagian IDE Arduino terdiri dari: Verify : Proses Verify / Compile mengubah sketch ke binary code untuk diupload ke mikrokontroller. Sebelum program di upload, biasakan untuk memverifikasi terlebih dahulu untuk mengetahui adanya kesalahan pada program. Upload : tombol ini berfungsi untuk mengupload sketch ke board Arduino. New Sketch : Membuka window dan membuat sketch baru. Open Sketch : Membuka sketch yang sudah pernah dibuat. Sketch yang dibuat dengan IDE Arduino akan disimpan dengan ekstensi file .ino. 5
Save Sketch : menyimpan sketch. Serial Monitor : Membuka interface untuk komunikasi serial. Keterangan Aplikasi : pesan-pesan yang dilakukan aplikasi akan muncul di sini, misal "Compiling" dan "Done Uploading" ketika kita mengcompile dan mengupload sketch ke board Arduino Konsol : Pesan-pesan yang dikerjakan aplikasi dan pesan-pesan tentang sketch akan muncul pada bagian ini. Misal, ketika aplikasi mengcompile atau ketika ada kesalahan pada sketch yang kita buat, maka informasi error dan baris akan diinformasikan di bagian ini. Baris Sketch : bagian ini akan menunjukkan posisi baris kursor yang sedang aktif pada sketch. Informasi Port : bagian ini menginformasikan port yang dipakah oleh board Arduino.
2. Jenis-jenis Board Arduino Saat ini ada bermacam-macam bentuk board Arduino yang disesuaikan dengan peruntukannya seperti diperlihatkan berikut ini: ARDUINO USB Menggunakan USB sebagai antar muka pemrograman atau komunikasi komputer, contohnya Arduino Uno, Arduino Duemilanove, Arduino Diecimila, Arduino NG Rev. C, dan lain-lain.
Gambar 4 Arduino USB 6
ARDUINO SERIAL Menggunakan RS232 sebagai antar muka pemrograman atau komunikasi komputer, contohnya Arduino Serial dan Arduino Serial v2.0.
Gambar 5 Arduino Serial ARDUINO MEGA Papan Arduino dengan spesifikasi yang lebih tinggi, dilengkapi tambahan pin digital, pin analog, port serial dan sebagainya. Contohnya Arduino Mega dan Arduino Mega 2560
Gambar 6 Arduino Mega
7
ARDUINO NANO DAN ARDUINO MINI Papan berbentuk kompak dan digunakan bersama breadboard. Contohnya Arduino Nano 3.0, Arduino Nano 2.x, Arduino Mini 04, Arduino Mini 03, dan Arduino Stamp 02
Gambar 7 Arduino Nano & Mini
3. Programming Arduino Berikut ini merupakan penjelasan singkat mengenai beberapa struktur, variabel serta fungsi yang sering digunakan untuk memprogram Arduino. Struktur Setiap program Arduino mempunyai dua buah fungsi yang harus ada. void setup( ) { } Semua kode didalam kurung kurawal akan dijalankan hanya satu kali ketika program Arduino dijalankan untuk pertama kalinya.
void loop( ) { } Fungsi ini akan dijalankan setelah setup (fungsi void setup) selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara terus menerus sampai catu daya (power) dilepaskan.
Syntax Berikut ini adalah elemen bahasa C yang dibutuhkan untuk format penulisan. // (komentar satu baris) Digunakan untuk memberi catatan untuk kode-kode yang dituliskan. Apapun yang kita ketikkan dibelakangnya akan diabaikan oleh program.
/* */ (komentar banyak baris)
8
Jika anda punya banyak catatan, maka hal itu dapat dituliskan pada beberapa baris sebagai komentar. Semua hal yang terletak di antara dua simbol tersebut akan diabaikan oleh program.
{ } (kurung kurawal) Digunakan untuk mendefinisikan kapan blok program mulai dan berakhir
; (titk koma) Setiap baris kode harus diakhiri dengan tanda titik koma (jika ada titik koma yang hilang maka program tidak akan bisa dijalankan).
Variabel Berikut ini beberapa contoh variabel yang terdapat dalam pemograman Arduino. int (integer) Digunakan untuk menyimpan angka dalam 2 byte (16 bit). Tidak mempunyai angka desimal dan menyimpan nilai dari -32,768 sampai 32,767.
long (long) Digunakan ketika integer tidak mencukupi lagi. Memakai 4 byte (32 bit) dari memori (RAM) dan mempunyai rentang dari -2,147,483,648 sampai 2,147,483,647. boolean (boolean) Variabel sederhana yang digunakan untuk menyimpan nilai TRUE (benar) atau FALSE (salah). Sangat berguna karena hanya menggunakan 1 bit dari RAM. float (float) Digunakan untuk angka desimal (floating point). Memakai 4 byte (32 bit) dari RAM dan mempunyai rentang dari -3.4028235E+38 sampai 3.4028235E+38. char (character) Menyimpan 1 karakter menggunakan kode ASCII (misalnya 'A' = 65). Hanya memakai 1 byte (8 bit) dari RAM.
Operator Aritmatika Operator yang digunakan untuk melaksanakan operasi aritmatika. Operator = % + * /
Deskripsi Operator Penugasan Modulo (sisa hasil bagi) Penjumlahan Pengurangan Perkalian Pembagian 9
Operator Pembanding Operator pembanding digunakan untuk membandingkan dua buah nilai. Operator == != < > <= >=
Deskripsi Sama dengan Tidak sama dengan Lebih kecil Lebih besar Lebih kecil atau sama dengan Lebih besar atau sama dengan
Struktur Pengaturan Program sangat tergantung pada pengaturan apa yang akan dijalankan berikutnya, berikut ini adalah elemen dasar pengaturan.
if…else, dengan format sebagai berikut: if (kondisi) { // action A} else {// action B}
Dengan struktur seperti di atas, program akan menjalankan action A jika kondisi memenuhi, tetapi jika kondisi tidak terpenuhi, maka action B akan dijalankan.
for, dengan format sebagai berikut : for (statemen; kondisi; statemen) { }
Statemen yang pertama berisi tentang kondisi awal, biasanya inisialisasi suatu variabel atau data (misal, a=0). Sedangkan statemen yang terakhir adalah perubahan yang akan terjadi pada variabel pada statemen awal (misal a=a+1). Sedangkan kondisi merupakan kondisi dimana perulangan akan terjadi, ketika kondisi sudah tidak sesuai, maka perulangan akan berhenti. untuk lebih jelasnya tentang for, berikut contoh sederhananya:
Gambar 8 Contoh Penggunaan for 10
while, dengan format sebagai berikut :
while( kondisi ){ // eksekusi code } Perintah while merupakan perintah untuk melakukan perulangan berdasarkan suatu kondisi jadi banyaknya perulangan tidak bisa ditentukan dengan pasti dan program tidak akan berhenti sebelum kondisi yang ditentukan menjadi FALSE. Digital pinMode() Digunakan untuk menetapkan mode dari suatu pin sebagai input atau output. Format penulisannya adalah sebagai berikut : pinMode(pin, mode) contohnya, pinMode(13, OUTPUT); maka pin 13 akan menjadi output.
digitalWrite() Digunakan untuk menuliskan nilai HIGH atau LOW untuk sebuah pin digital. Format penulisannya adalah sebagai berikut : digitalWrite(pin, value) Ketika sebuah pin ditetapkan sebagai OUTPUT, tegangannya dapat diatur sebagai berikut : 5 V (atau 3.3 V untuk board yang mempunyai tegangan 3.3 V) untuk HIGH dan 0 V untuk LOW.
digitalRead(pin) Digunakan untuk membaca nilai dari suatu pin digital apakah HIGH atau LOW. Jika sebuah pin di set menjadi output, maka HIGH menunjukkan bahwa pin tersebut memiliki tegangan sebesar 5 V dan LOW menunjukkan bahwa pin tersebut memiliki tegangan sebesar 0 VFormat penulisannya adalah sebagai berikut : digitalRead(pin) Analog analogWrite() Beberapa pin pada Arduino mendukung PWM (pulse width modulation) yaitu pin 3, 5, 6, 9, 10, 11. Fungsi analogWrite() digunakan untuk menulis nilai PWM ke sebuah pin. PWM dapat digunakan untuk menghidupkan LED dengan berbagai tingkat kecerahan atau mengontrol sebuah motor dengan kecepatan tertentu. Value (nilai) dari analogWrite() adalah antara 0 ( 0% duty cycle ~ 0V) dan 255 (100% duty cycle ~ 5V). Format penulisannya adalah sebagai berikut : analogWrite(pin, value) 11
analogRead() Digunakan untuk membaca nilai dari sebuah pin. Keluaran fungsi ini berupa nilai tegangan input 0 sampai 5 Vyang dikonversikan ke dalam nilai integer antara 0 sampai 1023. Format penulisannya adalah sebagai berikut : analogRead(pin)
4. Tutorial Arduino Berikut ini merupakan beberapa contoh tutorial proyek Arduino. Setiap proyek yang dilakukan dalam modul ini menggunakan Arduino UNO dan Breadboard (Project Board). Breadboard adalah board yang digunakan untuk membuat rangkaian elektronik sementara dengan tujuan uji coba atau prototipe tanpa harus menyolder. Dengan memanfaatkan breadboard, komponen-komponen elektronik yang dipakai tidak akan rusak dan dapat digunakan kembali untuk membuat rangkaian yang lain. Breadboard umumnya terbuat dari plastik dengan banyak lubang-lubang diatasnya. Lubang-lubang pada breadboard diatur sedemikian rupa membentuk pola sesuai dengan pola jaringan koneksi di dalamnya.
Gambar 9 Papan Breadboard
4.1 Blinking LED Ketika belajar pemrogaman, program pertama yang harus dicoba pertama kali adalah memunculkan pesan "Hello World!". Dalam belalajar mikrokontroller, yang pertama kali harus dipelajari adalah membuat lampu LED berkedip. 12
Rangkaian Komponen yang diperlukan: 1 buah LED 1 buah resistor 330 ohm Kabel jumper Skema rangkaian dapat dilihat pada gambar berikut:
Gambar 10 Skema rangkaian LED Berikut ini adalah gambar simulasi penempatan komponen pada breadboard dan board Arduino.
Gambar 11 Rangkaian LED pada Arduino 13
Kode Pemrograman : /* Blink Menghidupkan LED selama 1 detik dan mematikannya selama 1 detik. */ void setup() { // Menginisialisasi pin 13 sebagai output. // Pada kebanyakan Arduino, Pin 13 mempunyai sebuah LED yang terpasang pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // Menghidupkan LED delay(1000); // tunggu 1 detik digitalWrite(13, LOW); // Mematikan LED delay(1000); // tunggu 1 detik }
Merubah cerahnya LED (brightness)
Selain pengaturan digital yang hidup atau mati, Arduino dapat juga melakukan pengaturan beberapa pin digital seperti layaknya analog yang akan kita gunakan untuk mengatur cerahnya LED. Untuk mencobanya, maka rubah pin LED menjadi pin 9 (rubah juga kabel jumpernya). Rubah baris kode program, ganti 13 menjadi angka 9 dan Rubah kode dalam { } pada bagian loop() dengan kode berikut: void loop() { analogWrite(9,angka baru); }
angka baru = angka antara 0 - 255. 0 = mati, 255 = hidup, angka diantaranya adalah perbedaan tingkat kecerahan.
Fading Program ini akan mengatur memudarnya LED dari mati ke hidup dan sebaliknya. int brightness = 0; // Menyimpan nilai kecerahan LED int fadeAmount = 5; // Mengatur berapa poin LED akan dipudarkan void setup() { // Mendeklarasikan pin 9 sebagai output pinMode(9, OUTPUT); } void loop() { // Mengatur kecerahan LED pada pin 9 analogWrite(9, brightness); // Membuat loop untuk merubah kecerahan LED 14
brightness = brightness + fadeAmount; // Membalikkan arah dari fading jika telah mencapai nilai min atau maks. if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // Tunggu selama 30 milliseconds delay(30); }
4.2 Push Buttons Sebelumnya telah dijelaskan tentang bagaimana mengendalikan LED. Untuk mengendalikan LED kita menjadikan pin pada Arduino sebagai OUTPUT. Pada bagian ini akan dibahas tentang bagaimana menjadikan pin Arduino sebagai INPUT dan sebagai aplikasinya, maka akan digunakan komponen pushbutton. Rangkaian Komponen yang diperlukan: 2 buah push button 2 buah resistor 10K ohm 1 buah resistor 330 ohm 1 buah LED Kabel jumper Pin Arduino akan dihubungkan dengan GND (ground) melalui tombol. Ketika tombol ditekan, pin akan menjadi LOW, tetapi pada saat dilepas maka kondisi pin akan mengambang (floating). Di dalam elektronika digital, jika sebuah pin diset sebagai INPUT, kemudian pin tersebut belum tersambung ke VCC atau GND, maka logika pada pin tersebut masih mengambang (floating). Oleh karena itu, pin tersebut harus ditentukan apakah akan diberi resistor pull-up (sehingga bernilai HIGH) atau diberi pull-down (sehingga bernilai LOW). Pada percobaan, resistor akan dipasangkan antara pin Arduino dan +5V, sehingga ketika tombol dilepas maka pin akan terhubung dengan +5V melalui resistor dan pin menjadi HIGH. Berikut merupakan skema rangkaian pushbutton dengan menggunakan resistor pull up.
15
Gambar 12 Skema rangkaian pushbuttons dengan pull up resistor Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk pushbutton dengan pull up resistor.
Gambar 13 Rangkaian pushbuttons dengan pull up resistor pada Arduino
16
Kode Pemrograman : /* Button Menghidupkan dan mematikan LED pada pin 9 dengan menggunakan tombol yang terhubung ke pin 2. */ const int buttonPin = 2; // pushbutton dihubungkan ke pin 2 const int ledPin = 13; // LED dihubungkan ke pin 13 int buttonState = 0; // variabel untuk membaca status pushbutton void setup() { // Menginisialisasikan pin LED sebagai output pinMode(ledPin, OUTPUT); // Menginisialisasikan pin pushbutton sebagai input pinMode(buttonPin, INPUT); } void loop(){ // Membaca nilai pushbutton apakah HIGH atau LOW buttonState = digitalRead(buttonPin); // Jika pushbutton ditekan, maka buttonState akan bernilai HIGH if (buttonState == HIGH) { // Hidupkan LED digitalWrite(ledPin, HIGH); } else { // Matikan LED digitalWrite(ledPin, LOW); } }
4.3 Potentiometer Arduino mempunya 6 pin analog yang dapat membaca input berupa voltase (dari 0 sampai 5 V) dan mengkonversikannya ke angka digital antara 0 (0 V) dan 1023 (5 V), yaitu pembacaaan dengan resolusi 10 bit. Salah satu komponen yang dapat mengeksploitasi tegangan input ini adalah potentiometer atau biasa disebut juga variable resistor. Potentiometer yang terhubung dengan tegangan 5 V dapat memberikan tegangan keluaran antara 0 sampai 5 V, tergantung pada sudut putaran potentiometer tersebut.
17
Rangkaian Komponen yang diperlukan:
1 buah potentiometer 10K ohm 1 buah resistor 330 ohm 1 buah LED Kabel jumper
Gambar 14 Skema rangkaian potentiometer Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk potentiometer.
Gambar 15 Rangkaian potentiometer pada Arduino 18
Kode Pemrograman int sensorPin = A0; // potentiometer dihubungkan ke pin A0 int ledPin = 13; // LED dihubungkan ke pin 13 int sensorValue = 0; // variabel untuk menyimpan nilai dari sensor dalam potentiometer void setup() { // Menginisialisasikan pin LED sebagai output: pinMode(ledPin, OUTPUT); } void loop() { // Membaca nilai dari sensor sensorValue = analogRead(sensorPin); // Menghidupkan LED digitalWrite(ledPin, HIGH); // menunggu selama milliseconds delay(sensorValue); // Mematikan LED digitalWrite(ledPin, LOW); // menunggu selama milliseconds: delay(sensorValue); }
4.4 Buzzer Untuk mengontrol suara, buzzer/piezo elements harus dihubungkan ke salah satu pin digital Arduino. Sebuah buzzer akan menghasilkan suara ketukan setiap kali dialiri gelombang (pulse) arus listrik. Jika kita menggunakan gelombang arus listrik dengan frekuensi yang tepat (misalnya 440 kali per detik untuk menghasilkan nada A) maka suara ketukan secara bersama-sama ini akan menghasil nada musik. Untuk memudahkan dalam mengontrol suara, Arduino memiliki fungsi tone() yang berfungsi untuk menghasilkan pulsa dari frekuensi yang diinginkan. Fungsi ini memiliki format penulisan sebagai berikut : tone(pin, frequency, duration)
Durasi harus dispesifikasikan, jika tidak maka pulsa akan terus berlanjut hingga fungsi noTone() di panggil.
19
Rangkaian Komponen yang diperlukan: 1 buah buzzer Kabel jumper Skema rangkaian dapat dilihat pada gambar berikut:
Gambar 16 Skema rangkaian potentiometer Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk buzzer.
Gambar 17 Rangkaian potentiometer pada Arduino 20
Kode Pemrograman Di bawah ini adalah kode pemrograman yang digunakan untuk Buzzer. #define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_B4 494 #define NOTE_C5 523
// DO // RE // MI // FA // SOL // LA // SI // DO
// speaker ada di pin 9 const int pinSpeaker = 9; void setup() { pinMode(pinSpeaker, OUTPUT); // Mengatur pin speaker untuk menjadi output } void loop() { tone(pinSpeaker, NOTE_C4, 500); // Membunyikan nada DO selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_D4, 500); // Membunyikan nada RE selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_E4, 500); // Membunyikan nada MI selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_F4, 500); // Membunyikan nada FA selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_G4, 500); // Membunyikan nada SOL selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_A4, 500); // Membunyikan nada LA selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_B4, 500); // Membunyikan nada SI selama 500 milliseconds delay(500); tone(pinSpeaker, NOTE_C5, 500); // Membunyikan nada DO selama 500 milliseconds delay(500); noTone(pinSpeaker); // Menghentikan nada delay(1000); }
21
4.5 Servo Motor servo dikendalikan dengan memberikan sinyal PWM (Pulse Wide Modulation) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan menentukan posisi sudut putaran dari poros motor servo. Sebagai contoh, lebar pulsa dengan waktu 1,5 ms (mili detik) akan memutar poros motor servo ke posisi sudut 900. Bila pulsa lebih pendek dari 1,5 ms maka akan berputar ke arah posisi 00 atau ke kiri (berlawanan dengan arah jarum jam), sedangkan bila pulsa yang diberikan lebih lama dari 1,5 ms maka poros motor servo akan berputar ke arah posisi 1800 atau ke kanan (searah jarum jam). Salah satu kelebihan Arduino adalah disediakannya software library yang memungkinkan untuk menggerakkan beberapa servo dengan kode yang sederhana. Rangkaian Komponen yang diperlukan: 1 buah servo mikro Kabel jumper Skema rangkaian dapat dilihat pada gambar berikut:
Gambar 18 Skema rangkaian servo
Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk servo.
22
Gambar 19 Rangkaian servo pada Arduino
Kode Pemrograman Di bawah ini adalah kode pemrograman yang digunakan untuk menggerakkan servo. #include Servo myservo; // Membuat obyek servo untuk mengontrol int pos = 0; // variabel unuk menyimpan posisi servo void setup() { myservo.attach(9); // Servo dihubungkan ke pin 9 } void loop() { for(pos = 0; pos < 180; pos += 1) // bergerak sebesar 10 dari 00 – 1800 { myservo.write(pos); // memerintah servo untuk bergerak ke posisi sesuai variabel 'pos' delay(15); // tunggu 15ms agar servo sampai ke posisi yang diinginkan } for(pos = 180; pos>=1; pos -=1) // bergerak sebesar 10 dari 1800 - 00 { myservo.write(pos); // memerintah servo untuk bergerak ke posisi sesuai variabel'pos' delay(15); // tunggu 15ms agar servo sampai ke posisi yang diinginkan }
}
23
4.6 Sensor Sensor adalah alat yang dapat digunakan untuk mendeteksi sesuatu peristiwa atau perubahan yang terjadi sekitarnya, seperti gerakan, suhu, cahaya, dan lain-lain. Sensor merupakan bagian dari transducer yang berfungsi untuk mendeteksi perubahan energi eksternal yang akan masuk ke bagian input transducer, sehingga perubahan kapasitas energi yang ditangkap akan dikirimkan kepada bagian converter dari transducer untuk dirubah menjadi energi listrik.
4.6.1 Sensor Suhu Sesuai namanya, sensor suhu digunakan untuk mengukur suhu. Sensor suhu yang akan digunakan di dalam tutorial ini adalah TMP36. Sensor ini memiliki 3 kaki, +V, Signal dan Ground. Tegangan masukan (+V) dari sensor ini adalah 2.7 – 5,5 V. Pada suhu kamar (25 0 C), sensor ini menunjukkan nilai 750mV dan perubahan suhu sebesar 1 0C sama dengan perubahan output sensor sebesar 10mV.
Gambar 20 Sensor suhu TMP36
Rangkaian Komponen yang diperlukan :
1 Buah Sensor suhu TMP36 Kabel Jumper
Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk sensor suhu TMP 36.
24
Gambar 21 Rangkaian sensor suhu TMP 36 pada Arduino Pin (+V) dihubungka ke pin 5 Volt di Arduino Pin (SIGNAL) dihubungkan ke pin A0 pada Arduino Pin GND dihubungkan ke Ground (GND) pada Arduino Kode Pemograman const int temperaturePin = 0; // Pin signal dari TMP 36 terhubung dengan pin analog 0 Arduino void setup() { Serial.begin(9600); // Memulai komunikasi serial // Komunikasi serial digunakan untuk mengirim data dari Arduino ke PC atau sebaliknya // Untuk dapat berkomunikasi, Arduino dan PC harus memiliki kecepatan komunikasi yang sama // Kecepatan ini diukur dengan satuan bits per second, disebut juga “Baud Rate” // 9600 merupakan Baud Rate yang sering digunakan dan akan mengirim // sekitar 10 karakter / detik } void loop() { float voltage, degreesC, degreesF; // Mendeklarasikan variabel untuk nilai tegangan, derajat //Celcius dan derajat Fahrenheit /* Pertama, kita akan membaca nilai tegangan yang ada di pin analog. Biasanya, kita akan menggunakan fungsi analogRead(), yang akan menghasilkan nilai antara 0 sampai 1023. 25
Disini kita telah menulis sebuah fungsi (di bawah) yang bernama getVoltage() Fungsi ini akan mengkonversi nilai 0 -1023 dari analogRead() menjadi nilai 0 – 5 */ voltage = getVoltage(temperaturePin); // Memanggil Fungsi getVoltage() degreesC = (voltage - 0.5) * 100.0; // Mengkonversikan nilai tegangan menjadi derajat Celcius degreesF = degreesC * (9.0/5.0) + 32.0; // Mengkonversikan nilai 0C menjadi 0F
}
Serial.print("voltage: "); // Menampilkan nilai tegangan di serial monitor Serial.print(voltage); Serial.print(" deg C: "); // Menampilkan nilai 0C di serial monitor Serial.print(degreesC); Serial.print(" deg F: "); // Menampilkan nilai 0F di serial monitor Serial.println(degreesF); delay(1000); // Tunggu selama 1 detik untuk mengulang proses
float getVoltage(int pin) { return (analogRead(pin) * 0.004882814); // Mengkonversi nilai dari aanlogRead() menjadi nilai tegangan 0-5 V }
4.6.2 Photoresistor Photoresistor atau Light Dependent Resistor (LDR) jenis Resistor yang nilai hambatan atau nilai resistansinya tergantung pada intensitas cahaya yang diterimanya. Nilai Hambatan LDR akan menurun pada saat cahaya terang dan nilai Hambatannya akan menjadi tinggi jika dalam kondisi gelap. Dengan kata lain, fungsi LDR (Light Dependent Resistor) adalah untuk menghantarkan arus listrik jika menerima sejumlah intensitas cahaya (kondisi terang) dan menghambat arus listrik dalam kondisi gelap. LDR (Light Dependent Resistor) yang merupakan komponen elektronika peka cahaya ini sering digunakan atau diaplikasikan dalam Rangkaian Elektronika sebagai sensor pada Lampu Penerang Jalan, Lampu Kamar Tidur, Rangkaian Anti Maling, Shutter Kamera, Alarm dan lain sebagainya.
Gambar 22 Photoresistor 26
Rangkaian
1x LED 1x 330Ω Resistor 1x Photoresistor 1x 10k Resistor Kabel Jumper
Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk photoresistor.
Gambar 23 Rangkaian photoresistor pada Arduino Photo resistor:
Sambungkan satu kaki dari photoresistor ke pin 5V Arduino Sambungkan kaki yang lain ke pin Analog 0 (A0) Sambungkan resistor 10K diantara pin A0 dan GND
LED:
Sambungkan kaki positif LED ke pin digital 9. Sambungkan kaki negatif LED ke resistor 330 Ω Sambungkan kaki resistor yang lain ke GND
27
Kode Pemograman const int sensorPin = 0; // Mendeklarasikan pin analog 0 sebagai pin sensor const int ledPin = 9; // mendeklarasikan pin 9 sebagai pin LED int lightLevel; // mendeklarasikan variabel untuk level cahaya void setup() { // Mengatur pin 9 sebagai pin output pinMode(ledPin, OUTPUT); } void loop() { lightLevel = analogRead(sensorPin); // membaca nilai tegangan dari photoresistor /*
Kita akan menggunakan nilai dari analogRead() untuk mengontrol LED dengan Menggunakan fungsi analogWrite() Tetapi nilai analogRead() berkisar antara 0 – 1023, sedangkan analogWrite() hanya menerima nilai antara 0 – 255 Untuk menyelesaikan permasalahan ini kita dapat menggunakan fungsi map() dan constrain ()
*/
map() akan memetakan suatu range nilai ke dalam range nilai yang diinginkan constrain() diperlukan untuk membatasi nilai agar tidak melebihi range yang diinginkan
lightLevel = map(lightLevel, 0, 1023, 0, 255); lightLevel = constrain(lightLevel, 0, 255); analogWrite(ledPin, lightLevel); }
4.6.3 Sensor Ultrasonik Sensor ultrasonik adalah sebuah sensor yang berfungsi untuk mengubah besaran fisis (bunyi) menjadi besaran listrik dan sebaliknya. Cara kerja sensor ini didasarkan pada prinsip dari pantulan suatu gelombang suara sehingga dapat dipakai untuk menafsirkan eksistensi (jarak) suatu benda dengan frekuensi tertentu. Disebut sebagai sensor ultrasonik karena sensor ini menggunakan gelombang ultrasonik (bunyi ultrasonik). Pada sensor ultrasonik, gelombang ultrasonik dibangkitkan melalui sebuah alat yang disebut dengan piezoelektrik dengan frekuensi tertentu. Piezoelektrik ini akan menghasilkan gelombang ultrasonik (umumnya berfrekuensi 40kHz) ketika sebuah osilator diterapkan pada 28
benda tersebut. Secara umum, alat ini akan menembakkan gelombang ultrasonik menuju suatu area atau suatu target. Setelah gelombang menyentuh permukaan target, maka target akan memantulkan kembali gelombang tersebut. Gelombang pantulan dari target akan ditangkap oleh sensor, kemudian sensor menghitung selisih antara waktu pengiriman gelombang dan waktu gelombang pantul diterima.
Gambar 24 Cara kerja sensor ultrasonik HC-SR04 Ultrasonic Sensor adalah sebuah sensor ultrasonik yang telah banyak digunakan untuk proyek seperti membuat robot avoider, deteksi ketinggian air, sensor parker dan lain-lain.
Gambar 25 HC-SR04 Ultrasonic Sensor Rangkaian 1 buah Sensor Ultrasonic HC-SR04 Kabel Jumper Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk sensor ultrasonik HC-SR04.
29
Gambar 26 Rangkaian sensor ultrasonik HC-SR04 pada Arduino Sambungan sensor ultrasonik HC-SR04 dan Ardunio:
VCC tersambung ke +5VDC Trig tersambung ke Pin 8 Echo tersambung ke Pin 7 GND tersambung ke GND
Kode Pemograman int trigPin = 8; //mendeklarasikan pin 8 Arduino sebagai pin Triger int echoPin = 7; //mendeklarasikan pin 7 Arduino sebagai pin Echo long duration, cm, inches; void setup() { Serial.begin (9600); // memulai komunikasi serial antara Arduino dan PC dengan Baud Rate 9600 pinMode(trigPin, OUTPUT); // Mendefinisikan pin 8 (trigPin) sebagai output pinMode(echoPin, INPUT); // Mendefinisikan pin 7 (echoPin) sebagai input } void loop() { // Untuk memicu sensor agar mulai bekerja, maka dibutuhkan pulsa sebesar 10 microseconds digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); // Memberi pulsa sebesar 10 µs untuk memicu sensor delayMicroseconds(10); digitalWrite(trigPin, LOW); 30
pinMode(echoPin, INPUT); // Mendeklarasikan pin echo sebagai pin input duration = pulseIn(echoPin, HIGH); // Menghitung durasi dari pulsa HIGH yang dikirimkan sampai // pantulannya diterima oleh pin echo // Mengkonversikan waktu yang didapat menjadi jarak // Jarak didapat dengan menggunakan rumus : // Jarak = (Waktu pulsa HIGH / 2) / Kecepatan rambat suara di udara (340 m/s) // 340 m/s = 29,1 cm/µs = 74 inch/µs cm = (duration/2) / 29.1; inches = (duration/2) / 74; Serial.print(inches); // Menampilkan nilai jarak dalam inch pada serial monitor Serial.print("in, "); Serial.print(cm); Serial.print("cm"); // Menampilkan nilai jarak dalam centimeter pada serial monitor Serial.println(); }
delay(250);
4.6.4 Sensor PIR ( Passive Infrared Sensor) Sensor PIR (Passive Infra Red) adalah sensor yang digunakan untuk mendeteksi adanya pancaran sinar infra merah. Sensor PIR bersifat pasif, artinya sensor ini tidak memancarkan sinar infra merah tetapi hanya menerima radiasi sinar infra merah dari luar. Sensor ini biasanya digunakan dalam perancangan detektor gerakan berbasis PIR. Karena semua benda memancarkan energi radiasi, sebuah gerakan akan terdeteksi ketika sumber infra merah dengan suhu tertentu (misal: manusia) melewati sumber infra merah yang lain dengan suhu yang berbeda (misal: dinding), maka sensor akan membandingkan pancaran infra merah yang diterima setiap satuan waktu, sehingga jika ada pergerakan maka akan terjadi perubahan pembacaan pada sensor.
Rangkaian 1 Buah PIR Motion Sensor 1 Buah LED Kabel Jumper
Berikut ini merupakan gambar simulasi penempatan komponen pada breadboard dan board Arduino untuk sensor PIR.
31
Gambar 27 Rangkaian sensor PIR pada Arduino Kode Pemograman /* * PIR sensor tester */ int ledPin = 13; int inputPin = 2; int pirState = LOW; terdeteksi int val = 0;
// Mendeklarasikan pin digital 13 sebagai pin LED // Mendeklarasikan pin digital 2 sebagai pin input // Output dari sensor PIR terhubung ke pin digital 2 Arduino // Kita memulai dengan mengasusmsikan bahwa tidak ada gerakan // variabel untuk membaca status dari pin 2
void setup() { pinMode(ledPin, OUTPUT); // Mendeklarasikan LED sebagai output pinMode(inputPin, INPUT); // Mendeklarasikan sensor sebagai input Serial.begin(9600); // Memulai komunikasi serial } void loop(){ val = digitalRead(inputPin); // membaca nilai input /* Jika terjadi gerakan (nilai input = HIGH) dan sensor dalam keadaan LOW sebelumnya, maka lampu LED akan hidup 32
Kemudian di serial monitor akan muncul tulisan Motion detected! */ if (val == HIGH) { digitalWrite(ledPin, HIGH); if (pirState == LOW) { Serial.println("Motion detected!"); pirState = HIGH; } } /* Jika tidak ada gerakan ( nilai input = LOW) dan sensor dalam keadaan HIGH sebelumnya, maka lampu LED akan mati kemudian di serial monitor akan muncul tulisan Motion ended! */ else { digitalWrite(ledPin, LOW); if (pirState == HIGH){ Serial.println("Motion ended!"); } } }
33