Daftar Isi:

Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+: 6 Langkah (dengan Gambar)
Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+: 6 Langkah (dengan Gambar)

Video: Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+: 6 Langkah (dengan Gambar)

Video: Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+: 6 Langkah (dengan Gambar)
Video: How to build a Raspberry Pi Web Application controlled Robot (EarthRover #1) 2024, Desember
Anonim
Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+
Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+
Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+
Robot Roomba yang Dikendalikan Browser Dengan Raspberry Pi Model 3 A+

Gambaran

Instruksi ini akan fokus pada bagaimana memberi Roomba yang mati otak baru (Raspberry Pi), mata (Webcam), dan cara untuk mengontrol semuanya dari browser web.

Ada banyak peretasan Roomba yang memungkinkan kontrol melalui antarmuka serial. Saya belum cukup beruntung untuk menemukan Roomba yang memiliki firmware saat ini atau motherboard yang berfungsi. Entah Roomba terlalu tua atau Roomba sudah mati. Saya menemukan Roomba yang saya gunakan untuk proyek ini di toko barang bekas lokal seharga $5. Itu masih memiliki baterai yang layak, tetapi motherboard mati. (Saya juga menemukan webcam di toko barang bekas yang sama dengan harga sekitar $5). Semua yang saya gunakan dari Roomba asli adalah motor, sasis, dan baterai. Anda tidak harus menggunakan Roomba untuk proyek ini. Anda dapat menggunakan motor, roda, dan sasis yang berbeda jika Anda mau. Saya hanya ingin mengubah sepotong sampah menjadi sesuatu yang berguna.

Untuk build ini saya menggunakan Raspberry Pi Model 3 A+ dan controller motor Riorand. Saya menggunakan kode dari Robot Terkendali Browser Dexter Industries yang saya modifikasi. Versi Dexter Industries mengatur Pi sebagai server websocket yang memungkinkan Anda untuk mengontrol robot mereka (platform pi bata) dari file html klien yang menjalankan komputer lain.

Saya telah mengubah kode menggunakan pin GPIO dan menambahkan cara agar Pi mati saat tombol diklik / saat tombol escape ditekan di browser. Saya juga membuat beberapa perubahan pada halaman web kontrol untuk memungkinkan melihat aliran gerakan melalui iframe, sambil mengontrol robot semua dalam satu halaman. Saya mengatur Pi dengan IP statis untuk meng-host file klien sehingga saya dapat terhubung menggunakan komputer atau perangkat apa pun di jaringan saya.

Saya mendokumentasikan prosesnya di sini dengan harapan menunjukkan cara membuat robot dasar yang sederhana dan murah.

Bagian yang Digunakan

Raspberry Pi 3 A+ (Adafruit Link) $30

Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) $22

Baterai 12V untuk Motor (Amazon Link) $19

Baterai 5V untuk Raspberry Pi (Amazon Link) $10

Kartu Micro SD 8GB (Amazon Link) $5

Kabel Jumper (Tautan Amazon) $7

Seri Roomba 500

. Semua bersama-sama hanya di bawah $100.

Langkah 1: Instal Raspbian dan Siapkan Alamat IP Statis

Instal Raspbian dan Siapkan Alamat IP Statis
Instal Raspbian dan Siapkan Alamat IP Statis

Saya menggunakan Raspbian Stretch Lite. Saya tidak melihat kebutuhan untuk desktop, tetapi Anda dapat menginstal versi desktop jika Anda mau.

Saya akan menganggap Anda sudah tahu cara menginstal Raspbian. Jika Anda memerlukan bantuan, Anda dapat menemukan panduan Raspberry Pi Foundation di sini.

Setelah Anda menjalankan dan menjalankan Raspbian, login dan jalankan program raspi-config.

pi@raspberrypi:~ $ sudo raspi-config

Siapkan koneksi WiFi Anda di raspi-config

Pilih

2 Opsi Jaringan

Pilih

Wifi N2

Pilih Negara, masukkan SSID Anda, dan masukkan frasa sandi Anda

Siapkan SSH di raspi-config

Setelah saya melakukan konfigurasi awal, saya menggunakan SSH untuk mengatur semuanya tanpa kepala. (Anda dapat melewati ini jika Anda menggunakan monitor. Lebih mudah bagi saya untuk mengubah kode tanpa harus menghentikan robot dan mencolokkannya ke monitor.)

Kembali ke menu utama raspi-config

Pilih

5 Opsi Antarmuka

Pilih

P2 SSH

Pilih

Ya

Kembali ke menu utama raspi-config pilih

Pastikan Anda terhubung ke jaringan Anda

pi@raspberrypi:~ $ ifconfig

Anda akan menerima output yang mirip dengan ini. (Perhatikan alamat IP; Anda mungkin memerlukannya nanti. mis.192.168.1.18)

wlan0: bendera = 4163 mtu 1500

inet 192.168.1.18 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::c74f:42ec:8cd3:2fda prefixlen 64 scopeid 0x20 ether b8:27:eb:6a:a4:95 txqueuelen 1000 (Ethernet) Paket RX 443772696 (byte 584772696 byte 5,5 MiB) RX error 0 turun 0 overruns 0 frame 0 paket TX 30530 byte 39740576 (37,8 MiB) TX error 0 turun 0 overruns 0 pembawa 0 tabrakan 0

Pastikan Anda dapat menjangkau internet.

pi@raspberrypi:~ $ ping google.com

Anda akan menerima output yang mirip dengan ini.

PING google.com (216.58.194.110) 56(84) byte data.

64 byte dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 waktu=18,2 ms 64 byte dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 waktu=19,4 md 64 byte dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 waktu=23.6 md 64 byte dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=4 ttl=54 waktu=30,2 md ^C --- statistik ping google.com --- 4 paket terkirim, 4 diterima, 0% kehilangan paket, waktu 3004ms rtt min/avg/max/mdev = 18,209/ 22.901/30.267/4.715 mdtk

Siapkan IP Statis

Agar dapat terhubung secara konsisten ke robot Anda menggunakan alamat yang sama di jaringan Anda, Anda perlu menyiapkan IP statis.

Dapatkan alamat jaringan Anda saat ini, mis.192.168.1.18

Saya menggunakan alamat yang secara otomatis ditetapkan oleh DHCP ketika Pi terhubung ke jaringan saya. Anda dapat mengubahnya ke apa pun yang Anda suka selama cocok dengan jaringan Anda dan tidak bertentangan dengan alamat lain yang ditetapkan.

Buka dhcp.conf di editor teks. (Saya menggunakan nano)

pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf

Gulir ke bawah ke #Contoh konfigurasi IP statis dan ubah baris berikut.

#antarmuka eth0

#static ip_address=192.168.11.13 #router statis=192.168.11.1 #static domain_name_servers=192.168.11.1 8.8.8.8

Ubah agar sesuai dengan jaringan Anda dan hapus # di awal setiap baris.

Contoh:

antarmuka wlan0

ip_address statis=192.168.1.18 static routers=192.168.1.1 static domain_name_servers=192.168.1.1 8.8.8.8

Simpan dan keluar.

Nyalakan ulang dan sambungkan ke Pi melalui SSH

pi@raspberrypi:~ $ sudo reboot

Hubungkan dari komputer lain menggunakan SSH. Pengguna Windows dapat menggunakan Putty atau Subsistem Windows untuk Linux (Windows10).

ian@komputer:~$ ssh [email protected]

Masukkan kata sandi Anda (defaultnya adalah raspberry).

kata sandi [email protected]:

Anda seharusnya sekarang berada di command prompt Pi Anda.

pi@raspberrypi:~$

Langkah 2: Instal dan Konfigurasikan Gerakan

Instal dan Konfigurasikan Gerakan
Instal dan Konfigurasikan Gerakan

Motion adalah program yang digunakan di banyak proyek kamera / webcam keamanan. Gerak memiliki banyak fitur. Namun, kami mengaturnya untuk hanya melakukan streaming video dari webcam ke port 8081.

Uji Webcam Anda

Colokkan webcam Anda dan daftarkan perangkat usb yang terhubung (Anda mungkin perlu reboot setelah terhubung).

pi@raspberrypi:~ $ lsusb

Anda harus mendapatkan output yang mirip dengan ini. Perhatikan Logitech C210.

Bus 001 Perangkat 002: ID 046d:0819 Logitech, Inc. Webcam C210

Bus 001 Perangkat 001: ID 1d6b:0002 hub root Linux Foundation 2.0

Jika kamera Anda tidak muncul, itu mungkin tidak kompatibel atau Anda mungkin perlu menginstal driver tambahan.

Instal Gerakan

Perbarui paket.

pi@raspberrypi:~ $ sudo apt-get update

Instal Gerakan.

pi@raspberrypi:~ $ sudo apt-get install motion -y

Setelah Motion diinstal, edit file konfigurasi.

pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf

Ubah baris berikut untuk mencocokkan di bawah ini.

daemon aktif

lebar 640 tinggi 480 framerate 100 output_pictures mati ffmpeg_output_movies mati text_right stream_port 8081 stream_quality 100 stream_localhost mati webcontrol_localhost mati

Mulai Motion Daemon saat Boot

Buka file /etc/default/motion.

pi@raspberrypi:~ $ sudo nano /etc/default/motion

Mengubah

start_motion_daemon=ya

Simpan file dan keluar

Menyalakan ulang

pi@raspberrypi:~ $ sudo reboot

Setelah Pi reboot, buka browser dan verifikasi bahwa Anda memiliki streaming video ke browser pada port 8081

Contoh:

192.168.1.18:8081

Memecahkan masalah Motion Daemon

Saya mengalami masalah saat memulai daemon gerakan saat boot ketika saya mencoba opsi yang berbeda di file motion.conf.

Jika Anda memulai gerakan sebelum daemon gerakan di Raspian Stretch, Anda mungkin akan mengalami masalah untuk memulainya saat boot nanti. Menjalankan "sudo motion" tanpa mengonfigurasi daemon untuk melakukannya terlebih dahulu membuat direktori /var/log/motion tanpa memberikan izin menulis kepada pengguna.

Langkah 3: Instal Apache dan Atur Halaman Kontrol Web

Instal Apache dan Atur Halaman Kontrol Web
Instal Apache dan Atur Halaman Kontrol Web

Apache adalah server web untuk halaman web kontrol robot. Kami akan mengganti file index.html Apache default dengan file yang diunduh dari github. Anda juga akan mengubah beberapa baris kode untuk menampilkan aliran video gerak dan menetapkan ke mana harus mengirim perintah untuk mengontrol robot.

Instal Apache dan Git

pi@raspberrypi:~ $ sudo apt-get install apache2 git -y

Setelah apache dan git diinstal, unduh file.

pi@raspberrypi:~ $ git clone

Buka direktori roombarrobot.

pi@raspberrypi:~ $ cd roombarrobot

Ganti file index.html di folder /var/www/html dengan file index.html di /home/pi/roombarbot

pi@raspberrypi:~/roombarbot $ sudo cp index.html /var/www/html

Edit file index.html

Buka file index.html dengan editor teks.

pi@raspberrypi:~/roombarobot $ sudo nano /var/www/html/index.html

Temukan dua baris ini

var host = "ws://YOURIPADDRESS:9093/ws";

Ubah "YOURIPADDRESS" ke alamat IP statis yang Anda siapkan di Langkah 1 dan simpan file.

Contoh:

var host = "ws://192.168.1.18:9093/ws";

Di komputer lain, buka browser dan masukkan alamat IP Pi Anda. Anda akan melihat halaman web kontrol dengan kotak di sebelah kiri, streaming video dari webcam Anda, dan tombol kontrol web di sebelah kanan.

Langkah 4: Siapkan dan Uji Kode

Siapkan dan Uji Kode
Siapkan dan Uji Kode

Kode ini ditulis dengan python dan membutuhkan perpustakaan tornado. Kode menggunakan perpustakaan untuk menyiapkan server untuk mendengarkan perintah dari halaman web kontrol melalui soket web pada port 9093.

Instal PIP dan Perpustakaan Tornado

Instal pip

pi@raspberrypi:~ $ sudo apt-get install python-pip

Instal perpustakaan tornado

pi@raspberrypi:~ $ sudo pip install tornado

Mulai Program Roombabot dan Uji Koneksi

Mulai program roombabot.py

pi@raspberrypi:~$ sudo python /home/pi/roombarrobot/roombabot.py

Setelah berjalan, Anda akan melihat "Siap" di terminal. Buka halaman web kontrol di browser dan klik sambungkan. Kemudian klik salah satu tombol arah pada halaman. Anda juga dapat menggunakan tombol panah pada keyboard Anda.

