1. Tujuan [Kembali]
- Memenuhi syarat untuk Modul 4 Praktikum Mikroprosesor dan Mikrokontroler
- Membantu mengurangi kontak Tenaga Kesehatan dalam pengisolasian pasien Covid-19
- Membantu mengantar makanan dengan tepat waktu dan efisien.
2. Alat dan Bahan [Kembali]
Nama | Jumlah | Gambar |
---|---|---|
Arduino Pro Mini | 2 pcs | |
Motor DC + Gearbox + Roda | 2 pcs | |
IC L293D | 1 pcs | |
Sensor Warna TCS34725 | 1 pcs | |
Sensor Ultrasonik PING ))) | 3 pcs | |
Spacer 2cm | 12 pcs | |
LED 5mm (merah, biru, hijau) | 1 pcs | |
Buzzer Aktif 5V | 1 pcs | |
Resistor 300R | 3 pcs | |
Block Header | 3 pcs | |
Pinhead Female 1x40p | 2 pcs | |
Pinhead Male 1x40p | 1 pcs | |
LCD 16x2 | 1 pcs | |
Baterai LiOn 18650 | 2 pcs | |
Holder Baterai untuk 2 Baterai | 1 pcs | |
Kabel Serabut 24 AWG | Secukupnya | |
Timah Solder | Secukupnya |
3. Dasar Teori [Kembali]
Arduino Pro Mini
Motor DC
Motor DC adalah motor listrik yang memerlukan suplai tegangan arus searah pada kumparan medan untuk diubah menjadi energi gerak mekanik. Kumparan medan pada motor dc disebut stator (bagian yang tidak berputar) dan kumparan jangkar disebut rotor (bagian yang berputar).
Secara teori, Motor DC adalah Motor listrik yang membutuhkan suplai tegangan arus searah atau arus DC (Direct Current) pada kumparan medan untuk diubah menjadi energi mekanik. Kumparan medan pada motor tersebut disebut stator, dan kumparan jangkar disebut rotor. Pada percobaan ini menggunakan motor DC dengan tipe pompa air.
Driver Motor L293D
IC L293D adalah sirkuit terpadu (IC) dual H-Bridge driver untuk rangkaian motor DC. Driver motor ini bertindak sebagai penguat arus dengan mengambil sinyal kontrol arus rendah dan memberikan output ke sinyal kontrol arus yang lebih tinggi. Sinyal arus yang lebih tinggi ini lah yang digunakan untuk menggerakkan motor.
Sirkuit terpadu IC L293D berisi dua buah sirkuit H-Bridge. Dalam modus umum, dua motor DC dapat digerakkan secara bersamaan, dengan arah gerak motor yang dapat ditentukan. Operasi motor dua motor dapat dikendalikan oleh input logic pada pin 2 & 7 dan 10 & 15. Input logic 00 atau 11 akan menghentikan motor. Input logic 01 dan 10 akan memutar di searah jarum jam atau berlawanan arah jarum jam.
Berikan nilai HIGH pada pin 1 dan 9 (sesuai dengan dua motor) agar motor mulai beroperasi. Ketika pin tersebut diberi nilai HIGH, driver terkait akan diaktifkan. Sebaliknya ketika diberi nilai LOW maka motor akan berhenti.
- Kontrol hingga 2 motor DC
- Arus motor 600mA
- PWM input
- Voltage 5V logic
- DIP pin 16
Sensor Warna TCS34725
Spesifikasi:
- Power supply 3-5v
- Serial interface I2C (SDA SCL)
- Tidak terpengaruh cahaya infrared / IR
- Tahan dari interferensi cahaya
- LED dapat dikendalikan (nyala atau mati)
- Dapat mendeteksi warna obyek dalam kondisi kurang cahaya
- Jarak baca optimum 1 cm
Sensor Ping )))
Berikut adalah visualisasi dari sinyal yang dikirimkan oleh sensor HC-SR04
Nilai jarak dapat diperoleh melalui rumus berikut ini:
Jarak (cm) = Lama Waktu Pantul (uS) / 29.034 / 2
Grafik Respon Sensor:
LCD 16x2
Gambar Penampang komponen penyusun LCD
- Film dengan polarizing filter vertical untuk memolarisasi cahaya yang masuk.
- Glass substrate yang berisi kolom-kolom elektroda Indium tin oxide (ITO).
- Twisted nematic liquid crystal (kristal cair dengan susunan terpilin).
- Glass substrate yang berisi baris-baris elektroda Indium tin oxide (ITO).
- Film dengan polarizing filter horizontal untuk memolarisasi cahaya yang masuk.
- Reflektor cahaya untuk memantulkan cahaya yang masuk LCD kembali ke mata pengamat.
LED
Buzzer
Resistor
Fungsi Resistor
Ada beberapa fungsi dari Resistor yang harus kamu ketahui, yaitu:
- Fungsi resistor yaitu buat membatasi arus listrik yang mengalir.
- Fungsi resistor buat aplikasi DC yang membutuhkan keakuratan yang sangat tinggi. Contoh, aplikasi penggunaan resistor ini yaitu DC Measuring equipment, dan reference gulators buat voltage regulator dan decoding Network.
- Fungsi resistor sebagai standart didalam verifikasi keakuratan dari suatu alat ukur resistive.
- Fungsi resistor buat pengatur tegangan output pada power supplay.
- Fungsi resistor buat aplikasi power, karena membutuhkan frekuensi respon yang baik, daya yang tinggi dan nilai yang lebih besar dari pada power wirewound resistor.
- Fungsi resistor pembagi tegangan.
Karakteristik Resistor
Ada beberapa karakteristik utama pada sebuah resistor, yaitu sebagai berikut:
- Resistansi terhadap daya listrik yang dapat boros
- Koefisien suhu, desah listrik, dan induktansi
- Resistor bersifat resistif
- Terbuat dari bahan karbon
Baterai LiOn 18650
Nama Battery Lithium-Ion (Li-Ion) 18650
– kutub positif battery dari jenis flat top di mana kutub positif battery datar hampir rata dengan body-nya atau
– kutub positif yang terdapat tonjolan kecil (button top) seperti yang terdapat pada kutub positif battery ukuran AA atau AAA.
Tegangan dan kapasitas
4. Flowchart [Kembali]
A. Unit Navigasi
1. Main
2. Subroutines
B. Unit Utama
5. Listing Program [Kembali]
#include <NewPing.h> // Jumlah sensor #define SONAR_NUM 3 // Jarak maksimum (dalam cm) #define MAX_DISTANCE 100 // Perintah #define STOP 0 #define FORWARD 1 #define LEFT 2 #define RIGHT 3 // Objek sensor NewPing sonar[SONAR_NUM] = { /* Parameter: trig, echo, jarak maksimum Karena sensor Ping))) menggabungkan pin trig dan echo Maka pin trig dan echo disamakan */ NewPing(8, 8, MAX_DISTANCE), NewPing(9, 9, MAX_DISTANCE), NewPing(10, 10, MAX_DISTANCE) }; // Variabel perintah yang akan dikirimkan uint8_t command = 0; uint8_t distances[3]; /* * distances[0] -> Sensor depan * distances[1] -> Sensor samping 1 * distances[2] -> Sensor samping 2 */ void setup() { Serial.begin(9600); // membuka komunikasi serial (UART) dengan baudrate 9600bps } void loop() { for (uint8_t i = 0; i < 3; i++) { // Ukur jarak distances[i] = sonar[i].ping_cm(); // Jika jarak melewati batas maksimum, jarak akan sama dengan 0 // Ubah jarak jika sama dengan 0 menjadi jarak maksimum (100cm) distances[i] = (distances[i] == 0) ? 100 : distances[i]; delay(30); } // Hitung perbedaan jarak sensor samping 1 dan 2 int8_t diff = distances[0] - distances[1]; // Cek sensor depan terhalang/tidak terhalang if (distances[2] > 15) { if (abs(diff) > 2) { if (diff > 0) { //kanan command = LEFT; } else { //kiri command = RIGHT; } } else { //lurus command = FORWARD; } } else { // berhenti command = LEFT; } // Kirim perintah ke unit utama Serial.write(command); }
// Libary untuk sensor warna TCS34725 #include <Wire.h> #include "Adafruit_TCS34725.h" // Membuat objek sensor warna Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); // Mendefinisikan konstanta #define in1_R 8 #define in2_R 9 #define en1 10 #define en2 11 #define in1_L 12 #define in2_L 13 #define STOP 0 #define FORWARD 1 #define LEFT 2 #define RIGHT 3 #define LED_R A0 #define LED_G A1 #define LED_B A2 #define BUZZER A3 // Mendeklarasikan variabel uint8_t command; long lastCheck; void setup() { // Mengatur I/O pinMode(in1_L, OUTPUT); pinMode(in2_L, OUTPUT); pinMode(in1_R, OUTPUT); pinMode(in2_R, OUTPUT); pinMode(en1, OUTPUT); pinMode(en2, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); pinMode(BUZZER, OUTPUT); if (!tcs.begin()) while (1); analogWrite(en1, 100); analogWrite(en2, 100); Serial.begin(9600); } void loop() { // Membaca perintah command = Serial.read(); // Mengecek warna if (millis() - lastCheck > 1000) { float red, green, blue; tcs.getRGB(&red, &green, &blue); if (green > 100) { stop(); digitalWrite(LED_R, HIGH); for (int i = 0; i < 5; i++) { digitalWrite(BUZZER, HIGH); delay(100); digitalWrite(BUZZER, LOW); delay(100); } delay(1000); } else if (red > 100) { stop(); digitalWrite(LED_G, HIGH); for (int i = 0; i < 5; i++) { digitalWrite(BUZZER, HIGH); delay(100); digitalWrite(BUZZER, LOW); delay(100); } delay(1000); } else if (blue > 110) { stop(); digitalWrite(LED_B, HIGH); for (int i = 0; i < 5; i++) { digitalWrite(BUZZER, HIGH); delay(100); digitalWrite(BUZZER, LOW); delay(100); } delay(1000); } else { digitalWrite(LED_R, LOW); digitalWrite(LED_G, LOW); digitalWrite(LED_B, LOW); digitalWrite(BUZZER, LOW); } lastCheck = millis(); } // Mengeksekusi perintah switch (command) { case STOP: Serial.println("Berhenti"); stop(); break; case LEFT: Serial.println("Belok Kiri"); turnLeft(); break; case RIGHT: Serial.println("Belok Kanan"); turnRight(); break; case FORWARD: Serial.println("Maju"); forward(); break; } } void turnLeft() { digitalWrite(in1_L, LOW); digitalWrite(in2_L, LOW); digitalWrite(in1_R, LOW); digitalWrite(in2_R, HIGH); } void turnRight() { digitalWrite(in1_L, LOW); digitalWrite(in2_L, HIGH); digitalWrite(in1_R, LOW); digitalWrite(in2_R, LOW); } void stop() { digitalWrite(in1_L, LOW); digitalWrite(in2_L, LOW); digitalWrite(in1_R, LOW); digitalWrite(in2_R, LOW); } void forward() { digitalWrite(in1_L, LOW); digitalWrite(in2_L, HIGH); digitalWrite(in1_R, LOW); digitalWrite(in2_R, HIGH); }
6. Rangkaian Simulasi [Kembali]
A. Unit Navigasi
9. Link Download [Kembali]
Rangkaian Simulasi | Unit Utama - Download Unit Navigasi - Download |
Listing Program | Unit Utama - Download Unit Navigasi - Download |
Library Arduino | NewPing - Download Adafruit_TCS34725 - Download |
HTML | Download |
Datasheet | L293D - Download ATmega328 - Download Sensor Warna TCS34725 - Download Sensor PING))) - Download |
Video | Download |