Tentang proyek ini
Jika Anda seorang pemula di Arduino dan memiliki rencana untuk membuat robot pertama Anda, maka inilah tutorialnya untuk Anda. Lihat gambar apa yang akan Anda buat, hari ini.
Dalam tutorial ini saya akan menunjukkan cara membuat robot Arduino dengan fungsi yang berbeda. Kita dapat mempelajari penggunaan program yang berbeda untuk fungsi yang berbeda, terutama robot yang dikendalikan ponsel pintar dengan penghindar Rintangan, pengikut dinding, dan pemecah labirin. Atau Anda juga bisa membuatnya hanya untuk satu fungsi.
Bahan dan Alat
Langkah 2:Membuat Sasis
Bor dua lubang untuk motor:
Hubungkan dua motor:
Buat tiga lubang untuk roda kastor:
Hubungkan roda kastor:
Buat dua lubang di kedua sisi kotak untuk menghubungkan motor dan tiga lubang di bagian bawah untuk menghubungkan roda kastor setelah mengukur dan menandai diameter yang benar. Kemudian pasang motor dan kastor.
Baterai
Menghubungkan baterai.
Diagram koneksi.
Rekatkan baterai di dalam kotak.
Pasang dua baterai 9 volt di dalam kotak di atas kastor. Kemudian sambungkan secara paralel dan sambungkan sakelar seperti yang ditunjukkan pada diagram di atas.
Menghubungkan Arduino dan Pelindung Motor
Pasang pelindung motor di atas Arduino.
Hubungkan kabel baterai ke PWR terminal pelindung motor.
Hubungkan motor ke pelindung motor.
Lepaskan jumper dari port ini.
Hubungkan pelindung motor di atas Arduino dan letakkan di atas baterai. Kemudian sambungkan kabel dari motor dan baterai ke pelindung motor. Periksa diagram koneksi sebelum menghubungkan, karena ini sangat penting.
Petunjuk Pengkabelan:
- Hubungkan motor kiri ke "M1" pelindung motor
- Hubungkan motor kanan ke "M3" pelindung motor
- Hubungkan kabel dari baterai ke "ext pwr" pelindung motor
Buat dua lubang dan nyalakan Arduino
Tandai tempat untuk membuat lubang.
Buat lubangnya.
Hubungkan klip baterai ke jack DC male ke baterai 9V.
Tempatkan baterai 9 volt ini di dalam kotak.
Buat dua lubang untuk mengakses port USB dan port input DC Arduino. Ambil baterai 9 volt lagi dan sambungkan klip baterai ke adaptor jack DC male, lalu sambungkan jack DC male ke port input Arduino DC, untuk menyalakan Arduino. Kemudian letakkan baterai di antara motor dan Arduino di dalam kotak.
Menghubungkan Modul dan Sakelar Bluetooth
Hubungkan modul Bluetooth ke Arduino seperti yang ditunjukkan pada diagram koneksi dan letakkan di dalam kotak. Kemudian buat lubang untuk memasang sakelar di bagian belakang kotak dan sambungkan sakelar (di sini saya telah mengganti sakelar yang digunakan sebelumnya karena beberapa masalah penyolderan).
Petunjuk Pengkabelan modul Bluetooth:
- "TX" Modul Bluetooth beralih ke "RX" Arduino
- "RX" Modul Bluetooth beralih ke "TX" Arduino
- "VCC" Modul Bluetooth beralih ke "5v" Arduino
- "GND" Modul Bluetooth beralih ke "GND" Arduino
- Pin Status &Kunci dari modul BT tetap tidak digunakan.
Diagram Sirkuit Keseluruhan
Pemasangan Sensor Ultrasonik
Ambil sensor ultrasonik dan rekatkan sepotong plastik kecil berbentuk 'L' dan rekatkan di atas kotak plastik (atau jika Anda tidak memiliki lem, gunakan selotip dua sisi). Kemudian sambungkan kabel jumper ke seperti yang ditunjukkan pada diagram rangkaian di atas.
Petunjuk Pengkabelan sensor ultrasonik:
- "VCC" dari sensor Ultra sonic beralih ke "+5" dari Arduino
- "GND" dari sensor Ultra sonic beralih ke "GND" dari Arduino
- Pin "Trig" dari sensor Ultra sonic masuk ke "Pin analog 1" Arduino
- Pin "Echo" dari sensor Ultra sonic masuk ke "Pin analog 0" Arduino
Sekarang kita menyelesaikan semua koneksi dan saatnya memprogram.
Langkah terakhir - Kode Arduino dan pengeditan aplikasi Bluetooth
Unggah "Sketsa Akhir " disediakan di bagian kode. Jika Anda menghadapi kesalahan, pastikan Anda telah menginstal perpustakaan AFmotor.
Sekarang, kami belajar cara memprogram Arduino dengan mudah. Saya telah menunjukkan di sini beberapa program untuk bekerja robot ini sebagai robot penghindar rintangan, pengikut dinding, dan dikendalikan Bluetooth. dan akhirnya saya telah menggabungkan ketiga fungsi ini bersama-sama. Tonton video untuk detail dan informasi lebih lanjut
Memulai dengan Aplikasi Bluetooth
Bersenang-senang dengan Pengikut Dinding &Penghindaran Rintangan
Kunjungi blog saya di sini - robotechmaker.com
Jika Anda memiliki pertanyaan atau saran, silakan komentar di bawah.
Kode
- Sketsa Bluetooth (Robot Terkendali)
- Sketsa Akhir (Kode Akhir)
- Sketsa Penghindar Rintangan
- Sketsa Pengikut Dinding
Bluetooth (Robot Terkendali) SketsaArduino
/*Penulis:Marcelo Moraes Proyek ini berisi kode domain publik. Modifikasi diperbolehkan tanpa pemberitahuan. *///Libraries#include //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // buat motor #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // buat motor #3, 64KHz pwm//Konstanta dan variabelchar dataIn ='S';char determinan;char det;int vel =0; //Pengaturan Bluetooth Stuffvoid() { Serial.begin(9600); // set up Serial library pada 9600 bps //Initalisasi pesan Serial.println("ArduinoBymyself - ROVERBot"); Serial.println("Uji Motor AF!"); //matikan motor motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(LEPAS); motorLeft.run(RILIS); }void loop() { det =centang(); //panggil check() subrotine untuk mendapatkan kode serial //sakelar analisis kode serial (det){ case 'F':// F, maju motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'B':// B, mundur motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(Mundur); motorLeft.run(Mundur); det =centang(); merusak; case 'L':// L, gerakkan roda ke kiri motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'R':// R, gerakkan roda ke kanan motorRight.setSpeed(vel/4); motorLeft.setSpeed(vel); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'I':// I, belok kanan ke depan motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'J':// J, belok kanan kembali motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(Mundur); motorLeft.run(Mundur); det =centang(); merusak; case 'G':// G, belok kiri ke depan motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'H':// H, belok kiri ke belakang motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(Mundur); motorLeft.run(Mundur); det =centang(); merusak; case 'S':// S, hentikan motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(LEPAS); motorLeft.run(RILIS); det =centang(); merusak; }}//mendapatkan kode bluetooth yang diterima dari port serial check(){ if (Serial.available()> 0){// jika ada data yang valid di port serial dataIn =Serial.read();// menyimpan data ke a varialbe //periksa kode if (dataIn =='F'){//Forward determinan ='F'; } else if (dataIn =='B'){//Backward determinan ='B'; } else if (dataIn =='L'){//Penentu kiri ='L'; } else if (dataIn =='R'){//Penentu kanan ='R'; } else if (dataIn =='I'){//Froward Right Determinan ='I'; } else if (dataIn =='J'){//Mundur Kanan determinan ='J'; } else if (dataIn =='G'){//Forward Left Determinan ='G'; } else if (dataIn =='H'){//Backward Left Determinan ='H'; } else if (dataIn =='S'){//Stop determinan ='S'; } else if (dataIn =='0'){//Speed 0 vel =0; } else if (dataIn =='1'){//Speed 25 vel =25; } else if (dataIn =='2'){//Speed 50 vel =50; } else if (dataIn =='3'){//Kecepatan 75 vel =75; } else if (dataIn =='4'){//Speed 100 vel =100; } else if (dataIn =='5'){//Speed 125 vel =125; } else if (dataIn =='6'){//Speed 150 vel =150; } else if (dataIn =='7'){//Speed 175 vel =175; } else if (dataIn =='8'){//Speed 200 vel =200; } else if (dataIn =='9'){//Speed 225 vel =225; } else if (dataIn =='q'){//Speed 255 vel =255; } else if (dataIn =='U'){//Lampu Belakang Aktif determinan ='U'; } else if (dataIn =='u'){//Back Lights Off Determinan ='u'; } else if (dataIn =='W'){//Front Lights On Determinan ='W'; } else if (dataIn =='w'){//Front Lights Off Determinan ='w'; } else if (dataIn =='V'){//Horn On determinan ='V'; } else if (dataIn =='v'){//Horn Off determinan ='v'; } else if (dataIn =='X'){//Extra On determinan ='X'; } else if (dataIn =='x'){//Extra Off determinan ='x'; } } mengembalikan determinan;}
Sketsa Akhir (Kode Akhir)Arduino
/*Penulis:Muhammad Azharvisit - robotechmaker.com*/#include #define trigPin 14 // tentukan pin sensor Anda#define echoPin 15 //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // buat motor #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // buat motor #3, 64KHz pwm//Konstanta dan variabelchar dataIn ='S';char determinan;char det;int vel =255; //Pengaturan Bluetooth Stuffvoid() { Serial.begin(9600); // set up Serial library pada 9600 bps pinMode(trigPin, OUTPUT);// setel pin trigonometri ke output (Kirim gelombang suara) pinMode(echoPin, INPUT);// setel pin gema ke input (menerima gelombang suara) / /Pesan inisialisasi Serial.println("Mr.robot"); Serial.println("Hari ulang untuk bekerja!"); //matikan motor motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(LEPAS); motorLeft.run(RELEASE);}void loop() { det =check(); //panggil check() subrotine untuk mendapatkan kode serial //sakelar analisis kode serial (det){ case 'F':// F, maju motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'B':// B, mundur motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(Mundur); motorLeft.run(Mundur); det =centang(); merusak; case 'L':// L, gerakkan roda ke kiri motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'R':// R, gerakkan roda ke kanan motorRight.setSpeed(vel/4); motorLeft.setSpeed(vel); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'I':// I, belok kanan ke depan motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'J':// J, belok kanan kembali motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(Mundur); motorLeft.run(Mundur); det =centang(); merusak; case 'G':// G, belok kiri ke depan motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(FOWARD); motorLeft.run(FOWARD); det =centang(); merusak; case 'H':// H, belok kiri ke belakang motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(Mundur); motorLeft.run(Mundur); det =centang(); merusak; case 'S':// S, hentikan motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(LEPAS); motorLeft.run(RILIS); det =centang(); merusak; case 'm'://untuk robot pengikut dinding. motorRight.setSpeed(vel); //mengatur kecepatan motor, antara 0-255 motorLeft.setSpeed (vel); durasi panjang, jarak; // mulai scan digitalWrite(trigPin, LOW); delayMicroseconds(2); // penundaan diperlukan agar operasi sensor berhasil. digitalWrite(trigPin, TINGGI); delayMicroseconds(10); //penundaan ini juga diperlukan! digitalWrite(trigPin, RENDAH); durasi =pulseIn(echoPin, TINGGI); jarak =(durasi/2) / 29.1;// ubah jarak menjadi sentimeter. if (jarak <30)/*Jarak yang harus dijaga dengan dinding */ { Serial.println ("Dinding ditentukan!" );Serial.println (" Mulai mengikuti dinding ");Serial.println (" Berbalik!"); motorRight.setSpeed(vel); motorLeft.setSpeed(0); motorRight.run(FOWARD); motorLeft.run(RILIS); penundaan (500); // tunggu sebentar} else { Serial.println("Tidak ada Tembok yang terdeteksi. berputar balik"); penundaan (15); motorRight.setSpeed(0); motorLeft.setSpeed(vel); motorRight.run(LEPAS); motorLeft.run (FOWARD); } merusak; case 'b'://robot penghindar rintangan motorRight.setSpeed(vel); //mengatur kecepatan motor, antara 0-255 motorLeft.setSpeed (vel); Adurasi panjang, Adistance; // mulai scan digitalWrite(trigPin, LOW); delayMicroseconds(2); // penundaan diperlukan agar operasi sensor berhasil. digitalWrite(trigPin, TINGGI); delayMicroseconds(10); //penundaan ini juga diperlukan! digitalWrite(trigPin, RENDAH); Adurasi =pulseIn(echoPin, TINGGI); Jarak =(Aduration/2) / 29.1;// ubah jarak menjadi sentimeter. if (Jarak <25)/*jika ada halangan 25 sentimeter, lakukan hal berikut:*/ { Serial.println ("Hambatan Dekat terdeteksi!" );Serial.println ("Detail Rintangan:");Serial.print ("Jarak Dari Robot adalah " );Serial.print ( Adistance);Serial.print ( " CM!");// mencetak jarak dalam sentimeter.Serial.println (" Rintangan dinyatakan sebagai ancaman karena jarak yang dekat . ");Serial.println("Memutar !"); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorLeft.run(Mundur); // Beloklah selama ada rintangan di depan. motorRight.run (FORWARD);} else { Serial.println ("Tidak ada kendala yang terdeteksi. maju"); penundaan (15); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FOWARD); //jika tidak ada halangan di depan, Maju! motorLeft.run(FOWARD); } merusak; }}//mendapatkan kode bluetooth yang diterima dari port serial check(){ if (Serial.available()> 0){// jika ada data yang valid di port serial dataIn =Serial.read();// menyimpan data ke a varialbe//periksa kode if (dataIn =='F'){//Forward determinan ='F'; } else if (dataIn =='B'){//Backward determinan ='B'; } else if (dataIn =='L'){//Penentu kiri ='L'; } else if (dataIn =='R'){//Penentu kanan ='R'; } else if (dataIn =='I'){//Froward Right Determinan ='I'; } else if (dataIn =='J'){//Mundur Kanan determinan ='J'; } else if (dataIn =='G'){//Forward Left Determinan ='G'; } else if (dataIn =='H'){//Backward Left Determinan ='H'; } else if (dataIn =='S'){//Stop determinan ='S'; } else if (dataIn =='0'){//Speed 0 vel =0; } else if (dataIn =='1'){//Speed 25 vel =25; } else if (dataIn =='2'){//Speed 50 vel =50; } else if (dataIn =='3'){//Kecepatan 75 vel =75; } else if (dataIn =='4'){//Speed 100 vel =100; } else if (dataIn =='5'){//Speed 125 vel =125; } else if (dataIn =='6'){//Speed 150 vel =150; } else if (dataIn =='7'){//Speed 175 vel =175; } else if (dataIn =='8'){//Speed 200 vel =200; } else if (dataIn =='9'){//Speed 225 vel =225; } else if (dataIn =='b'){//Extra On determinan ='b'; } else if (dataIn =='m'){//Extra On determinan ='m'; } } mengembalikan determinan;}
Sketsa Penghindar RintanganArduino
/*Penulis:Muhammad Azharvisit - robotechmaker.com*/#include #define trigPin 14 // tentukan pin sensor Anda#define echoPin 15 int vel =255; // Kecepatan robot//ObjectsAF_DCMotor motorKanan(1, MOTOR12_64KHZ); // buat motor #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // buat motor #3, 64KHz pwmvoid setup() { Serial.begin(9600); // set up Serial library pada 9600 bps pinMode(trigPin, OUTPUT);// setel pin trigonometri ke output (Kirim gelombang suara) pinMode(echoPin, INPUT);// setel pin gema ke input (menerima gelombang suara) / /Pesan inisialisasi Serial.println("Mr.robot"); Serial.println("Hari ulang untuk bekerja!"); //matikan motor motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(LEPAS); motorLeft.run(RELEASE);}void loop() { //robot penghindar rintangan motorRight.setSpeed(vel); //mengatur kecepatan motor, antara 0-255 motorLeft.setSpeed (vel); durasi panjang, jarak; // mulai scan digitalWrite(trigPin, LOW); delayMicroseconds(2); // penundaan diperlukan agar operasi sensor berhasil. digitalWrite(trigPin, TINGGI); delayMicroseconds(10); //penundaan ini juga diperlukan! digitalWrite(trigPin, RENDAH); durasi =pulseIn(echoPin, TINGGI); jarak =(durasi/2) / 29.1;// ubah jarak menjadi sentimeter. if (jarak <25)/*jika ada halangan 25 sentimeter, ke depan, lakukan hal berikut:*/ { Serial.println ("Hambatan Dekat terdeteksi!" );Serial.println ("Detail Rintangan:");Serial.print ("Jarak Dari Robot adalah " );Serial.print ( jarak);Serial.print ( " CM!");// mencetak jarak dalam sentimeter.Serial.println (" Rintangan dinyatakan sebagai ancaman karena jarak yang dekat . ");Serial.println("Memutar !"); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorLeft.run(Mundur); // Beloklah selama ada rintangan di depan. motorRight.run (FORWARD);} else { Serial.println ("Tidak ada kendala yang terdeteksi. maju"); penundaan (15); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FOWARD); //jika tidak ada halangan di depan, Maju! motorLeft.run(FOWARD); } }
Sketsa Pengikut DindingArduino
/*Penulis:Muhammad Azharvisit - robotechmaker.com*/#include #define trigPin 14 // tentukan pin sensor Anda#define echoPin 15 int vel =255; // Kecepatan robot //ObjectsAF_DCMotor motorKanan(1, MOTOR12_64KHZ); // buat motor #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // buat motor #3, 64KHz pwmvoid setup(){ Serial.begin(9600); // set up Serial library pada 9600 bps pinMode(trigPin, OUTPUT);// setel pin trigonometri ke output (Kirim gelombang suara) pinMode(echoPin, INPUT);// setel pin gema ke input (menerima gelombang suara) / /Pesan inisialisasi Serial.println("Mr.robot"); Serial.println("Hari ulang untuk bekerja!"); //matikan motor motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(LEPAS); motorLeft.run(RELEASE);}void loop(){ //untuk robot pengikut dinding. motorRight.setSpeed(vel); //set kecepatan motor, antara 0-255 motorLeft.setSpeed(vel); durasi panjang, jarak; // mulai scan digitalWrite(trigPin, LOW); delayMicroseconds(2); // penundaan diperlukan agar operasi sensor berhasil. digitalWrite(trigPin, TINGGI); delayMicroseconds(10); //penundaan ini juga diperlukan! digitalWrite(trigPin, RENDAH); durasi =pulseIn(echoPin, TINGGI); jarak =(durasi / 2) / 29.1;// ubah jarak menjadi sentimeter. if (jarak <30)/*Jarak yang harus dijaga dengan tembok */ { Serial.println("Dinding ditentukan!"); Serial.println(" Mulai mengikuti tembok "); Serial.println("Memutar !"); motorRight.setSpeed(vel); motorLeft.setSpeed(0); motorRight.run(FOWARD); motorLeft.run(RILIS); penundaan (500); // tunggu sebentar } else { Serial.println("Tidak ada Tembok yang terdeteksi. berputar balik"); penundaan (15); motorRight.setSpeed(0); motorLeft.setSpeed(vel); motorRight.run(LEPAS); motorLeft.run(FOWARD); }}
Skema