Anda akan melihat output di terminal yang mirip dengan ini.

Siap

koneksi dibuka… koneksi dibuka… diterima: u 8 Berjalan Maju koneksi dibuka… diterima: l 6 Belok Kiri koneksi dibuka… diterima: d 2 Berjalan Koneksi terbalik dibuka… diterima: r 4 Belok Kanan

Tekan ctrl+c untuk menghentikan program.

Setelah Anda selesai menguji matikan Pi.

pi@raspberrypi:~$ sudo matikan

Bug

Saya melihat ada masalah dengan tombol shutdown pada halaman web kontrol. Terkadang tombol shutdown tidak melakukan apa-apa saat diklik atau diketuk. Saya belum dapat menemukan apa yang menyebabkan ini, tetapi ada solusi. Jika Anda ingin mematikan robot dan tombol shutdown tidak berfungsi, muat ulang halaman, klik / ketuk tombol sambungkan lalu klik / ketuk tombol matikan. Itu harus dimatikan.

Langkah 5: Perakitan

perakitan
perakitan
perakitan
perakitan
perakitan
perakitan
perakitan
perakitan

Seperti yang disebutkan sebelumnya, Anda tidak harus menggunakan Roomba untuk proyek ini. Apa pun dengan dua motor, dua roda, dan bingkai akan berfungsi. Saya membongkar Roomba dan melepas semuanya kecuali modul roda dan baterai.

Modul Roda

Roda dan motor Roomba ditempatkan bersama dalam modul yang dapat dilepas. Setiap modul memiliki rumah luar berwarna biru yang berisi motor, gearbox, roda, pegas suspensi, dan papan antarmuka.

Papan Antarmuka

Setiap papan antarmuka memiliki enam kabel yang mengalir ke sana. Ada dua kabel (Merah[+], Hitam[-]) yang memutar motor, satu kabel data untuk sensor efek hall, satu kabel untuk wheel drop switch, satu kabel 5V, dan satu kabel GND untuk menyalakan sensor. Anda harus membongkar modul untuk mengakses papan antarmuka. Saya melepas semuanya kembali ke motor dan menyolder kabel [+] dan [-] baru ke motor (lihat foto). Terserah Anda apakah Anda ingin mempertahankan sensor atau tidak.

pegas suspensi

Setelah Anda menghapus bagian vakum, berat Roomba akan terlempar. Jika Anda tidak melepas pegas, Roomba akan duduk miring. Saya awalnya menghapus ini, tetapi kemudian menambahkannya kembali ketika saya merasa kesulitan untuk menggulingkan karpet. Mengembalikan pegas memperbaiki masalah.

Menghubungkan motor ke Pengendali Motor

Motor saling berhadapan. Itu berarti bahwa untuk menggerakkan Roomba ke arah depan, satu motor harus berputar ke depan sementara yang lain berputar ke belakang. Saya tidak terlalu memikirkan hal ini sampai setelah saya menghubungkan semuanya. Saya akhirnya hanya menulis kode tentang bagaimana saya awalnya menghubungkan motor. Ini adalah kecelakaan yang menyenangkan karena setiap kali Raspberry Pi hidup/mati, ada output tegangan ke pin GPIO. Cara saya memasang kabel, Roomba berputar hingga Raspberry Pi melakukan booting (sekitar tiga puluh detik) dan berputar saat dimatikan hingga daya dimatikan. Jika kabel berbeda, itu akan berpotensi berguling ke depan / ke belakang yang akan menjengkelkan. Saya berencana untuk memperbaikinya pada akhirnya dengan sakelar sederhana untuk pengontrol motor.

Menghubungkan Motor dan Baterai ke Pengendali Motor

Daya- - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - -Roomba Baterai [+]

