İçindekiler:

Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot: 6 Adım (Resimli)
Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot: 6 Adım (Resimli)

Video: Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot: 6 Adım (Resimli)

Video: Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot: 6 Adım (Resimli)
Video: How To Control A Solenoid With A Raspberry Pi Using a Relay 2024, Kasım
Anonim
Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot
Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot
Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot
Raspberry Pi Model 3 A+ ile Tarayıcı Kontrollü Roomba Robot

genel bakış

Bu Eğitilebilir Kitap, ölü bir Roomba'ya nasıl yeni bir beyin (Raspberry Pi), gözler (Web kamerası) ve bir web tarayıcısından her şeyi kontrol etmenin bir yolunun nasıl verileceğine odaklanacaktır.

Seri arayüz üzerinden kontrole izin veren birçok Roomba hack var. Mevcut bellenime veya çalışan anakarta sahip bir Roomba ile karşılaşacak kadar şanslı olmadım. Ya Roomba çok eski ya da Roomba öldü. Bu proje için kullandığım Roomba'yı yerel bir ikinci el mağazasında 5 dolara buldum. Hala iyi bir pili vardı, ancak ölü bir anakart. (Aynı zamanda web kamerasını aynı ikinci el mağazasında 5 dolara buldum). Orijinal Roomba'dan tek kullandığım motorlar, şasi ve pil. Bu proje için Roomba kullanmak zorunda değilsiniz. Dilerseniz farklı motorlar, tekerlekler ve şasiler kullanabilirsiniz. Ben sadece bir hurda parçasını kullanılabilir bir şeye dönüştürmekten hoşlanıyorum.

Bu yapı için Raspberry Pi Model 3 A+ ve bir Riorand motor kontrolörü kullandım. Değiştirdiğim Dexter Industries Tarayıcı Kontrollü Robotun kodunu kullanıyorum. Dexter Industries sürümü, Pi'yi, başka bir bilgisayar çalıştıran bir istemci html dosyasından robotlarını (brick pi platformu) kontrol etmenizi sağlayan bir websocket sunucusu olarak kurar.

GPIO pinlerini kullanarak kodu değiştirdim ve tarayıcıda bir düğmeye tıklandığında / kaçış tuşuna basıldığında Pi'nin kapanması için bir yol ekledim. Ayrıca robotu tek bir sayfada kontrol ederken, bir iframe üzerinden bir hareket akışının görüntülenmesine izin vermek için kontrol web sayfasında bazı değişiklikler yaptım. İstemci dosyasını barındırmak için Pi'yi statik bir IP ile ayarladım, böylece ağımdaki herhangi bir bilgisayar veya cihazı kullanarak bağlanabildim.

Basit, ucuz bir temel robotun nasıl oluşturulacağını gösterme umuduyla burada süreci belgeliyorum.

Kullanılan Parçalar

Raspberry Pi 3 A+ (Adafruit Link) 30$

Riorand Çift Motorlu Sürücü Kontrol Cihazı H-Bridge (Amazon Link) 22 $

Motorlar için 12V Pil (Amazon Link) 19 $

Raspberry Pi için 5V Pil (Amazon Link) $10

8GB Mikro SD Kart (Amazon Bağlantısı) $5

Atlama Kabloları (Amazon Bağlantısı) 7 $

Roomba 500 serisi

. Hepsi birlikte 100 doların biraz altında.

Adım 1: Raspbian'ı Kurun ve Statik Bir IP Adresi Kurun

Raspbian'ı Kurun ve Statik Bir IP Adresi Kurun
Raspbian'ı Kurun ve Statik Bir IP Adresi Kurun

Raspbian Stretch Lite kullandım. Masaüstüne gerek görmedim ama dilerseniz masaüstü sürümünü yükleyebilirsiniz.

Raspbian'ı nasıl kuracağınızı zaten bildiğinizi varsayacağım. Yardıma ihtiyacınız varsa Raspberry Pi Vakfı'nın rehberine buradan ulaşabilirsiniz.

Raspbian'ı kurduktan ve çalıştırdıktan sonra, oturum açın ve raspi-config programını çalıştırın.

pi@raspberrypi:~ $ sudo raspi-config

WiFi bağlantınızı raspi-config'de kurun

Seçme

2 Ağ Seçenekleri

Seçme

N2 kablosuz

Bir Ülke seçin, SSID'nizi girin ve parolanızı girin

Raspi-config'de SSH'yi kurun

İlk yapılandırmayı yaptıktan sonra, her şeyi başsız ayarlamak için SSH kullandım. (Monitör kullanıyorsanız bunu atlayabilirsiniz. Robotu durdurup monitöre takmak zorunda kalmadan kodda değişiklik yapmak benim için daha kolay oldu.)

Raspi-config ana menüsüne geri dönün

Seçme

5 Arayüz Seçeneği

Seçme

P2 SSH'si

Seçme

Evet

Raspi-config ana menüsüne geri dönün

Ağınıza bağlı olduğunuzu doğrulayın

pi@raspberrypi:~ $ ifconfig

Buna benzer bir çıktı almalısınız. (IP adresini not edin; daha sonra ihtiyacınız olabilir. ör.192.168.1.18)

wlan0: bayraklar=4163 mtu 1500

inet 192.168.1.18 ağ maskesi 255.255.255.0 yayın 192.168.1.255 inet6 fe80::c74f:42ec:8cd3:2fda önek 64 kapsam kimliği 0x20 ether b8:27:eb:6a:a4:95 txqueuelen 1000 (Ethernet) RX paketleri 44396 bayt 58477 5.5 MiB) RX hataları 0 düştü 0 taşma 0 çerçeve 0 TX paketleri 30530 bayt 39740576 (37.8 MiB) TX hataları 0 düştü 0 taşma 0 taşıyıcı 0 çarpışma 0

İnternete erişebildiğinizi doğrulayın.

pi@raspberrypi:~ $ ping google.com

Buna benzer bir çıktı almalısınız.

PING google.com (216.58.194.110) 56(84) bayt veri.

dfw06s48-in-f14.1e100.net'ten 64 bayt (216.58.194.110): icmp_seq=1 ttl=54 zaman=18.2 ms dfw06s48-in-f14.1e100.net'ten (216.58.194.110) 64 bayt: icmp_seq=2 ttl =54 zaman=19,4 ms dfw06s48-in-f14.1e100.net'ten 64 bayt (216.58.194.110): icmp_seq=3 ttl=54 zaman=23,6 ms dfw06s48-in-f14.1e100.net'ten (216.58.194.110) 64 bayt): icmp_seq=4 ttl=54 zaman=30,2 ms ^C --- google.com ping istatistikleri --- 4 paket iletildi, 4 alındı, %0 paket kaybı, süre 3004ms rtt min/ort/maks/mdev = 18.209/ 22.901/30.267/4.715 ms

Statik bir IP kurun

Ağınızdaki aynı adresi kullanarak robotunuza sürekli olarak bağlanabilmek için statik bir IP kurmak isteyeceksiniz.

Mevcut ağ adresinizi alın e.g.192.168.1.18

Pi ağıma bağlandığında DHCP tarafından otomatik olarak atanan adresi kullanıyorum. Ağınızla eşleştiği ve atanan diğer adreslerle çakışmadığı sürece bunu istediğiniz gibi değiştirebilirsiniz.

dhcp.conf dosyasını bir metin düzenleyicide açın. (nano kullanıyorum)

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

#Örnek statik IP yapılandırmasına ilerleyin ve aşağıdaki satırları değiştirin.

#interface eth0

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

Ağınızla eşleşecek şekilde değiştirin ve her satırın başındaki # işaretini kaldırın.

Örnek:

arayüz wlan0

statik ip_adresi=192.168.1.18 statik yönlendiriciler=192.168.1.1 statik etki alanı_adı_sunucuları=192.168.1.1 8.8.8.8

Kaydet ve çık.

Yeniden başlatın ve Pi'ye SSH üzerinden bağlanın

pi@raspberrypi:~ $ sudo yeniden başlatma

SSH kullanarak başka bir bilgisayardan bağlanın. Windows kullanıcıları PuTTY veya Linux için Windows Alt Sistemini (Windows10) kullanabilir.

ian@bilgisayar:~$ ssh [email protected]

Parolanızı girin (varsayılan ahudududur).

[email protected]'in şifresi:

Şimdi Pi'nizin komut isteminde olmalısınız.

pi@raspberrypi:~$

2. Adım: Motion'ı Kurun ve Yapılandırın

Motion'ı kurun ve yapılandırın
Motion'ı kurun ve yapılandırın

Motion, bir çok güvenlik kamerası/web kamerası projesinde kullanılan bir programdır. Hareketin birçok özelliği vardır. Ancak, web kamerasından 8081 numaralı bağlantı noktasına video akışı yapacak şekilde ayarlıyoruz.

Web Kameranızı Test Edin

Web kameranızı takın ve bağlı usb cihazlarını listeleyin (Bağlandıktan sonra yeniden başlatmanız gerekebilir).

pi@raspberrypi:~ $ lsusb

Buna benzer bir çıktı almalısınız. Logitech C210'a dikkat edin.

Veri Yolu 001 Aygıt 002: Kimlik 046d:0819 Logitech, Inc. Web Kamerası C210

Veri Yolu 001 Aygıt 001: Kimlik 1d6b:0002 Linux Foundation 2.0 kök hub

Kameranız görünmüyorsa uyumlu olmayabilir veya ek sürücüler yüklemeniz gerekebilir.

Hareketi Yükle

Paketleri güncelleyin.

pi@raspberrypi:~ $ sudo apt-get güncellemesi

Motion'ı yükleyin.

pi@raspberrypi:~ $ sudo apt-get yükleme hareketi -y

Motion yüklendikten sonra yapılandırma dosyasını düzenleyin.

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

Aşağıdaki satırları aşağıda eşleşecek şekilde değiştirin.

arka plan programı

genişlik 640 yükseklik 480 kare hızı 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost kapalı webcontrol_localhost kapalı

Önyüklemede Motion Daemon'u başlatın

/etc/default/motion dosyasını açın.

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

Değişmek

start_motion_daemon=evet

Dosyayı kaydet ve çık

yeniden başlat

pi@raspberrypi:~ $ sudo yeniden başlatma

Pi yeniden başlatıldıktan sonra tarayıcıyı açın ve 8081 numaralı bağlantı noktasında tarayıcıya video akışı yaptığınızı doğrulayın.

Örnek:

192.168.1.18:8081

Motion Daemon'da Sorun Giderme

Motion.conf dosyasında farklı seçenekleri denerken, hareket arka plan programının önyüklemede başlamasıyla ilgili sorunlarla karşılaştım.

Hareketi Raspian Stretch'teki hareket arka plan programından önce başlatırsanız, muhtemelen daha sonra önyüklemede başlamasıyla ilgili sorunlarla karşılaşırsınız. Arka plan programını yapılandırmadan "sudo motion" çalıştırmak, kullanıcıya yazma izni vermeden önce /var/log/motion dizinini oluşturur.

3. Adım: Apache'yi Kurun ve Web Kontrol Sayfasını Ayarlayın

Apache'yi Kurun ve Web Kontrol Sayfasını Ayarlayın
Apache'yi Kurun ve Web Kontrol Sayfasını Ayarlayın

Apache, robotun kontrol web sayfasının web sunucusudur. Varsayılan Apache index.html dosyasını github'dan indirilen bir dosya ile değiştireceğiz. Ayrıca hareketli video akışını görüntülemek için birkaç satır kod değiştirecek ve robotu kontrol etmek için komutların nereye gönderileceğini atayacaksınız.

Apache ve Git'i yükleyin

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

Apache ve git yüklendikten sonra dosyaları indirin.

pi@raspberrypi:~ $ git klonu

Roombarobot dizinini açın.

pi@raspberrypi:~ $ cd oda barobotu

/var/www/html klasöründeki index.html dosyasını /home/pi/roombarobot içindeki index.html dosyasıyla değiştirin

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

index.html dosyasını düzenleyin

index.html dosyasını bir metin düzenleyiciyle açın.

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

Bu iki satırı bulun

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

Adım 1'de ayarladığınız statik IP adresiyle "YOURIPADDRESS"i değiştirin ve dosyayı kaydedin.

Örnek:

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

Başka bir bilgisayarda bir tarayıcı açın ve Pi'nizin IP adresini girin. Solda bir kutu, web kameranızdan video akışı ve sağda web kontrol düğmeleri bulunan kontrol web sayfasını görmelisiniz.

Adım 4: Kodu Ayarlayın ve Test Edin

Kodu Kur ve Test Et
Kodu Kur ve Test Et

Bu kod python ile yazılmıştır ve tornado kütüphanesini gerektirir. Kod, 9093 numaralı bağlantı noktasındaki web yuvaları aracılığıyla kontrol web sayfasından komutları dinlemek üzere bir sunucu kurmak için kitaplığı kullanır.

PIP ve Tornado Kitaplığını yükleyin

pip yükle

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

Tornado kitaplığını yükle

pi@raspberrypi:~ $ sudo pip tornado yükleyin

Roombabot Programını Başlatın ve Bağlantıyı Test Edin

roombabot.py programını başlatın

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

Çalıştırdıktan sonra terminalde "Hazır" ifadesini görmelisiniz. Kontrol web sayfasını bir tarayıcıda açın ve bağlan'a tıklayın. Ardından sayfadaki yön düğmelerinden herhangi birine tıklayın. Klavyenizdeki yön tuşlarını da kullanabilirsiniz.

Terminalde buna benzer bir çıktı görmelisiniz.

Hazır

bağlantı açıldı… bağlantı açıldı… alındı: u 8 Çalışıyor İleri bağlantı açıldı… alındı: l 6 Sola dönüyor bağlantı açıldı… alındı: d 2 Çalışıyor Ters bağlantı açıldı… alındı: r 4 Sağa dönüyor

Programı durdurmak için ctrl+c tuşlarına basın.

Pi'yi test etmeyi bitirdikten sonra.

pi@raspberrypi:~$ sudo poweroff

Hatalar

Kontrol web sayfasındaki kapatma düğmesiyle ilgili bir sorun fark ettim. Bazen kapatma düğmesi tıklandığında veya dokunulduğunda hiçbir şey yapmaz. Buna neyin neden olduğunu çözemedim, ancak bir geçici çözüm var. Robotu kapatmak istiyorsanız ve kapatma düğmesi çalışmıyorsa, sayfayı yeniden yükleyin, bağlan düğmesine tıklayın / dokunun ve ardından kapatma düğmesine tıklayın / dokunun. Kapatmalı.

Adım 5: Montaj

toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı

Daha önce de belirtildiği gibi, bu proje için Roomba kullanmanıza gerek yok. İki motoru, iki tekerleği ve çerçevesi olan her şey işe yarar. Roomba'yı parçalara ayırdım ve tekerlek modülleri ve pil hariç her şeyi çıkardım.

Tekerlek Modülleri

Roomba'nın tekerlekleri ve motorları, çıkarılabilir bir modülde bir arada bulunur. Her modül, motor, dişli kutusu, tekerlek, süspansiyon yayı ve arayüz kartını içeren mavi bir dış muhafazaya sahiptir.

Arayüz panosu

Her arayüz kartının kendisine giden altı kablosu vardır. Motoru döndüren iki kablo (Kırmızı[+], Siyah[-]), hall etkisi sensörü için bir veri kablosu, tekerlek düşürme anahtarı için bir kablo, bir 5V kablo ve sensöre güç sağlamak için bir GND kablosu vardır. Arayüz kartına erişmek için modülü ayırmanız gerekecektir. Her şeyi motora geri götürdüm ve motora yeni [+] ve [-] kabloları lehimledim (fotoğraflara bakın). Sensörleri korumak isteyip istemediğiniz size kalmış.

Süspansiyon Yayları

Vakum kısmını çıkardığınızda Roomba'nın ağırlığı atılır. Yayları çıkarmazsanız Roomba açılı olarak oturacaktır. Bunları başlangıçta kaldırdım, ancak halı üzerinde yuvarlanmakta zorlandığımı fark ettiğimde tekrar ekledim. Yayı geri koymak sorunu çözdü.

Motorları Motor Kontrolörüne Kablolama

Motorlar birbirinden uzağa bakıyor. Bu, Roomba'yı ileri yönde sürmek için bir motorun ileri, diğerinin geri dönmesi gerektiği anlamına gelir. Her şeyi bağladıktan sonra bunun hakkında fazla düşünmedim. Sonunda motorları nasıl bağladığımın kodunu yazdım. Bu mutlu bir kazaydı çünkü Raspberry Pi açıldığında/kapatıldığında, GPIO pinlerine voltaj çıkışı oluyor. İşlerimi bağlama şeklim, Roomba, Raspberry Pi açılana kadar (yaklaşık otuz saniye) dönüyor ve kapatıldığında güç kesilene kadar dönüyor. Farklı şekilde kablolanırsa, potansiyel olarak ileri / geri yuvarlanabilir ve bu da rahatsız edici olur. Sonunda bunu motor kontrolörü için basit bir anahtarla düzeltmeyi planlıyorum.

Motorları ve Bataryayı Motor Kontrolörüne Bağlama

Güç- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - -Roomba Pil [+]

