Buat Robot Arduino Pertama Anda: Panduan Lengkap untuk Pemula
Tentang Proyek Ini
Jika Anda pemula di Arduino dan berencana membuat robot pertama Anda, maka inilah tutorial untuk Anda. Lihat gambar dari apa yang akan Anda bangun, hari ini.
Dalam tutorial ini, saya akan menunjukkan cara membuat robot Arduino dengan berbagai fungsi. Kita dapat mempelajari penggunaan berbagai program untuk berbagai fungsi, terutama robot yang dikontrol ponsel pintar dengan penghindar rintangan, pengikut dinding, dan penyelesaian labirin. Atau Anda juga dapat membuatnya hanya untuk satu fungsi saja.
Bahan dan Alat
Berikut adalah komponen yang dibutuhkan:
- Arduino UNO
- Adafruit L293D Motor Shield
- Sensor Ultrasonik HC-SR04
- Modul Bluetooth HC-05
- Motor gear (2 unit)
- Roda (2 unit)
- Roda pelindung/caster wheel (2 unit)
- Baterai 9V (3 unit)
- Klips baterai 9V (3 unit)
- Kabel jumper Female/Female (8 unit)
- Kotak plastik
Langkah 2: Membuat Chassis
Buat dua lubang untuk motor. Hubungkan dua motor. Buat tiga lubang untuk roda pelindung. Hubungkan roda pelindung. Buat dua lubang di setiap sisi kotak untuk menghubungkan motor dan tiga lubang di bawah untuk menghubungkan roda pelindung setelah mengukur dan menandai diameter yang benar. Kemudian pasang motor dan roda pelindung.
Baterai
Hubungkan baterai. Tempelkan baterai di dalam kotak di atas roda pelindung. Kemudian sambungkan secara paralel dan hubungkan saklar seperti yang ditunjukkan dalam diagram di atas.
Menghubungkan Arduino dan Motor Shield
Pasang motor shield di atas Arduino. Hubungkan kabel baterai ke terminal PWR motor shield. Hubungkan motor ke motor shield. Lepaskan jumper dari port ini. Pasang motor shield di atas Arduino dan letakkan di atas baterai. Kemudian sambungkan kabel dari motor dan baterai ke motor shield. Periksa diagram koneksi sebelum menghubungkan, karena ini sangat penting.
Instruksi kabeling:
- Hubungkan motor kiri ke "M1" motor shield
- Hubungkan motor kanan ke "M3" motor shield
- Hubungkan kabel dari baterai ke "ext pwr" motor shield
Buat Dua Lubang dan Aktifkan Arduino
Tandai tempat untuk membuat lubang. Buat lubang. Hubungkan klips baterai ke jack DC macho ke baterai 9V. Letakkan baterai 9 volt ini di dalam kotak. Buat dua lubang untuk mengakses port USB dan port input DC Arduino. Ambil baterai 9 volt lain dan sambungkan klips baterai ke adaptor jack DC macho, lalu sambungkan jack DC macho ke port input DC Arduino, untuk menyala Arduino. Kemudian letakkan baterai di antara motor dan Arduino di dalam kotak.
Menghubungkan Modul Bluetooth dan Saklar
Hubungkan modul Bluetooth ke Arduino seperti yang ditunjukkan dalam diagram koneksi dan letakkan di dalam kotak. Kemudian buat lubang untuk memasang saklar di sisi belakang kotak dan sambungkan saklar.
Instruksi Kabeling Modul Bluetooth:
- "TX" Modul Bluetooth ke "RX" Arduino
- "RX" Modul Bluetooth ke "TX" Arduino
- "VCC" Modul Bluetooth ke "5v" Arduino
- "GND" Modul Bluetooth ke "GND" Arduino
- Pin State & Key modul BT tidak digunakan.
Diagram Sirkuit Keseluruhan
Pemasangan Sensor Ultrasonik
Ambil sensor ultrasonik dan tempelkan potongan plastik kecil berbentuk 'L' padanya dan tempelkan di atas kotak plastik (atau jika Anda tidak memiliki lem stik, gunakan lem double sided). Kemudian sambungkan kabel jumper seperti yang ditunjukkan dalam diagram sirkuit di atas.
Instruksi Kabeling Sensor Ultrasonik:
- "VCC" sensor ultrasonik ke "+5" Arduino
- "GND" sensor ultrasonik ke "GND" Arduino
- Pin "Trig" sensor ultrasonik ke "Pin Analog 1" Arduino
- Pin "Echo" sensor ultrasonik ke "Pin Analog 0" Arduino
Sekarang kami telah menyelesaikan semua koneksi dan saatnya untuk memrogram.
Langkah Terakhir - Kode Arduino dan Pengeditan Aplikasi Bluetooth
Unggah "Final Sketch" yang disediakan di bagian kode. Jika Anda mengalami kesalahan, pastikan Anda telah menginstal perpustakaan AFmotor.
Sekarang, kami telah mempelajari cara memrogram Arduino dengan mudah. Saya telah menunjukkan beberapa program untuk membuat robot ini sebagai robot penghindar rintangan, pengikut dinding, dan dikontrol Bluetooth. Dan akhirnya saya menggabungkan ketiga fungsi ini bersama-sama. Tonton video untuk detail dan informasi lebih lanjut.
Memulai dengan Aplikasi Bluetooth
Beberapa kesenangan dengan Wall Follower & Obstacle Avoidance
Kunjungi blog saya di sini - robotechmaker.com
Jika Anda memiliki pertanyaan atau saran, silakan berkomentar di bawah.
Kode
Bluetooth (Controlled Robot) Sketch
/* Author: Marcelo Moraes */
#include <AFMotor.h>
AF_DCMotor motorRight(1, MOTOR12_64KHZ);
AF_DCMotor motorLeft(3, MOTOR12_64KHZ);
char dataIn = 'S';
char determinant;
char det;
int vel = 0;
void setup() {
Serial.begin(9600);
Serial.println("ArduinoBymyself - ROVERBot");
Serial.println(" AF Motor test!");
motorRight.setSpeed(0);
motorLeft.setSpeed(0);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
}
void loop() {
det = check();
switch (det) {
case 'F': motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det = check(); break;
case 'B': motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det = check(); break;
case 'L': motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(FORWARD); motorLeft.run(FORWARD); det = check(); break;
case 'R': motorRight.setSpeed(vel/4); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det = check(); break;
case 'S': motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(RELEASE); det = check(); break;
}
}
int check() {
if (Serial.available() > 0) {
dataIn = Serial.read();
if (dataIn == 'F') determinant = 'F';
else if (dataIn == 'B') determinant = 'B';
else if (dataIn == 'L') determinant = 'L';
else if (dataIn == 'R') determinant = 'R';
else if (dataIn == 'S') determinant = 'S';
else if (dataIn == '0') vel = 0;
else if (dataIn == '1') vel = 25;
else if (dataIn == '2') vel = 50;
else if (dataIn == '3') vel = 75;
else if (dataIn == '4') vel = 100;
else if (dataIn == '5') vel = 125;
else if (dataIn == '6') vel = 150;
else if (dataIn == '7') vel = 175;
else if (dataIn == '8') vel = 200;
else if (dataIn == '9') vel = 225;
else if (dataIn == 'q') vel = 255;
}
return determinant;
}
Final Sketch (Final Code)
/* Author: Muhammed Azhar */
#include <AFMotor.h>
#define trigPin 14
#define echoPin 15
AF_DCMotor motorRight(1, MOTOR12_64KHZ);
AF_DCMotor motorLeft(3, MOTOR12_64KHZ);
char dataIn = 'S';
char determinant;
char det;
int vel = 255;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.println(" Mr.robot");
Serial.println(" Reday for working!");
motorRight.setSpeed(0);
motorLeft.setSpeed(0);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
}
void loop() {
det = check();
switch (det) {
case 'F': motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det = check(); break;
case 'B': motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det = check(); break;
case 'L': motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(FORWARD); motorLeft.run(FORWARD); det = check(); break;
case 'R': motorRight.setSpeed(vel/4); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det = check(); break;
case 'S': motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(RELEASE); det = check(); break;
case 'm':
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 30) {
motorRight.setSpeed(vel);
motorLeft.setSpeed(0);
motorRight.run(FORWARD);
motorLeft.run(RELEASE);
delay(500);
} else {
motorRight.setSpeed(0);
motorLeft.setSpeed(vel);
motorRight.run(RELEASE);
motorLeft.run(FORWARD);
}
break;
case 'b':
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
long Aduration, Adistance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Aduration = pulseIn(echoPin, HIGH);
Adistance = (Aduration/2) / 29.1;
if (Adistance < 25) {
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
motorLeft.run(BACKWARD);
motorRight.run(FORWARD);
} else {
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
}
break;
}
}
int check() {
if (Serial.available() > 0) {
dataIn = Serial.read();
if (dataIn == 'F') determinant = 'F';
else if (dataIn == 'B') determinant = 'B';
else if (dataIn == 'L') determinant = 'L';
else if (dataIn == 'R') determinant = 'R';
else if (dataIn == 'S') determinant = 'S';
else if (dataIn == '0') vel = 0;
else if (dataIn == '1') vel = 25;
else if (dataIn == '2') vel = 50;
else if (dataIn == '3') vel = 75;
else if (dataIn == '4') vel = 100;
else if (dataIn == '5') vel = 125;
else if (dataIn == '6') vel = 150;
else if (dataIn == '7') vel = 175;
else if (dataIn == '8') vel = 200;
else if (dataIn == '9') vel = 225;
else if (dataIn == 'b') determinant = 'b';
else if (dataIn == 'm') determinant = 'm';
}
return determinant;
}
Obstacle Avoider Sketch
/* Author: Muhammed Azhar */
#include <AFMotor.h>
#define trigPin 14
#define echoPin 15
int vel = 255;
AF_DCMotor motorRight(1, MOTOR12_64KHZ);
AF_DCMotor motorLeft(3, MOTOR12_64KHZ);
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.println(" Mr.robot");
Serial.println(" Reday for working!");
motorRight.setSpeed(0);
motorLeft.setSpeed(0);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
}
void loop() {
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 25) {
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
motorLeft.run(BACKWARD);
motorRight.run(FORWARD);
} else {
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
}
}
Wall Follower Sketch
/* Author: Muhammed Azhar */
#include <AFMotor.h>
#define trigPin 14
#define echoPin 15
int vel = 255;
AF_DCMotor motorRight(1, MOTOR12_64KHZ);
AF_DCMotor motorLeft(3, MOTOR12_64KHZ);
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.println(" Mr.robot");
Serial.println(" Reday for working!");
motorRight.setSpeed(0);
motorLeft.setSpeed(0);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
}
void loop() {
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
if (distance < 30) {
motorRight.setSpeed(vel);
motorLeft.setSpeed(0);
motorRight.run(FORWARD);
motorLeft.run(RELEASE);
delay(500);
} else {
motorRight.setSpeed(0);
motorLeft.setSpeed(vel);
motorRight.run(RELEASE);
motorLeft.run(FORWARD);
}
}