Description

7. Proyek Lain Lain dengan Microcontroller Arduino

7. PROYEK LAIN-LAIN DENGAN MICROCONTROLLER ARDUINO

Pada bagian ini akan dibahas beberapa proyek yang mungkin tidak bisa dikelompokkan menjadi satu bagian khusus, sehingga dinamakan proyek Iain-Iain. Adapun pembahasannya meliputi sensor getaran (vibration sensor), potensiometer digital (rotary encoder) dan sensor pendeteksi warna (colorsensor). Semoga dari pembahasan ini bisa menjadi ide dasar untuk mengembangkan proyek lanjutan yang lebih kompleks.

7.1 Pendeteksi Getaran Dengan Sensor Vibration SW-420

Sensor vibration SW-420 adalah sensor untuk mendeteksi getaran yang mengenai sensor vibration. Adapun modul sensor vibration SW-420 tampak seperti Gambar 7.1. Module sensor terdiri pin VCC yang dihubungkan ke VCC Arduino, pin GND dihubungkan ke GND Arduino dan pin DO (Digital Out) dihubungkan ke pin digital Arduino (posisi bebas, tergantung penentuan di kode programnya).

Gambar 7.1 Sensor Getar SW-420

Skenario proyek yang akan dibuat sederhana saja, yaitu ketika sensor getar mendapat aksi getaran disekitarnya maka LED akan menyala dengan sendirinya.

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
Sensor Vibration SW-420 1 pcs Description
Resistor 1 pcs 220 ohm
LED 5MM 1 pcs

Diagram Sketch

Description

Rangkai module sensor getar seperti pada diagram sketch. Module sensor getar terdiri pin VCC yang dihubungkan ke VCC Arduino, pin GND dihubungkan ke GND Arduino dan pin DO (Digital Out) dihubungkan ke pin D9 Arduino.

Kode Program

int vib_pin = 9; // pin sensor vibration

int led_pin = 8; // pin LED

void setup() {

pinMode(vib_pin, INPUT);

pinMode(led_pin, OUTPUT);

}

void loop() {

int val = digitalRead(vib_pin);

if(val ==1)

{

// Jika terdeteksi getaran

digitalwrite(led_pin, HIGH);

delay(1000);

digitalwrite(1ed_pin, LOW);

delay(1000);

} else

digitalwrite(1ed_pin, LOW);

}

Adapun hasil akhir proyek kurang lebih tampak pada Gambar 7.2

Description

Description

    1. Digital Potensiometer (Rotary Encoder)

Prinsip kerja rotary encoder serupa dengan potensiometer analog, tetapi rotary encoder berkerja secara digital. Rotary encoder dapat berputar ke kanan atau ke kiri tanpa batasan berhenti, tidak seperti potensiometer analog yang memiliki keterbatasan putaran (Gambar 7.5). Rotary encoder bisa pula difungsikan sebagai tombol push button. Untuk mengetahui lebih detil bagaimana prinsip kerja rotary encoder, silahkan kunjungi https://howtomechatronics.com/ tutorials/Arduino/rotary-encoder-works-use-Arduino/.

Terdapat dua macam encoder yang banyak beredar, yaitu rotary encoder itu sendiri dan modul rotary encoder yang telah disertai dengan resistor pull-up’ seperti tampak pada Gambar 7.3 dan Gambar 7.4.Jika Anda hanya menggunakan rotary encoder tanpa modul, maka Anda harus menambahkan dua resitor pull-up dengan skema seperti tampak pada Gambar 7.6

Gambar 7.4. Modul Gambar 7.5. Modul
Gambar 7.3. Rotary Encoder Rotary Encoder (Digital Rotary Encoder (Analog
(Digital Potensiometer) Potensiometer) Potensiometer)

Gambar 7.6 Rotary Encoder Disertai 2 Resistor Pull-Up 10K Ohm

Rotary encoder memiliki 5 kaki yang terdiri dari CLD (Clock), DT (Data), SW (Switch/Skalar), VCC dan GND.

Skenario proyek adalah menghidupkan LED yang terkesan berjalan dari kiri ke kanan atau sebaliknya, dimana hanya satu LED dari enam LED yang bisa menyala. Jika LED yang menyala berada di posisi paling kanan (LED 6), sedangkan rotary terus diputar ke kanan, maka LED akan menyala dari urutan pertama lagi. Sebaliknya jika LED yang menyala di posisi paling kiri (LED 1), sedangkan rotary terus diputar ke kiri, maka LED akan menyala dari urutan keenam. Jika rotary encoder ditekan atau difungsikan sebagai tombol saklar, maka semua LED akan menyala secara berlahan dari kiri ke kanan dan mati secara berlahan dari kanan ke kiri.

Kebutuhan Bahan

Bahan Jumlah Nilai

Keterangan

Modul Rotary Encoder 1 pcs
Res;stor 6 pcs 330 ohm
LED SMM 6 pcs

Diagram Sketch

Kode program membutuhkan library rotary encoder Rotary.h yang dapat di download di https://github.com/brianIow/Rotary dan library Button.h yang dapat di download https://github.com/JChristensen/JC_Button. Kemudian install kedua library dari menu Sketch Include Library Add .ZIP Library Arduino seperti cara sebelumnya.

Kode Program

#include <JC_Button.h>

#include <Rotary.h>

#define pinCLK 2 #define pinDT 3 #define pinSW 4

Button tombolSW(pinSW);

Rotary r= Rotary(pinCLK,pinDT);

uint8_t urutan=1;

void setup() {

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

digitalwrite(5, HIGH);

tombolsw.begin();

}

void loop() {

// Rotary encoder sebagai saklar push button

tombolsw.read();

if (tombolSW.wasReleased())

{

// Matikan semua LED

for (int i = 5; i <= 10;i++) {

digitalwrite(i, LOW);

}

delay(2000);

}

// Hidupkan semua LED dari kiri ke kanan

for (int i =5; i<=10;i++){

digitalwrite(i, HIGH);

delay(200);

}

delay(1000); // tunda 1 detik

// Matikan semua LED dari kanan ke kiri

for(int i=10;i>=5;i–){

digitalwrite(i, LOW);

delay(200);

}

delay(1000); // tunda 2 detik

// Hanya menghidupkan LED pertama

digitalwrite(5, HIGH);

urutan=1;

}

unsigned char result = r.process();

if (result m= DIR_CW){

// putar kanan

if (urutan <= 6) {

urutan++; // tambahkan urutan dengan 1

}else {

urutan =1; // kembalikan ke urutan 1

} else if (result==DIR_CCW){

// putar kiri (DIR_CCW)

if(urutan >=1){

urutan–; // kurangi urutan dengan 1

}else{

urutan = 6; // kembalika ke urutan 6

}

}

LEDHidup(urutan); // panggil fungsi LEDHidup

}

void LEDHidup(uint8_t item){

for(int i=5;i<=10;i++){

digitalwrite(i, LOW); // matikan semua LED

}

// item ditambah 4 karena pin LED dimulai dari 5

// hidupkan LED ini saja

digitalwrite(item + 4, HIGH);

}

Hasil akhir proyek sepert tampak pada Gambar 7.7

Description

Gambar 7.7 Hasil Akhir Proyek Rotary Encoder

7.3 Pendeteksi Warna Dengan Color Sensor TCS230/TCS3200

Sensor warna TCS230/TCS3200 bekerja dengan bantuan array 8×8 photodiodes. Kemudian dari pembacaan dioda tersebut dikonversi (arus-ke-frekuensi) menjadi gelombang digital dengan frekuensi berbanding lurus terhadap intensitas cahaya. Akhirnya Arduino akan membaca output gelombang persegi

tersebut menjadi warna yang dideteksi. Sebagai ilustrasi tampak pada Gambar 7.8

Description

Gambar 7.8 Cara Kerja Sensor Warna TCS3200

Jika sensor TCS3200 dilihat dari dekat maka akan tampak sensor memiliki tiga jenis photodiode yang berbeda warna, terdiri dari 16 filter warna hijau, 16 filter warna biru, 16 filter warna merah serta 16 tak berwarna (tanpa filter) seperti tampak pada Gambar 7.9.

Gambar 7.9 Inti Sensor TCS3200 (Sumber: https://howtomechatronics.com/)

Setiap 16 photodiodes terhubung secara paralel, jadi dengan menggunakan dua pin kontrol S2 dan S3 kita dapat memilih mana dari mereka yang akan dibaca. Jika kita ingin mendeteksi warna merah, maKa kita bisa menggunakan 16 foto merah yang difilter dengan menyetel dua pin S2/S3 ke tingkat logika LOW sesuai dengan tabel di bawah ini.

S0 S1 Penskalaan Output Freq.
LOW LOW Power Down
LOW HIGH 2%
HIGH LOW 20%
HIGH HIGH 100%
S2 S3 Jenis Photodiode
LOW LOW Merah
LOW HIGH Biru
HIGH LOW Clear
HIGH HIGH Hijau

Sensor TCS3200 memiliki dua pin kontrol, SO dan Sl yang digunakan untuk menskalakan frekuensi output. Frekuensi dapat diskalakan ke tiga nilai preset yang berbeda dari 100%, 20% atau 2%. Fungsi penskalaan frekuensi ini

memungkinkan keluaran sensor dioptimalkan untuk berbagai penghitung frekuensi atau mikrokontroler.

Kita akan membuat proyek sensor warna TCS3200 sederhana yaitu bagaimana menampilkan nilai komposisi warna RGB (Merah, Hijau, Biru) dari warna yang terdeteksi dengan Skala 0 sampai 255, kemudian nilai tersebut akan ditampilkan ke Serial Monitor. Sebagai bahan pengujian, kita perlu mencetak beberapa warna berbeda pada kertas A4 untuk dideteksi oleh sensor warna TCS3200. Anda dapat memperolehnya di https://www.materialpalette.com/ seperti tampak pada Gambar 7.10.

Gambar 7.10 Contoh Warna (Sumber: https://www.materialpalette.com/)

Kebutuhan Bahan

Bahan Jumiah Nilai Keterangan
Modul Sensor Warna TCS3200 1 pcs
Modul LCD 16×2 1 pcs

Description

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define S0 4

#define S1 5

#define S2 6

#define S3 7

#define sensorOut 8

// Inisialisasi library

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

unsigned int merahFreq = 0, hijauFreq = 0, biruFreq =0;

void setup(){

lcd.init(); // Inisialisasi LCD

lcd.backlight(); // Menghidupkan backlight

pinMode(S0, OUTPUT);

pinMode(S1, OUTPUT);

pinMode(S2, OUTPUT);

pinMode(S3, OUTPUT);

pinMode(sensorOut,INPUT);

// Pensklaan frekwensi menjadi 20%

digitalwrite(Sø, HIGH);

digitalwrite(S1, LOW);

Serial.begin(9600);

}

void loop(){

// Pengaturan photodiode filter warna merah

digitalwrite(S2, LOW);

digitalwrite(S3, LOW);

// Membaca frekwensi output

merahFreq = pulseIn(sensorOut, LOW, 25000) / 2;

// Pengaturan photodiode filter warna hijau

digitalwrite(S2, HIGH);

digitalwrite(S3, HIGH);

// Membaca frekwensi output

hijauFreq = pulseIn(sensorout, LOW, 25000) /2;

// Pengaturan photodiode filter warna biru

digitalwrite(S2, LOW);

digitalwrite(S3, HIGH);

// Membaca frekwensi output

biruFreq = pulseIn(sensorout, LOW, 25000)/ 2;

// Printing the value on the serial monitor

Serial.println(“R=”+ String(merahFreq) +“ G=”+ String(hijauFreq)+“B=”+

String(biruFreq));

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Komposisi Warna”);

Icd.setCursor(θ,1);

lcd.print(“M=”+String(merahFreq)+“H=”+ String(hijauFreq)+“B=”+

String(biruFreq));

delay(1000);

}

Selanjutnya jalankan programnya untuk melakukan kalibrasi warna. Perhatikan hasil di layar Serial Monitor. Ambil contoh warna biru saja, maka akan terlihat nilai terendah dan tertinggi seiring dengan perubahan jarak antara sensor dengan objek warna yang dideteksi.

Description

Dari sini Anda melakukan kalibrasi dan pengskalaan nilai frekwensi warna menjadi nilai RGB (0 sampai 255). Caranya dengan mengambil nilai terkecil mendekati 0 dan nilai terbesar mendekati 255 pada setiap warna dasar (RGB = merah, hijau, biru). Contoh: nilai frekwensi terbesar yaitu 193 berkorespondesi terhadap nilai 0 dan nilai frekwensi terkecil yaitu 93 berkorespondensi terhadap nilai 255, sehingga map-nya menjadi warnaBiru = map(biruFreq, 93, 193, 255, 0);

Lakukan cara yang sama untuk warna merah dan warna hijau, seperti tampak pada Gambar 7.13.

Description

Berikut ini kode program setelah dilakukan mapping warna dari nilai frekwensi menjadi nilai RGB antara 0 sampai 255.

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define S0 4

#define S1 5

#define S2 6

#define S3 7

#define sensorOut 8

// Inisialisasi library

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

unsigned int merahFreq = 0, hijauFreq = 0, biruFreq = 0;

unsigned int warnaMerah = 0, warnaHijau =0, warnaBiru = 0;

void setup(){

lcd.init(); // Inisialisasi LCD

lcd.backlight(); // Menghidupkan backlight

pinMode(S0, OUTPUT);

pinMode(S1, OUTPUT);

pinMode(S2, OUTPUT);

pinMode(S3, OUTPUT);

pinMode(sensorout, INPUT);

// Pensklaan frekwensi menjadi 20%

digitalwrite(S0, HIGH);

digitalwrite(S1, LOW);

Serial.begin(9600);

}

void loop() {

// Pengaturan photodiode filter warna merah

digitalwrite(52, LOW);

digitalwrite(S3, LOW);

// Membaca frekwensi output

merahFreq = pulseIn(sensorOut, LOW, 25000) / 2;

// lakukan kalibrasi warna merah

// nilai map pasti berbeda

warnaMerah = map(merahFreq, 74, 250, 255,0);

// Pengaturan photodiode flter warna hijau

digitalwrite(S2, HIGH);

digitalwrite(S3, HIGH);

// Membaca frekwensi output

hijauFreq = pulseIn(sensorout, LOW, 25000) / 2;

// lakukan kalibrasi warna hijau

// nilai map pasti berbeda

warnaHijau = map(hijauFreq, 102, 245, 255, θ);

// Pengaturan photodiode filter warna biru

digitalwrite(S2, LOW);

digitalwrite(S3, HIGH);

// Membaca frekwensi output

biruFreq = pulseIn(sensorOut, LOW, 25000) / 2;

// lakukan kalibrasi warna biru

// nilai map pasti berbeda

warnaBiru = map(biruFreq, 127, 254, 255, θ);

// Printing the value on the serial monitor

Serial.println(“Ra” + String(warnaMerah) +“ G=” + String(warnaHijau) +“ B=”

+String(warnaBiru));

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(“Komposisi Warna”);

lcd.setCursor(0, 1);

lcd.print(“M=”+ String(warnaMerah) +“ H=”+ String(warnaHijau)+“B=”+ String(warnaBiru));

delay(1000);

}

Adapun hasil akhir proyek tampak seperti pada Gambar 7.14

Description

 

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.