7. Dasar Pembelajaran Sensor Ultrasonik dan Inframerah
Materi:
Pembelajaran kali ini menjelaskan penggunaan sensor-sensor yang berhubungan dengan ultrasonic dan inframerah. Sensor-sensor yang dikupas mencakup :
- HC-SR04
- SN-E18-D80NK
- PIR
- Pendeteksi garis
7.1 Sensor Ultrasonik
Sensor ujtrasonik adalah sensor yang mengirimkan gelombang suara dan kemudian memantau pantulannya
Salah satu sensor ultrasonik yang sering dipakai orang dalam melakukan eksperimen adalah HC-SR04 (Cihat Gambar 7.1). Jarak yang bisa ditangani berkisar antara 2 cm hingga 400 cm, dengan tingkat presisi sebesar 0,3 cm. Sudut deteksi yang bisa ditangani tidak lebih dari 15 0. Arus yang diperlukan tidak lebih dari 2mAdan tegangan yang dibutuhkan sebesar +5V. Jumlah pin adalah 4. Rincian pin masing-masing dapat dilihat di Tabel 7.1.
(a) Tampak dari muka (b) Tampak dari belakang
Gambar 7.1 Sensor ultrasonik HC-SR04
Tabel 7.1 Pin-pin di sensor HC-SR04
PIN | Keterangan |
Pin 1 | Vcc (dihubungkan ke tegangan +5V) |
Pin 2 | Trig (untuk mengirimkan gelombang suara) |
Pin 3 | Echo (untuk menerima pantulan gelombang suara) |
Pin 4 | Gnd (dihubungkan ke ground) |
Jarak antara sensor dan objek yang memantulkan gelombang suara dihitung dengan menggunakan rumus berikut:
Jarak = Kecepatan suara * T/ 2
Dalam hal ini, T adalah waktu tempuh dari saat sinyal ultrasonik dipancarkan hingga kembali. Perlu diketahui kecepatan suara adalah 343 m/detik.
Prinsip pengiriman sinyal oleh Trig dan penerimaan oleh Echo seperti berikut:
- Trig harus dalam keadaan HIGH paling tidak selama 10 mikrodetik.
- Modul ultrasonik pun akan mengirim gelombang kotak dengan frekuensi 40KHz.
- Gelombang yang dikirim tersebut akan dipantau dengan sendirinya oleh modul ultrasonik. Dalam hal ini waktu yang digunakan dari saat pengiriman sinyal hingga diterima balik adalah T. Pada waktu itulah pin Echo akan berada dalam keadaan HIGH. Nah, waktu T ini dapat diperoleh dengan memberikan perintah di Arduino:
T – pulseln (PIN ECHO, HIGH) ;
- Karena T telah diperoleh, jarak dihitung dengan menggunakan:
Jarak = Kecepatan suara * T / 2
Pembagi 2 diperlukan karena T adalah waktu yang diperlukan untuk menempuh dari sensor ke objek dan dari objek ke sensor.
sebagaimana dibahas di depan, kecepatan suara sebesar 343 m/detik atau sama dengan 34300 cm/detik. Adapun, T yang dihasilkan oleh Arduino dalam satuan mikrodetik. Karena 1 mikrodetik = 10-6 detik, maka T jika dinyatakan dalam satuan detik akan berupa T/106. Oleh karena itu, jarak dalam satuan cm adalah:
Jarak= 34300 * (T/IOÆ) / 2 cm = 0.0343 * T / 2 cm
contoh rangkaian untuk menguji sensor HC-SR04 diperlihatkan di Gambar 7.2. Contoh penyusunan rangkaian dapat dilihat di Gambar 7.3.
Gambar 7.2 Rangkaian untuk menguji sensor ultrasonik
Gambar 7.3 Contoh penyusunan rangkaian dengan sensor ultrasonic
// ——————————————–
// Sensor jarak HC-SR04
// ——————————————–
const int PIN_TRIG=13;
const int PIN_ECHO = 12;
void setup()
{
Serial.begin (9600);
pinMode(PIN_TRIG, OUTPUT);
pinMode (PIN_ECHO,INPUT);
}
void loop()
{
// Berikan isyarat HIGH pada PIN_trig 10 mikrodetik
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds (10); // Tunda 10 mikrodetik
digitalWrite(PIN_TRIG, LOW);
// Baca hasilnya di PIN_echo
d0uble selang = pulseIn(PIN_ECHO, HIGH);
// Hitung jarak yang diperoleh
d0uble jarak = 0.0343 * ( selang / 2);
if (jarak > 400 || jarak<=0)
{
serial.println(“di luar jangkauan sensor”);
else
Serial.print(jarak);
Serial.println(” cm”);
}
delay(1000); // Tunda satu detik
}
pada sketch di atas, pin 13 dihubungkan ke pin Trig dan pin 12 dihubungkan ke pin Echo. ltulah sebabnya
terdapat definisi:
const int PIN_TRIG = 12;
const int PIN_ECHO = 13
hasil pengukuran sensor ultrasonik dapat dipantau di komputer, pernyataan berikut diperlukan untuk menginisialisasi port serial:
Serial.begin (9600) ;
Dua pernyataan berikut digunakan untuk menyatakan bahwa pin yang berhubungan dengan pin Trig digunakan sebagai keluaran (karena akan digunakan untuk memberikan pulsa ke pin Trig milik sensor) dan pin yang berhubungan dengan pin Echo milik sensor sebagai masukan (karena akan diisi dengan nilai yang dihasilkan oleh sensor):
pinMode (PIN TRIG, OUTPUT) ; pinMode (PIN ECHO, INPUT) ;
Pemberian isyarat ke pin Trig selama 10 mikrodetik dilakukan melalui:
digitalWrite(PIN TRIG, HIGH) ; delayMicroseconds (10) ; digitalWrite (PIN TRIG, LOW) ;
Perintah di atas akan membuat sensor ultrasonik bekerja untuk mengukur jarak objek yang berada di depannya. Selanjutnya, hasil dari sensor dibaca di pin Echo melalui perintah:
d0uble selang = pulseln (PIN ECHO, HIGH) ;
Berdasarkan perintah di depan, waktu yang digunakan saat pengiriman sinyal ke objek Yan kembali ke sensor diperoleh. Waktu inilah yang dipakai untuk menghitung jarak, Yang dikerjakan oleh pernyataan:
d0uble j arak = o. 0343 * ( selang / 2) ;
Sebagaimana telah dijelaskan di depan, sensor ultrasonik HC-SR04 hanya mampu mengukur 0 maksimalnya adalah 400 cm. Itulah sebabnya, hasil pengukuran dapat divalidasi melalui:
i f (jarak > 400 || jarak <= 0)
Serial.println (”di luar jangkauan sensor”) ;
Serial . print (jara k) ;
Serial . println ( ” cm”) ;
Pernyataan di atas akan mengirimkan nilai jarak ke port serial sekiranya nilainya lebih besar daripada kurang dari 400.
Untuk menguji rangkaian, tekan Shift+Ctrl+M untuk menampilkan jendela Serial Monitor. Selanjutnya, hasilnya dengan menaruh benda di depan sensor ultrasonik pada pelbagai jarak. Contoh hasil pemantauan diperlihatkan di Gambar 7.5.
Sambar 7.4 Benda dipasang di depan untuk menguji sensor ultrasonik
Sketch yang digunakan untuk mengukur tinggi air ditunjukkan di bawah ini:
// ——————————————–
// Sensor jarak HC-SR04
// Sensor jarak HC-SR04
// untuk mengukur tinggi air dalam gelas
// ——————————————–
#define PIN_TRIG 13
#define PIN_ECHO 12
const d0uble JARAK_DASAR=23.12; // Diperoleh saat
// gelas disingkirkan
void setup()
{
Serial.begin (9600);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO,INPUT);
}
void loop()
{
// Berikan isyarat HIGH pada PIN_trig 10 mikrodetik
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10); // Tunda 10 mikrodetik
digitalWrite(PIN_TRIG,LOW);
// Baca hasilnya di PIN_echo
d0uble selang=pulseIn(PIN_ECHO,HIGH);
// Hitung jarak yang diperoleh
d0uble tinggi=JARAK_DASAR-0.0343*(selang/2);
Serial.print(tinggi);
Serial.println(“cm”);
delay(1000);// Tunda satu detik
}
const d0uble JARAK_DASAR = 23.12;
digunakan untuk mendeklarasikan konstanta JARAK DASAR. Nilai 23.12 ditentukan dengan mengambil nilai tertinggi yang dihasilkan sensor dengan cara mengosongkan gelas dan menggunakan sketch sr04.
Seperti halnya pada sketch sr04, PIN_TRIG dan PIN_ECHO adalah konstanta yang secara berturutan menyatakan PIN_yang terhubung ke Trig dan Echo milik sensor. Kemudian, mode kedua PIN_diatur melalui:
pinMode (PIN_TRIG, OUTPUT) ;
pinMode (PIN_ECHO, INPUT) ;
pemberian isyarat ke PIN_Trig selama 10 mikrodetik dilakukan meiajui:
digitalWirite(PIN_TRIG, HIGH) ;
delayMicroseconds (10) ;
digitalWirite (PIN_TRIG, LOW) ;
perintah di atas akan membuat sensor ultrasonik bekerja untuk mengukur jarak objek yang berada di depannya. Selanjutnya, hasil dari sensor dibaca di PIN_Echo melalui perintah:
d0uble selang = pulseln (PIN_ECHO, HIGH) ;
pengukuran tinggi air dilakukan melalui:
d0uble tinggi= JARAK DASAR – 0.0343 * ( selang / 2) ;
Gambar 7.7 memberikan ilustrasi mengenai rumus di atas.
Gambar
7.7
Perhitungan
tinggi
air
dalam
gelas
7.2 Sensor Inframerah
Sensor ini memiliki tiga kabel. Gambar 7.9 memperlihatkan cara menggunakan sensor ini dengan menggunakan Arduino. Kabel merah dihubungkan ke sumber listrik DC +5V. Kabel hijau dihubungkan ground. Kabel kuning sebagai keluaran. Nilai keluaran berupa HIGH bila tidak ada halangan di depan sensor ini atau LOW kalau ada halangan.
Gambar 7.9 Cara memasang sensor inframerah SN-E18-b80NK
Pengujian sensor SN-E18-D80NK dapat dilakukan dengan menggunakan sketch berikut:
// ——————————————–
// Contoh penggunaan sensor Infrared E18-D50NK
// Output:
// HIGH = tak ada halangan
// LOW =ada halangan
// ——————————————–
const int PIN=12;
int nilai;
void setup()
{
Serial.begin(9600);
pinMode(PIN, INPUT);
}
void loop()
{
nilai=digitalRead(PIN);
if (nilai ==HIGH)
Serial.println(“HIGH”);
else
Serial.println(“LOW”);
delay(1000);
}
Konsep yang mendasari sketch di atas sangatlah sederhana. Pertama-tama, pin di Arduino yang dihubungkan ke sensor inframerah diatur dengan mode INPUT. Artinya, nilai di pin tersebut akan dibaca karena berisi nilai yang dihasilkan oleh sensor inframerah.
Selanjutnya, nilai yang dihasilkan sensor dibaca melalui:
nilai = digital Read (PIN) ;
if (nilai==HIGH)
Serial . print In (“HIGH”) ;
else
Serial . print In ( “LOW”) ;
Anda bisa memantau kemungkinan kedua nilai tersebut dengan menekan Shift+Ctrl+M. Lalu, uji dengan memberikan halangan pada pelbagai jarak ataupun tidak memberikan halangan.
Untuk mengetahui ada halansan atau tidak, Anda bisa menggunakan dua LED seperti terlihat di Garnbar7.10 LED hijau akan menyala sekiranya di depan sensor inframerah tidak ada halangan, sedangkan LED
Gambar 7.10 Rangkaian sensor inframerah dengan dua LED
Sketch yang digunakan untuk menguji rangkaian di Gambar 7.10 adalah :
// ——————————————–
//Contoh penggunaan sensor Infrared E18-D50NK
// LED merah menyala jika ada halangan
// LED hijau menyala jika tidak ada halangan
// ——————————————–
const int PIN_IR=12;
const int PIN_LED MERAH=11;
const int PIN_LED_HIJAU = 10;
int nilai;
void setup()
{
pinMode(PIN_IR, INPUT);
pinMode(PIN_LED MERAH,OUTPUT);
pinMode(PIN_LED_HIJAU, OUTPUT);
}
void loop()
{
nilai=digitalRead(PIN_IR);
if (nilai==HIGH)
// Nyalakan LED hijau
digitalWrite(PIN_LED_MERAH, LOW);
digitalWrite(PIN_LED_HIJAU, HIGH);i
// Nyalakan LED merah
digitalWrite(PIN_LED_HIJAU, LOW);i
digitalWrite (PIN_LED_MERAH, HIGH);
delay(100);
}
Secara prinsip, sketch di atas menyerupai sketch ir_18. Penerjemahan ke penyalaan LED merah atau LED hijau
dilakukan melalui:
if (nilai ==HIGH)
// Nylakan LED hijau
digitalWrite(PIN_LED_MERAH,LOW);
digitalWrite(PIN_LED_HIJAU,HIGH);
else
{
// Nyalakan LED merah
digitalWrite(PIN_LED_HIJAU,LOW);
digitalWrite(PIN_LED_MERAH,HIGH);
}
Jika isi variabel nilai berupa HIGH (berarti tidak ada halangan),
- LED hijau dinyalakan dan
- LED merah dimatikan.
Sebaliknya,saat variabel nilai berupa LOW,
- LED merah dinyalakan dan
- LED hijau dimatikan.
7.3 Sensor PIR
Sensor Passive infroRed (PJR) (misalnya berlabel HCßR501 ataupun SEN 08630) gerakan orang atau hewan. Sensor ini bekerja atas dasar perubahan panas di depan sensor. Untuk mendeteksi perubahan tersebut, elemen piroelektrik digunakan di dalam modul sensor memperlihatkan bentuk sensor PIR.
Gambar 7.11 Sensor PIR
Sensor PIR memiliki tiga pin:
- VCC dihubungkan ke sumber listrik;
- GND dihubungkan ke ground;
- OUT dihubungkan ke pemantau keluaran sensor.
Contoh pemasangan sensor PIR dengan Arduino diperlihatkan di Gambar 7.12.
Gambar 7.12 Rangkaian PIR dan Arduino
Catatan
|
Tambahan resistor 10K diperlukan untuk PIR yang bersifat open collector (misalnya PIR yang berasal dari SparkFun). Dalam hal ini, resistor tersebut perlu dipasang antara VCC dan OUT. |
// ——————————————–
// Contoh penggunaan detektor Gerakan
// ——————————————–
const int PIN MOTION =12;
void setup()
{
Serial.begin(9600);
pinMode(PIN MOTION, INPUT);
}
void loop()
{
int nilai = digitalRead(PIN_MOTION);
if (nilai ==HIGH)
Serial.println(“HIGH”);
else Serial.print1n(“LOW”);
delay(1000);
}
Prinsip yang mendasari sketch di atas sangatlah sederhana. Pertama-tama, pin di Arduino yang dihubungkan kesensor PIR diatur dengan mode INPUT. Artinya, nilai di pin tersebut akan dibaca karena berisi nilai yang dihasilkan oleh sensor PIR.
Selanjutnya, nilai yang dihasilkan sensor dibaca melalui•.
int nilai = digitalRead(PIN_MOTION) ;
Hasil di variable nilai tersebut akan berupa HIGH atau LOW. Kemudian, nilai tersebut dikirim ke port serial dalam bentuk string “HIGH” atau “LOW” melalui pernyataan :
if (nilai == HIGH)
Serial .ptintln (“HIGH” ) ;
else
Serial .println ( “LOW”) ;
Anda bisa memantau kemungkinan kedua nilai tersebut dengan menekan Shift+CtrI+M. Lalu, uji memberikan gerakan tangan di dekat sensor. Contoh hasil pengujian dapat diljhat di Gambar 7.13,
Gambar 7.13 Contoh hasil pengujian PIR
Hasil di atas memperlihatkan bahwa nilai HIGH akan dihasilkan kalau ada gerakan di dekat sensor.
.,
Untuk menguji rangkaian di atas, silakan gunakan sketch berikut :
// ——————————————–
// Contoh penggunaan detektor gerakan
// untuk menyalakan LED kalau
// ada Gerakan
// ——————————————–
const int PIN_MOTION=12;
const int PIN LED=13;
const int INTERVAL=2000;
int waktuAwal=0;
void setup()
{
pinMode(PIN_MOTION, INPUT);
pinMode(PIN_LED,OUTPUT);
}
void loop()
{
int nilai=digitalRead(PIN_MOTION);
if (nilai==HIGH)
{
digitalWrite(PIN_LED,HIGH);
waktuAwal=0;
}
// Matikan LED kalau interval waktu telah tercapai
if (millis() – waktuAwal >INTERVAL)
digitalWrite(PIN_LED, LOW);
}
Sketch di atas melibatkan konstanta INTERVAL dan variabel global bernama waktuAwal
dideklarasikan sebagai berikut:
const int INTERVAL=2000;
int waktuAwal=0;
Dalam hal ini,kegunaan masing-masing adalah:
- Konstanta INTERVAL dipakai untuk menentukan lama LED menyala. Nilai 2000 menyatakan 2000 milidetik atau 2 detik).
- Variabel waktuAwal digunakan untuk mencatat waktu saat LED mulai dinyalakan. Nilai inilah yang akan dipakai sebagai acuan untuk mematikan LED sekiranya selisih antara waktu sekarangta waktuAwal melebihi INTERVAL.
Pengisian nilai di waktuAwal dan penyalaan LED dilakukan melalui:
if (nilai == HIGH)
{
digitalWrite(PIN LED, HIGH);
waktuAwal=0;
}
Hal itu dilakukan saat isi variabel nilai (yang dihasilkan oleh sensor PIR) bernilai HIGH.
Penentuan LED dimatikan ditangani oleh:
if (millis() – waktuAwal> INTERVAL)
digitalWrite(PIN_LED, LOW);
Pada ungkapan di if,fungsi millis() akan menghasilkan suatu nilai yang menyatakan lama vals semenjak sketch dijalankan hingga sekarang dalam satuan milidetik. Oleh karena itu, ungkapan
millis()- waktuAwal> INTERVAL
akan menghasilkan true hanya jika selisih antara hasil millis () dan waktuAwal melebihi nilai INTENAL
7.4 Sensor Pendeteksi Garis
Sensor pendeteksi garis sebenarnya bisa dibuat dengan menggunakan LED, LDR, dan komparator untuk mengambil keputusan adanya garis atau tidak. Namun, untuk mempermudah implementasi, modul yang ditunjukkan untuk mendeteksi garis bisa menjadi pilihan. salah satu modul untuk pendeteksi garis dinamakan IR line tracking sensor TCR5000 YL-54, yang wujudnya diperlihatkan di Gambar 7.16. Sensor ini memberikan nilai 1 (HIGH) pada pin D0 jika detektor menemui warna hitam atau O (LOW) jika detektor menemui warna putih. Adapun keluaran di pin A0 berupa tegangan OV hingga 5V. Sumber tegangan yang diperlukan 3.3V hingga 5V DC. Jarak deteksi O hingga 3 cm.
Gambar 7.16 IR line tracking sensor TCR5000 YL-54
Sensor pendeteksi garis tersebut menggunakan inframerah untuk mendeteksi keberadaan garis. Oleh karena itu, sensor ini dapat digunakan pada robot line follower. Untuk keperluan ini, diperlukan tiga sensor, yaitu digunakan untuk mendeteksi lintasan pada bagian tengah dan dua di bagian tepi.
Gambar 7.17 memperlihatkan contoh hubungan sensor TCR5000 YL-54 dan Arduino.
Gambar 7.17 Rangkaian untuk menguji JR line tracking sensor
Sketch yang digunakan untuk menguji /R line tracking sensor dapat dilihat di bawah ini:
// ——————————————–
// Sensor YL-54
// untuk mendeteksi garis
// ——————————————–
const int PIN_ANALOG =A0;
const int PIN_DIGITAL=12;
void setup()
{
Serial.begin (9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop()
{ int nilaiAnalog =analogRead(PIN_ANALOG);
int nilaiDigital=digitalRead(PIN_DIGITAL);
Serial.print(“D0=”);
Serial.print(nilaiDigital);
Serial.print(“,A0=”);
Serial.println(nilaiAnalog);
delay(1000);// Tunda satu detik
}
Pendefinisian pin analog dan pin digital yang diperlukan untuk menguji modul YL-54 dilakukan melalui :
const int PIN_ANALOG = A0;
const int PIN_DIGITAL = 12;
Perlu diketahui, konstanta A0 identik dengan angka nol.
Khusus untuk pin digital, mode pin perlu diatur sebagai keluaran. Hal ini dilakukan melalui:
Pernyataan berikut di setup ( ) digunakan untuk menginisialisasi port serial:
Serial.begin (9600) ;
Hal ini diperlukan mengingat hasil sensor akan dipantau di PC.
Pembacaan nilai analog dari sensor dibaca melalui:
Int nilaiAnaiog analogRead (PIN ANALOG) ;
Adapun nilai digital dari sensor dibaca melaiui:
int nilaiDigital=digitalRead(PIN_DIGITAL);
Selanjutnya, informasi kedua nilai tersebut dikirim ke port serial melalui pernyataan-pernyataan berikut :
Serial . print (“D0=”);
Serial . print (nilaiDigita1) ;
Serial . print ( “, A0=”);
Serial.println (nilaiAnalog) ;
Untuk keperluan pengujian, Anda perlu menyediakan plaster berwarna hitam terlebih dahulu dan memasangnya di kertas. Lalu, uji dengan menekan Shift+Ctrl+M setelah sketch diunggah. Lalu uji dengan meletakkan sensor di atas plaster hitam atau di luar plaster hitam. Contoh hasil pengujian dapat dilihot ambar 7.18 dan 7.19.
Gambar 7.18 Contoh hasil pengujian sensor TCR5000 YL-54 pada lintasan hitam
Gambar 7.19 Contoh hasil pengujan sensor TCR5000 YL-54 pada lintasan putih