İçindekiler:

Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun: 15 Adım (Resimlerle)
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun: 15 Adım (Resimlerle)

Video: Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun: 15 Adım (Resimlerle)

Video: Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun: 15 Adım (Resimlerle)
Video: VEXCode VR Online Robotik, Kodlama ve STEM Eğitimi 2024, Temmuz
Anonim
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun
Arduino ve Raspberry Pi ile İnternet Kontrollü Video Akış Robotunuzu Oluşturun

Ben @RedPhantom (aka LiquidCrystalDisplay / Itay), İsrail'den Max Shein İleri Bilim ve Matematik Ortaokulunda öğrenim gören 14 yaşında bir öğrenciyim. Bu projeyi herkesin öğrenmesi ve paylaşması için yapıyorum!

Kendi kendinize şöyle düşünmüş olabilirsiniz: hmm… Ben bir ineğim… Ve çocuklarım onlarla bir proje yapmamı istiyor… Bir robot yapmak istedi. Küçük bir köpek yavrusu gibi giyinmek istedi. Bu iyi bir hafta sonu projesi!

Raspberry Pi her kullanım için mükemmeldir: bugün bu mikro bilgisayarın robot yapma yeteneklerini açıklayacağız. Bu robot şunları yapabilir:

  • Raspberry Pi ile aynı WiFi ağına bağlı herhangi bir bilgisayarı kullanarak LAN (WiFi) üzerinden dolaşın ve kontrol edin.
  • Raspberry Pi Kamera Modülünü kullanarak canlı video akışı yapın
  • Arduino kullanarak sensör verilerini gönderin

Bu güzel ışık projesi için neye ihtiyacınız olduğunu görmek için bir sonraki adımı (uyarıları) ve ondan sonra Aranıyor: Bileşenler adımını okuyun.

İşte GitHub deposu: GITHUB REPO BY ME

İşte Proje Sahası: BENİM PROJE SAHASI

Adım 1: Uyarı: Bunu Evde Denemeye Dikkat Edin

DİKKAT:

BU EĞİTİMİN YAZARI, ELEKTRİK VE ELEKTRİKLİ EKİPMANLARIN TEMEL ÇALIŞMASI HAKKINDA YETERLİ BİLGİYE SAHİP OLDUĞUNUZU VARSAYAR. DİKKATLİ DEĞİLSENİZ VE BU EĞİTİMDEKİ TALİMATLARI TAKİP ETMEZSENİZ: ELEKTRONİK CİHAZLARA ZARAR VEREBİLİR, KENDİNİZİ YAKABİLİR VEYA YANGINA NEDEN OLABİLİRSİNİZ. Lütfen dikkatli olun ve sağduyulu davranın. Bu eğitim için gerekli bilgiye sahip değilseniz (lehimleme, elektroniğin temelleri), lütfen bunu bilen bir kişiyle gerçekleştirin. Teşekkürler.

BU TALİMAT TABLOSUNUN YAZARI NEDEN OLDUĞU YA DA MAL KAYBI VEYA FİZİKSEL ZARARA İLİŞKİN HERHANGİ BİR SORUMLULUĞU KENDİNDEN KALDIRIR. SAĞDUYU KULLANIN

2. Adım: Bileşenler

Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar

Havyayı ısıtmadan önce, neyin neye bağlanması gerektiğini gözden geçirmeliyiz. Belirli bir parçanın robot içinde nerede olduğunu açıklayan bu basit grafiği (MS Paint beni asla yarı yolda bırakmaz) yaptım.

Görüntü, yakınlaştırıp tam çözünürlükte görebilmeniz ve metni okuyabilmeniz için oluşturulmuştur.

Adım 6: Pi'nin Adresi

Arduino, plana göre Pi ile konuşur. Ve Pi bilgisayarla konuşuyor, peki tüm bunlar nasıl çalışıyor?

Bağlantı Başlatma Sıramıza bakalım:

  1. Ahududu Pi başlar
  2. Arduino Başlıyor
  3. Raspberry Pi, TCP İstemcisini başlatır. IP adresini bir LED aracılığıyla gönderir.
  4. Raspberry Pi, Seri İletişim hizmetini başlatır ve Arduino'ya bağlanır

Bu nedenle bir tür iletişim kurduk:

Bilgisayar Ahududu Pi Arduino

Arduino/Raspberry Pi protokolünü yazmak için Raspberry Pi ve Python ile konuşan programı yazmak için Visual Basic. NET (Microsoft Visual Studio 2013 Community) kullandım.

Pi IP adresinizi öğrenmek için yapmanız gereken tek şey, onu bir HDMI ekranına bağlamak, Shell'e giriş yapmak ve şu komutu yazmaktır:

ana bilgisayar adı -I

7. Adım: Plan

Artık Pi'nin IP adresini aldığımıza göre, içine SSH yapacağız (SSH, Güvenli Kabuk - Linux kabuğuna uzaktan bağlanıyoruz) ve Sunucunun IP adresini görüntüleyen bir dosya yazacağız. Pi, başlangıçta da bunu yapacak ve dinlediği bağlantı noktasını yazacaktır. Burada koddan sadece birkaç örnek vereceğim ama bu adımdan ve oluşturduğum GitHub şubesinden indirilebilir. Bununla ilgili ayrıntılar daha sonra.

Şöyle çalışır:

  1. RPI başlar.
  2. RPi, Tcp programını yerel IP'sinde ve belirlenmiş bir bağlantı noktasında başlatır.
  3. RPI video akışı yapmaya başlar
  4. RPI kapanır.

Adım 8: Fiziksel Harekete Geçmek

Şimdi, fiziksel olarak her şeyi inşa etmeye başlamaya hazırız. 1. adımı (uyarı metni ve lisans) okumadıysanız, lütfen devam etmeden önce okuyun. Oluşabilecek herhangi bir hasardan sorumlu değilim. Ve şüphe durumunda, bu robot bir zombi kıyameti olmadığı sürece askeri amaçlar için kullanılmamalıdır. Ve o zaman bile sağduyuyu kullanın.

Okuma Listesindeki dinleme talimatlarını okumanız önerilir.

Bağlantı şemasını "Bağlantılar" adımından indirin.

MOTORLAR

Satın aldığınız motorlar muhtemelen şöyle görünürler ve yoksa sorun yok: eğer sadece iki kabloları varsa (çoğu durumda siyah ve kırmızı) çalışmalıdır. Çalışma voltajlarını ve akımlarını görmek için çevrimiçi veri sayfalarına bakın. Yorum bölümünde soru sormaktan çekinmeyin. Onları her zaman okurum.

H-KÖPRÜ

Daha önce hiç H-Bridge ile çalışmadım. Biraz googledim ve bir HB'nin ilkelerini açıklayan iyi bir talimat buldum. Oraya da bakabilirsiniz (Okuma Listesi adımına bakın) ve kendinizinkini de bağlayabilirsiniz. çok açıklamayacağım. Orada okuyabilir ve bu devre hakkında bilmeniz gereken her şeyi bilebilirsiniz.

LED

Bu küçük ampul, neredeyse hiç akım gerektirmediği için mantıksal voltajdan ve 3V-5V 4mA-18mA voltajdan çalışabilir. İsteğe bağlı.

arduino

Arduino, Raspberry Pi'den Seri bağlantı üzerinden sinyal ve komutları alacaktır. Raspberry Pi, GPIO üzerinden analog değerler veremediği için motorlarımızı kontrol etmek için Arduino kullanıyoruz.

9. Adım: Raspberry Pi'yi Otomatik Başlatma

Raspberry Pi'yi her açtığınızda, kullanıcı adı ve şifreyi yazmanız gerekecek. Bunu yapmak istemiyoruz çünkü bazen Pi'ye bir klavye bağlayamıyoruz, bu yüzden Pi'yi hazırlayan programı otomatik olarak başlatmak için bu öğreticideki bu adımları izleyeceğiz. Bir döngüye takılırsa, onu kesmek için her zaman Ctrl+C yapabiliriz.

  • sudo crontab -e
  • Ardından cron yöneticisinde o dosyayı otomatik başlatmaya ekleyen komutu gireceğiz.

Robotu çalıştırmak için her türlü python betiğini başlatmak için komutlar verecek olan pibot.sh dosyasını arayacağız. Üzerinden geçelim: (Programın GPIO'ya erişmesine izin vermek için perde Python programlarıyla sudo yapıyoruz)

raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv akışı:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264

Pi tarafında tüm işleri yapan kod, upon_startup.sh olarak adlandırılacaktır.

Her şeyi çalıştıran basit bir kabuk betiğidir.

Adım 10: Houeston, Bir Sorunumuz Var… DC Motorlar Aynı Model Değildir

H-Bridge'i zaten test ettim ve iyi çalışıyor, ancak robot platformundan aldığım motorları bağladığımda çevrimiçi sipariş verdim, bu iki motor farklı hızlarda dönüyor ve farklı sesler çıkarıyor. Motorlarda gazı %100 olarak değiştirdim. İkisi de maksimum kapasitelerinde koşamadı.

Bu iki farklı motor gibi görünüyor. Birinin daha büyük bir torku var ki bu bu tür robotlar için harika ama diğeri robotu hareket ettirmiyor. Böylece daireler çiziyor.

Bu noktada, elimde Arduino'daki seri program tamamen iyi çalışıyor ancak PC'deki Tcp sunucusu ve Pi'deki Tcp İstemcisi henüz kodlanmadı. Yarışma için bu girişi tamamlamam gerekiyor. Ben ne yaparım?

  1. İlk önce, motorların voltajını üç katına çıkardım. Veri sayfası 3V, 6V'nin onları hareket ettirmediğini söyledi. 9V o zaman. Akımı ikiye katlamak için teo pilleri paralel bağladım ve voltaj aynı kalıyor.
  2. Platformdaki bağlantıya uyan başka motorlarım var mı? Belki benzer modeller olup olmadığını görebilirim.
  3. Çikolata gerçekten fanı vurursa, Servolara değiştirebilirim.

Okul başladı. Ne yapacağımı görmem gerekecek.

Not: Karşılaştığım sorunları neden buraya yazıyorum? Yani daha az deneyimliyseniz ve aynı sorunları yaşıyorsanız ne yapacağınızı bileceksiniz.

Çözüm:

Bu yüzden başka bir test yaptım. Arduino kodundaki hız farkını uyarladım.

NOT: motorlar sizin için farklı hızlarda dönebilir! Arduino çizimindeki değerleri değiştirin.

Adım 11: [TCP]: Neden Tcp ve Shell Güvenli Değil? TCP Nedir?

PC için neden SSH değil de Tcp kullanıldığını iki açıklamam var. - Pi iletişimi.

  1. İlk olarak, SSH (Güvenli Kabuk, Açıklamalara bakın) uzak bir bilgisayardan komutları başlatmak içindir. Pi'nin istediğimiz bilgilerle yanıt vermesini sağlamak daha zordur çünkü verileri analiz etmek için tek seçeneğimiz zorlu ve sıkıcı dize işlemedir.
  2. İkinci olarak, SSH'yi nasıl kullanacağımızı zaten biliyoruz ve bu eğitimde cihazlar arasında daha fazla iletişim yolu öğrenmek istiyoruz.

TCP veya İletim Kontrol Protokolü, İnternet Protokol Paketi'nin temel protokolüdür. İnternet Protokolünü (IP) tamamladığı ilk ağ uygulamasından kaynaklanmıştır. Bu nedenle, paketin tamamına yaygın olarak TCP/IP denir. TCP, bir IP ağı üzerinden iletişim kuran ana bilgisayarlarda çalışan uygulamalar arasında sekizli akışının güvenilir, düzenli ve hata denetimli teslimini sağlar.

(Wikipedia'dan)

Yani TCP Artıları:

  • Güvenli
  • Hızlı
  • Ağ üzerinde herhangi bir yerde çalışır
  • Doğru veri iletimini kontrol etmek için yöntemler sağlar
  • Akış Kontrolü: Veri gönderenin, istemcinin kaydetmesi ve işlemesi için verileri çok hızlı göndermesi durumunda korumaya sahiptir.

Ve eksileri:

  • TCP'de yayın yapamazsınız (bir ağdaki tüm cihazlara veri gönderin) ve çok noktaya yayın (aynı ama biraz farklı - her cihaza bir sunucu gibi yayın yapma yeteneği verir).
  • Programınızdaki ve işletim sistemi kitaplıklarınızdaki hatalar (kendilerini TCP iletişimini yöneten, yönlendiriciniz iki [veya daha fazla] cihazı bağlamak dışında neredeyse hiçbir şey yapmaz)

Neden UDP kullanmıyorsunuz, sorabilirsiniz? TCP'den farklı olarak UDP, müşterinizin daha fazlasını göndermeden önce verileri aldığından emin olmaz. Bir E-posta göndermek ve müşterinin onu alıp almadığını bilmemek gibi. Ayrıca, UDP daha az güvenlidir. Daha fazla bilgi için Stack Exchange Super User'dan bu gönderiyi okuyun

Bu makale iyi ve tavsiye edilir.

Adım 12: [TCP]: Bir Müşteri Yapalım

Sunucudan (bizim durumumuzdaki PC'miz) verileri alan istemci (bizim durumumuzda Raspberry Pi), Pi'ye (Arduino üzerinde gerçekleştirilecek Seri komutlar) göndermek ve verileri geri almak (Sensör Okumaları) için veri alacaktır. ve doğrudan Arduino'dan geri bildirim Ekli şema, üçü arasındaki ilişkiyi gösterir.

Python Wiki TcpCommunication makalesi, yerleşik soket modülünü kullanarak birkaç satır kodla bu tür bir iletişim kurmanın çok basit olduğunu gösteriyor. PC'de bir programımız ve Pi'de başka bir programımız olacak.

Kesintilerle çalışacağız. Bunlar hakkında Açıklamalar adımında daha fazla bilgi edinin. Orada tamponlar hakkında da okuyun. Şimdi, data=s.recv(BUFFER_SIZE) kullanarak elimizdeki verileri okuyabiliyoruz, ancak boş bitlerle kaç karakter tanımladığımız olacak. Kesintileri kullanabilir miyiz? Başka bir soru: arabellek boş mu olacak yoksa sunucunun daha fazla veri göndermesini mi bekleyecek, bu durumda sunucu/istemci bir zaman aşımı istisnası atacak mı?

Bunu birer birer ele alalım. Bunu yapmadan önce, kullanılan TCP ve UDP bağlantı noktalarını listeleyen bu Wikipedia makalesine baktım. Hızlı bir bakışın ardından, İşletim Sistemi ve yerel hizmetler tarafından kullanılmadığı için bu projenin 12298 numaralı bağlantı noktasında iletişim kuracağına karar verdim.

13. Adım: Tcp İletişimlerimizi Deneyin

Kesintileri kullanıp kullanamayacağımızı görmek için Python Komut Satırını kullanarak basit bir istemci ve bir sunucu yapalım. Bunu aşağıdaki adımlarda yapacağım:

  1. Perde bağlantı noktası üzerinden bir döngü içinde Tcp aracılığıyla metin gönderen bir program başlatın
  2. Bir döngüdeki tüm metni okuyan ve bunu ekrana yazdıran başka bir program (paralel olarak) başlatın.

Programın sadece bölümleri gösterilecektir. Tüm programlar Python 3 ile çalışır. Bu programların tek yaptığı, PC kullanıcısının klavyesinden seri komutu Pi üzerinden Arduino'ya göndermektir.

  • SBcontrolPC.py - PC'de çalıştırılacak. Yerel adreste ve belirtilen bağlantı noktasında bir TCP bağlantısı başlatır (12298 numaralı bağlantı noktasını kullanıyorum, neden önceki adıma bakın)
  • SBcontrolPi.py - Pi üzerinde çalıştırılacak. Her yarım saniyede bir (0,5 saniye) arabelleğini okur. Video akışı vb. gibi şeyleri yöneten bir kabuk komut dosyası başlatır.

Önerilen: