Cuprins:

Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi: 15 pași (cu imagini)
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi: 15 pași (cu imagini)

Video: Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi: 15 pași (cu imagini)

Video: Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi: 15 pași (cu imagini)
Video: High Density 2022 2024, Noiembrie
Anonim
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi
Construiți-vă robotul de streaming video controlat de internet cu Arduino și Raspberry Pi

Sunt @RedPhantom (alias LiquidCrystalDisplay / Itay), un elev de 14 ani din Israel care învață la Liceul Max Shein pentru științe avansate și matematică. Realizez acest proiect pentru ca toată lumea să învețe și să împărtășească!

Poate că v-ați gândit în sinea voastră: hmm … sunt un geek … Și copiii mei vor să fac un proiect cu ei … El a vrut să construiască un robot. Voia să-l îmbrace ca un cățeluș mic. Este un proiect bun în weekend!

Raspberry Pi este perfect pentru orice utilizare: astăzi vom explica abilitățile acestui micro-computer de a face un robot. Acest robot poate:

  • Conduceți și fiți controlat prin LAN (WiFi) folosind orice computer conectat la aceeași rețea WiFi ca Raspberry Pi.
  • Transmiteți în direct videoclipuri utilizând modulul de cameră Raspberry Pi
  • Trimiteți datele senzorului utilizând Arduino

Pentru a vedea de ce aveți nevoie pentru acest proiect frumos de lumină, citiți pasul următor (avertismente) și apoi pasul Wanted: Components.

Iată repo GitHub: GITHUB REPO BY ME

Iată site-ul proiectului: SITUL PROIECTULUI DE MINE

Pasul 1: Atenție: fiți atenți încercând acasă

PRUDENȚĂ:

AUTORUL ACESTUI TUTORIAL presupune că aveți o CUNOAȘTERE SUFICIENTĂ DESPRE ELECTRICITATE ȘI FUNCȚIONAREA DE BAZĂ A ECHIPAMENTELOR ELECTRICE. Dacă nu sunteți atenți și nu respectați instrucțiunile din acest tutorial, este posibil să deteriorați echipamentele electronice, să vă ardeți sau să provocați un incendiu. Vă rugăm să fiți atenți și să folosiți bunul simț. Dacă nu aveți cunoștințele necesare pentru acest tutorial (lipire, elemente de bază ale electronicii), vă rugăm să efectuați cu o persoană care o are. Mulțumesc.

AUTORUL ACESTUI INSTRUCTABLE ÎNLĂTURĂ ORICE RESPONSABILITATE DIN SINE PENTRU DAUNE CAUZATE SAU PIERDUTE PROPRIETĂȚI SAU DAUNE FIZICE. FOLOSESTE BUNUL SIMT

Pasul 2: Componente

Conexiuni
Conexiuni
Conexiuni
Conexiuni
Conexiuni
Conexiuni
Conexiuni
Conexiuni

Înainte de a încălzi fierul de lipit, trebuie să trecem peste ce ar trebui să fie conectat la ce. Am realizat această diagramă simplă (MS Paint nu mă dezamăgește niciodată) care descrie unde se află anumite părți în robot.

Imaginea este construită astfel încât să puteți mări și vedea în rezoluție maximă și să citiți textul.

Pasul 6: Adresa pentru Pi

Arduino vorbește cu Pi conform planului. Și Pi vorbește cu computerul, așa cum funcționează totul?

Să ne uităm la secvența noastră de inițiere a conexiunii:

  1. Începe Raspberry Pi
  2. Începe Arduino
  3. Raspberry Pi pornește TCP Client. Își trage adresa IP printr-un LED.
  4. Raspberry Pi pornește serviciul Serial Communications și se conectează la Arduino

Prin urmare, am stabilit un fel de comunicare:

Computer Raspberry Pi Arduino

Am folosit Visual Basic. NET (Microsoft Visual Studio 2013 Community) pentru a scrie programul care vorbește cu Raspberry Pi și Python pentru a scrie protocolul Arduino / Raspberry Pi.

Tot ce trebuie să faceți pentru a vă cunoaște adresa IP Pi este să o conectați la un ecran HDMI, să vă conectați la Shell și să tastați comanda:

numele gazdei -I

Pasul 7: Planul

Acum că avem adresa IP a lui Pi, vom introduce SSH în ea (SSH este Secure Shell - ne conectăm de la distanță la shell-ul Linux) și scriem un fișier care afișează adresa IP a serverului. Pi, la pornire, va face acest lucru și va scrie portul pe care îl ascultă. Aici voi da doar câteva exemple din cod, dar este disponibil pentru descărcare din acest pas și din ramura GitHub pe care am creat-o. Detalii despre asta mai târziu.

