Sadržaj:

Napravite svog robota za video streaming koji kontrolira internet s Arduinom i Raspberry Pi: 15 koraka (sa slikama)
Napravite svog robota za video streaming koji kontrolira internet s Arduinom i Raspberry Pi: 15 koraka (sa slikama)

Video: Napravite svog robota za video streaming koji kontrolira internet s Arduinom i Raspberry Pi: 15 koraka (sa slikama)

Video: Napravite svog robota za video streaming koji kontrolira internet s Arduinom i Raspberry Pi: 15 koraka (sa slikama)
Video: SKR 1.4 - Adding a 3d Extruder Stepper for a Diamond PrintHead 2024, Novembar
Anonim
Napravite svog robota za video streaming sa internetskom kontrolom pomoću Arduina i Raspberry Pi
Napravite svog robota za video streaming sa internetskom kontrolom pomoću Arduina i Raspberry Pi
Napravite svog robota za video streaming sa internetskom kontrolom pomoću Arduina i Raspberry Pi
Napravite svog robota za video streaming sa internetskom kontrolom pomoću Arduina i Raspberry Pi
Napravite svog robota za video streaming koji kontrolira internet s Arduinom i Raspberry Pi
Napravite svog robota za video streaming koji kontrolira internet s Arduinom i Raspberry Pi

Ja sam @RedPhantom (zvani LiquidCrystalDisplay / Itay), 14 -godišnji učenik iz Izraela koji uči u Srednjoj školi za napredne nauke i matematiku Max Shein. Pravim ovaj projekt za svakoga od koga mogu učiti i dijeliti ga!

Možda ste pomislili: hmm … ja sam štreber … I moja djeca žele da napravim projekt s njima … Htio je izgraditi robota. Htjela je to obući kao malo štene. To je dobar vikend projekat!

Raspberry Pi je savršen za svaku upotrebu: danas ćemo pokazati sposobnosti ovog mikroračunara da napravi robota. Ovaj robot može:

  • Vozite se i kontrolirajte putem LAN -a (WiFi -a) pomoću bilo kojeg računara spojenog na istu WiFi mrežu kao i Raspberry Pi.
  • Prijenos video zapisa uživo pomoću Raspberry Pi modula kamere
  • Pošaljite podatke senzora pomoću Arduina

Da vidite što vam je potrebno za ovaj lijepi lagani projekt, samo pročitajte sljedeći korak (upozorenja), a nakon toga korak Wanted: Components.

Evo repo GitHub -a: GITHUB REPO MENE

Evo stranice projekta: PROJEKTNO MJESTO JA

Korak 1: Upozorenje: Budite oprezni pokušavajući ovo kod kuće

OPREZ:

AUTOR OVOG VODIČA PRETPOSTAVLJA DA IMATE DOVOLJNA ZNANJA O ELEKTRIČNOJ ENERGIJI I OSNOVNOM RADU ELEKTRIČNE OPREME. Ako niste oprezni i ne slijedite upute u ovom vodiču, MOŽETE: OŠTEĆITI ELEKTRONSKU OPREMU, SPALITI SE ILI IZAZOVATI POŽAR. Budite oprezni i koristite zdrav razum. Ako nemate potrebno znanje za ovaj vodič (lemljenje, osnove elektronike), molimo vas da to učinite s osobom koja to zna. Hvala ti.

OVAJ UPUTSTVENI AUTOR UKLANJA SAMU SVOJU ODGOVORNOST ZA OŠTEĆENJA NAZROČENA ILI IZGUBLJENA IMOVINA ILI FIZIČKA OŠTEĆENJA. UPOTREBITE ZAJEDNIČKI RAZUM

Korak 2: Komponente

Connections
Connections
Connections
Connections
Connections
Connections
Connections
Connections

Prije nego zagrijemo lemilicu, moramo provjeriti šta bi trebalo biti povezano s čim. Napravio sam ovaj jednostavan grafikon (MS Paint me nikada ne iznevjerava) koji opisuje gdje se određeni dio nalazi unutar robota.

Slika je napravljena tako da možete zumirati i vidjeti u punoj rezoluciji i pročitati tekst.

Korak 6: Adresa za Pi

Arduino razgovara s Pi -jem prema planu. I Pi razgovara s računarom, pa kako sve ovo funkcionira?

Pogledajmo našu sekvencu pokretanja veze:

  1. Raspberry Pi počinje
  2. Arduino počinje
  3. Raspberry Pi pokreće TCP klijent. Svoju IP adresu izbacuje preko LED diode.
  4. Raspberry Pi pokreće Serijsku komunikacijsku uslugu i povezuje se s Arduinom

Stoga smo uspostavili neku vrstu komunikacije:

Računalo Raspberry Pi Arduino

Koristio sam Visual Basic. NET (Microsoft Visual Studio 2013 zajednica) za pisanje programa koji razgovara sa Raspberry Pi i Python za pisanje Arduino/Raspberry Pi protokola.

Sve što trebate učiniti da znate svoju Pi IP adresu je da je povežete na HDMI ekran, prijavite se na Shell i upišete naredbu:

hostname -I

Korak 7: Plan

Sada kada imamo Pi -jevu IP adresu, u nju ćemo ubaciti SSH (SSH je Secure Shell - daljinski se povezujemo na Linux ljusku) i napisati datoteku koja prikazuje IP adresu servera. Pi, pri pokretanju će to isto učiniti i napisati port koji sluša. Ovdje ću navesti samo nekoliko primjera iz koda, ali je dostupan za preuzimanje iz ovog koraka i iz grane GitHub -a koju sam stvorio. Detalji o tome kasnije.

Radi ovako:

  1. RPi se pokreće.
  2. RPi pokreće Tcp program na svom lokalnom IP -u i na određenom portu.
  3. RPI počinje strujati video zapise
  4. RPI se isključuje.

Korak 8: Prelazak na fizičko

Sada smo spremni fizički izgraditi cijelu stvar. Ako niste pročitali korak 1 (tekst upozorenja i licenciranje), učinite to prije nastavka. Ne snosim odgovornost za nastalu štetu. A u slučaju sumnje, ovaj se robot ne smije koristiti u vojne svrhe, osim ako se ne radi o zombi apokalipsi. Pa čak i tada koristite zdrav razum.

Predlaže se da pročitate uputstva koja slušate na spisku za čitanje.

Preuzmite shemu povezivanja iz koraka "Veze".

MOTORI

Motori koje ste kupili vjerojatno izgledaju ovako, i u redu je ako nemaju: ako imaju samo dvije žice (u većini slučajeva crnu i crvenu), trebao bi raditi. Potražite njihov tehnički list na mreži da vidite njihov radni napon i struju. Slobodno postavljajte pitanja u odjeljku za komentare. Uvijek ih čitam.

H-MOST

Nikada prije nisam radio sa H-Bridgeom. Malo sam proguglao i našao dobro uputstvo koje objašnjava principe HB -a. Možete pogledati i tamo (pogledajte korak Spisak za čitanje) i zakačiti svoju. Neću puno objašnjavati. Tamo možete čitati i znati sve što trebate o ovom krugu.

LED

Ova mala žarulja može raditi od logičkog napona samo zato što ne zahtijeva gotovo nikakvu struju, a napon je 3V-5V 4mA-18mA. Opcionalno.

ARDUINO

Arduino će primati signale i naredbe putem serijske veze od Raspberry Pi. Arduino koristimo za upravljanje motorima jer Raspberry Pi ne može izlaziti analogne vrijednosti putem GPIO -a.

Korak 9: Automatsko pokretanje Raspberry Pi

Svaki put kada uključite Raspberry Pi, morat ćete upisati korisničko ime i lozinku. Ne želimo to učiniti jer ponekad jednostavno ne možemo spojiti tipkovnicu na Pi, pa ćemo slijediti ove korake iz ovog vodiča za automatsko pokretanje programa koji priprema Pi. Ako će se držati u petlji, uvijek možemo pritisnuti Ctrl+C da je prekinemo.

  • sudo crontab -e
  • Zatim ćemo unijeti naredbu koja dodaje tu datoteku za automatsko pokretanje u cron manageru.

Pozvat ćemo datoteku pibot.sh koja će davati naredbe za pokretanje svih vrsta python skripti za rad robota. Prijeđimo na to: (Sudo smo sa Python programima sa zavjesama kako bismo omogućili programu pristup GPIO -u)

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

Kod koji obavlja sav posao na strani pi će se zvati upon_startup.sh.

To je jednostavna ljuska skripta koja pokreće sve.

Korak 10: Houeston, imali smo problem … DC motori nisu isti model

Već sam testirao H-Bridge i radi dobro, ali kad sam spojio motore koje sam dobio s robotske platforme, naručio sam na internetu ta dva motora se okreću različitim brzinama i proizvode različite zvukove. Promijenio sam gas na 100% na motorima. Oboje nisu mogli trčati maksimalno.

Čini se da se radi o dva različita motora. Jedan ima veći okretni moment što je odlično za ovu vrstu robota, ali drugi jednostavno ne bi pomaknuo robota. Tako se okreće u krug.

U ovom trenutku, ono što imam je da serijski program na Arduinu radi potpuno u redu, ali Tcp server na računaru i Tcp klijent na Pi još nisu kodirani. Moram popuniti ovaj unos za takmičenje. Šta da radim?

  1. Prvo, utrostručim napon motora. U podatkovnom listu je navedeno da ih 3V, 6V nisu pomicale. Onda je 9V. Paralelno sam spojio teo baterije kako bih udvostručio struju, a napon ostaje isti.
  2. Da li imam druge motore koji odgovaraju montaži na platformi? Možda mogu vidjeti jesu li slični modeli.
  3. Mogu zamijeniti Servos ako je čokolada zaista pogodila obožavatelje.

Škola je počela. Moram vidjeti šta da radim.

Napomena: Zašto, zaboga, pišem probleme na koje nailazim ovdje? Dakle, ako ste manje iskusni i imate iste probleme, znat ćete što trebate učiniti.

Rjesenje:

Zato sam napravio još jedan test. Prilagodio sam razliku u brzini u Arduino kodu.

NAPOMENA: motori se za vas mogu vrtjeti različitim brzinama! Promijenite vrijednosti na Arduino skici.

Korak 11: [TCP]: Zašto Tcp, a ne sigurna ljuska? Šta je TCP?

Imam dva objašnjenja zašto koristiti Tcp, a ne SSH za P. C. - Pi komunikacija.

  1. Prvo, SSH (Secure Shell, vidi Objašnjenja) ima za cilj pokretanje naredbi s udaljenog računara. Teže je natjerati Pi da odgovori informacijama koje želimo jer je naša jedina mogućnost analize podataka teška i dosadna obrada nizova.
  2. Drugo, već znamo kako koristiti SSH i želimo naučiti više načina komunikacije između uređaja u ovom vodiču.

TCP ili Transmission Control Protocol je osnovni protokol paketa Internet Protocol Suite. Nastao je u početnoj implementaciji mreže u kojoj je nadopunio Internet protokol (IP). Stoga se cijeli paket obično naziva TCP/IP. TCP pruža pouzdanu, naručenu i provjerenu grešku isporuku toka okteta između aplikacija koje rade na hostovima koje komuniciraju putem IP mreže.

(Iz Wikipedije)

Dakle, TCP profesionalci su:

  • Secure
  • Brzo
  • Radi bilo gdje na mreži
  • Pruža metode za provjeru ispravnog prijenosa podataka
  • Kontrola protoka: ima zaštitu u slučaju da pošiljatelj podataka šalje podatke prebrzo da bi ih klijent registrirao i obradio.

A nedostaci su:

  • U TCP-u ne možete emitirati (slati podatke na sve uređaje na mreži) i multicast (isto, ali malo drugačije- daje mogućnost svakom uređaju da emituje kao server).
  • Greške u vašim bibliotekama programa i operativnih sistema (koje same upravljaju TCP komunikacijom, vaš usmjerivač ne radi gotovo ništa osim povezivanja dva [ili više] uređaja)

Zašto ne biste koristili UDP, možda ćete se upitati? Pa, za razliku od TCP -a, UDP ne osigurava da vaš klijent dobije podatke prije nego što pošalje više. Kao slanje e -pošte i neznanje da li je klijent prima. Osim toga, UDP je manje siguran. Za više informacija pročitajte ovaj post od Stack Exchange Super User

Ovaj članak je dobar i preporučljiv.

Korak 12: [TCP]: Omogućavamo da postanete klijent

Klijent (u našem slučaju Raspberry Pi), koji prima podatke sa servera (naš računar u našem slučaju), dobit će podatke za slanje na Pi (serijske naredbe koje će se izvoditi na Arduinu) i primiti podatke nazad (očitavanja senzora) i povratne informacije izravno s Arduina. Priložena shema prikazuje odnos između ova tri.

Članak Python Wiki TcpCommunication pokazuje da je tako jednostavno uspostaviti takvu komunikaciju s nekoliko redaka koda pomoću ugrađenog modula utičnice. Imaćemo program na računaru i drugi program na Pi -u.

Radit ćemo s prekidima. Saznajte više u koraku s objašnjenjima o njima. Pročitajte i o međuspremnicima. Sada možemo pročitati podatke koje imamo koristeći data = s.recv (BUFFER_SIZE), ali to će biti koliko smo znakova definirali praznim zalogajima. Možemo li koristiti prekide? Još jedno pitanje: hoće li bafer biti prazan ili će čekati da poslužitelj pošalje više podataka, u tom slučaju poslužitelj/klijent će izbaciti iznimku timeout -a?

Rješavajmo to jedno po jedno. Prije nego što smo to učinili, pregledao sam ovaj članak na Wikipediji u kojem su navedeni korišteni TCP i UDP portovi. Nakon kratkog pregleda odlučio sam da će ovaj projekt komunicirati na portu 12298 jer ga ne koriste operativni sistem i lokalne usluge.

Korak 13: Isprobajte naše Tcp poruke

Da bismo vidjeli možemo li koristiti prekide, napravimo jednostavnog klijenta i poslužitelj pomoću Python naredbene linije. To ću učiniti u sljedećim koracima:

  1. Pokrenite program koji šalje tekst putem Tcp -a u petlji kroz port zavjese
  2. Pokrenite drugi program (paralelno) koji čita čitav tekst u petlji i ispisuje ga na ekranu.

Prikazat će se samo segmenti programa. Svi programi pokrenuti s Pythonom 3. Sve što ovi programi rade je slanje serijske naredbe s tipkovnice korisnika računala na Arduino putem Pi -a.

  • SBcontrolPC.py - Pokreće se na računaru. Pokreće TCP vezu na lokalnoj adresi i na navedenom portu (koristim port 12298, pogledajte prethodni korak zašto)
  • SBcontrolPi.py - Pokreće se na Pi. Očitava svoj međuspremnik svakih pola sekunde (0,5 sekundi). Pokreće shell skriptu koja upravlja stvarima kao što su video streaming itd.

Preporučuje se: