İçindekiler:

Web Kontrollü Gezici: 14 Adım (Resimlerle)
Web Kontrollü Gezici: 14 Adım (Resimlerle)

Video: Web Kontrollü Gezici: 14 Adım (Resimlerle)

Video: Web Kontrollü Gezici: 14 Adım (Resimlerle)
Video: Adım at para kazan hîlesi ( Arapların taktiği 😅 ) 2024, Temmuz
Anonim
Web Kontrollü Gezici
Web Kontrollü Gezici
Web Kontrollü Gezici
Web Kontrollü Gezici

Robotlarla inşa etmek ve oynamak, hayattaki en büyük suçlu zevkimdir. Diğerleri golf veya kayak oynuyor, ama ben robotlar yapıyorum (çünkü golf veya kayak oynayamam:-). Rahatlatıcı ve eğlenceli buluyorum! Botlarımın çoğunu yapmak için şasi kitleri kullanıyorum. Kitleri kullanmak, yapmaktan daha çok hoşlandığım şeyi, yazılımı ve elektronikleri yapmama yardımcı oluyor ve ayrıca tüm başparmaklarım için daha iyi bir kasa sağlıyor.

Bu Eğitilebilir Kitapta, basit ama sağlam bir Wifi/web kontrollü gezici yapmak için ne gerektiğine bakacağız. Kullanılan şasi Actobotics Gooseneck'tir. Ben boyutu, genişletilebilirliği ve maliyeti nedeniyle seçtim ancak kendi seçtiğiniz herhangi bir şasiyi kullanabilirsiniz.

Böyle bir proje için sağlam bir tek kartlı bilgisayara ihtiyacımız olacak ve bu bot için Linux tabanlı bir bilgisayar olan Raspberry Pi (RPI) kullanmayı seçtim. RPI (ve Linux) bize birçok kodlama seçeneği sunar ve kodlama tarafı için Python kullanılacaktır. Web arayüzü için Python için hafif bir web çerçevesi olan Flask kullanıyorum.

Motorları sürmek için bir RoboClaw 2x5a seçtim. Komuta etmek için basit seri iletişime izin verir ve RPI ve Deveboynu üzerindeki motorlarla iyi çalışır.

Son olarak, uzaktan sürmek için POV tipi video geri bildirimi için bir web kamerası vardır. Her konuyu daha sonra daha ayrıntılı olarak ele alacağım.

Adım 1: Donanım Gerekli

Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
  • Actobotics Gooesneck şasi veya seçtiğiniz uygun bir yedek
  • Seçtiğiniz Raspberry Pi (veya klonu) - Bu botta bir RPI model B kullanılır, ancak en az iki USB bağlantı noktası olan herhangi biri çalışır
  • Standart Servo Plakası B x1
  • 90° Tek Açılı Kanal Braketi x1
  • RoboClaw 2x5a motor sürücüsü
  • S3003 veya benzeri standart boyutlu servo
  • Küçük breadboard veya Mini breadboard
  • Dişi - Dişi jumper telleri
  • Erkekten Kadına atlama telleri
  • Web kamerası (isteğe bağlı) - Logitech C110 kullanıyorum ve işte RPI için desteklenen kameraların listesi
  • Servo güç için 5v-6v güç kaynağı
  • Tahrik motoruna güç sağlamak için 7.2v-11.1v pil
  • RPI için 5v 2600mah (veya daha yüksek) USB güç bankası
  • USB Wifi adaptörü

Botumda, onu biraz daha Arazi-İç Mekan yapmak için 4 tekerlekler kullanıyorum. Bu seçenek için şunlara ihtiyacınız olacak:

  • 4" Ağır Hizmet Tekerleği x2
  • 4mm Delik Seti Vida Göbeği (0,770 inç) x2

Adım 2: Kasanın Montajı

Şasinin Montajı
Şasinin Montajı
Şasinin Montajı
Şasinin Montajı
Şasinin Montajı
Şasinin Montajı

İlk önce kasa veya video ile birlikte verilen talimatları izleyerek kasayı monte edin. Bitirdikten sonra görüntü gibi bir şeye sahip olmalısınız. NOT: Boyun kısmını monte ederken, montaj braketini kapalı bırakmanız yeterlidir.

Botumda, şasi ile birlikte gelen tekerlekleri 4 ağır hizmet tipi tekerlekler için değiştirmeyi seçtim. Bu isteğe bağlıdır ve siz aynısını yapmak istemediğiniz sürece gerekli değildir.

Adım 3: Elektroniği Monte Etme

Elektroniklerin Montajı
Elektroniklerin Montajı
Elektroniklerin Montajı
Elektroniklerin Montajı
Elektroniklerin Montajı
Elektroniklerin Montajı

Gooseneck, elektronik cihazlarınızı monte etmek için çok fazla alana ve seçeneğe sahiptir. Bu resimleri size bir kılavuz olarak veriyorum, ancak hepsini nasıl düzenlemek istediğinizi seçebilirsiniz. Kartı ve pilleri monte etmek için ayırıcılar, çift taraflı bant, Velcro veya servo bant kullanabilirsiniz.

4. Adım: Web Kamerasını Ekleme

Web Kamerasını Ekleme
Web Kamerasını Ekleme
Web Kamerasını Ekleme
Web Kamerasını Ekleme
Web Kamerasını Ekleme
Web Kamerasını Ekleme

Bu adım için 90 derecelik braketi, hafif servo göbeği ve.3125 vidalardan dört (4) tanesini alın:

  • Servo göbeğini alın ve braketin bir tarafına yerleştirin ve resimde gösterildiği gibi.2125" vidalarla birbirine sabitleyin.
  • Ardından servoyu servo braketine monte edin
  • 90 derecelik braketi servo korna ile servo omurgasına takın ve servo ile birlikte gelen korna vidasını kullanarak bunları birbirine bağlayın
  • Şimdi Servo'yu braketteki diğer vidalarla kaz boynunun üstüne monte edin
  • Kamerayı fermuarlı veya çift taraflı bantla 90 derecelik brakete monte edin

Gerekirse kılavuzlar için resimleri kullanın.

Adım 5: Hepsini Kablolama

Hepsini Kablolama
Hepsini Kablolama
Hepsini Kablolama
Hepsini Kablolama
Hepsini Kablolama
Hepsini Kablolama
Hepsini Kablolama
Hepsini Kablolama

Kablolama bu robot için oldukça düz.

Motorlar:

Henüz yapmadıysanız, her iki motorda da lehim uçları

Robotların ön tarafı (kaz boyunlu uç) sizden uzağa bakarken:

  • Sol motordaki motor kablolarını M1A ve M1B kanalına bağlayın
  • Sağ motordaki motor kablolarını M2A ve M2B kanalına bağlayın

Toprak (GND) bağlantıları:

  • RoboClaw'daki bir topraklama pimini toprak atlama kablosuna bağlayın. RoboClaw'daki topraklama pimi çizgisi merkeze en yakın (resme bakın)
  • RPI üzerindeki PIN 6'yı jumper kartına bağlayın. Pin atamaları için RPI başlık resmine bakın.
  • GND'yi servo pil takımından atlama kartındaki pinlerden birine bağlayın.
  • Atlama panosundan servo GND teline bir atlama teli geçirin.

RPI'dan RoboClaw'a:

RPI GPIO14 TXD pinini RoboClaw S1 pinine bağlayın

Güç:

  • POS kablosunu servo pilden servo POS kablosuna bağlayın
  • POS kablosunu motor pilinden RoboClaw motor güç giriş terminalinin POS'una (+) bağlayın. Şimdilik GND terminalini bağlantısız bırakacağız.

6. Adım: RPI'yi Ayarlama

RPI'yi Ayarlama
RPI'yi Ayarlama

Buradaki kullanıcının Linux ve RPI hakkında biraz bilgisi olduğunu varsayıyorum. Birinin nasıl kurulacağını veya bağlanacağını anlatmıyorum. Bununla ilgili yardıma ihtiyacınız varsa, aşağıdaki sayfaları kullanın.

RPI kurulumunuzu almak için aşağıdaki sayfalara bir göz atın:

  • RPI Temel Kurulumu
  • RPI Hızlı başlangıç kılavuzu
  • NOOBS kurulum guild

Genel atlama sayfaları için, RPI ana sayfası ve eLinux sayfaları başlamak için harika yerlerdir.

RPI genel Wifi kurulumu için bu bağlantıya bakın.

Botta bir tür kamera veya web kamerası kullanmayı planlıyorsanız, gerekli temel dosyaları almak için bu sayfalara bakın.

  • RPI kamera kurulumu
  • eLinix RPI kamera kurulumu

Video akışı:

Video akışının bir RPI üzerinde çalışmasını sağlamanın birkaç yolu var, ancak tercih ettiğim yöntem Motion kullanmak.

RPI'nize kurmak için şunu çalıştırın: sudo apt-get install motion

Bu talimat, onu akış için de ayarlamaya devam ediyor.

7. Adım: RPI Seri Bağlantı Noktasını Yapılandırma

Bu porttan RoboClaw motor kontrolörü ile konuşmak istediğimiz için RX ve TX kullanmak için Linux konsol modunu devre dışı bırakmamız gerekecek. Bunu yapmak için bu yöntemi veya bu aracı kullanabilirsiniz. Sonunda ikisi de aynı şeyi yaptığı için yöntemde seçim sizin.

Adım 8: Python Modüllerinin Kurulumu

Python paketi yükleyici pip'in yanı sıra RPI'da kurulu python'a ihtiyacınız olacak.

pip yüklemek için şunları yapın:

  1. sudo apt-get install python-setuptools
  2. sudo easy_install pip

Sonra:

  1. sudo pip yükleme şişesi
  2. sudo pip kurulum pyserial
  3. sudo pip RPIO'yu kurun

Bu, kodun çalışması için gereken tüm modüller olacaktır.

9. Adım: RoboClaw'ı Ayarlama

19200 baud'da Standart Seri Modda RoboClaw ile konuşan robot kodum var.

Bunun için RoboClaw'ı ayarlamak için şunları yapın:

  1. RoboClaw'daki "MODE" düğmesine basın
  2. Gecikmeler arasında LED 5 (beş) kez yanıp sönene kadar set düğmesine basın.
  3. Kaydetmek için "LIPO" düğmesine basın
  4. Daha sonra gecikmeler arasında LED 3 (üç) kez yanıp sönene kadar "SET" düğmesine basın.
  5. Kaydetmek için LIPO düğmesine basın

Motor kontrolörünü ayarlamak için bu kadar. Gerekirse daha fazla bilgi için yukarıda bağlantılı pdf'ye bakın.

Adım 10: Rover Programının/dosyalarının kurulması

rover.zip dosyasını indirin ve pi kullanıcı dizininizdeki RPI'nize kopyalayın.

Linux veya Mac kullanıyorsanız, bunu yapmak için 'scp'yi kullanabilirsiniz:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

Windows için pscp'yi indirip kullanabilir ve ardından şunları yapabilirsiniz:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

Zip dosyası RPI'ye kopyalandığında, pi kullanıcısı olarak oturum açın.

Şimdi çalıştırın:

rover.zip dosyasını aç

Bu, dosyaları 'rover' adlı bir klasöre açar ve bu klasörün altında aşağıdakiler bulunur:

  • restrover.py (Robotun python kodu)
  • statik (kontrol sayfasındaki düğmeler için görüntü dosyalarını tutar)
  • şablonlar (index.htlm dosyasını, kontrol web sayfasını tutar)

Bir web kamerası kullanıyorsanız, şablon klasöründeki index.html dosyasının altına yakın olan satırı değiştirin. IFRAME satırındaki URL'yi, video akışınızın src URL'si ile eşleşecek şekilde değiştirin.

Adım 11: Bot Up'ı Başlatma

Bot Up'ı Başlatma
Bot Up'ı Başlatma

USB gücünü RPI'ye bağlayın.

Bot kodunu başlatmak için pi kullanıcısı olarak oturum açın ve şunu çalıştırın:

  • cd gezgini
  • sudo python restrover.py

Her şey yolundaysa, bu adımdaki resme benzer bir ekran görmelisiniz.

Herhangi bir hata veya sorun görürseniz, ilerlemeden önce bunları düzeltmeniz gerekir.

Şimdi, GND (-) kablosunu RoboClaw motor güç girişi üzerindeki NEG (-) terminaline bağlayın.

Adım 12: Bot Kontrol Sayfasına Erişim

Bot Kontrol Sayfasına Erişim
Bot Kontrol Sayfasına Erişim
Bot Kontrol Sayfasına Erişim
Bot Kontrol Sayfasına Erişim

Robotun python betiği çalıştıktan sonra, RoboClaw'ı çalıştırın ve ardından RPI'nizin ipine aşağıdaki gibi gidin:

your_rpi_ip

Görüntülerdeki gibi Web kontrol sayfasının açıldığını görmelisiniz. Değilse, RPI çıkış terminalinizi kontrol edin ve herhangi bir hata olup olmadığına bakın ve düzeltin.

Sayfaya girdikten sonra botu kontrol etmeye hazırsınız.

Robot, "Med run" ayarında ve Orta hızda başlayacaktır.

Bot, sayfadaki düğmeler veya klavyedeki tuşlar aracılığıyla kontrol edilebilir.

Anahtarlar:

  • w - ileri
  • z - geri/geri
  • a - uzun sola dönüş
  • s - uzun sağa dönüş
  • q - kısa sola dönüş
  • e - kısa sağa dönüş
  • 1 - sola kaydırılan kamera
  • 2 - kamerayı sağa kaydır
  • 3 - tam sola kaydırma
  • 4 - tam sağa kaydır
  • / - ev/merkez kamerası
  • h - robotu durdur/durdur

Gönderilen komutlar arasında yarım saniyelik bir gecikme tamponu vardır. Bunu, istenmeyen tekrarlanan komutları ortadan kaldırmak için yaptım. Elbette isterseniz bunu koddan kaldırabilirsiniz (index.html'de)

Kontrollerin geri kalanı ve kontrol edilmesi kendi kendini açıklayıcı olmalıdır.

Adım 13: Python/Flask Kodu

Bu bot Python ve Flask web çerçevesini kullanır. Eğer ilgileniyorsanız, Flask hakkında daha fazla bilgiyi buradan edinebilirsiniz.

Bir Flask uygulamasından ve normal Python betiğinden en büyük fark, URI işlemeyi yapmak için kullanılan @app.route sınıfı/yöntemidir. Bunun dışında çoğunlukla normal Python'dur.

#!/usr/bin/env piton

# # Wifi/Web güdümlü Rover # # Scott Beasley tarafından yazıldı - 2015 # # RPIO, pyserial ve Flask kullanır # RPIO'dan seriyi içe aktarın flasktan PWM'yi içe aktarın Flask, render_template, request uygulaması = Flask (_name_, static_url_path = '') # Roboclaw motor kontrolörü ile konuşmak için iletişim portuna bağlanın deneyin: # 19200 roboclaw = serial'den farklıysa baud hızını buradan değiştirin. IOError hariç Seri ('/dev/ttyAMA0', 19200): print ("İletişim portu değil bulundu") sys.exit (0) # Hız ve sürücü kontrol değişkenleri last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo nötr konumu (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Time.sleep zaman ayarı için biraz bekleme (3) # # URI işleyicileri - tüm bot sayfası eylemleri burada yapılır # # Botların kontrol sayfasını (ana sayfa) gönderin @app.route ("/") def index (): dönüş render_template ('index.html', isim = Yok) @app.route ("/ileri") def ileri (): global last_direction, run_ti me print "Forward" go_forward() last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Sürekli değilse, run_time > 0 ise gecikmeden sonra dur: last_direction = -1 halt () return "ok" @ app.route ("/backward") def geri (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Sürekli değilse, gecikmeden sonra dur eğer run_time > 0: last_direction = -1 halt () return "ok" @app.route ("/left") sol def (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 saniye time.sleep (0.500 - turn_tm_offset) # stop stop () time.sleep (0.100) return "ok" @app.route ("/right") def sağ (): global last_direction, turn_tm_offset print "Right" go_right () # uyku @1/2 saniye time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): global last_direction, turn_t m_offset print "Sola ileri dönüş" go_left () # uyku @1/8 saniye time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Sağa ileri dönüş" go_right () # uyku @1/8 saniye time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # dur dur () time.sleep (0.100) return "tamam" @app.route ("/stop") def stop (): global last_direction print "Stop" halt () last_direction = -1 # uyku 100ms zaman.uyku (0.100)) "ok" @app.route ("/panlt") döndür def panlf (): global servo_pos print "Panlt" servo_pos -= 100 ise servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # uyku 150ms zaman. uyku (0.150) dönüş "ok" @app.route ("/home") def ana sayfa (): global servo_pos yazdır "Ana Sayfa" servo_pos = 1250 servo.set_servo (18, servo_pos) # uyku 150ms zaman.sleep (0.150) dönüş "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) # uyku 150ms zaman.uyku (0.150) return "ok" @app.route ("/panfull_rt") def panfull_rt (): global servo_pos print "Sağa tam kaydır" servo_pos = 2500 servo.set_servo (18, servo_pos) # uyku 150ms zaman.uyku (0.150) dönüş "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Last_direction == 0 ise yeni hız almak için mevcut yönü güncelleyin: go_forward () ise last_direction == 1: go_backward () # uyku 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 # Eğer last_direction == 0: go_forward () ise last_direction == 1: go_backward () # uyku 150ms zaman.uyku (0.150) ise yeni hız almak için mevcut yönü güncelleyin) "ok" @app.route ("/speed_hi") döndür def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # last_direction == 0: go_forward () if last_direction == 1: go_backward () # uyku 150ms time.sleep (0.150) return "ok" @app.route ("/continuous" ise yeni hız almak için mevcut yönü güncelleyin ") def sürekli (): global run_time print "Sürekli çalıştırma" run_time = 0 # uyku 100ms time.sleep (0.100) return "ok" @app.route ("/mid_run") def mid_run (): global run_time print "Orta run" run_time = 0.750 halt () # uyku 100ms time.sleep (0.100) return "ok" @app.route ("/short_time") def short_time (): global run_time print "Kısa çalışma" run_time = 0.300 halt () # uyku 100ms time.sleep (0.100) return "tamam" # # Motor sürücü işlevleri # def go_forward (): global speed_offset ise speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 +) speed_offset)) başka: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset ise speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) başka: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset ise speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) başka: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset ise speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) başka: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (ana bilgisayar = '0.0.0.0', bağlantı noktası = 80, hata ayıklama = Doğru)

Flask'tan hata ayıklama bilgisi istemiyorsanız veya buna ihtiyacınız varsa, hata ayıklamayı app.run satırında 'false' olarak ayarlayın.

if _name_ == "_main_":

app.run (ana bilgisayar = '0.0.0.0', bağlantı noktası = 80, hata ayıklama = Yanlış)

Flask http sunucusunun dinlediği bağlantı noktasını da buradan değiştirebilirsiniz.

Adım 14: Diğer Donanımı Kullanma

Başka bir SBC türü (Tek Kartlı Bilgisayar) gibi başka bir donanım kullanmak istiyorsanız, Python ve Flask'ı Beagle Bone, PCDuino vb. gibi diğer kartlarda çalıştırırken çok az sorun yaşarsınız… Kodu GPIO'ya uyacak şekilde değiştirmeniz gerekecektir. yeni kartın servo sürüş özelliklerini düzenleyin ve kullanın.

Başka bir tür motor sürücüsü kullanmak için, yedek motor sürücüsünün motorun o belirli işlevi yapmasını sağlamak için ne gerekiyorsa onu yapmak için go_forward, go_backward, go_left, go_right ve halt işlevlerini değiştirmeniz yeterlidir.

Önerilen: