M1 Rover: Robot Otonom Outdoor untuk Lanskap Kasar
Komponen dan Perlengkapan
- SparkFun Dual H-Bridge motor drivers L298 × 1
- DC motor (umum) × 4
- Arduino UNO × 1
- LED (umum) × 8
- Resistor 221 ohm × 8
- Servos (Tower Pro MG996R) × 1
- Ultrasonic Sensor - HC-SR04 (Umum) × 1
Aplikasi dan Layanan Online
- Arduino IDE
- Microsoft Visual Studio 2015
- Microsoft Windows 10 IoT Core
Tentang Proyek Ini
Setelah membangun sejumlah robot indoor, saya memutuskan untuk membangun robot outdoor yang mampu bepergian melalui lanskap kasar. Saya menyebutnya "M1-Robot."
Motor M1-Robot dengan mudah mengemudikan empat motor DC yang dikemudikan dengan Arduino jadi ini sempurna untuk setiap proyek robotika, saya pikir ini akan menjadi jantung yang fantastis untuk robot yang lebih kuat, jadi saya merancang M1 off-road 4-wheel-drive dari nol.
Ini bukan hanya mobil RC, itu dapat diprogram untuk menjadi self-driving mengikuti serangkaian instruksi atau bahkan dapat dikendalikan dari komputer jarak jauh, dan dapat digunakan melalui pengontrol game dan joystick kustom seperti mobil RC jarak jauh.
Langkah 1: Desain
Mendesain produk atau prototipe Anda sendiri sangat menyenangkan, tetapi menjadi lebih rumit ketika Anda memutuskan untuk membuatnya dalam skala ukuran asli. Jadi saya memilih Google Sketch-up 2017 sebagai alat desain yang canggih dan mudah dan itu memungkinkan Anda mengekspor cetak biru model Anda ke mesin potong laser atau bahkan printer 3D.
Saya menghabiskan tiga minggu pertama merancang dan membangun hull robot.
Seperti bahan, saya diberikan selembar papan kayu tebal 3mm.
Pemasangan kabel yang tidak terlalu bagus dari robot, yang, karena keterbatasan waktu, terdiri dari memasukkan seluruh roadkill ke dalam hull.
Saya pikir nama yang tepat untuk robot saya adalah M1Rover. Karena saya berencana untuk mengembangkan versinya secara berurutan dengan nama seperti M2, M3, dll. Ini dirancang dalam Kit, yang perlu Anda lakukan adalah merakitnya dengan beberapa baut.
Langkah 2: Komponen dan Fitur
- Waktu operasi hingga tiga jam!
- Dirancang untuk Arduino Uno, Mega dan Nano.
- Tegangan Operasi DC 5V-9V
- Chassis kayu tebal 3mm
- Roda diameter 68mm L298N Dual H-Bridge Motor/Stepper
- Baterai 9v untuk menyala motor DC
- Baterai 9v untuk menyala Arduino
- Lampu LED 7 untuk belakang dan depan
- Modul Bluetooth HC-06
- Arduino sensor shield v5.0
- Transduser ultrasonik HC SR04
Langkah 3: Pengontrol Motor
H-Bridge biasanya digunakan untuk mengontrol kecepatan dan arah motor, tetapi dapat digunakan untuk proyek lain seperti mengontrol kecerahan proyek pencahayaan tertentu seperti array LED daya tinggi.
- Pastikan Anda telah mengikat semua ground bersama; Arduino, sumber daya, dan pengontrol motor.
- Pin PWM tidak diperlukan jika Anda tidak ingin mengontrol fitur PWM.
Langkah 4: Merakit Chassis
Chassis telah dipotong menggunakan potong laser dalam beberapa bagian, dan seperti yang saya sebutkan sebelumnya model dibuat dalam kit yang mudah dirakit, jadi yang perlu Anda lakukan adalah mengikuti instruksi di bawah ini.
Karena desain juga penting dan ketika berkaitan dengan mobil RC itu harus berisi lampu depan dan belakang. Di depan M1-Robot saya menempatkan 4 lampu LED putih masing-masing terhubung ke resistor 220 ohm, dan di belakang saya menempatkan 2 lampu LED merah dengan resistor 220 ohm untuk masing-masing. LED-LED ini dapat dikontrol oleh aplikasi yang sama
Langkah 5: Rangkaian
Rangkaian sedikit rumit karena ketika Anda memutuskan untuk mengontrol banyak bagian elektronik pada saat yang sama Anda harus memperhatikan urutan setiap bagian.
- Arduino Sensor Shield 5.0
- Arduino Uno R3 L298N Dual H-Bridge Motor/Stepper
- baterai 9v untuk menyala motor DC
- Lampu LED 7 (2 belakang) dan (4 depan)
- Modul Bluetooth HC-06
- Transduser ultrasonik HC SR04
- Motor servo 9g
- Buzzer Aktif
- 4 motor DC dengan roda
Langkah 6: Perangkat Lunak
Saya mempertimbangkan banyak hal saat menulis kode M1-Robot, dan dengan perangkat lunak GUI Anda dapat mendapatkan lebih banyak informasi tentang status robot.
Kode Dasar untuk kit starter , dapat dikontrol oleh Mobile atau Laptop melalui Bluetooth :
int frontled = 3; //led int rearled = 4; int outPin1 = 5; //motor1 int outPin2 = 6; //motor1 int outPin4 = 11; //motor2 int outPin3 = 12; //motor2 char bt = 0; //BT int buzzerPin = 2; const int pingPin = 9; // Trigger Pin of Ultrasonic Sensor const int echoPin = 8; // Echo Pin of Ultrasonic Sensor /*------------------------------------------------------------------------------*/ void setup() { Serial.begin(9600); pinMode(outPin1,OUTPUT); pinMode(outPin2,OUTPUT); pinMode(outPin3,OUTPUT); pinMode(outPin4,OUTPUT); pinMode(frontled,OUTPUT); pinMode (buzzerPin, OUTPUT); } void loop() { if (Serial.available() > 0) { bt = Serial.read(); digitalWrite(frontled, 1); long duration, inches, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(10); digitalWrite(pingPin, LOW); pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); inches = microsecondsToInches(duration); cm = microsecondsToCentimeters(duration); if (cm > 10 ){ // distance to stop /*________________________________________________________________________*/ if(bt == 'F') //move forwards { digitalWrite(outPin1,HIGH); digitalWrite(outPin2,LOW); digitalWrite(outPin3,HIGH); digitalWrite(outPin4,LOW); } else if (bt == 'B') //move backwards { digitalWrite(outPin1,LOW); digitalWrite(outPin2,HIGH); digitalWrite(outPin3,LOW); digitalWrite(outPin4,HIGH); } else if (bt == 'S') //stop!! { digitalWrite(outPin1,LOW); digitalWrite(outPin2,LOW); digitalWrite(outPin3,LOW); digitalWrite(outPin4,LOW); } else if (bt == 'R') //right { digitalWrite(outPin1,HIGH); digitalWrite(outPin2,LOW); digitalWrite(outPin3,LOW); digitalWrite(outPin4,LOW); } else if (bt == 'L') //left { digitalWrite(outPin1,LOW); digitalWrite(outPin2,LOW); digitalWrite(outPin3,HIGH); digitalWrite(outPin4,LOW); } else if (bt == 'I') //forward right { digitalWrite(outPin1,HIGH); digitalWrite(outPin2,LOW); digitalWrite(outPin3,LOW); digitalWrite(outPin4,HIGH); } else if (bt == 'G') //forward left { digitalWrite(outPin1,LOW); digitalWrite(outPin2,HIGH); digitalWrite(outPin3,HIGH); digitalWrite(outPin4,LOW); } } else { digitalWrite (buzzerPin, HIGH); delay (500); digitalWrite (buzzerPin, LOW); delay (500); } } } long microsecondsToInches(long microseconds) { return microseconds / 74 / 2; } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; }
Kode Arduino kompatibel dengan semua jenis pengontrol karena semua bagian elektronik diprogram untuk bekerja melalui perintah port serial, jadi Anda dapat menggunakan pengirim/penerima modul Bluetooth, PC, ponsel.
⦁ Aplikasi Windows C# (screenshot dilampirkan)
Langkah 7: Paket
STARTER
Paket M1-Robot ini mencakup komponen dasar sementara papan atas memungkinkan pemasangan mudah dari perangkat keras penginderaan, manipulasi atau komputer apa pun. Cukup pasang sensor ke papan papan dan catu daya Rover untuk memulai.
EXPLORER
Paket Explorer mengaktifkan fungsionalitas otonom dasar indoor dan outdoor, dan alih-alih kamera IP saya menggunakan kamera ponsel yang terhubung ke internet melalui alamat IP.
MAPPING
Paket Explorer mengaktifkan pelacakan GPS dasar, tentu saja, saat kendaraan berada di luar ruangan, sangat menarik saat Anda melihat lintasan koordinat secara real-time.
MANIPULATION
Berinteraksi dengan dunia dengan lengan robot dan pegangan dua jari 50mm.
Tips Penting:
Tidak semua servo memiliki putaran penuh 180 derajat. Banyak yang tidak. Anda dapat menulis tes untuk menentukan di mana batas mekanisnya. Gunakan servo.writeMicroseconds alih-alih servo.write Saya lebih suka ini karena ini memungkinkan Anda menggunakan 1000-2000 sebagai rentang dasar. Dan banyak servo akan mendukung di luar rentang itu, dari 600 hingga 2400.
Jadi, coba nilai berbeda dan lihat di mana Anda mendapatkan bunyi yang memberitahu Anda telah mencapai batas. Tetapi hanya tetap dalam batas-batas itu saat Anda menulis. Anda dapat menetapkan batas-batas tersebut saat Anda menggunakan servo.attach(pin, min, max)
Edit: Saya harus mengatakan bahwa jika Anda ingin, Anda dapat menetapkan mikrodetik min dan max dalam attach, lalu cukup gunakan servo.write. Ini menggunakan map() untuk mengubah nilai derajat 0-180 yang Anda masukkan menjadi nilai mikrodetik.
Seperti halnya jika Anda mempertahankannya di akhir batas - itu menarik arus tinggi dan panas dengan cepat - sangat mudah untuk "memasak" servo dengan memuatnya dengan cara ini untuk waktu yang berapa pun.
Temukan rentang gerakan yang benar dan pastikan kode tidak mencoba mendorongnya melewati batas akhir, fungsi constrain() Arduino berguna untuk ini:
servo.write (constrain (angle, 10, 160)) ; // constrain the angle in the range 10..160
Bagian dan Enclosure Kustom
Skematik