Motor 2- - - - - - - - - - - - - - - Siyah- - - - - - - - - - - - -Sol Motor [-] Motor 2- - - - - - - - - - - - - - - Kırmızı- - - - - - - - - - - - - - -Sol Motor [+] Motor 1- - - - - - - - - - - - - - - Siyah- - - - - - - - - - - - - -Sağ Motor[-] Motor 1- - - - - - - - - - - - - - Kırmızı- - - - - - - - - - - - - -Sağ Motor[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - -Roomba Pili [-]

Motor Denetleyicisini Raspberry Pi'ye Kablolama

Motor Kontrol Pimleri Tel Rengi(fotoğraflara bakın) Raspberry Pi Pimleri

GND- - - - - - - - - - - - - - - - - Siyah- - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - Mavi - - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - Yeşil- - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Turuncu - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Kırmızı- - - - - - - - - - - - - - -5V

Elektroniklerin Montajı

Her şeyi bir araya getirmek için fazla bir şey yok. Roomba'yı kasasından çıkardım. Kapak çıkarıldığında, elektronik aksamları monte etmek için mevcut plastik ayırıcıları kolayca klipsleyebilir ve delikler açabilirsiniz. Motorlardan kabloları çalıştırmak için mevcut portlar vardır. Stok Roomba pilini kullanıyorsanız, pil terminallerine erişim için zaten bir kesme vardır.

Piller

Raspberry Pi ve motor kontrolörü için ayrı piller kullandım. Pi'nin pili, cep telefonlarını güçlendirmek için kullanılan sadece 5V'luk bir pil takımıdır. Motor kontrolörü için onunla birlikte gelen orijinal Roomba pilini kullandım. Akü terminalleri etiketlenmemiştir, bu nedenle voltajı motor kontrol ünitesine bağlamadan önce bir voltmetre ile kontrol etmek en iyisidir. Kabloları Roomba piline bağlamak için dört neodimyum mıknatıs kullandım (fotoğraflara bakın). Mıknatıslardan ikisini tellere lehimledim ve diğer ikisini pil terminallerine yapıştırdım. Lehimleme, mıknatısları demanyetize eder. Ancak dıştaki kaplama yine de terminallerdeki mıknatıslara yapışabilir ve elektriği iletebilir. Bu, pilin bağlanmasını ve çıkarılmasını bir parça kek yapar.

Test yapmak

Her şeyi bir araya getirdiğinizde, her şeyi doğru şekilde bağladığınızdan emin olun, robotunuzu bir şeye destekleyin (kaymaması için) ve açın.

Giriş yapın ve roombabot.py programını başlatın

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

Web kontrol sayfasına gidin ve test edin. Her şey doğru bir şekilde bağlanmışsa, düğmelere tıklandığında / ok tuşlarına basıldığında tekerlekler ilgili yönde dönmelidir (bağlan'ı tıklamayı unutmayın).

Adım 6: Python Kodunu Önyüklemede Başlatma / Bitirme

Python Kodunu Önyüklemede Başlatma / Bitirme
Python Kodunu Önyüklemede Başlatma / Bitirme
Python Kodunu Önyüklemede Başlatma / Bitirme
Python Kodunu Önyüklemede Başlatma / Bitirme

Yapmamız gereken son şey Raspbian'a python programını açılışta başlatmasını söylemek. Bunu yapmak için komut dosyası oluşturacağız ve crontab kullanarak yeniden başlatma sırasında çalışacak şekilde programlayacağız.

Komut Dosyasını Oluşturun

pi kullanıcı dizininde startrobot.sh adlı yeni bir komut dosyası oluşturun

pi@raspberrypi:~ $ sudo nano startrobot.sh

Aşağıdaki satırları dosyaya kopyalayın

#!/bin/sh

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

Dosyayı kaydet ve çık

startrobot.sh dosyasını yürütülebilir yapın

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

Test edin (durdurmak için ctrl + c tuşlarına basın)

pi@raspberrypi:~$ sh startrobot.sh

crontab dosyasını düzenleyin

pi@raspberrypi:~$ sudo crontab -e

Dosyanın en altına aşağıdaki satırı ekleyin

#m h dom mon dow komutu

@reboot sh /home/pi/startrobot.sh

Kaydet ve çık

Roombabot.py programı şimdi Pi yeniden başlatıldığında veya kapatıldığında başlamalıdır.

Bitirmek

Bu noktada, ağınızdaki herhangi bir cihazdan tarayıcıyı kullanarak kontrol edebileceğiniz işlevsel bir robotunuz olmalıdır. Evden uzaktayken robota erişebilmek için orijinal bir VPN oluşturup kurduğumdan bu yana bunu biraz daha ileri götürdüm. Gelecekte bazı ek değişiklikler yapmayı planlıyorum. İstediğim zaman kontrolleri devralmaya devam ederken, onu otonom hale getirmeyi ve muhtemelen hareketi takip etmeyi planlıyorum.

Önerilen: