Sadržaj:

Napravite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi: 15 koraka (sa slikama)
Napravite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi: 15 koraka (sa slikama)

Video: Napravite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi: 15 koraka (sa slikama)

Video: Napravite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi: 15 koraka (sa slikama)
Video: CS50 2015 - Week 10 2024, Studeni
Anonim
Izgradite svog robotski streaming video robota s Arduinom i Raspberry Pi
Izgradite svog robotski streaming video robota s Arduinom i Raspberry Pi
Izgradite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi
Izgradite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi
Izgradite svog robota za video streaming sa internetskom kontrolom s Arduinom i Raspberry Pi
Izgradite svog robota za video streaming sa internetskom kontrolom 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 znanosti i matematiku Max Shein. Izrađujem ovaj projekt za svakoga od kojeg 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 ga je odjenuti kao malo štene. To je dobar vikend projekt!

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

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

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

Ovdje je GitHub repo: GITHUB REPO OD MENE

Evo stranice projekta: PROJEKTNO MJESTO JA

Korak 1: Upozorenje: Oprezno pokušavajte ovo kod kuće

OPREZ:

AUTOR OVOG TUTORIJALA 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ŠTETITI ELEKTRONSKU OPREMU, SPALITI SE ILI IZAZOVITI POŽAR. Molimo 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 radi. Hvala vam.

OVAJ UPUTNIK AUTOR UKLANJA SAMU SVOJU ODGOVORNOST ZA OŠTEĆENJA ILI IZGUBLJENJA IMOVINE ILI TJELESNE OŠTEĆENJA. KORISTITE ZAJEDNIČKI RAZUM

Korak 2: Komponente

Veze
Veze
Veze
Veze
Veze
Veze
Veze
Veze

Prije nego zagrijemo lemilicu, moramo prijeći preko toga što bi na što trebalo biti povezano. Napravio sam ovaj jednostavan grafikon (MS Paint me nikada ne iznevjerava) koji opisuje gdje se određeni dio nalazi unutar robota.

Slika je izgrađena tako da možete zumirati i vidjeti u punoj razlučivosti te pročitati tekst.

Korak 6: Adresa za Pi

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

Pogledajmo naš redoslijed pokretanja veze:

  1. Počinje Raspberry Pi
  2. Arduino počinje
  3. Raspberry Pi pokreće TCP klijent. Svoju IP adresu izbacuje putem 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 s Raspberry Pi i Pythonom za pisanje Arduino/Raspberry Pi protokola.

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

naziv hosta -I

Korak 7: Plan

Sad kad imamo Pi -jevu IP adresu, u nju ćemo ubaciti SSH (SSH je Secure Shell - daljinski se povezujemo s Linux ljuskom) i napisati datoteku koja prikazuje IP adresu poslužitelja. 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 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 1. korak (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 koristiti zdrav razum.

Predlaže se da na popisu za čitanje pročitate upute koje slušate.

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 podatkovni list na mreži kako biste vidjeli njihov radni napon i struju. Slobodno postavljajte pitanja u odjeljku za komentare. Uvijek ih čitam.

H-MOST

Nikad prije nisam radio s H-Bridgeom. Malo sam proguglao i pronašao dobro uputstvo koje objašnjava principe HB -a. Možete pogledati i tamo (vidi korak Popis za čitanje) i zakačiti svoju. Neću puno objašnjavati. Tamo možete proč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. Izborno.

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 ga možemo prekinuti pomoću Ctrl+C.

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

Nazvat ćemo datoteku pibot.sh koja će dati naredbe za pokretanje svih vrsta python skripti za upravljanje robotom. 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 stream: /// dev/stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264

Kôd koji obavlja sav posao na strani pi nazivat će se 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. Obojica 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 vrti u krug.

U ovom trenutku imam ono što serijski program na Arduinu radi potpuno u redu, ali Tcp poslužitelj na računalu i Tcp klijent na Pi još nisu kodirani. Moram dovršiti ovaj unos za natjecanje. Što da radim?

  1. Prvo, utrostručim napon motora. U podatkovnom listu je navedeno da ih 3V, 6V nisu pomaknule. Onda je 9V. Paralelno sam spojio teo baterije kako bih udvostručio struju i napon ostaje isti.
  2. Imam li druge motore koji odgovaraju nosaču 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. Morat ću vidjeti što učiniti.

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

Rješenje:

Pa 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? Što 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) namijenjen je pokretanju naredbi s udaljenog računala. 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 internetski protokol (IP). Stoga se cijeli paket obično naziva TCP/IP. TCP pruža pouzdanu, naručenu i provjerenu pogrešku isporuku toka okteta između aplikacija koje rade na hostovima koji komuniciraju putem IP mreže.

(Iz Wikipedije)

Dakle, TCP profesionalci su:

  • Siguran
  • 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 emitira poput poslužitelja).
  • Greške u vašim knjižnicama programa i operacijskog sustava (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 prima li je klijent. 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ćimo klijenta

Klijent (u našem slučaju Raspberry Pi), koji prima podatke s poslužitelja (naš PC u našem slučaju), dobit će podatke za slanje na Pi (serijske naredbe koje će se izvoditi na Arduinu) i primiti podatke natrag (očitanja 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. Imat ćemo program na računalu i drugi program na Pi -u.

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

Riješimo 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 operacijski sustav i lokalne usluge.

Korak 13: Isprobajte naše Tcp poruke

Kako bismo vidjeli možemo li koristiti prekide, napravimo jednostavnog klijenta i poslužitelja pomoću naredbenog retka Python. Učinit ću to 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 zaslon.

Prikazat će se samo dijelovi 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čunalu. Pokreće TCP vezu na lokalnoj adresi i na navedenom priključku (koristim port 12298, pogledajte prethodni korak zašto)
  • SBcontrolPi.py - Za pokretanje na Pi. Očitava svoj međuspremnik svakih pola sekunde (0,5 sekundi). Pokreće ljuskastu skriptu koja upravlja stvarima kao što su video streaming itd.

Preporučeni: