You are on page 1of 39

17 PROYEK BELAJAR ARDUINO

Ir. ILMANZA R.K., M.InfoTech. HTTP://ROBOMANIA.TOKOBAGUS.COM

DAFTAR ISI

1. 2. 3. 4. 5. 6. 7. 8. 9.

BLINKING LED (LAMPU KEDIP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 TRAFFICT LIGHT (LAMPU LALU LINTAS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 SWITCH ON/OFF SEBAGAI INPUT MIKROKONTROLER . . . . . . . . . . . . . . . . . . . 6 POTENTIOMETER SEBAGAI PENGATUR WAKTU . . . . . . . . . . . . . . . . . . . . . . . . . 9 GENERATOR SUARA / ALARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 RINGTONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 PENGATURAN OUTPUT DENGAN PULSE WITH MODULATION (PWM) . . . . . . 14 DISPLAY BANNER, BLINKING, SCROLLING & RUNNING TEXT DI LAYAR LCD . . 17 SENSOR CAHAYA PHOTOCELL / LDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

10. TERMOMETER DIGITAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 11. PENGUKUR JARAK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 12. PENDETEKSI GERAK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 13. PENGENDALI PERALATAN LISTRIK DENGAN REMOTE CONTROL TV . . . . . . . . . 31 14. SENSOR GARIS / DETEKTOR WARNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 15. SWITCH ON/OFF PERALATAN LISTRIK DENGAN RELAY . . . . . . . . . . . . . . . . . . . 35 16. MENGGERAKKAN LENGAN ROBOT DENGAN SERVO . . . . . . . . . . . . . . . . . . . . . . 36 17. H-BRIDGE MOTOR DRIVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Project 1. BLINKING LED (LAMPU KEDIP)

Langkah-langkah untuk membuat Blinking LED :

1

2

3

4 Sketch: int led1 = 13; // lampu LED intenal pada pin 13 Arduino

void setup() { pinMode(led1, OUTPUT); } void loop() { digitalWrite(led1, HIGH); delay(1000); digitalWrite(led1, LOW); delay(1000); }

// pin 13 sebagai output

Pemasangan komponen pada breadboard agar disesuaikan skema.

// // // //

led On tunggu 1 detik led Off tunggu 1 detik

Catatan: - Pemasangan LED harus diperhatikan polaritasnya. Kaki yang panjang mengarah ke kutup Positif (+), sedangkan kaki yang pendek atau kaki pada permukaan LED yg datar, mengarah ke kutub negative (-) atau Ground (Gnd).

OUTPUT). digitalWrite(greenPin.9. TRAFFICT LIGHT (LAMPU LALU LINTAS) Sketch: int redPin = 7. // Jeda 3 detik digitalWrite(redPin. LOW). pinMode(yellowPin. LOW).10 Arduino . LOW). delay(3000). pinMode(greenPin. LOW).Project 2. int yellowPin = 6. delay(3000). // Jeda 3 detik } Contoh pemasangan LED menggunakan beadboard pada pin 8. digitalWrite(greenPin. HIGH). // Lampu Hijau On digitalWrite(yellowPin. } void loop() { digitalWrite(redPin. digitalWrite(greenPin. OUTPUT). // Lampu Merah On digitalWrite(yellowPin. delay(3000). // Lampu Kuning On digitalWrite(yellowPin. HIGH). OUTPUT). // Jeda 3 detik digitalWrite(redPin. int greenPin = 5. LOW). LOW). HIGH). // Lampu Merah // Lampu Kuning // Lampu Hijau void setup() { pinMode(redPin.

i<=3. LOW). LOW).Hijau Petunjuk: Baris program untuk Lampu kuning: digitalWrite(redPin. i++ ) { digitalWrite(yellowPin. delay(3000). HIGH). delay(1000). // Lampu Kuning On digitalWrite(yellowPin. digitalWrite(yellowPin. LOW). delay(1000). HIGH). } . // Jeda 3 detik diganti: for( int i=1.Kuning (berkedip 3x) .Catatan: Buatlah lampu lalu lintas dengan urutan: Merah . digitalWrite(greenPin.

Project 3. pinMode(ledPin. INPUT). SWITCH ON/OFF SEBAGAI INPUT MIKROKONTROLER Sketch 1 : Program push button Switch untuk tombol Bell pintu int buttonPin = 7. } // tombol tekan (push button) sebagai input: // LED pin sebagai output: // untuk membaca data pada serial port di layar monitor . OUTPUT).begin(9600). // pin signal modul Switch dihubungkan ke pin 7 Arduino // nomor pin LED internal Arduino // nama variable status switch void setup() { pinMode(buttonPin. Serial. int ledPin = 13. int buttonState = 0.

// the pin that the pushbutton is attached to int ledPin = 13. HIGH). pinMode(ledPin.Switch Off int buttonPin = 7. } } // membaca nilai tombol tekan (sensor digital) // menulis nilai sensor di layar monitor // check apakah tombol pushbutton ditekan // nyalakan LED (on) // matikan LED (off) Catatan: Ganti LED dengan Buzzer (perhatikan polaritas kaki positif / negatif ) Sketch 2: Program push button Switch untuk saklar ON / OFF Lampu // Program toogle Switch On . } else { digitalWrite(ledPin. // current state of the button int lastButtonState = 0. // the pin that the LED is attached to int buttonState = 0. // counter for the number of button presses void setup() { pinMode(buttonPin. if (buttonState == HIGH) { digitalWrite(ledPin. Serial. // previous state of the button int buttonPushCounter = 0. // membaca nilai tombol tekan (sensor digital) if (buttonState != lastButtonState) { if (buttonState == HIGH) { // jika nilai sekarang tidak sama dengan nilai terakhir . INPUT). } void loop() { buttonState = digitalRead(buttonPin).void loop() { buttonState = digitalRead(buttonPin). LOW). OUTPUT).println(sensorValue).

HIGH). } } . } else { digitalWrite(ledPin. LOW). if (buttonPushCounter % 2 == 0) { digitalWrite(ledPin. } } lastButtonState = buttonState.buttonPushCounter++.

bukan port digital) Kabel biru ke Ground (-) Sketch: // Program pengaturan lamanya lampu On/Off int sensorPin = 0. // pin signal potentiometer dihubungkan ke port analog 0 // nomor pin LED internal Arduino // variable nilai awal yg dihasilkan sensor . int sensorValue = 0. int ledPin = 13.Project 4. POTENTIOMETER SEBAGAI PENGATUR WAKTU Kabel Merah ke + 5v Kabel Ungu (tengah) ke A0 (port analog 0 .

// menulis nilai sensor di layar monitor digitalWrite(ledPin. HIGH). // untuk membaca data pada serial port di layar monitor } void loop() { sensorValue = analogRead(sensorPin). Serial.println(sensorValue). bukan port digital. digitalWrite(ledPin. Arduino memiliki 5 port Analog yang letaknya bersebelahan dengan pin power supply Bedakan: sensorValue = analogRead(sensorPin). // membaca nilai dari sensor Analog Serial. Thermistor) dihubungkan dengan port Analog Arduino. } // lamanya lampu On // lamanya lampu Off Catatan: Pin tengah potentiometer (juga keluarga resistor yg lain. // membaca nilai dari sensor Analog buttonState = digitalRead(buttonPin). // membaca nilai dari sensor Digital (hal 7) . misalnya LDR. delay(sensorValue).begin(9600). LOW). OUTPUT).void setup() { pinMode(ledPin. delay(sensorValue).

digitalWrite(buzz.digitalWrite(buzz. } void loop() { analogWrite(buzz. OUTPUT). -> Akan memberikan tegangan 5v kepada buzzer . HIGH). HIGH). LOW). delay (1000).Nilai AnalogWrite berkisar 0 – 255 ( diaplikasikan untuk pengaturan volume. GENERATOR SUARA / ALARM Sketch: // Program untuk membunyikan buzzer / alarm int buzz = 9. } // Alarm dengan pengaturan volume int buzz = 9. OUTPUT). // BUZZER void setup() { pinMode(buzz. -> Akan memberikan tegangan 5v kepada buzzer . delay (1000). delay (1000). // BUZZER kutub positive (+) di pin 9 void setup() { pinMode(buzz.255 delay (1000).Project 5. // nilai AnalogWrite antara 0 . } Catatan: . cahaya. dll) .analogWrite(buzz. } void loop() { digitalWrite(buzz. analogWrite(buzz. 0). 255). 255).

1. 956 }. int tones[] = { 1915. 1519. 1. // ini lagunya int beats[] = { 1. 1. 1. 1. int duration) { for (long i = 0. i < duration * 1000L. // ini ketukannya */ int tempo = 300. 1. 1. 1700. 1. 'g'. 'f'. 1. delayMicroseconds(tone). 1. 1. delayMicroseconds(tone). i += tone * 2) { digitalWrite(speakerPin. 1. 4 }. // ini lagunya int beats[] = { 1. 1. 1. 1. // ini ketukannya */ /* //LAGU 3 (do mi sol Do …Do sol mi do) int length = 8 . 4 }. 2. digitalWrite(speakerPin. 1. 1432. 1. 1136. } } void playNote(char note. RINGTONE // Program Ringtone 1 int speakerPin = 9. 1. 'd'. 4 }. LOW). // kutup + buzzer atau speaker dipasang pada pin 9 Arduino //LAGU 1 (DO RE MI FA SOL …) int length = 16. int duration) { char names[] = { 'c'. 'b'. 1. 1. 1. 4. 4. 'a'. // ini panjang lagu char notes[] = "cdefgabCCbagfedc". 1. void playTone(int tone. 1. 1.Project 6. 1014. 1. 1. 1. 1. 1. // ini panjang lagu char notes[] = "cegCCgec". HIGH). 'e'. // ini lagunya int beats[] = { 1. 2. . 'C' }. // ini ketukannya /* // LAGU 2 (Twinkle twinkle) int length = 15. // ini panjang lagu char notes[] = "ccggaagffeeddc ". 1275.

} void loop() { for (int i = 0. i++) { if (notes[i] == ' ') { delay(beats[i] * tempo). // rest } else { playNote(notes[i]. i < length. Untuk kualitas yang lebih baik. } // pause between notes delay(tempo / 2).// play the tone corresponding to the note name for (int i = 0. i < 8. sebaiknya buzzer diganti dengan speaker kecil 8 Ohm. i++) { if (names[i] == note) { playTone(tones[i]. } } } void setup() { pinMode(speakerPin. } } Catatan: Suara yang dihasilkan buzzer kualitasnya kurang baik. karena buzzer diperuntukkan sebagai alarm. beats[i] * tempo). OUTPUT). duration). .

delay(100). Konsep PWM ini banyak diimplementasikan untuk pengaturan kecepatan motor. i). // Red LED connected to digital pin 9 int yellowPin = 10.Project 7. Arduino memiliki 6 pin PWM. motor ataupun lampu yang akan dikontrol harus dihubungkan dengan pin PWM tersebut. 11. for (int i=0. i<=255. besaran intensitas cahaya. i+=5) = naik +5 secara berulang Cobalah memodifikasi peogram diatas dengan menggunakan 2 LED : // dual fade int redPin = 9. // Yellow LED connected to digital pin 10 void setup() { // nothing happens in setup } . i). 10. } for (int i=255. i++) { analogWrite(ledPin. 9. 5. i<=255. i<=255. } } // PWM pin for the LED // no setup needed // ascending value for i // sets brightess level to i // pauses for 100ms // descending value for i // sets brightess level to i // pauses for 100ms Catatan: for (int i=0. Sketch: // Program pengaturan intensitas cahaya int ledPin = 9. i>=0. dan keperluan lainnya. i++) = naik +1 secara berulang . yang fungsinya untuk mengatur besaran output digital dalam range tertentu ( 0 – 255 ). 6. delay(100). void setup() {} void loop() { for (int i=0. PENGATURAN OUTPUT DENGAN PULSE WITH MODULATION (PWM) PWM adalah singkatan dari Pulse With Modulation. i--) { analogWrite(ledPin. Oleh karena itu. yaitu pin 3.

. fadeValue). yaitu satu kaki ke kutub positif (+). kaki tengah ke pin A0 (Analog 0). int potValue = 0. (255 .fadeValue)). fadeValue). Cara pemasangan potentiometer sama dengan yang telah dipraktikkan pada project 4. fadeValue <= 255. } // fade out from max to min in increments of 5 points: for(int fadeValue = 255 . fadeValue >= 0. fadeValue -=5) { // sets the value (range from 0 to 255): analogWrite(redPin. // wait for 30 milliseconds to see the dimming effect delay(30). dan kaki satunya ke kutup negatif (-).fadeValue)). analogWrite(yellowPin. int ledPin = 9. fadeValue +=5) { // sets the value (range from 0 to 255): analogWrite(redPin. // wait for 30 milliseconds to see the dimming effect delay(30). } } Sketch diatas dapat dikembangkan menjadi lebih dinamis dengan menambah potentiometer sebagai pengatur intensitas cahaya. Adapun sketchnya dapat dimodifikasi menjadi sbb: // Program pengaturan intensitas cahaya menggunakan potentiometer int potPin = 0.void loop() { // fade in from min to max in increments of 5 points: for(int fadeValue = 0 . analogWrite(yellowPin. (255 .

0. potValue). 0. Harus / 4 agar jadi (0. 254). // Input analog nilainya 1024. project tersebut diatas dapat dimodifikasi menjadi pengendali putaran motor dengan potentiometer. sehingga diperlukan rangkaian penguat untuk menggerakkannya (H-Bridge Motor Driver) . hanya perlu mengganti LED dengan motor DC. Catatan: Selanjutnya. sebagaimana contoh pengaturan intensitas cahaya dengan potensiometer diatas. // cara lain mengkonversi nilai 0-1024 menjadi 0-255 analogWrite(ledPin. } void loop() { potValue = analogRead(potPin) / 4. OUTPUT). Sketch tetap menggunakan pengaturan output dengan PWM. } //potValue pada analogWrite nilainya 0-255. Pada prinsipnya.255) //potValue = map(val. Arus output dari Arduino tidaklah cukup untuk menggerakkan motor jenis TAMIYA. 1023.void setup() { //pinMode(int ledPin.

print("BLUES LAND"). row 1 lcd.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12. 3.clear(). 11. // start with a blank screen lcd.Project 8. keep it clean. SCROLLING & RUNNING TEXT DI LAYAR LCD // Program menulis Banner text di layar LCD // include the library code: #include <LiquidCrystal.setCursor(0.clear(). 4. lcd. 2).1). . row 0 (the first row) lcd. 5. DISPLAY BANNER. 2). // set cursor to column 0.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12. // set cursor to column 0. BLINKING.print("BLUES LAND").setCursor(0. row 0 (the first row) lcd. 5. // change this text to whatever you like.1). lcd. lcd. 11.setCursor(0. 3. void setup() { // set up the LCD's number of rows and columns: lcd.print("Arifal Akmal"). // set cursor to column 0. 4. // set cursor to column 0. // change this text to whatever you like. // start with a blank screen lcd.begin(16.0).setCursor(0.0). row 1 lcd. 2). lcd. } void loop() { } // Program Blinking Banner text // include the library code: #include <LiquidCrystal.begin(16. void setup() { // set up the LCD's number of rows and columns: lcd. 2). keep it clean.print("Arifal Akmal").

0). 11. void setup() { // set up the LCD's number of columns and rows: lcd. 5. // print from 0 to 9: for (int thisChar = 0.noDisplay().h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12. } // set the cursor to (16.0): lcd. delay(500). } // turn off automatic scrolling .print(thisChar).display(). thisChar++) { lcd.} void loop() { // Turn off the blinking cursor: lcd. // Turn on the display: lcd.print(thisChar).autoscroll().1): lcd. thisChar < 10. } void loop() { // set the cursor to (0.begin(16. // print from 0 to 9: for (int thisChar = 0.setCursor(16. delay(500). } // Program Banner scroll text 1234567890 // include the library code: #include <LiquidCrystal. thisChar++) { lcd. // set the display to automatically scroll: lcd. 4. delay(500). 2). thisChar < 10. delay(500).1).2). 3.setCursor(0.

void setup() { // set up the LCD's number of rows and columns: lcd. } void loop() { // scroll 12 positions (string length) to the left // to move it offscreen left: for (int positionCounter = 0. } // Program Baner running text // include the library code: #include <LiquidCrystal.scrollDisplayLeft(). // 12 huruf delay(1000). positionCounter < 28.lcd. positionCounter++) { // scroll one position right: lcd. } // scroll 28 positions (string length + display length) to the right // to move it offscreen right: 12+16 = 28 for (int positionCounter = 0. // wait a bit: delay(300).begin(16. 2). 2).h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12. positionCounter < 12. 5. positionCounter++) { // scroll one position left: lcd.clear(). } // scroll 16 positions (display length + string length) to the left // to move it back to center: . // clear screen for the next loop: lcd.noAutoscroll(). 4. // wait a bit: delay(300).print("ROBOT KREATIF").scrollDisplayRight(). lcd. 3. 11. // Print a message to the LCD.

positionCounter < 16.for (int positionCounter = 0. positionCounter++) { // scroll one position left: lcd. } .scrollDisplayLeft(). // wait a bit: delay(300). } // delay at the end of the full loop: delay(1000).

Lampu akan otomatis menyala (On) jika sensor tidak terkena cahaya (gelap). OUTPUT).begin(9600). // pin signal LDR dihubungkan ke Port Analog 0 Arduino // pin untuk LED // variable nilai yg dihasilkan sensor void setup() { pinMode(ledPin. Sebaliknya. Sketch: // Program Lampu otomatis gelap/terang Int sensorPin = 0.Project 9. SENSOR CAHAYA PHOTOCELL / LDR Dengan sensor cahaya LDR (Light Dependent Resistor). Int ledPin = 13. Serial. // untuk membaca data pada serial port di layar monitor } . lampu akan mati (Off ) apabila sensor terkena cahaya terang. int sensorValue = 0.

Serial. if (sensorValue <= 500 ) { digitalWrite(ledPin. } } // membaca nilai dari sensor: // menulis nilai sensor di layar monitor // tentukan batas intensitas cahaya 0 .println(sensorValue). } else { digitalWrite(ledPin. bukan port digital . Thermistor) dihubungkan dengan port Analog Arduino. LOW).1024 // menyalakan lampu LED (on) // mematikan lampu LED (off) Catatan: Pin signal modul LDR (juga keluarga resistor yg lain.void loop() { sensorValue = analogRead(sensorPin). misalnya Potensiometer. HIGH).

TERMOMETER DIGITAL Untuk mengukur suhu. nilai tegangan listrik yang didapat akan dikonversi menjadi nilai suhu dalam satuan derajat Celsius/Rheamur/Fahrenheit.Project 10. Sketch: a. float temperature = 0. Cukup dengan menghubungkan kakinya ke kutub + . hanya range nilainya lebih besar . } // select the input pin for the LM35 // type float -> 2 angka di blkng koma // tyle long = int. caranya cukup mudah. A0 dan – seperti pada gambar. bentuknya kecil dan akurasinya tinggi. void setup() { Serial. IC jenis LM 35 ini cukup praktis. long val = 0. Nilai temperatur ditampilkan di layar komputer int potPin = 0.begin(9600).

delay(1000).0. 2). 5. lcd.println((long)temperature). } void loop() { val = analogRead(potPin).begin(16. long val = 0.0 * val * 100.h> LiquidCrystal lcd(12. lcd.void loop() { if (Serial.0)/1024. float temperature = 0. } // include library for LCD // pin to LCD // select the input pin for the LM35 // set up the LCD's number of rows and columns // read the value from the sensor // convert to Celcius // clear LCD screen // set text to LCD row 1 // some text to add meaning to the numbers // set text to LCD row 2 // writing temperature value . 3.0 * val * 100.setCursor(0. 2). temperature = (5. int potPin = 0.print((long)temperature). Serial. Nilai temperatur ditampilkan di layar LCD #include <LiquidCrystal. } delay(1000).clear(). ").setCursor(0. void setup() { lcd.C").1). lcd. // Serial.0. lcd. lcd. lcd.0). } // if monitor screen opened // read the value from the sensor // convertion formula to Celcius // write temperature to notebook monitor // jika nilainya ingin dibulatkan b. 4.available()) { val = analogRead(potPin).print(" deg. temperature = (5.print("current temp.println(temperature). 11.0)/1024.

0 * val * 100. digitalWrite(greenLight. digitalWrite(redLight.HIGH). int greenLight = 4. Thermometer digital dengan fitur lampu indikator Tambahkan pengukur suhu ini dengan fitur lampu indikator (rangkaian traffict light) yang menyala bergantian pada suhu tertentu. Gunakan logika IF-ELSE atau SWITCH-CASE. void setup() { Serial.println((long)temperature).begin(9600). OUTPUT). float temperature = 0. Serial. pinMode(yellowLight.LOW).LOW). pinMode(greenLight. } void loop() { if (Serial. OUTPUT). pinMode(redLight. Serial. int potPin = 0. long val = 0. } if (suhu >=27 || suhu <= 30) { // Jika suhunya antara 27-30 derajat digitalWrite(yellowLight. digitalWrite(yellowLight.println("Suhu sekarang adalah : "). int yellowLight = 6.0)/1024.HIGH).c. // read the value from the sensor temperature = (5. OUTPUT).LOW). digitalWrite(greenLight. if (suhu > 30) { // Jika lebih besar dari 30 derajat digitalWrite(redLight. } // select the input pin for the LM35 .LOW).0.available()) // if monitor screen opened { val = analogRead(potPin). suhu = temperature. int suhu. int redLight = 7.

} } delay(5000).LOW).LOW). digitalWrite(yellowLight. digitalWrite(redLight.if (suhu < 27) { // Jika suhunya kurang dari 27 derajat digitalWrite(greenLight. default : // jika suhunya selain 23 dan 24 derajat ………. case 26 : // Jika suhunya 23 derajat ……….Jika menggunakan SWICH .CASE switch (suhu) { case 24 : // Jika suhunya 24 derajat ……….ELSE if (suhu > 24) // { } if (suhu == 26) // ‘sama dengan’ ditulis dengan simbul == .HIGH). simbulnya != { } if (suhu != 24 || suhu !=26) // simbul || artinya OR. } . break. sedangkan simbul && artinya AND { } -------------------------. Tidak sama dengan.Jika menggunakan IF . } Catatan: ---------------------------. break.

PENGUKUR JARAK Untuk mengukur jarak digunakan Sensor Ultrasonic yang cara kerjanya adalah memancarkan gelombang ultrasonic dan menangkap pantulannya jika mengenai benda di depannya. } . Waktu pantul itulah yang akan di konversi kedalam satuan jarak. Sketch: const int pingPin = 7. void setup() { Serial.Project 11.begin(9600).

INPUT). } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2. 5. delayMicroseconds(5). } #include <LiquidCrystal. cm = microsecondsToCentimeters(duration). LOW).begin(16. OUTPUT). digitalWrite(pingPin.h> LiquidCrystal lcd(12. cm. Serial.println().print("cm"). pinMode(pingPin. Serial. duration = pulseIn(pingPin. 4. 11. // include library for LCD // pin to LCD // set up the LCD's number of rows and columns . LOW). int pingPin = 7.print(cm). delay(1000). digitalWrite(pingPin. 2). delayMicroseconds(2). HIGH). HIGH). digitalWrite(pingPin.void loop() { long duration. 2). void setup() { lcd. Serial. cm. 3. pinMode(pingPin. } void loop() { long duration.

lcd.clear(). digitalWrite(pingPin. } Catatan: Sensor jarak ini banyak diimplementasikan untuk berbagai macam proyek robotik. delayMicroseconds(5). cm = microsecondsToCentimeters(duration). digitalWrite(pingPin. misalnya: .Pengukur ketinggian air .Radar pendeteksi benda asing .pinMode(pingPin. } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2. lcd. OUTPUT). digitalWrite(pingPin. lcd. HIGH). duration = pulseIn(pingPin. 0).setCursor(0. LOW). HIGH).Penaksir jarak .print(cm). INPUT).Pengukur tinggi badan .Robot obstacle avoider (Penghindar halangan) . pinMode(pingPin. delayMicroseconds(2). delay(1000). lcd. LOW).print("cm").

Project 12. } void loop() { senseMotion = digitalRead(motionPin). yang cara kerjanya adalah mendeteksi adanya perbedaan/perubahan suhu sekarang dan sebelumnya. } else { digitalWrite(ledPin. if (senseMotion == HIGH) { digitalWrite(ledPin. delay(2000). } } // membaca nilai sensor gerak // jika terdeteksi ada gerakan // jika tidak ada gerakan . HIGH). INPUT). pinMode(motionPin. PENDETEKSI GERAK Untuk mendeteksi gerakan. OUTPUT). // variable deteksi gerak void setup() { pinMode(ledPin. /* Motion detector */ const byte ledPin = 13. // internal LED pada pin 13 const byte motionPin = 2. // pin Signal sensor gerak dihubungkan dengan port 2 byte senseMotion = 0. LOW). diperlukan sensor gerak yang biasa disebut Passive Infra Red (PIR).

Kita bisa menangkap nilai tombol yang diinginkan dengan menampilkannya pada layar monitor dan memberikan perintah tertentu untuk tombol tersebut. PENGENDALI PERALATAN LISTRIK DENGAN REMOTE CONTROL TV Sensor yang dapat menangkap signal dari remote control TV disebut Infra Red Decoder (IR Decoder). int key.enableIRIn(). OUTPUT). } // Start the receiver . 2 atau 3 // Apabila menggunakan Remote control merek Sonny #include <IRremote. OUTPUT). pinMode(led3.3) dapat diberi perintah untuk menyalakan LED 1. tombol yang diinginkan (misal: 1. Catatan: . pinMode(led2.Sinyal remote control yg ditangkap IR Decoder dan nilainya ditampilkan dilayar monitor. // lampu1 pada pin 5 int led2 = 6. irrecv. OUTPUT). IRrecv irrecv(RECV_PIN). // Output signal sensor remote dihubungkan ke pin 11 decode_results results. . // lampu3 pada pin 7 void setup() { pinMode(led1.Project 13.Gunakan rangkaian lampu traffict light sebagai output . Serial.Selanjutnya.begin(9600). Setiap tombol remote control memiliki nilai yang berbeda. int led1 = 5. // lampu2 pada pin 6 int led3 = 7.2.h> int RECV_PIN = 11.

LOW). LOW). digitalWrite(led3.println("tombol 1").println("tombol 3"). HIGH). LOW). HIGH). digitalWrite(led3. irrecv. void loop() { if (irrecv.unsigned long last = millis().println(key). LOW). LOW). // Receive the next value } } Catatan: Gunakan statement SWITCH-CASE sebagai pengganti IF – ELSE. HIGH). LOW). // jika ditekan tombol 2 digitalWrite(led1. // Mengetahui nilai tombol remote if(key == 16) { Serial. agar proses berjalan lebih cepat ! . // jika ditekan tombol 1 digitalWrite(led1.value.last > 250) { key = results.resume(). digitalWrite(led2. digitalWrite(led2. Serial.println("tombol 2"). HEX. } if(key == 1040) { Serial.decode(&results)) { // If it's been at least 1/4 second since the last if (millis() . } } last = millis(). // jika ditekan tombol 3 digitalWrite(led1. digitalWrite(led2. } if(key == 2064) { Serial. digitalWrite(led3.

begin(9600). pinMode(LEDpin. OUTPUT). Sketch: /* * Infrared and Arduino * Reads an input from IR. void setup(){ pinMode(LDR_pin. Serial. // analog pin 0 (connect IR here) int LDR_val = 0. else digitalWrite(LEDpin. } void loop(){ LDR_val = analogRead(LDR_pin). //This is the LED // a threshold to decide when the LED turns on // batas bawah = 50 (hitam) . if (LDR_val > threshold) digitalWrite(LEDpin. INPUT). HIGH).Project 14. */ // variables int LDR_pin = 0. LOW). sends it to serial monitor and turns a LED off or on. Sensor ini menggunakan pancaran sinar infrared yang akan dipantulkan dan ditangkap oleh fotodioda. Nilai yang terbaca selanjutnya akan diolah oleh mikrokontroler untuk menjalankan aksi tertentu. // variable use to read input data int LEDpin = 13. atas = 400 (kertas putih) int threshold = 50. SENSOR GARIS / DETEKTOR WARNA Sepasang sensor garis biasanya digunakan pada Robot Line tracer untuk mendeteksi warna dasar putih dan garis hitam pada papan lintasan. .

. Serial.// output 'LDR_val' value into the console Serial. dan berikan statement IF untuk menterjemahkannya menjadi nama WARNA tertentu. Tangkap nilainya.print(LDR_val). delay (1000).print("LDR = "). Serial. } Catatan: Cobalah dengan mendeteksi berbagai macam warna kertas yang permukaannya tidak mengkilat.println().

Skemanya adalah sebagai berikut: Sketch: int relay1 = 3. } void loop() { digitalWrite(relay1. cahaya. warna. SWITCH ON/OFF PERALATAN LISTRIK DENGAN RELAY Output dari pembacaan sensor (misalnya sensor garis. gerak. suhu. dapat dihubungkan dengan relay yang berfungsi sebagai switch / tombol ON/OFF berbagai peralatan listrik. OUTPUT). digitalWrite(relay1.Project 15. delay(1000). HIGH). remote control. // pin 3 Arduino dihubungkan dengan pin SIGNAL modul Relay void setup() { pinMode(relay1. jarak). delay(1000). } // pin 13 sebagai output // led On // tunggu 1 detik // led Off // tunggu 1 detik . LOW).

LOW).Program berikut ini adalah untuk memutar Servo dengan sudut putar 10 – 170 derajat ke kanan dan kekiri. myAngle--) { servoPulse(servoPin. myAngle>=10. // angle of the servo roughly 0-180 int pulseWidth. // microsecond pause digitalWrite(servoPin. // send pin and angle delay(20). // servo connected to digital pin 2 int myAngle. int myAngle) { pulseWidth = (myAngle * 10) + 600. Berputarnya Servo didasarkan atas perintah mikrokontroler untuk berputar dengan sudut tertentu dan kecepatan tertentu. // refresh cycle } // servo starts at 170 deg and rotates to 10 deg for (myAngle=170. HIGH). myAngle). // sets pin 2 as output } void servoPulse(int servoPin. Catatan: . // set servo low } void loop() { // servo starts at 10 deg and rotates to 170 deg for (myAngle=10. // send pin and angle delay(20). myAngle). // determines delay digitalWrite(servoPin. myAngle++) { servoPulse(servoPin.Biasanya digunakan untuk menggerakkan lengan / kaki Robot . // servoPulse function variable void setup() { pinMode(servoPin.Gunakan sumber tegangan sesuai spesifikasi Servo . OUTPUT). MENGGERAKKAN LENGAN ROBOT DENGAN SERVO Servo adalah motor yang sudut putarnya antara 0 – 180 derajat. // refresh cycle } } .Project 16. int servoPin = 2. // set servo high delayMicroseconds(pulseWidth). myAngle<=170.

h> Servo myservo.68. // create servo object to control a servo int sliderpin = 0.attach(0). // analog pin potentiometer (CENTER PIN) int sensorValue. // reads the value of the slider (value between 0 -1023) sensorValue = sensorValue/5. // sets the servo position according to the scaled value delay(15). // scale it to use it with the servo (value between 0 -180) myservo./* PROGRAM UNTUK MEMUTAR SERVO DENGAN POTENTIOMETER */ #include <Servo. // waits for the servo to get there } . // attaches the servo on pin 0 to the servo object } void loop() { sensorValue = analogRead(sliderpin). // variable to read the value from the analog pin void setup() { myservo.write(sensorValue).

Program berikut ini adalah untuk menggerakkan Robot maju full speed dan mundur half speed. kita dapat membuat Robot Line tracer. karena arusnya terlalu kecil.Dengan bantuan sensor. Obstacle Avoider. . . bodi Robot mobil (dengan 2 DC motor Tamiya) dan sumber tenaganya. Untuk itu diperlukan rangkaian H-bridge sebagai penguat arus sekaligus pengendali kecepatan motor dan arah putaran motor DC. misalnya motor Tamiya.Project 17. . misalnya sensor jarak. Catatan: . light sensing. H-BRIDGE MOTOR DRIVER Motor DC. dll.Rangkai modul H-Bridge. tidak dapat langsung dihubungkan dengan output Mikrokontroler.

// motor 1 off analogWrite(11. // motor 1 on. digitalWrite(5.(nilai 0-255) analogWrite(11. int relayPin = 7. analogWrite(9. analogWrite(11.MUNDUR // motor 1 on. // relay2 off . // relay1 off . 0). delay(3000). full speed . analogWrite(11. 125). 0). } // relay1 on . full speed . // motor 2 off delay(3000). digitalWrite(7. 125). 0). } void loop() { digitalWrite(7. int transistorPin2 = 11. // dari digital pin 9 ke pin signal PWM kiri (menggerkkan motor) // dari digital pin 11 ke pin signal PWM kanan (menggerkkan motor) // dari digital pin 7 ke pin signal relay kiri (membalik putaran motor) // dari digital pin 5 ke pin signal relay kanan (membalik putaran motor) void setup() { // set the transistor pin as an output pinMode(transistorPin. LOW).(nilai 0-255) // motor 2 on. half speed . // motor 2 on.MAJU analogWrite(9. HIGH). HIGH). pinMode(relayPin2. OUTPUT). OUTPUT).(nilai 0-255) delay(3000). analogWrite(9. // set the relay pin as an output pinMode(relayPin.(nilai 0-255) // motor 1 off // motor 2 off .MUNDUR // relay2 on . LOW). delay(3000). OUTPUT). int relayPin2 = 5. analogWrite(9. 255). OUTPUT). 255).MAJU digitalWrite(5.Sketch: int transistorPin = 9. half speed . 0). pinMode(transistorPin2.