9. Dasar Pembelajaran Sensor Gas, Api, Cahaya dan Sentuh
Materi:
Pembelajaran arduino kali ini menjelaskan penggunaan beberapa sensor yang mencakup :
Sensor gas;
Sensor api;
Sensor cahaya;
Sensor sentuh.
9.1 Sensor Gas
Salah satu kelompok sensor gas yang terkenal berserikan MQ. Sensor ini berguna untuk keberadaan gas di dalam ruangan tertutup. Beberapa jenis sensor gas diperlihatkan di Tabel 9.1.
Tabel 9.1 Sensor keluarga MQ
Jenis Sensor
KETERANGAN
MQ-2
Sensitif terhadap gas metana, butan, LPG, dan asap rokok
MQ-3
Sensitif terhadap alkohol, etanol, dan asap rokok
Sensitif terhadap gas metana dan CNG
MQ-6
Sensitif terhadap LPG dan gas butan
MQ-7
Sensitif terhadap karbon monoksida
MQ-8
Sensitif terhadap gas hidrogen
MQ-9
Sensitif terhadap gas hidrogen dan gas-gas Iain yang mudah terbakar
MQ-131
Sensitif terhadap gas ozon
MQ-135
Sensitif terhadap benzena, alkohol, dan asap rokok
MQ-136
Sensitif terhadap gas hidrogen dan sulfida
MQ-137
Sensitif terhadap gas amonia
MQ-138
Sensitif terhadap gas benzena, toluene, alkohol, aseton, propane, formaldehida, dan hidrogen
MQ-214
Sensitif terhadap gas metana dan gas alam
MQ-216
Sensitif terhadap gas alam dan gas batubara
MQ-303A
Sensitif terhadap alkohol, etanol, dan asap rokok
MQ-306A
Sensitif terhadap gas LPG dan gas butan
MQ-307A
Sensitif terhadap gas karbon monoksida
MQ-309A
Sensitif terhadap gas karbon monoksida dan gas-gas Iain yang mudah terbakar
Salah satu contoh sensor gas ditunjukkan di Gambar 9.1. Sensor tersebut berguna untuk mendeteksi gas metana, butan, LPG, dan asap rokok. Untuk menghubungkan ke Arduino, ikuti langkah berikut.
VCC milik sensor gas dihubungkan ke pin 5V pada Arduino.
GND milik sensor gas dihubungkan ke pin GND pada Arduino.
D0 milik sensor gas dihubungkan ke pin 12 pada Arduino.
A0 milik sensor gas dihubungkan ke pin A0 pada Arduino.
Contoh ditunjukkan di Gambar 9.2. Dalam hal ini, D0 akan menghasilkan nilai LOW kalau gas melebihiSUatU ambang dan HIGH kalau tidak. Nilai aktual analognya dikeluarkan di A0. Semakin tinggi nilainya berat kebocoran gas semakin banyak. Untuk penentuan keputusan, sebaiknya tidak mendasarkan pada nilai D0 tetapi pada nilai A0.
Untuk menguji rangkaian di atas, gunakan sketch berikut :
Sketch: mq2
// ——————————————–
// Contoh penggunaan sensor MQ-2 untuk mendeteksi gas
// ——————————————–
const int PIN_ANALOG=0;
const int PIN_DIGITAL=12;
void setup()
{
Serial.begin(9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop()
{
int A0=analogRead(PIN_ANALOG);
int d0=digitalRead(PIN_DIGITAL);
Serial.print(d0);
Serial.print(“-“);
Serial.println(A0);
delay(1000);
}
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:
pinMode (PIN_DIGITAL, INPUT) ;
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 A0=analogRead (PIN_ANALOG) ;
Adapun nilai digital dari sensor dibaca melalui:
int d0=digitalRead (PIN_DIGITAL) ;
Selanjutnya, informasi kedua nilai tersebut dikirim ke port serial melalui pernyataan-pernyataan berikut :
Serial.print (d0) ;
Serial.print ( ” – “);
Serial.println (A0) ;
Contoh hasil pengujian diperlihatkan di Gambar 9.3. Nilai yang tinggi diakibatkan oleh percobaan memberikan asap rokok di dekat sensor.
Gambar 9.3 Hasil percobaan menggunakan sensor MQ-2
Contoh di Gambar 9.4 menunjukkan rangkaian yang melibatkan MQ-2 dan dilengkapi dengan LED yang akan menyala kalau gas yang terdeteksi mencapai suatu ambang. Adapun pengujian dilakukan dengan menggunakan sketch mqled.
Gambar 9.4 Rangkaian MQ-2 dilengkapi dengan LED
Sketch: mq2
// ——————————————–
// Contoh penggunaan sensor MQ-2 dengan
// LED sebagai indikator adanya masalah
// ——————————————–
const int PIN LED=12;
const int PIN ANALOG = 0;
const int AMBANG=128;
void setup(){
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
}
void loop() {
{
int A0 = analogRead(PIN ANALOG);
Serial.println(A0);
if (A0 >=AMBANG)
// Berikan peringatan
Serial.print1n(“LED”);
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite (PIN_LED, LOW);
else
delay(500);
}
Sketch di atas mendefinisikan tiga konstanta seperti berikut:
const int PIN_LED = 12;
const int PIN_ANALOG = 0;
const int AMBANG = 128;
Dalam hal ini,
PIN_LED menyatakan pin untuk mengontrol LED;
PIN_ANALOG menyatakan pin untuk membaca data dari sensor;
AMBANG menyatakan nilai untuk menentukan keputusan dalam menyalakan LED atau tidak.
Khusus untuk pin digital, mode pin perlu diatur sebagai keluaran. Hal ini dilakukan melalui:
pinMode (PIN_DIGITAL, INPUT) ;
pernyataan berikut di setup ( ) digunakan untuk menginisialisasi port serial:
Serial.begin (9600) ;
Hal ini diperlukan mengingat hasil sensor akan dipantau di PC. Nilai dari sensor dibaca melalui pernyataan:
int A0=analogRead(PIN ANALOG) ;
Nilainya dikirim ke port serial melalui:
Serial . print In (A0) ;
selanjutnya, pengontrolan untuk menyalakan LED atau tidak ditentukan oleh:
if (A0 >= AMBANG)
{
// Berikan peringatan
Serial.println (“LED”) ;
digitalWrite (PIN LED, HIGH) ;
delay (500) ;
digitalWrite (PIN LED, LOW) ;
}
else
delay (500) ;
LED hanya dinyalakan jika ungkapan A0 >= AMBANG menghasilkan true. Jika ungkapan bernilai false, hanya delay (500) ; yang dijalankan.
9.2 Sensor Api
Sensor api adalah sensor Yang ditujukan untuk mendeteksi api dan radiasi. Sensor ini juga dapat digunakan untuk mendeteksi sumber cahaya dengan panjang gelombang dalam jangkauan 760 nm hingga 1100 nm Contoh sensor ini ditunjukkan di Gambar 9.5. Sensor tersebut mampu mendeteksi dari 20 cm hingga Pada jarak 100 cm. Sumber tegangan yang diperlukan adalah 3,3V — 5 V.
Gambar 9.5 Sensor api
Penggunaan empat pin yang tersedia seperti berikut:
VCC : dihubungkan ke sumber tegangan 3,3V— 5V;
GND : dihubungkan ke ground;
D0 : berisi keluaran digital (HIGH atau LOW); v/ A0 : berisi keluaran analog.
Pembacaan data berturutan paling tidak berjarak 1 milidetik.
Contoh penyusunan rangkaian yang melibatkan sensor api dan Arduino dapat dilihat di Gambar 9.6.
Gambar 9.6 Sensor api dan Arduino
Sketch: flame
// ——————————————–
// Contoh penggunaan sensor api
// ——————————————–
const int PIN_ANALOG = 0;
const int PIN_DIGITAL = 12;
void setup() {
Serial.begin (9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop(){
{
int A0 = analogRead(PIN_ANALOG);
int d0 = digitalRead(PIN_DIGITAL);
Serial.print(d0);
Serial.print(” – “);
Serial.print1n(A0);
delay(1000);
}
Pendifinisan 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:
pinMode (PIN_DIGITAL, INPUT) ;
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 analogRead (PIN_ANALOG) ;
Adapun nilai digital dari sensor dibaca melalui:
int d0 = digitalRead(PIN DIGITAL) ;
Selanjutnya, informasi kedua nilai tersebut dikirim ke port serial melalui pernyataan-pernyataan berikut:
Serial . print (d0) ;
Serial . print ( “ – “ );
Serial.printin (A0) ;
Gambar 9.7 Contoh hasil pengujian sensor api
9-3 Sensor Cahaya
LDR adalah contoh sensor cahaya yang sudah dibicarakan di Subbab 5.6. Selain menggunakan komponen ini secara langsung, modul yang menggunakan LDR, sebagaimana terlihat di Gambar 9.8, bisa digunakan. Modul ini memiliki empat Pin. Dua pin digunakan untuk memberi sumber tegangan (VCC dan GND). Adapun dua pin yang Iain berisi keluaran. Dalam hal ini, A0 berisi data analog dan D0 berisi data digital. Nilai digital 0 (LOW) menyatakan keadaan gelap dan nilai digital 1 (HIGH) menyatakan terang. Adapun nilai di A0 akan berupa nilai tinggi kalau nilai digital berupa O dan rendah kalau nilai digital berupa 1.
Gambar 9.8 Sensor cahaya yang dikemas dalam sebuah modul
penggunaan empat pin yang tersedia adalah:
VCC : dihubungkan ke sumber tegangan 3,3V — 5V;
GND : dihubungkan ke ground;
D0 : berisi keluaran digital (HIGH atau LOW);
A0 : berisi keluaran analog.
Contoh penyusunan rangkaian yang melibatkan sensor cahaya dan Arduino dapat dilihat di Gambar 9.9.
Gambar 9.9 Sensor cahaya dan Arduino
Sketch: light
// ——————————————–
//Contoh penggunaan sensor cahaya
// ——————————————–
const int PIN_ANALOG =0;
const int PIN_DIGITAL= 12;
void setup()
{
Serial.begin(9600);
pinMode (PIN_DIGITAL,INPUT);
}
void loop()
{
int A0 = analogRead(PIN_ANALOG);
int d0 = digitalRead(PIN_DIGITAL);
Serial.print(d0);
Serial.print(“-“);
Serial.println(A0);
delay(1000);
}
Pendefinisian PIN analog dan PIN digital yang diperlukan untuk menguji modul YL-54 dilakukan
const int PIN_ANALOG = A0;
const int PIN_’DIGITAL = 12;
Perfu diketahui, konstanta A0 identik dengan angka nol.
Khusus untuk PIN_digital, mode PIN_perlu diatur sebagai keluaran. Hal ini dilakukan melalui:
pinMode (PIN_DIGITAL, INPUT) ;
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 A0= analogRead(PIN_ANALOG) ;
Adapun nilai digital dari sensor dibaca melalui:
int d0 = digitalRead(PIN_DIGITAL) ;
selanjutnya, informasi kedua nilai tersebut dikirim ke port serial melalui pernyataan-pernyataan berikut:
contoh hasil pengujian sensor cahaya diperlihatkan di Gambar 9.10. Pada contoh tersebut, nilai digital 0 tercapai saat sensor ditutupi dengan tangan.
Gambar 9.9 Hasil Pengujian sensor cahaya
Modul lain yang dapat digunakan untuk mengukur intensitas cahaya adalah GY-30. Bentuk modul ini ditunjukkan di Gambar 9.11. Seperti halnya modul yang dibahas sebelum ini, GY-30 memerlukan tegangan 3,3V – 5,5V. Jangkauan cahaya yang ditangani 0-65535 lx. Perlu diketahui, modul GY-30 menggunakan IC bernama BH1750FVl .
Gambar 9.11 Modul sensor intensitas cahaya GY-30
Penggunaan lima pin yang tersedia seperti berikut:
VCC : dihubungkan ke sumber tegangan 3,3V—5V
GND : dihubungkan ke ground
SCL: 12C clock
SDA : 12C data
ADDR : 12C device address (tak perlu digunakan)
Contoh penyusunan rangkaian yang melibatkan sensor intensitas cahaya dan Arduino dapat dilihat di Gambar 9.12.
Gambar 9.12 Sensor GY-30 dan Arduino
Contoh skrip yang digunakan untuk menguji rangkaian GY-30 dan Arduino:
Sketch: gy_30
// ——————————————–
//Contoh pemakaian sensor GY-30
// untuk mengukur intensitas cahaya
// ——————————————–
#include <Wire.h>
const int ADDR = 0x23; // Alamat untuk BH1750FVI
void setup()
{
// Inisialisasi port serial
Serial.begin (9600);
// Inisialisasi terhadap chip BH1750FVI
Wire.begin();
Wire.beginTransmission (ADDR);
Wire.write(0x01); // Power on
Wire.endTransmission();
}
void loop()
{
// Reset chip BH1750FVI
wire.beginTransmission(ADDR);
wire.write(0x07); // Reset
wire.endTransmission();
// Atur resolusi pengukuran
wire.beginTransmission(ADDR);
wire.write(0x20); // One Time H Resolution mode
wire.endTransmission();
delay(120); // Tunda 120 milidetik
// Baca data
wire.beginTransmission(ADDR);
wire.requestFrom(ADDR, 2);// Permintaan 2 byte per waktu
int nilai=0;
while (Wire.available())
{
char c=Wire.read();
nilai = (nilai <<8) + c;
}
Wire.endTransmission();
// Sesuaikan dengan faktor akurasi pengukuran:1,2
nilai=nilai / 1.2;
// Tampilkan intensitas terukur
Serial.print(“Intensitas cahaya:”);
Serial.print (nilai);
Serial.println(” 1ux”);
delay(100);
}
Sketch di atas melibatkan pustaka Arduino bernama Wire. Pustaka ini digunakan untuk menangani komunikasi 12C (Inter-Integrated Circuit), yang memungkinkan pertukaran informasi antar-lCe Itulah sebabnya, terdapat perintah:
#include <Wire.h>
supaya Arduino bisa berkomunikasi dengan IC BH1750FVl, yang terdapat di modul GY-3, perlu pengaturan seperti berikut:
pin SDA milik modul GY-30 perlu dihubungkan ke pin analog 4 (pin A4);
pin SCL milik modul GY-30 perlu dihubungkan ke pin analog 5 (pin A5).
Definisi konstanta ADDR dilakukan melalui:
const int ADDR = 0x23;
Angka 0x23 (23 heksadesimal) menyatakan alamat untuk IC BH1750FVl.
Pernyataan berikut di setup ( ) digunakan untuk menginisialisasi port serial:
Serial.begin (9600) ;
Hal ini diperlukan mengingat hasil sensor akan dipantau di PC.
Pernyataan
Wire.begin() ;
perlu dipanggil sekali kalau mau menggunakan komunikasi 12C. Selanjutnya,
Wire.beginTransmission (ADDR) ;
Wire.write (0x01 ) ;
Wire.endTransmission ( ) ;
merupakan rangkaian perintah untuk memberikan instruksi Power On pada IC agar siap melakukan pengukuran. Instruksi Power On sebenarnya dilakukan oleh
Wire.write (0x01) ;
Namun, sebelum pengiriman instruksi tersebut dilakukan, perlu pemanggilan:
Wire.beginTransmission (ADDR) ;
Pernyataan beginTransmission ( ) digunakan untuk menyatakan peranti yang akan diajak berkomunikasi oleh Arduino. Argumennya menyatakan peranti yang diajak berkomunikasi. Setelah itu barulah instruksi ke peranti bersangkutan dapat dilakukan. Setelah perintah diberikan, akhir pengiriman perlu diberitahukan. Hal ini dilaksanakan melalui:
Wire.endTransmission ( ) ;
Di fungsi loop ( ) , deretan pernyataan berikut digunakan untuk mengirimkan instruksi Reset ke modulGY-30
Wire.beginTransmission (ADDR) ;
Wire.write (0x07) ;
Wire.endTransmission
Fungsi instruksi Reset adalah untuk membuang hasil pengukuran sebelumnya.
selanjutnya,
Wire.beginTransmission (ADDR) ;
Wire. write (Ox20) ;
Wire. endTransmission ( ) ;
digunakan untuk mengirimkan instruksi pengukuran intensitas cahaya dengan resolusi sebesar 1 Ix. pada mode ini, pengukuran memerlukan waktu 120 milidetik. Perlu diketahui, mode ini akan membuat Power D0wn di IC BH1750FVl diaktifkan. ltulah sebabnya, pada permintaan pengukuran berikutnya, instruksi Power on harus diberikan.
Data yang telah dibaca oleh sensor masih berada di sensor. Agar data tersebut dikirim ke Arduino, perlu dilakukan pengiriman instruksi berikut:
Menyatakan bahwa permintaan data sebesar dua bye. Dua byte tersebut menyatakan nilai aktual intensitas cahaya yang telah terukur. Jika kedua byte dirangkai akan terbentuk seperti terlihat di Gambar 9.13. menyatakan bahwa permintaan data sebesar dua byte. Dua byte Nilai intensitas cahaya yang dilukiskan di Gambar 9.13 diperoleh melalui:
int nilai = 0;
while(Wire. available ( ) )
{
char c —— Wire. read() ;
nilai = (nilai << 8) + c;
}
Dalam hal ini, variabel nil ai menyatakan nilai intensitas cahaya.
Selanjutnya, seperti biasa, komunikasi 12C perlu ditutup dengan:
Wire.endTransmission ( ) ;
Terakhir, menurut datasheet dari ROHM Semiconductor, nilai yang diperoleh di depan perlu dibagi dengan 1,2. ltulah sebabnya, di sketch terdapat pernyataan berikut:
nilai = nilai / 1.2;
Nilai 1,2 adalah faktor akurasi pengukuran.
Gambar 9.14 memperlihatkan contoh hasil pengujian pengukuran intensitas cahaya. Anda bisa menguji sensor dengan menyorotkan lampu untuk melihat pengaruh intensitas yang tinggi atau memadamkan lampu untuk melihat kalau tak ada cahaya.
Contoh di Gambar 9.15 memperlihatkan rangkaian yang melibatkan modul GY-30 dan LED. Dalam hal ini’ dikehendaki agar LED akan dinyalakan manakala intensitas cahaya sangat rendah. Gambar 9.16 menunjUkkan contoh aktual rangkaian untuk pengujian.
Gambar 9.15 Rangkaian pengatur LED dengan sensor intensitas cahaya
Gambar 9.16 Contoh aktual rangkaian pengatur LED dengan sensor intensitas cahaya
Sketch yang diperlukan untuk menguji seperti berikut:
Sketch: ledgy30
// ——————————————–
// Contoh pemakaian sensor GY-30
// untuk mengukur intensitas cahaya
// dan mengontrol LED
// ——————————————–
#include <Wire.h>
const int ADDR = 0x23; // Alamat untuk BH1750FVI
const int AMBANG=3; // Ambang kegelapan
const int PIN_LED=12;(
void setup()
{
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
// Inisialisasi terhadap chip BH1750FVI
Wire.begin();
Wire.beginTransmission (ADDR);
Wire.write(0x01); // Power on
Wire.endTransmission();
}
void loop()
{
// Reset chip BH1750FVI
Wire.beginTransmission(ADDR);
Wire.write(0x07);// Reset
Wire.endTransmission();
Wire.beginTransmission(ADDR);
Wire.write(0x20); // One Time H Resolution mode
Wire.endTransmission();
delay (120); // Tunda 120 milidetik
//Baca data
Wire.beginTransmission(ADDR);
Wire.requestFrom(ADDR, 2); // Permintaan 2 byte pe
int nilai=0;
while Wire.available())
{
char c=Wire.read();
nilai =(nilai << 8) + c;
}
Wire.endTransmission();
//Sesuaikan dengan faktor akurasi pengukuran: 1,2
nilai =nilai /1.2;
// Kontrol LED hidup atau mati
if (nilai < AMBANG)
digitalWrite(PIN_LED,HIGH);
else
digitalWrite(PIN_LED,LOW);
Serial.println(nilai);
delay(100);
}
Pengontrolan LED dilakukan melalui kode:
// Kontrol LED hidup atau mati
if (nilai < AMBANG)
digitalWrite (PIN LED, HIGH) ;
else
digitalWrite (PIN LED, LOW) ;
Jika ungkapan nil ai < AMBANG bernilai true, LED akan dinyalakan, sedangkan jika ungkapan tersebut bernilai false, LED dimatikan. Perlu diketahui, nilai AMBANG diatur di:
const int AMBANG= 3;
Untuk menyalakan LED, cobalah matikan lampu di ruangan tempat Anda menguji.
9.4 Sensor Sentuh
Sensor sentuh (touch sensor) adalah sensor yang bekerja atas dasar sentuhan. Contoh sensor ini ditunjukkan di Gambar 9.17. Sensor mengandung 3 pin.
VCC dihubungkan ke sumber tegangan 3,3V 5V.
GND dihubungkan ke ground.
SIG berupa keluaran digital: HIGH (1) kalau bagian sentuhan tidak disentuh atau LOW (0) kalau disentuh.
Gambar 9.17 Sensor sentuh
Contoh penyusunan rangkaian yang melibatkan sensor sentuh dan Arduino dapat dilihat di Gambar 9.18
Gambar 9.18 Sensor sentuh dan Arduino
Contoh sketch yang digunakan untuk menguji rangkaian sensor sentuh dan Arduino:
Sketch: touch
// ——————————————–
// Contoh penggunaan sensor sentuh
// ——————————————–
const int PIN_DIGITAL = 12;
void setup()
{
Serial.begin (9600);
pinMode (PIN_DIGITAL,INPUT);
}
void loop()
{
int d0 = digitalRead(PIN_DIGITAL);
Serial.println(d0);
delay(100);
}
Tampak bahwa pembacaan data cukup dilakukan dengan memberikan perintah:
int d0 = digitalRead(PIN_DIGITAL) ;
Gambar 9.19 memperlihatkan contoh pengujiannya.
Gambar 9.19 Hasil pengujian sensor sentuh
Contoh di Gambar 9.20 memperlihatkan rangkaian yang melibatkan saklar sentuh dan LED. Dalam hal ini, dikehendaki untuk menjadikan saklar sentuh sebagai tombol untuk mematikan atau menyalakan LED. Contoh implementasi diperlihatkan di Gambar 9.21.
Gambar 9.20 Rangkaian sensor sentuh untuk mengendalikan LED
Sketch yang diperlukan adalah :
Sketch: touchled
// ——————————————–
//Contoh penggunaan sensor sentuh
// untuk menghidupkan atau
// mematikan LED
// ——————————————–
const int PIN_SENTUH=12;
const int PIN_LED =11;
const int INTERVAL =200;
int keadaanSebelum = LOW;
long waktuTerakhir=0;
void setup()
{
pinMode(PIN_SENTUH, INPUT);
pinMode(PIN_LED, OUTPUT);
waktuTerakhir = millis();
}
void loop()
{
int d0 = digitalRead(PIN_SENTUH);
long waktuSekarang = millis();
if ((d0 == 0) && (abs(waktuSekarang – waktuTerakhir) > INTERVAL))
{
int statusLedSekarang = not keadaanSebelum;
keadaanSebelum = statusLedSekarang;
// Menyalakan/mematikan LED
digitalWrite(PIN_LED, statusLedSekarang) ;
waktuTerakhir = waktuSekarang;
delay(10); //Tunda untuk pembacaan nilai sensor berikutnya
}
sketch di atas mendefinisikan tiga konstanta seperti berikut:
const int PIN_SENTUH = 12; const int PIN_LED = 11; const int INTERVAL = 200 ;
Dalam hal ini,
PIN SENTUH menyatakan pin yang digunakan untuk menerima data dari sensor;
PIN LED menyatakan pin yang digunakan untuk mengontrol LED;
INTERVAL menyatakan selang waktu yang akan digunakan sebagai batas antara dua sentuhan pada sensor. Hal ini diperlukan karena ketika sensor disentuh terjadi keadaan yang memantul (dari keadaan HIGH ke LOW secara bergantian) untuk beberapa saat.
Dua pernyataan berikut digunakan untuk mendeklarasikan variabel keadaanSebelum dan waktuTerakhir dan sekaligus memberikan nilai awal:
int keadaanSebe1um = LOW; long waktuTerakhir = 0 ;
Kegunaan variabel masing-masing adalah:
Variabel keadaanSebe1um digunakan untuk mencatat keadaan LED pada masa sebelum sekarang.
Awalnya akan diisi dengan LOW, yang menyatakan LED mati.
Variabel waktuAwa1 digunakan untuk mencatat waktu saat LED mulai dinyalakan. Nilai inilah yang akan dipakai sebagai acuan untuk mematikan LED sekiranya selisih antara waktu sekarang dan waktuAwa1 melebihi INTERVAL.
Sesuai dengan fungsi masing-masing, PIN SENTUH mempunyai mode INPUT dan PIN LED sebagai OUTPUT. Pengaturannya dilakukan di fungsi setup ( ) melalui:
Di setup ( ) pula, variabel waktuAwal diisi dengan nilai balik millis ( ) , yang berupa suatu nilai yang menyatakan lama waktu semenjak sketch dijalankan hingga sekarang dalam satuan milidetik.
Di fungsi loop ( ) , pembacaan data dari sensor sentuh dilakukan melalui pernyataan:
int d0 digitalRead (PIN_SENTUH) ;
Nilai yang tersimpan di variabel d0 berupa nilai HIGH atau LOW.
Pernyataan berikut digunakan untuk mencatat nilai dari millis ( ) ke variabel waktuSekarang:
long waktuSekarang millis ( ) ;
Kemudian, jika nilai nilai d0 dalam keadaan HIGH (yang berarti sensor disentuh), absolut selisih nilai di waktuSekarang dan waktuAwa1 dibandingkan dengan nilai INTERVAL. Jika ungkapan
abs (waktuSekarang — waktuTerakhir) > INTERVAL)
bernilai benar, beberapa hal berikut diproses.
Nilai di statusLedSekarang diisi dengan kebalikan nilai di keadaanSebelum.
int statusLedSekarang = not keadaanSebelum;
Sekiranya keadaansebelum berupa HIGH, statusLedSekarang berisi LOW. Sebaliknya, keadaanSebe1um berupa LOW, statusLedSekarang berisi HIGH.
Nilai keadaanSebelum diisi dengan nilai statusLedSekarang.
LED dinyalakan atau dimatikan tergantung pada isi variabel statusLedSekarang. Jika’ statusLedSekarang berisi LOW, LED akan mati. Sebaliknya, apabila statusLedSekarang berisi HIGH, LED akan menyala.