Funcționează așa:

  1. RPi pornește.
  2. RPi pornește programul Tcp pe IP-ul său local și pe un port desemnat.
  3. RPI începe să transmită în flux video
  4. RPI se oprește.

Pasul 8: Mergând fizic

Acum suntem gata să începem să construim fizic totul. Dacă nu ați citit pasul 1 (text de avertizare și licențiere), faceți acest lucru înainte de a continua. Nu sunt responsabil pentru daunele provocate. Și în caz de îndoială, acest robot nu trebuie utilizat în scopuri militare decât dacă este vorba despre un apocalipsă zombi. Și chiar și atunci folosește bunul simț.

Este sugerat să citiți instrucțiunile ascultătoare din Lista de lecturi.

Descărcați schema de conexiuni din pasul „Conexiuni”.

MOTORI

Motoarele pe care le-ați cumpărat arată probabil așa și este în regulă dacă nu au: dacă au doar două fire (negru și roșu în cele mai multe cazuri) ar trebui să funcționeze. Căutați foaia lor de date online pentru a vedea tensiunea și curentul lor de funcționare. Nu ezitați să puneți întrebări în secțiunea de comentarii. Le citesc mereu.

PODUL H

Nu am mai lucrat niciodată cu un H-Bridge. Am căutat puțin pe Google și am găsit un bun instructiv care explică principiile unui HB. Poți să te uiți și tu acolo (vezi pasul Listă de lecturi) și să-l conectezi și pe al tău. Nu voi explica multe. Puteți citi acolo și știți tot ce trebuie despre acest circuit.

LED

Acest mic lightbolb poate rula de la o tensiune logică doar pentru că nu necesită aproape curent și o tensiune de 3V-5V 4mA-18mA. Opțional.

ARDUINO

Arduino va primi semnale și comenzi prin conexiune serială de la Raspberry Pi. Folosim Arduino pentru a ne controla motoarele, deoarece Raspberry Pi nu poate emite valori analogice prin GPIO.

Pasul 9: Pornire automată Raspberry Pi

De fiecare dată când veți porni Raspberry Pi, va trebui să tastați numele de utilizator și parola. Nu vrem să facem asta, deoarece uneori nu putem conecta o tastatură la Pi, așa că vom urma acești pași din acest tutorial pentru a porni automat programul care pregătește Pi. Dacă se va lipi într-o buclă, putem oricând Ctrl + C să-l întrerupem.

  • sudo crontab -e
  • Și apoi vom introduce comanda care adaugă acel fișier la pornirea automată în managerul cron.

Vom apela fișierul pibot.sh care va da comenzi pentru a porni tot felul de scripturi python pentru a opera robotul. Să trecem peste: (Ne sudăm cu cortina programe Python pentru a permite programului să acceseze GPIO)

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

Codul care face toate lucrările de pe partea pi va fi apelat upon_startup.sh.

Este un script shell simplu care rulează totul.

Pasul 10: Houeston, am avut o problemă … Motorele DC nu sunt același model

Am testat deja H-Bridge și funcționează bine, dar când am acționat motoarele pe care le-am obținut de pe platforma robotului, am comandat online cele două motoare care se rotesc la viteze diferite și fac zgomote diferite. Am schimbat clapeta de accelerație la 100% pe motoare. Amândoi nu au putut alerga la capacitatea lor maximă.

Se pare că acestea sunt două motoare diferite. Unul are un cuplu mai mare, ceea ce este minunat pentru acest tip de robot, dar celălalt pur și simplu nu ar mișca robotul. Deci se transformă în cercuri.

În acest moment, ceea ce am este că programul serial de pe Arduino funcționează complet bine, dar serverul Tcp de pe PC și Clientul Tcp de pe Pi nu sunt încă codate. La Am nevoie să completez această înscriere pentru competiție. Ce fac?

  1. În primul rând, triplez tensiunea pentru motoare. Fișa tehnică spunea că 3V, 6V nu le-au mutat. Atunci este 9V. Am conectat bateriile teo în paralel pentru a dubla curentul și tensiunea rămâne aceeași.
  2. Am alte motoare care se potrivesc monturii de pe platformă? Poate văd dacă sunt modele similare.
  3. Pot înlocui cu Servo-uri dacă ciocolata a lovit într-adevăr ventilatorul.

Școala a început. Va trebui să văd ce să fac.

Notă: De ce naiba scriu aici problemele pe care le întâlnesc? Deci, dacă aveți mai puțină experiență și aveți aceleași probleme, veți ști ce să faceți.

Soluția:

Așa că am mai făcut un test. Am adaptat diferența de viteză în codul Arduino.

NOTĂ: motoarele se pot roti la viteze diferite pentru dvs.! Schimbați valorile din schița Arduino.

Pasul 11: [TCP]: De ce Tcp și Not Secure Shell? Ce este TCP?

Am două explicații de ce să folosesc Tcp și nu SSH pentru P. C. - Comunicare Pi.

  1. În primul rând, SSH (Secure Shell, vezi Explicații) este menit să lanseze comenzi de pe un computer la distanță. A face Pi să răspundă cu informațiile pe care ni le dorim este mai dificil, deoarece singura noastră opțiune de a analiza datele este prin procesarea dură și plictisitoare a șirurilor.
  2. În al doilea rând, știm deja cum să folosim SSH și dorim să învățăm mai multe modalități de comunicare între dispozitive în acest tutorial.

TCP, sau Protocolul de control al transmisiei, este un protocol de bază al suitei Internet Protocol. Acesta își are originea în implementarea inițială a rețelei în care a completat Protocolul Internet (IP). Prin urmare, întreaga suită este denumită în mod obișnuit TCP / IP. TCP oferă livrarea fiabilă, ordonată și verificată prin erori a unui flux de octeți între aplicațiile care rulează pe gazde care comunică printr-o rețea IP.

(Din Wikipedia)

Deci, avantajele TCP sunt:

  • Sigur
  • Rapid
  • Funcționează oriunde în rețea
  • Oferă metode pentru a verifica transmiterea corectă a datelor
  • Flow Control: are protecție în cazul în care expeditorul de date trimite date prea repede pentru ca clientul să le poată înregistra și prelucra.

Iar contra sunt:

  • În TCP nu puteți transmite (trimiteți date către toate dispozitivele dintr-o rețea) și multicast (același dar puțin diferit - oferă posibilitatea fiecărui dispozitiv difuzat ca un server).
  • Erori în bibliotecile de programe și sisteme de operare (care gestionează singure comunicarea TCP, routerul dvs. nu face aproape nimic decât să conecteze cele două [sau mai multe] dispozitive)

De ce nu folosiți UDP, s-ar putea să întrebați? Ei bine, spre deosebire de TCP, UDP nu se asigură că clientul dvs. primește datele înainte de a trimite mai multe. Cum ar fi să trimiteți un e-mail și să nu știți dacă clientul îl primește. În plus, UDP este mai puțin sigur. Pentru mai multe informații, citiți acest post de la Stack Exchange Super User

Acest articol este bun și recomandat.

Pasul 12: [TCP]: Permiteți crearea unui client

Clientul (Raspberry Pi în cazul nostru), care primește datele de la server (PC-ul nostru în cazul nostru) va primi date pe care să le trimită către Pi (comenzi seriale care vor fi efectuate pe Arduino) și va primi date înapoi (Sensor Readings) și feedback direct de la Arduino. Schema atașată arată relația dintre cei trei.

Articolul Python Wiki TcpCommunication arată că este atât de simplu să faci o astfel de comunicare cu câteva linii de cod folosind modulul socket încorporat. Vom avea un program pe PC și un alt program pe Pi.

Vom lucra cu întreruperi. Aflați mai multe în pasul Explicații despre ele. Citiți și despre buffere. Acum, putem citi datele pe care le avem folosind data = s.recv (BUFFER_SIZE), dar va fi câte caractere am definit cu mușcături goale. Putem folosi întreruperile? O altă întrebare: bufferul va fi gol sau va aștepta serverul să trimită mai multe date, caz în care serverul / clientul va arunca o excepție de timeout?

Să abordăm asta pe rând. Înainte de a face acest lucru, am căutat acest articol Wikipedia care listează porturile TCP și UDP folosite. După o scurtă privire am decis că acest proiect va comunica pe portul 12298 deoarece nu este utilizat de sistemul de operare și de serviciile locale.

Pasul 13: Încercați comunicările noastre Tcp

Pentru a vedea dacă putem folosi întreruperile, să facem un simplu client și un server folosind linia de comandă Python. O voi face în următorii pași:

  1. Porniți un program care trimite un text prin Tcp într-o buclă printr-un port cortină
  2. Porniți un alt program (în paralel) care citește tot textul într-o buclă și îl imprimă pe ecran.

Vor fi afișate numai segmente ale programului. Toate programele rulează cu Python 3. Toate aceste programe sunt de a trimite comanda serială de la tastatura utilizatorului PC-ului către Arduino prin Pi.

  • SBcontrolPC.py - Pentru a fi rulat pe computer. Pornește o conexiune TCP pe adresa locală și pe portul specificat (folosesc portul 12298, vezi pasul anterior de ce)
  • SBcontrolPi.py - Se execută pe Pi. Citește memoria tampon la fiecare jumătate de secundă (0,5 secunde). Pornește un script shell care gestionează lucruri precum streaming video etc.

Recomandat: