Daftar Isi:
- Langkah 1: Perangkat Keras Dibutuhkan
- Langkah 2: Merakit Sasis
- Langkah 3: Memasang Elektronik
- Langkah 4: Menambahkan Webcam
- Langkah 5: Menghubungkan Semuanya
- Langkah 6: Menyiapkan RPI
- Langkah 7: Mengkonfigurasi Port Serial RPI
- Langkah 8: Memasang Modul Python
- Langkah 9: Menyiapkan RoboClaw
- Langkah 10: Menginstal Program/file Rover
- Langkah 11: Memulai Bot Up
- Langkah 12: Mengakses Halaman Kontrol Bot
- Langkah 13: Kode Python/Flask
- Langkah 14: Menggunakan Perangkat Keras Lain
Video: Web Controlled Rover: 14 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Membangun dan bermain dengan robot adalah kesenangan utama saya dalam hidup. Yang lain bermain golf atau ski, tetapi saya membuat robot (karena saya tidak bisa bermain golf atau ski:-). Saya merasa santai dan menyenangkan! Untuk membuat sebagian besar bot saya, saya menggunakan kit sasis. Menggunakan kit membantu saya melakukan lebih banyak hal yang saya sukai, perangkat lunak dan elektronik, dan juga membuat sasis yang lebih baik untuk diri saya sendiri.
Dalam Instruksi ini, kita akan melihat apa yang diperlukan untuk membuat penjelajah yang dikendalikan Wifi/web yang sederhana namun kuat. Sasis yang digunakan adalah Actobotics Gooseneck. Saya memilihnya karena ukuran, kemampuan perluasan, dan biayanya, tetapi Anda dapat menggunakan sasis lain yang Anda pilih sendiri.
Untuk proyek seperti ini, kita akan membutuhkan komputer papan tunggal yang solid dan untuk bot ini saya memilih untuk menggunakan Raspberry Pi (RPI) komputer berbasis Linux. RPI (dan Linux) memberi kita banyak opsi pengkodean dan Python akan digunakan untuk sisi pengkodean. Untuk antarmuka web saya menggunakan Flask, kerangka kerja web ringan untuk Python.
Untuk menggerakkan motor, saya memilih RoboClaw 2x5a. Ini memungkinkan komunikasi serial sederhana untuk memerintahkannya dan bekerja dengan baik dengan RPI dan motor di Gooseneck.
Akhirnya, ia memiliki webcam untuk umpan balik video tipe POV untuk mengemudikannya dari jarak jauh. Saya akan membahas setiap topik secara lebih rinci nanti.
Langkah 1: Perangkat Keras Dibutuhkan
- Sasis Actobotics Gooesneck atau pengganti yang sesuai pilihan Anda
- Raspberry Pi pilihan Anda (atau kloning) - Model RPI B digunakan pada bot ini, tetapi yang memiliki setidaknya dua port USB akan berfungsi
- Plat Servo Standar B x1
- 90 ° Braket Saluran Sudut Tunggal x1
- Pengemudi motor RoboClaw 2x5a
- S3003 atau servo ukuran standar serupa
- Papan tempat memotong roti kecil atau papan tempat memotong roti Mini
- Kabel jumper Wanita ke Wanita
- Kabel jumper Pria ke Wanita
- Web cam (opsional) - Saya menggunakan Logitech C110, dan berikut adalah daftar kamera yang didukung untuk RPI
- Sumber daya 5v-6v untuk daya servo
- Baterai 7.2v-11.1v untuk menggerakkan motor penggerak
- Bank daya USB 5v 2600mah (atau lebih tinggi) untuk RPI
- Adaptor Wifi USB
Di bot saya, saya menggunakan roda 4 untuk membuatnya sedikit lebih All-Terrain-Indoor. Untuk opsi ini Anda perlu:
- 4 "Roda Tugas Berat x2
- Hub Sekrup Bore Set 4mm (0,770 inci) x2
Langkah 2: Merakit Sasis
Pertama, rakit sasis dengan mengikuti instruksi yang disertakan dengan sasis atau video. Setelah selesai Anda harus memiliki sesuatu seperti gambar. CATATAN: Saat merakit bagian Leher, biarkan braket pemasangan terlepas.
Pada bot saya, saya memilih untuk mengganti roda yang disertakan dengan sasis untuk roda tugas berat 4 . Ini opsional dan tidak diperlukan kecuali Anda ingin melakukan hal yang sama.
Langkah 3: Memasang Elektronik
Gooseneck memiliki banyak ruang dan opsi untuk memasang perangkat elektronik Anda. Saya memberi Anda gambar-gambar ini sebagai garis panduan, tetapi Anda dapat memilih bagaimana Anda ingin meletakkan semuanya. Anda dapat menggunakan stand-off, double tape, Velcro atau servo-tape untuk memasang papan dan baterai.
Langkah 4: Menambahkan Webcam
Ambil braket 90 derajat, hub servo ringan, dan empat (4) sekrup 0,3125 untuk langkah ini:
- Ambil hub servo dan letakkan di satu sisi braket dan kencangkan bersama-sama dengan sekrup.2125" seperti yang digambarkan
- Selanjutnya pasang servo ke braket servo
- Pasang braket 90 derajat dengan tanduk servo ke tulang belakang servos dan gunakan sekrup tanduk yang disertakan dengan servo untuk menghubungkannya bersama-sama
- Sekarang pasang Servo di braket ke bagian atas leher angsa dengan sekrup yang tersisa
- Pasang kamera dengan ikatan ritsleting atau selotip dua sisi ke braket 90 derajat
Gunakan gambar untuk panduan jika diperlukan.
Langkah 5: Menghubungkan Semuanya
Kabel cukup lurus ke depan untuk robot ini.
Motor:
Solder mengarah pada kedua motor jika Anda belum melakukannya
Dengan bagian depan robot (ujung berleher angsa) menghadap menjauh dari Anda:
- Hubungkan kabel motor di motor kiri ke saluran M1A dan M1B
- Hubungkan kabel motor pada motor kanan ke saluran M2A dan M2B
Koneksi ground (GND):
- Hubungkan satu pin arde pada RoboClaw ke papan jumper arde. Garis pin ground pada RoboClaw paling dekat dengan pusat (Lihat gambar)
- Hubungkan PIN 6 pada RPI ke papan jumper. Lihat gambar header RPI untuk penetapan pin.
- Hubungkan GND dari paket baterai servo ke salah satu pin pada papan jumper.
- Jalankan kabel jumper dari papan jumper ke kabel GND servos.
RPI ke RoboClaw:
Hubungkan pin RPI GPIO14 TXD ke pin RoboClaw S1
Kekuasaan:
- Hubungkan kabel POS dari baterai servo ke kabel POS servos
- Hubungkan kabel POS dari baterai motor ke POS (+) terminal input daya motor RoboClaw. Kami akan membiarkan terminal GND terputus untuk saat ini.
Langkah 6: Menyiapkan RPI
Saya berasumsi pengguna di sini tahu beberapa tentang Linux dan RPI. Saya tidak membahas cara mengatur atau menghubungkannya. Jika Anda memerlukan bantuan dengan itu, gunakan halaman di bawah ini.
Untuk mendapatkan pengaturan RPI Anda, lihat halaman berikut:
- Pengaturan Dasar RPI
- Panduan memulai cepat RPI
- Guilde pengaturan NOOBS
Untuk halaman jump-off umum, halaman utama RPI dan halaman eLinux adalah tempat yang bagus untuk memulai.
Lihat tautan ini untuk pengaturan Wifi umum RPI.
Jika Anda berencana menggunakan semacam kamera atau kamera web di bot, lihat halaman ini untuk mendapatkan file dasar yang dibutuhkan.
- Pengaturan kamera RPI
- Pengaturan kamera eLinix RPI
Video streaming:
Ada beberapa cara agar streaming video berfungsi pada RPI, tetapi metode yang saya sukai adalah menggunakan Motion.
Untuk menginstalnya di RPI Anda, jalankan ini: Sudo apt-get install motion
Instruksi ini juga membahas pengaturannya untuk streaming.
Langkah 7: Mengkonfigurasi Port Serial RPI
Kita perlu menonaktifkan mode konsol Linux untuk menggunakan RX dan TX karena kita ingin berbicara dengan pengontrol motor RoboClaw dari port ini. Untuk melakukan ini, Anda dapat menggunakan metode ini atau alat ini. Pilihan ada di tangan Anda pada metode karena mereka berdua melakukan hal yang sama pada akhirnya.
Langkah 8: Memasang Modul Python
Anda perlu menginstal python pada RPI serta pip penginstal paket python.
Untuk menginstal pip lakukan:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Kemudian:
- sudo pip install labu
- sudo pip install pyserial
- sudo pip instal RPIO
Ini akan menjadi semua modul yang diperlukan untuk menjalankan kode.
Langkah 9: Menyiapkan RoboClaw
Saya memiliki kode robot yang berbicara dengan RoboClaw dalam Mode Serial Standar pada 19200 baud.
Untuk mengatur RoboClaw untuk ini, lakukan:
- Tekan tombol "MODE" pada RoboClaw
- Tekan tombol set sampai LED berkedip 5 (lima) kali antara penundaan
- Tekan tombol "LIPO" untuk menyimpan
- Selanjutnya tekan tombol "SET" sampai LED berkedip 3 (tiga) kali antara penundaan
- Tekan tombol LIPO untuk menyimpan
Itu saja untuk mengatur pengontrol motor. Lihat pdf yang ditautkan di atas untuk info lebih lanjut jika diperlukan.
Langkah 10: Menginstal Program/file Rover
Unduh dan salin file rover.zip ke RPI Anda di direktori pengguna pi Anda.
Jika Anda menjalankan Linux atau Mac, Anda dapat menggunakan 'scp' untuk melakukannya:
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
Untuk Windows, Anda dapat mengunduh dan menggunakan pscp dan kemudian melakukan:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Setelah file zip disalin ke RPI, masuk ke dalamnya sebagai pengguna pi.
Sekarang jalankan:
unzip rover.zip
Ini akan membuka zip file ke folder bernama 'rover' dan memiliki yang berikut di bawah folder itu:
- restrover.py (Kode python untuk robot)
- static (menampung file gambar untuk tombol pada halaman kontrol)
- templates (menampung file index.html, halaman web kontrol)
Jika Anda menggunakan web cam, ubah baris di dekat bagian bawah file index.html di folder template. Ubah URL di baris IFRAME agar sesuai dengan URL src untuk streaming video Anda.
Langkah 11: Memulai Bot Up
Hubungkan daya USB ke RPI.
Untuk memulai kode bot, masuk sebagai pengguna pi dan jalankan:
- penjelajah cd
- sudo python restrover.py
Jika semuanya baik-baik saja, Anda akan melihat layar yang mirip dengan gambar di langkah ini
Jika Anda melihat kesalahan atau masalah, Anda harus memperbaikinya sebelum melanjutkan.
Sekarang, sambungkan kabel GND (-) ke terminal NEG (-) pada input daya motor RoboClaw.
Langkah 12: Mengakses Halaman Kontrol Bot
Setelah skrip python robot berjalan, nyalakan RoboClaw dan kemudian arahkan ke ip RPI Anda seperti:
your_rpi_ip
Anda akan melihat halaman kontrol Web muncul seperti pada gambar. Jika tidak, periksa terminal keluaran RPI Anda dan cari kesalahan apa pun dan perbaiki.
Setelah di halaman, Anda siap untuk mengontrol bot.
Robot akan mulai dalam pengaturan "Med run" dan pada kecepatan Sedang.
Bot dapat dikontrol melalui tombol di halaman atau dengan tombol di keyboard.
Kuncinya adalah:
- w - maju
- z - mundur/mundur
- a - belok kiri panjang
- s - belok kanan panjang
- q - belok kiri pendek
- e - belok kanan pendek
- 1 - geser kamera ke kiri
- 2 - geser kamera ke kanan
- 3 - panci kiri penuh
- 4 - geser ke kanan penuh
- / - kamera rumah/tengah
- h - menghentikan/menghentikan robot
Ada buffer penundaan setengah detik antara perintah yang dikirim. Saya melakukan ini untuk menghilangkan perintah berulang yang tidak diinginkan. Anda tentu saja dapat menghapus ini dari kode jika Anda mau (di index.html)
Sisa kontrol dan pengendaliannya harus cukup jelas.
Langkah 13: Kode Python/Flask
Bot ini menggunakan Python dan kerangka web Flask. Anda dapat mempelajari lebih lanjut tentang Flask di sini jika Anda tertarik.
Perbedaan besar dari aplikasi Flask dan skrip Python normal adalah @app.route class/method yang digunakan untuk melakukan penanganan URI. Selain itu, sebagian besar Python normal.
#!/usr/bin/env python
# # Wifi/Web driven Rover # # Ditulis oleh Scott Beasley - 2015 # # Menggunakan RPIO, pyserial dan Flask # waktu impor serial impor dari RPIO impor PWM dari labu impor Flask, render_template, request app = Flask (_name_, static_url_path = '') # Hubungkan ke port komunikasi untuk berbicara dengan pengontrol motor Roboclaw coba: # Ubah baud rate di sini jika berbeda dari 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) kecuali IOError: print ("Comm port not ditemukan") sys.exit (0) # Variabel kontrol kecepatan dan drive last_direction = -1 speed_offset = 84 turn_tm_offset = 0,166 run_time = 0,750 # Posisi netral servo (rumah) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Sedikit waktu untuk mengatur waktu. tidur (3) # # Penangan URI - semua tindakan halaman bot dilakukan di sini # # Kirim halaman kontrol bot (halaman beranda) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti saya print "Maju" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Jika tidak terus menerus, maka hentikan setelah penundaan jika run_time > 0: last_direction = -1 halt () kembalikan "ok" @ app.route ("/backward") def backward(): global last_direction, run_time print "Backward" go_backward() last_direction = 1 # sleep 100ms + run_time time.sleep (0,100 + run_time) # Jika tidak terus menerus, maka hentikan setelah penundaan jika run_time > 0: last_direction = -1 halt() return "ok" @app.route ("/left") def left(): global last_direction, turn_tm_offset print "Left" go_left() last_direction = -1 # sleep @1 /2 second time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # sleep @1/2 detik time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): arah_akhir global, belok_t m_offset print "Left forward turn" go_left() # sleep @1/8 detik waktu.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Right forward turn" go_right () # sleep @1/8 detik waktu.sleep (0,250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt() time.sleep (0.100) return "ok" @app.route ("/stop") def stop(): global last_direction print "Stop" halt() last_direction = -1 # sleep 100ms time.sleep (0.100) kembalikan "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 jika servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # waktu tidur 150ms. sleep (0,150) return "ok" @app.route ("/home") def home(): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0,150) return "ok" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft" servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/panfull_rt") def panfull_rt(): global servo_pos print "Pan full right" servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0,150) return "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0,001 # Perbarui arah saat ini untuk mendapatkan kecepatan baru jika last_direction == 0: go_forward () jika last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) return "ok" @app.route ("/speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0,166 # Perbarui arah saat ini untuk mendapatkan kecepatan baru jika last_direction == 0: go_forward () jika last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) kembalikan "ok" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0,332 # Perbarui arah saat ini untuk mendapatkan kecepatan baru jika last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) return "ok" @app.route ("/continuous ") def continuous (): global run_time print "Continuous run" run_time = 0 # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/mid_run") def mid_run (): global run_time print "Mid run" run_time = 0.750 halt() # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/short_time") def short_time(): global run_time print "Short run" run_time = 0.300 halt() # sleep 100ms time.sleep (0.100) return "ok" # # Fungsi penggerak motor # def go_forward (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)
Jika Anda tidak ingin atau membutuhkan informasi debug dari Flask, setel debug ke 'false' pada baris app.run.
if _name_ == "_main_":
app.run (host = '0.0.0.0', port = 80, debug = False)
Anda juga dapat mengubah port yang didengarkan oleh server Flask http di sini.
Langkah 14: Menggunakan Perangkat Keras Lain
Jika Anda ingin menggunakan perangkat keras lain, seperti jenis SBC (Single Board Computer) lainnya, Anda akan mengalami sedikit masalah dalam menjalankan Python dan Flask di papan lain seperti Beagle Bone, PCDuino dll… Anda harus mengubah kode agar sesuai dengan GPIO tata letak dan gunakan kemampuan mengemudi servo dari papan baru.
Untuk menggunakan driver motor tipe lain, Anda hanya perlu memodifikasi fungsi go_forward, go_backward, go_left, go_right dan halt untuk melakukan apa pun yang dibutuhkan driver motor pengganti untuk membuat motor melakukan fungsi tertentu.
Direkomendasikan:
Alexa Voice Controlled Raspberry Pi Drone Dengan IoT dan AWS: 6 Langkah (dengan Gambar)
Alexa Voice Controlled Raspberry Pi Drone Dengan IoT dan AWS: Hai! Nama saya Arman. Saya seorang anak laki-laki berusia 13 tahun dari Massachusetts. Tutorial ini menunjukkan, seperti yang dapat Anda simpulkan dari judulnya, cara membuat Raspberry Pi Drone. Prototipe ini menunjukkan bagaimana drone berevolusi dan juga seberapa besar peran mereka dalam
Wifi Controlled 12v Led Strip Menggunakan Raspberry Pi Dengan Tasker, Integrasi Ifttt.: 15 Langkah (dengan Gambar)
Wifi Controlled 12v Led Strip Menggunakan Raspberry Pi Dengan Tasker, Ifttt Integration.: Dalam proyek ini saya akan menunjukkan cara mengontrol strip led analog 12v sederhana melalui wifi menggunakan raspberry pi.Untuk proyek ini Anda memerlukan: 1x Raspberry Pi (I saya menggunakan Raspberry Pi 1 Model B+) 1x RGB 12v Le
Situs Web/WiFi Controlled LED Strip Dengan Raspberry Pi: 9 Langkah (dengan Gambar)
Situs Web/WiFi Controlled LED Strip Dengan Raspberry Pi: Latar Belakang:Saya seorang remaja, dan telah merancang dan memprogram proyek elektronik kecil selama beberapa tahun terakhir, bersama dengan berpartisipasi dalam kompetisi robotika. Saya baru-baru ini bekerja untuk memperbarui pengaturan meja saya, dan saya memutuskan bahwa tambahan yang bagus
Jam Animasi LED SMART yang Terhubung ke Web Dengan Panel Kontrol Berbasis Web, Server Waktu Disinkronkan: 11 Langkah (dengan Gambar)
Jam Animasi LED SMART yang Terhubung ke Web Dengan Panel Kontrol Berbasis Web, Server Waktu Disinkronkan: Kisah jam ini kembali ke masa lalu - lebih dari 30 tahun. Ayah saya mempelopori ide ini ketika saya baru berusia 10 tahun, jauh sebelum revolusi LED - kembali ketika LED di mana 1/1000 kecerahan kecemerlangan menyilaukan mereka saat ini. Benar
Touch Controlled Light Dengan Paper Lamp Shade: 14 Langkah (dengan Gambar)
Lampu Terkendali Sentuh Dengan Kap Lampu Kertas: Dalam instruksi ini saya menjelaskan bagaimana Anda dapat membuat lampu yang dikendalikan sentuhan dengan kap lampu yang dibuat dari kertas. Ini adalah Proyek mudah yang dapat dibangun siapa saja di rumah. Ini menggunakan perpustakaan penginderaan kapasitif arduino untuk menyalakan atau mematikan lampu dengan menyentuh o