Video konsep dasar penggunaan sensor inframerah pada Arduino
List Program:
/* Test deteksi sinar infrared sensor infrared di hubungkan ke PIN A0 (Analog) apabila sensor infrared mendapat sinar inframerah maka, LED 13 nyala, jika tidak LED 13 padam sementara itu nilai yang diterima sensor inframerah dapat dipantau melalui serial monitor oleh : Aan Darmawan blog : http://valfa.blogspot.com */voidsetup() {
Serial.begin(9600);
// initialize the digital pin as an output.// Pin 13 has an LED connected on most Arduino boards:pinMode(13, OUTPUT);
}
int sensor;
voidloop() {
// baca nilai sensor di PIN A0 (Analog) dan kirim ke serial
sensor=analogRead(A0);
Serial.print("Nilai: ");
Serial.println(sensor);
// Jika sensor mendapat sinar infra merah nilai sensor turun// Angka 900 dapat diubah sesuai jarak pantul yang diinginkan// dan nilai hasil pemantauan di serial monitorif(sensor<=900)
digitalWrite(13, HIGH); // LED 13 dinyalakanelsedigitalWrite(13, LOW); // LED 13 dipadamkandelay(500); // delay 0,5 detik
}
Salah satu topik menarik dalam mikrokontroler adalah membuat mobil (robot beroda) yang dapat menghindari rintangan didepannya, banyak cara dan metoda untuk menyelesaikan masalah ini, salah satu cara yang mudah, sederhana dan murah adalah menggunakan sensor Infra Merah (IR =Infra Red), hasilnyapun cukup memadai, Prinsip dasar kerjanya adalah dengan mengirimkan sinar (Tx) infra merah ke bagian depan, sementara itu disamping sumber infra merah diletakkan sensor (Rx) infra merah (lihat Gambar 1), apabila di depan tidak ada benda/rintangan , maka tidak akan ada sinar infra merah yang memantul ke sensor, tetapi apabila ada benda/rintangan maka sinar infra merah akan memantul dan pantulan sinar ini akan terdeteksi oleh sensor Infra merah, dan selanjutnya di olah melalui mikrokontroler dan mikrokontroler akan mengatur pergerakan motor.
Gambar 1
Berikut ini video contoh hasil realisasi Mobil penghindar rintangan menggunakan IR:
Skema rangkaian
List Program:
/*Mobil penghindar rintangansensor penghalang menggunakan 3 buah sensor infra merah sensor 1,2 dan 3 sambung ke pinA0,A1 dan A2Oleh : Aan Darmawanblog : valfa.blogspot.comtanggal: 21/02/11 */
const int k1=900;
const int k2=880;
const int k3=885;
int s1,s2,s3,baru;
voidsetup() {
// Serial.begin(9600); pinMode(2,OUTPUT); // kendali motor 1pinMode(3,OUTPUT); // motor 1 +pinMode(4,OUTPUT); // motor 1 -pinMode(5,OUTPUT); // kendali motor 2pinMode(6,OUTPUT); // motor 2 +pinMode(7,OUTPUT); // motor 2 -
baru=1;
}
void maju(void){
digitalWrite(2,LOW);
digitalWrite(5,LOW);
delayMicroseconds(100);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(100);
}
void mundur(void){
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
delay(1000);
}
void kanan_mj(void){
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
delay(900);
}
void kiri_mj(void){
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
delay(900);
}
void kanan_md(void){
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
delay(900);
}
void kiri_md(void){
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
delay(900);
}
void henti(void){
// mundur sedikit (rem)if(baru==1){
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
delay(100);
baru=0;
}
// berhentidigitalWrite(3,LOW);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,LOW);
digitalWrite(5,LOW);
delayMicroseconds(200);
}
// main program voidloop() {
s1=analogRead(A0); // sensor kanan
s2=analogRead(A1); // sensor tengah
s3=analogRead(A2); // sensor kiri if(s1<k1)s1=1; else s1=0;
if(s2<k2)s2=1; else s2=0;
if(s3<k3)s3=1; else s3=0;
// Serial.print("S1 : "); // Serial.print(s1); // Serial.print(", S2: "); // Serial.print(s2); // Serial.print(", S3: "); // Serial.println(s3); if(s1==0 && s2==0 && s3==0) { //maju
baru=1;
maju();
}
if(s1==1 && s2==1 && s3==1) { //mundur
baru=1;
mundur();
}
if(s1==1 && s2==0 && s3==0) { // maju belok kiri
baru=1;
kiri_mj();
}
if(s1==0 && s2==0 && s3==1) { // maju belok kanan
baru=1;
kanan_mj();
}
if(s1==1 && s2==1 && s3==0) { // mundur belok kiri
baru=1;
kiri_md();
}
if(s1==0 && s2==1 && s3==1) { // mundur belok kanan
baru=1;
kanan_md();
}
if((s1==0 && s2==1 && s3==0) ||
(s1==1 && s2==0 && s3==1) ){ // obstacle tengah berhenti
henti();
}
// delay(1); // tunggu 1 ms
}
IC L293 adalah IC Quadruple Half H Driver yang dapat digunakan sebagai driver 2 arah untuk arus yang cukup besar (1A, untuk tipe L293D maks 600mA). datasheet ICL293 dapat diunduh disini .
Sebagaimana kita ketahui bahwa pin digital Arduino (umumnya) hanya bisa meng handle arus sekitar 40 mA, sehingga untuk menggerakan motor DC, stepper Motor, ataupun beban lainnya yang memerlukan arus besar perlu driver.
Tulisan ini menjelaskan cara menggerakan motor DC (asumsi motor DC 5V dengan konsumsi arus di bawah 500mA) dengan menggunakan IC L293 pada Arduino. Dengan formasi Biderectional Motor Control (informasi lanjut lihat data sheet) ,satu IC L293 dapat mengendalikan 2 motorDC dan masing2 motor dapat dikendalikan pada dua arah (bidirectional) putaran (ClockWise atau CounterClockWise), dan arah putaran dapat dianalogikan sebagai maju dan mundur.
Berikut ini dibuat suatu aplikasi Kendali 2 motor DC untuk maju ,berhenti dan mundur yang ditentukan oleh kekuatan cahaya, bila cahaya cukup, motor tidak bergerak (berhenti), bila terang, motor bergerak kearah tertentu (maju) dan bila gelap, motor bergerak kearah yg berlawanan (mundur).Sensor cahaya yang digunakan adalah LDR yang dihubungan ke analog input (A0) dan secara sederhana dalam tulisan ini pembagian daerah kerja sensor thd respon cahaya dibagi 3 daerah yaitu daerah gelap (nilai sensor 0-341), daerah cukup cahaya (342-682) dan daerah terang (683-1023), artinya pada program variabel batasbawah=341 dan batasatas=682; Tentu saja untuk nilai daerah kerja (batasbawah dan batasatas) yang sebenarnya thd lingkungan anda buat harus disesuaikan dengan kondisi cahaya setempat.
Demo Video
(dalam percobaan ini menggunakan parameter batasbawah=700 dan batasatas=860)
Skema rangkaian
List Program:
/* Kendali 2 motor DC untuk maju ,berhenti dan mundur yang ditentukan oleh kekuatan cahaya bila cahaya cukup motor tidak bergerak (berhenti) bila terang, motor bergerak kearah tertentu (maju) dan bila gelap, motor bergerak kearah yg berlawanan (mundur) Motor 1 dan Motor 2 dihubungkan ke IC L293 (lihat skema) sensor menggunakan 1 buah LDR sambung ke pin A0 dan Vcc pin A0 ke ground pasang R = 10KOhm Oleh : Aan Darmawan Blog : http://valfa.blogspot.com Date : 14 Februari 2011 */
const int batasbawah=341;
const int batasatas=682;
// set batas atas dan bawah (threshold) dibagi 3 daerah sama rata// (0-341) gelap, (342-682) cukup, (683-1023)terang// nilai batas atas dan bawah ini bisa diubah sesuai dengan kondisi cahayaint s1; // variabel untuk sensorvoidsetup() {
pinMode(2,OUTPUT); // kendali motor 1pinMode(3,OUTPUT); // motor 1 +pinMode(4,OUTPUT); // motor 1 -pinMode(5,OUTPUT); // kendali motor 2pinMode(6,OUTPUT); // motor 2 +pinMode(7,OUTPUT); // motor 2 -
}
void maju(void){
digitalWrite(2,LOW);
digitalWrite(5,LOW);
delayMicroseconds(100);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
}
void mundur(void){
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
}
void henti(void){
// berhentidigitalWrite(3,LOW);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,LOW);
digitalWrite(5,LOW);
delayMicroseconds(200);
}
// main program voidloop() {
s1=analogRead(A0); // ambil nilai dr sensor LDRif(s1<=batasbawah) { //mundur
mundur();
}
if(s1>batasbawah && s1<=batasatas) { // berhenti
henti();
}
if(s1>batasatas) { //maju
maju();
}
delay(10); // tunggu 10 mdetik
}
LDR (light Dependent Resistor) adalah suatu resistor yang nilai resistansinya bergantung pada cahaya (Jika mendapat cahaya terang, nilai resistansi kecil sekitar puluhan s/d ratusan Ohm, jika kondisi gelap nilai resistansi akan besar bisa mencapai puluhan-ratusan KOhm bahkan bisa mencapai MOhm), umumnya LDR digunakan sebagai sensor cahaya. Berikut ini contoh aplikasi LDR pada arduino severino sebagai Lilin Elektronik, cara kerja skema di bawah ini adalah LED1 akan padam saat LDR mendapat cahaya cukup terang, apabila LDR tidak mendapat cahaya (kondisi lingkungan gelap) maka LED1 akan menyala (LED1 berfungsi sebagai Lilin Elektronik).
R1 = 10 KOhm, R2=LDR dan R3=560 Ohm
List Program
/* Program pemanfaatan LDR untuk Lilin Elektronik oleh : Aan Darmawan http://valfa.blogspot.com Februari 2011 */
const int pinLDR = A0;// Sensor LDR dihubungkan dengan A0 dan
// A0 dihubungkan seri dengan Resistor 10 KOhm ke Ground
const int pinLED = 8; //LED1 dihubungkan ke pin8 melalui Resistor 560 Ohmint sensorValue = 0; //var utk nilai yang terbaca di sensorint outputValue = 0; //var utk penskalaan nilai sensor (0-1023)jadi nilai (0-255)voidsetup() {
}
voidloop() {
// baca nilai dari sensor:
sensorValue = analogRead(pinLDR);
// penskalaan nilai sensor (0-1023) menjadi nilai output (0-255)
outputValue = map(sensorValue, 0, 1023, 0, 255);
// deteksi, jika nilai OutputValue <=200 , kondisi lingkungan redup/gelap// catatan: angka 200 dapat diubah-ubah disesuaikan dengan kondisi cahaya lingkungan// makin gelap nilai outputValue akan makin kecil dan sebaliknyaif(outputValue<=200)
digitalWrite(pinLED,HIGH);
elsedigitalWrite(pinLED,LOW);
// delay 300 milidetik sebelum loop berikutnya// agar analog-to-digital converter siap membaca data berikutnyadelay(300);
}
Pengaturan nyala lampu lalulintas dapat di atur dengan mudah dengan arduino severino, berikut ini adalah prinsip dan rangkaian dasar cara pengatur lampu lalulintas (ideal) dengan nyala lampu hijau 5 detik, nyala lampu kuning 2,5 detik (lampu kuning mulai menyala setelah lampu hijau menyala 4 detik) dan nyala lampu merah 5 detik.
Harga hanyaRp 150.000,-,
features hampir sama dengan Duemilanove ataupun UNO,
Isi Kit:
1 Arduino severino dengan ATMEGA8
1 Kabel Serial (untuk Upload program dan komunikasi dengan komputer)
ElMarino (Severino campatible):
Kit ElMarino:
Harga hanyaRp 175.000,-,
features sama dengan* Duemilanove ataupun UNO, (*kecuali sarana upload)
Isi Kit:
1 Elmarino (Arduino severino compatible) dengan ATMEGA328
1 Kabel Serial (untuk Upload program dan komunikasi dengan komputer)