Motor 2- - - - - - - - - - - - - - - Hitam- - - - - - - - - - - - -Motor Kiri [-] Motor 2- - - - - - - - - - - - - - - Merah- - - - - - - - - - - - - - -Motor Kiri [+] Motor 1- - - - - - - - - - - - - - Hitam- - - - - - - - - - - - - -Motor Kanan[-] Motor 1- - - - - - - - - - - - - - Merah- - - - - - - - - - - - - -Motor Kanan[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - -Roomba Battery [-]

Menghubungkan Pengontrol Motor ke Raspberry Pi

Pin Pengontrol Motor Warna Kawat (lihat foto) Pin Raspberry Pi

GND- - - - - - - - - - - - - - - - - Hitam- - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - Biru - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - Hijau- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - Kuning - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Oranye - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Merah- - - - - - - - - - - - - - -5V

Memasang Elektronik

Tidak banyak yang masuk ke dalam menempatkan semuanya bersama-sama. Saya menanggalkan roomba di sasisnya. Dengan penutup dilepas, Anda dapat dengan mudah memotong penyangga plastik yang ada dan mengebor lubang untuk memasang elektronik. Ada port yang ada untuk menjalankan kabel dari motor. Jika Anda menggunakan baterai Roomba stok, sudah ada celah untuk akses ke terminal baterai.

Baterai

Saya menggunakan baterai terpisah untuk Raspberry Pi dan pengontrol motor. Baterai Pi hanyalah paket baterai 5V yang digunakan untuk meningkatkan ponsel. Untuk pengontrol motor saya menggunakan baterai Roomba asli yang menyertainya. Terminal baterai tidak diberi label, jadi sebaiknya periksa voltase dengan voltmeter sebelum Anda menghubungkannya ke pengontrol motor. Untuk memasang kabel ke baterai Roomba, saya menggunakan empat magnet neodymium (lihat foto). Saya menyolder dua magnet ke kabel dan dua lainnya saya menempelkan ke terminal baterai. Solder merusak magnet. Namun, lapisan di luar masih bisa menempel pada magnet di terminal dan menghantarkan listrik. Ini membuat menghubungkan dan melepaskan baterai menjadi hal yang mudah.

Pengujian

Setelah Anda memiliki semuanya bersama-sama, verifikasi bahwa Anda memiliki semuanya terhubung dengan benar, menopang robot Anda pada sesuatu (sehingga tidak menggelinding), dan nyalakan.

Masuk dan mulai program roombabot.py

pi@raspberrypi:~$ sudo python /home/pi/roombarrobot/roombabot.py

Buka halaman kontrol web dan ujilah. Jika semuanya terhubung dengan benar, roda harus berputar ke arah yang sesuai saat tombol diklik / tombol panah ditekan (jangan lupa klik sambungkan).

Langkah 6: Memulai Kode Python saat Boot / Menyelesaikan

Memulai Kode Python saat Boot / Menyelesaikan
Memulai Kode Python saat Boot / Menyelesaikan
Memulai Kode Python saat Boot / Menyelesaikan
Memulai Kode Python saat Boot / Menyelesaikan

Hal terakhir yang perlu kita lakukan adalah memberitahu Raspbian untuk memulai program python saat boot. Untuk melakukan ini, kita akan membuat skrip dan menjadwalkannya untuk dijalankan saat reboot menggunakan crontab.

Buat Scriptnya

Buat file skrip baru bernama startrobot.sh di direktori pengguna pi

pi@raspberrypi:~ $ sudo nano startrobot.sh

Salin baris berikut ke dalam file

#!/bin/sh

#startrobot.sh cd / cd /home/pi/roombarobot sudo python roombabot.py cd /

Simpan file dan keluar

Jadikan file startrobot.sh dapat dieksekusi

pi@raspberrypi:~$ sudo chmod 755 startrobot.sh

Ujilah (Tekan ctrl + c untuk berhenti)

pi@raspberrypi:~$ sh startrobot.sh

Edit file crontab

pi@raspberrypi:~$ sudo crontab -e

Tambahkan baris berikut ke bagian bawah file

# mh dom mon dow perintah

@reboot sh /home/pi/startrobot.sh

Simpan dan keluar

Program roombabot.py sekarang harus dimulai ketika Pi di-boot ulang atau didaur ulang daya.

Menyelesaikan

Pada titik ini Anda harus memiliki robot fungsional yang dapat Anda kendalikan menggunakan browser dari perangkat apa pun di jaringan Anda. Saya telah mengambil ini sedikit lebih jauh sejak membangun dan mengatur VPN asli untuk dapat mengakses robot ketika saya jauh dari rumah. Saya berniat untuk membuat beberapa perubahan tambahan di masa depan. Saya berencana untuk membuatnya otonom dan mungkin mengikuti gerakan sambil tetap bisa mengambil alih kendali saat saya mau.

Direkomendasikan: