Isi kandungan:

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

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

Video: Robot Roomba Dikendalikan Penyemak Imbas Dengan Raspberry Pi Model 3 A +: 6 Langkah (dengan Gambar)
Video: XIAOMI Robot Vacuum Cleaner Pel untuk Menyapu Debu Rumah Mensterilkan 2700PA Topan. 2024, November
Anonim
Robot Roomba Dikendalikan Penyemak Imbas Dengan Raspberry Pi Model 3 A +
Robot Roomba Dikendalikan Penyemak Imbas Dengan Raspberry Pi Model 3 A +
Robot Roomba yang Dikendalikan Penyemak Imbas Dengan Raspberry Pi Model 3 A +
Robot Roomba yang Dikendalikan Penyemak Imbas Dengan Raspberry Pi Model 3 A +

Gambaran keseluruhan

Instructable ini akan memberi tumpuan kepada bagaimana memberi Roomba otak baru (Raspberry Pi), mata (Kamera Web), dan cara untuk mengawal segala-galanya dari penyemak imbas web.

Terdapat banyak peretasan Roomba yang membenarkan kawalan melalui antara muka bersiri. Saya tidak cukup bernasib baik untuk menemui Roomba yang mempunyai firmware semasa atau motherboard yang berfungsi. Sama ada Roomba terlalu tua atau Roomba sudah mati. Saya dapati Roomba yang saya gunakan untuk projek ini di tong barang simpanan barang berjimat tempatan dengan harga $ 5. Ia masih mempunyai bateri yang baik, tetapi papan induk yang mati. (Saya juga menjumpai kamera web di kedai barang bekas yang sama dengan harga sekitar $ 5). Yang saya gunakan dari Roomba yang asli adalah motor, casis, dan bateri. Anda tidak perlu menggunakan Roomba untuk projek ini. Anda boleh menggunakan motor, roda, dan casis yang berbeza jika anda mahu. Saya hanya suka mengubah sekeping sampah menjadi sesuatu yang boleh digunakan.

Untuk membina ini saya menggunakan Raspberry Pi Model 3 A + dan pengawal motor Riorand. Saya menggunakan kod dari Robot Terkawal Penyemak Imbas Industri Dexter yang saya ubah suai. Versi Dexter Industries menyiapkan Pi sebagai pelayan soket web yang membolehkan anda mengawal robot mereka (platform pi bata) dari fail html klien yang menjalankan komputer lain.

Saya telah menukar kod menggunakan pin GPIO dan menambahkan cara untuk Pi dimatikan apabila butang diklik / ketika tombol melarikan diri ditekan di penyemak imbas. Saya juga membuat beberapa perubahan pada halaman web kawalan untuk membolehkan melihat aliran gerakan melalui iframe, sementara mengendalikan robot semuanya dalam satu halaman. Saya menyiapkan Pi dengan IP statik untuk menghoskan fail klien sehingga saya dapat berhubung menggunakan komputer atau peranti apa pun di rangkaian saya.

Saya mendokumentasikan proses di sini dengan harapan dapat menunjukkan cara membuat robot asas yang sederhana dan murah.

Bahagian Yang Digunakan

Raspberry Pi 3 A + (Pautan Adafruit) $ 30

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

Bateri 12V untuk Motor (Pautan Amazon) $ 19

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

Kad SD Micro 8GB (Pautan Amazon) $ 5

Jumper Wires (Amazon Link) $ 7

Siri Roomba 500

. Semua bersama kurang dari $ 100.

Langkah 1: Pasang Raspbian dan Sediakan Alamat IP Statik

Pasang Raspbian dan Sediakan Alamat IP Statik
Pasang Raspbian dan Sediakan Alamat IP Statik

Saya menggunakan Raspbian Stretch Lite. Saya tidak melihat keperluan untuk desktop, tetapi anda mungkin memasang versi desktop jika anda mahu.

Saya akan menganggap anda sudah tahu cara memasang Raspbian. Sekiranya anda memerlukan bantuan, anda boleh mendapatkan panduan Raspberry Pi Foundation di sini.

Sebaik sahaja anda menghidupkan dan menjalankan Raspbian, log masuk dan jalankan program raspi-config.

pi @ raspberrypi: ~ $ sudo raspi-config

Siapkan sambungan WiFi anda dalam raspi-config

Pilih

2 Pilihan Rangkaian

Pilih

Wi-fi N2

Pilih Negara, masukkan SSID anda, dan masukkan frasa laluan anda

Sediakan SSH dalam raspi-config

Sebaik sahaja saya melakukan konfigurasi awal, saya menggunakan SSH untuk mengatur semuanya tanpa kepala. (Anda boleh melewatkan ini jika menggunakan monitor. Lebih mudah bagi saya untuk membuat perubahan pada kod tanpa perlu menghentikan robot dan memasangnya ke monitor.)

Kembali ke menu utama raspi-config

Pilih

5 Pilihan Antaramuka

Pilih

P2 SSH

Pilih

Ya

Kembali ke menu utama raspi-config pilih

Sahkan bahawa anda disambungkan ke rangkaian anda

pi @ raspberrypi: ~ $ ifconfig

Anda harus menerima output yang serupa dengan ini. (Perhatikan alamat IP; anda mungkin memerlukannya kemudian. Mis.192.168.1.18)

wlan0: flags = 4163 mtu 1500

inet 192.168.1.18 netmask 255.255.255.0 siaran 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda prefixlen 64 lingkup 0x20 eter b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) paket RX 44396 byte 5847726 (5.5 MiB) Kesalahan RX 0 jatuh 0 overruns 0 bingkai 0 paket TX 30530 byte 39740576 (37.8 MiB) Kesalahan TX 0 jatuh 0 overrun 0 pembawa 0 perlanggaran 0

Sahkan bahawa anda boleh menjangkau internet.

pi @ raspberrypi: ~ $ ping google.com

Anda harus menerima output yang serupa dengan ini.

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

64 bait dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 time = 18.2 ms 64 bait dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 waktu = 19.4 ms 64 bait dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 waktu = 23.6 ms 64 bait dari dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 time = 30.2 ms ^ C --- statistik ping google.com --- 4 paket dihantar, 4 diterima, 0% kehilangan paket, masa 3004ms rtt min / avg / max / mdev = 18.209 / 22.901 / 30.267 / 4.715 ms

Sediakan IP Statik

Untuk dapat menyambung ke robot anda secara konsisten menggunakan alamat yang sama di rangkaian anda, anda ingin menyediakan IP statik.

Dapatkan alamat rangkaian semasa anda misalnya.192.168.1.18

Saya menggunakan alamat yang secara automatik diberikan oleh DHCP ketika Pi tersambung ke rangkaian saya. Anda boleh mengubahnya menjadi apa sahaja yang anda suka asalkan sesuai dengan rangkaian anda dan tidak bertentangan dengan alamat lain yang diberikan.

Buka dhcp.conf dalam penyunting teks. (Saya menggunakan nano)

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

Tatal ke bawah ke #Contoh konfigurasi IP statik dan ubah baris berikut.

#interface et0

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

Ubah agar sesuai dengan rangkaian anda dan hapus # di awal setiap baris.

Contoh:

antara muka wlan0

statik ip_address = 192.168.1.18 penghala statik = 192.168.1.1 domain_nama_servis statik = 192.168.1.1 8.8.8.8

Simpan dan keluar.

Reboot dan sambungkan ke Pi melalui SSH

pi @ raspberrypi: ~ $ sudo reboot

Sambung dari komputer lain menggunakan SSH. Pengguna Windows boleh menggunakan PuTTY atau Windows Subsistem untuk Linux (Windows10).

ian @ komputer: ~ $ ssh [email protected]

Masukkan kata laluan anda (lalai adalah raspberry).

kata laluan [email protected]:

Anda sekarang harus berada di prompt arahan Pi anda.

pi @ raspberrypi: ~ $

Langkah 2: Pasang dan Konfigurasikan Gerak

Pasang dan Konfigurasi Motion
Pasang dan Konfigurasi Motion

Motion adalah program yang digunakan dalam banyak projek kamera keselamatan / kamera web. Motion mempunyai banyak ciri. Namun, kami menyiapkannya untuk hanya mengalirkan video dari kamera web ke port 8081.

Uji Webcam Anda

Pasang kamera web anda dan senaraikan peranti usb yang disambungkan (Anda mungkin perlu reboot selepas menyambung).

pi @ raspberrypi: ~ $ lsusb

Anda harus mendapat output yang serupa dengan ini. Perhatikan Logitech C210.

Bas 001 Peranti 002: ID 046d: 0819 Logitech, Inc. Webcam C210

Bas 001 Peranti 001: ID 1d6b: 0002 hab root Linux Foundation 2.0

Sekiranya kamera anda tidak muncul, kamera mungkin tidak serasi atau anda mungkin perlu memasang pemacu tambahan.

Pasang Gerak

Kemas kini pakej.

pi @ raspberrypi: ~ $ sudo apt-get kemas kini

Pasang Gerak.

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

Setelah Motion dipasang edit fail konfigurasi.

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

Tukar garis berikut untuk dipadankan di bawah.

daemon dihidupkan

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

Mulakan Motion Daemon di Boot

Buka fail / etc / default / motion.

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

Bertukar kepada

start_motion_daemon = ya

Simpan fail dan keluar

But semula

pi @ raspberrypi: ~ $ sudo reboot

Setelah Pi reboot, buka penyemak imbas dan sahkan bahawa anda mempunyai streaming video ke penyemak imbas di port 8081

Contoh:

192.168.1.18:8081

Menyelesaikan masalah Motion Daemon

Saya menghadapi masalah untuk memulakan daemon gerakan semasa boot semasa saya mencuba pelbagai pilihan dalam fail motion.conf.

Sekiranya anda memulakan gerakan sebelum daemon gerakan di Raspian Stretch, anda mungkin akan menghadapi masalah untuk memulakannya di boot kemudian hari. Menjalankan "sudo motion" tanpa mengkonfigurasi daemon untuk melakukannya terlebih dahulu membuat direktori / var / log / motion tanpa memberikan kebenaran menulis kepada pengguna.

Langkah 3: Pasang Apache dan Siapkan Halaman Kawalan Web

Pasang Laman Kawalan Web Apache dan Persediaan
Pasang Laman Kawalan Web Apache dan Persediaan

Apache adalah pelayan web untuk laman web kawalan robot. Kami akan menggantikan fail index.html Apache lalai dengan fail yang dimuat turun dari github. Anda juga akan menukar beberapa baris kod untuk memaparkan aliran video gerakan dan menetapkan tempat untuk menghantar arahan untuk mengawal robot.

Pasang Apache dan Git

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

Setelah apache dan git dipasang muat turun fail.

pi @ raspberrypi: ~ $ git clone

Buka direktori barbar.

pi @ raspberrypi: ~ $ cd roombarobot

Ganti fail index.html di folder / var / www / html dengan fail index.html di / home / pi / roombarobot

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

Edit fail index.html

Buka fail index.html dengan penyunting teks.

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

Cari dua baris ini

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

Tukar "YOURIPADDRESS" ke alamat IP statik yang anda tetapkan pada Langkah 1 dan simpan failnya.

Contoh:

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

Di komputer lain, buka penyemak imbas dan masukkan alamat IP Pi anda. Anda harus melihat halaman web kawalan dengan kotak di sebelah kiri, streaming video dari kamera web anda, dan butang kawalan web di sebelah kanan.

Langkah 4: Sediakan dan Uji Kod

Sediakan dan Uji Kod
Sediakan dan Uji Kod

Kod ini ditulis dalam python dan memerlukan perpustakaan tornado. Kod menggunakan perpustakaan untuk menubuhkan pelayan untuk mendengarkan perintah dari laman web kawalan melalui soket web di port 9093.

Pasang PIP dan Perpustakaan Tornado

Pasang pip

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

Pasang perpustakaan tornado

pi @ raspberrypi: ~ $ sudo pip pasang puting beliung

Mulakan Program Roombabot dan Uji Sambungan

Mulakan program roombabot.py

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

Setelah berjalan, anda akan melihat "Siap" di terminal. Buka halaman web kawalan dalam penyemak imbas dan klik sambung. Kemudian klik mana-mana butang arah di halaman. Anda juga boleh menggunakan kekunci anak panah pada papan kekunci anda juga.

Anda mesti melihat output di terminal yang serupa dengan ini.

Sedia

sambungan dibuka… sambungan dibuka… diterima: u 8 Sambungan Lari ke Depan dibuka… diterima: l 6 Putar Sambungan Kiri dibuka… diterima: d 2 Sambungan Lari Berbalik dibuka… diterima: r 4 Putar Kanan

Tekan ctrl + c untuk menghentikan program.

Setelah selesai menguji pemadaman Pi.

pi @ raspberrypi: ~ $ sudo poweroff

Pepijat

Saya perhatikan ada masalah dengan butang tutup pada halaman web kawalan. Kadang-kadang butang tutup tidak melakukan apa-apa apabila diklik atau diketuk. Saya belum dapat mengetahui apa yang menyebabkannya, tetapi ada jalan keluarnya. Sekiranya anda ingin mematikan robot dan butang shutdown tidak berfungsi, muat semula halaman, klik / ketuk butang sambung dan kemudian klik / ketuk butang tutup. Ia harus mematikan.

Langkah 5: Perhimpunan

perhimpunan
perhimpunan
perhimpunan
perhimpunan
perhimpunan
perhimpunan
perhimpunan
perhimpunan

Seperti yang telah disebutkan sebelumnya, anda tidak perlu menggunakan Roomba untuk projek ini. Apa sahaja dengan dua motor, dua roda dan bingkai akan berfungsi. Saya melepaskan Roomba dan mengeluarkan semuanya kecuali modul roda dan bateri.

Modul Roda

Roda dan motor Roomba dipasang bersama dalam modul yang boleh ditanggalkan. Setiap modul mempunyai perumahan luar berwarna biru yang berisi motor, kotak gear, roda, spring suspensi, dan papan antara muka.

Papan antara muka

Setiap papan antara muka mempunyai enam wayar berjalan ke arahnya. Terdapat dua wayar (Merah [+], Hitam [-]) yang memutar motor, satu wayar data untuk sensor kesan dewan, satu wayar untuk suis penurunan roda, satu wayar 5V, dan satu wayar GND untuk menghidupkan sensor. Anda perlu melepaskan modul untuk mengakses papan antara muka. Saya mengeluarkan semuanya kembali ke motor dan memasang kabel [+] dan [-] baru ke motor (lihat gambar). Terpulang kepada anda sama ada anda mahu mengekalkan sensor atau tidak.

Mata Air Penggantungan

Sebaik sahaja anda membuang bahagian vakum, berat badan Roomba akan dibuang. Sekiranya anda tidak mengeluarkan mata air, Roomba akan duduk bersudut. Pada asalnya saya membuangnya, tetapi kemudian menambahkannya semula ketika saya merasa sukar untuk menggulung permaidani. Meletakkan spring kembali memperbaiki masalah.

Pendawaian motor ke Pengawal Motor

Motor saling berhadapan. Ini bermaksud bahawa untuk menggerakkan Roomba ke arah depan, satu motor harus berpusing ke depan sementara yang lain berpusing ke belakang. Saya tidak banyak berfikir tentang perkara ini sehingga selepas saya menyusun semuanya. Saya akhirnya menulis kod tentang bagaimana saya pada mulanya memasang kabel motor. Ini adalah kemalangan yang menggembirakan kerana setiap kali Raspberry Pi menghidupkan / mematikan, terdapat voltan output ke pin GPIO. Dengan cara saya memasang kabel, Roomba berputar sehingga Raspberry Pi dimuat (kira-kira tiga puluh saat) dan berputar ketika dimatikan sehingga kuasa dikeluarkan. Sekiranya berwayar secara berbeza, ia berpotensi menggulung ke depan / ke belakang yang akan menjengkelkan. Saya bercadang untuk membetulkannya dengan suis sederhana untuk pengawal motor.

Menyambungkan Motor dan Bateri ke Pengawal Motor

Kuasa- - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - - -Bateri Roomba [+]

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

Pendawaian Pengawal Motor ke Raspberry Pi

Warna Kawat Pin Pengawal Motor (lihat gambar) Pin Raspberry Pi

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

Pemasangan Elektronik

Tidak banyak yang menyatukan semuanya. Saya menanggalkan ruang biliknya. Dengan penutupnya dilepaskan, anda boleh dengan mudah memotong penutup plastik yang ada dan menggerudi lubang untuk memasang elektronik. Terdapat port yang ada untuk menjalankan kabel dari motor. Sekiranya anda menggunakan stok bateri Roomba, sudah ada jalan keluar untuk akses ke terminal bateri.

Bateri

Saya menggunakan bateri berasingan untuk Raspberry Pi dan pengawal motor. Bateri Pi hanyalah pek bateri 5V yang digunakan untuk meningkatkan telefon bimbit. Untuk pengawal motor saya menggunakan bateri Roomba asli yang disertakan dengannya. Terminal bateri tidak dilabel, jadi sebaiknya periksa voltan dengan voltmeter sebelum anda memasangnya ke pengawal motor. Untuk memasang wayar ke bateri Roomba, saya menggunakan empat magnet neodymium (lihat foto). Saya menyolder dua magnet ke wayar dan dua lagi magnet saya terpasang pada terminal bateri. Pematerian mendagnetkan magnet. Walau bagaimanapun, lapisan di luar masih boleh melekat pada magnet di terminal dan mengalirkan elektrik. Ini menjadikan penyambungan dan pemutus bateri menjadi sebiji kek.

Ujian

Setelah anda menyatukan semuanya, sahkan bahawa anda mempunyai semua kabel yang betul, tentukan robot anda pada sesuatu (supaya ia tidak tersekat), dan hidupkan.

Log masuk dan mulakan program roombabot.py

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

Pergi ke halaman kawalan web dan mengujinya. Sekiranya semuanya dikabelkan dengan betul, roda harus berputar ke arah yang sesuai apabila butang diklik / kekunci anak panah ditekan (jangan lupa klik sambung).

Langkah 6: Memulakan Python Code pada Boot / Finishing Up

Memulakan Kod Python pada Boot / Finishing Up
Memulakan Kod Python pada Boot / Finishing Up
Memulakan Kod Python pada Boot / Finishing Up
Memulakan Kod Python pada Boot / Finishing Up

Perkara terakhir yang perlu kita lakukan ialah memberitahu Raspbian untuk memulakan program python semasa boot. Untuk melakukan ini, kita akan membuat skrip dan menjadualkannya untuk dijalankan pada reboot menggunakan crontab.

Buat Skrip

Buat fail skrip baru yang dipanggil startrobot.sh di direktori pengguna pi

pi @ raspberrypi: ~ $ sudo nano startrobot.sh

Salin baris berikut ke dalam fail

#! / bin / sh

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

Simpan fail dan keluar

Jadikan fail startrobot.sh dapat dilaksanakan

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

Uji itu (Tekan ctrl + c untuk berhenti)

pi @ raspberrypi: ~ $ sh startrobot.sh

Edit fail crontab

pi @ raspberrypi: ~ $ sudo crontab -e

Tambahkan baris berikut ke bahagian bawah fail

# m h dom mon dow perintah

@reboot sh /home/pi/startrobot.sh

Simpan dan keluar

Program roombabot.py kini harus dimulakan apabila Pi dihidupkan semula atau dihidupkan.

Selesai

Pada ketika ini anda harus mempunyai robot berfungsi yang dapat anda kendalikan menggunakan penyemak imbas dari mana-mana peranti di rangkaian anda. Saya telah mengambil ini sedikit lebih jauh sejak yang asli membina dan menyediakan VPN untuk dapat mengakses robot ketika saya jauh dari rumah. Saya berhasrat untuk membuat beberapa perubahan tambahan pada masa akan datang. Saya merancang untuk menjadikannya autonomi dan mungkin mengikuti pergerakan sementara masih dapat mengambil alih kawalan ketika saya mahu.

Disyorkan: