Indholdsfortegnelse:

Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi: 15 trin (med billeder)
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi: 15 trin (med billeder)

Video: Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi: 15 trin (med billeder)

Video: Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi: 15 trin (med billeder)
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Juli
Anonim
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi
Byg din internetstyrede videostreamingsrobot med Arduino og Raspberry Pi

Jeg er @RedPhantom (alias LiquidCrystalDisplay / Itay), en 14 år gammel studerende fra Israel, der lærte på Max Shein Junior High School for Advanced Science and Mathematics. Jeg laver dette projekt for alle at lære af og dele!

Du har måske tænkt ved dig selv: hmm … jeg er en nørd … Og mine børn vil have mig til at lave et projekt med dem … Han ville bygge en robot. Hun ville klæde den ud som en lille hvalp. Det er et godt weekendprojekt!

Raspberry Pi er perfekt til enhver brug: I dag vil vi tydeliggøre denne mikrocomputers evner til at lave en robot. Denne robot kan:

  • Kør rundt og kontroller via LAN (WiFi) ved hjælp af enhver computer, der er forbundet til det samme WiFi -netværk som Raspberry Pi er.
  • Stream video live ved hjælp af Raspberry Pi Camera Module
  • Send sensordata ved hjælp af Arduino

For at se, hvad du har brug for til dette flotte lysprojekt, skal du bare læse det næste trin (advarsler) og derefter trinet Wanted: Components.

Her er GitHub -repoen: GITHUB REPO BY ME

Her er projektstedet: PROJEKTSTED AF MIG

Trin 1: Advarsel: Vær forsigtig med at prøve dette derhjemme

ADVARSEL:

FORFATTEREN AF DENNE TUTORIELLE FORTAGELSER, DU HAR TILstrækkelig viden om el og den grundlæggende betjening af elektrisk udstyr. HVIS DU IKKE ER FORSIGTIG OG IKKE FØLGER INSTRUKTIONERNE I DENNE VEJLEDNING, KAN DU: SKADE ELEKTRONISK UDSTYR, BRÆND DIG SELV ELLER FORÅG BRAND. Vær forsigtig og brug sund fornuft. Hvis du ikke har den nødvendige viden til denne vejledning (lodning, grundlæggende elektronik), bedes du udføre med en person, der gør det. Tak skal du have.

DENNE INSTRUKTABELS FORFATTER Fjerner ethvert ansvar fra sig selv for skader forårsaget eller mistet ejendom eller fysiske skader. BRUG FÆLLES FORNØJELSE

Trin 2: Komponenter

Forbindelser
Forbindelser
Forbindelser
Forbindelser
Forbindelser
Forbindelser
Forbindelser
Forbindelser

Inden vi opvarmer loddejernet, skal vi gå over, hvad der skal forbindes til hvad. Jeg lavede dette enkle diagram (MS Paint svigter mig aldrig), der beskriver, hvor en bestemt del er placeret i robotten.

Billedet er bygget, så du kan zoome ind og se i fuld opløsning og læse teksten.

Trin 6: Adresse til Pi

Arduino taler med Pi ifølge planen. Og Pi taler til computeren, så hvordan fungerer alt dette?

Lad os se på vores forbindelsesinitiativsekvens:

  1. Raspberry Pi starter
  2. Arduino starter
  3. Raspberry Pi starter TCP Client. Det skyder sin IP -adresse ud via en LED.
  4. Raspberry Pi starter seriel kommunikationstjeneste og opretter forbindelse til Arduino

Derfor har vi etableret en form for kommunikation:

Computer Raspberry Pi Arduino

Jeg har brugt Visual Basic. NET (Microsoft Visual Studio 2013 Community) til at skrive det program, der taler med Raspberry Pi og Python til at skrive Arduino/Raspberry Pi -protokollen.

Alt du skal gøre for at kende din Pi IP -adresse er at forbinde den til en HDMI -skærm, logge på Shell og skrive kommandoen:

værtsnavn -I

Trin 7: Planen

Nu hvor vi har Pi's IP -adresse, vil vi SSH ind i den (SSH er Secure Shell - vi forbinder eksternt til Linux -shell) og skriver en fil, der viser serverens IP -adresse. Pi, ved opstart vil også gøre det og skrive den port, den lytter til. Her vil jeg kun give et par eksempler fra koden, men den kan downloades fra dette trin og fra den GitHub -gren, jeg har oprettet. Detaljer om det senere.

Det fungerer sådan:

  1. RPi starter.
  2. RPi starter Tcp -programmet på sin lokale IP og en udpeget port.
  3. RPI begynder at streame video
  4. RPI lukker ned.

Trin 8: Går fysisk

Nu er vi klar til fysisk at begynde at bygge det hele. Hvis du ikke har læst trin 1 (advarselstekst og licens), skal du gøre det, før du fortsætter. Jeg er ikke ansvarlig for skader forårsaget. Og i tvivlstilfælde må denne robot ikke bruges til militære formål, medmindre det er en zombie -apokalypse. Og selv da bruge sund fornuft.

Det foreslås, at du læser instruktørerne, som du lytter til i læselisten.

Download tilslutningsskemaet fra trinnet "Forbindelser".

MOTORER

De motorer, du har købt, ser sandsynligvis sådan ud, og det er OK, hvis de ikke gør det: Hvis de kun har to ledninger (sort og rød i de fleste tilfælde) burde det fungere. Slå deres datablad online op for at se deres driftsspænding og strøm. Stil gerne spørgsmål i kommentarfeltet. Jeg læste dem altid.

H-BRIDGE

Jeg har aldrig arbejdet med en H-Bridge før. Jeg googlede lidt og fandt en god instruerbar forklaring af principperne for et HB. Du kan også kigge der (se trin i læseliste) og tilslutte din også. Jeg vil ikke forklare meget. Du kan læse der og vide alt, hvad du bør om dette kredsløb.

LED

Denne lille lyspære kan køre fra logisk spænding, bare fordi den næsten ikke kræver strøm og en spænding på 3V-5V 4mA-18mA. Valgfri.

ARDUINO

Arduino får signaler og kommandoer via seriel forbindelse fra Raspberry Pi. Vi bruger Arduino til at styre vores motorer, fordi Raspberry Pi ikke kan udsende analoge værdier via GPIO.

Trin 9: Autostart Raspberry Pi

Hver gang du tænder Raspberry Pi, skal du indtaste brugernavn og adgangskode. Vi vil ikke gøre det, fordi vi nogle gange bare ikke kan slutte et tastatur til Pi, så vi vil følge disse trin fra denne vejledning for automatisk at starte programmet, der forbereder Pi. Hvis det bliver stukket i en loop, kan vi altid Ctrl+C for at afbryde det.

  • sudo crontab -e
  • Og så vil vi indtaste kommandoen, der tilføjer filen til auto-strartup i cron manager.

Vi kalder filen pibot.sh, som giver kommandoer til at starte alle former for python -scripts for at betjene robotten. Lad os gå over det: (Vi sudo med gardin Python -programmer for at give programmet adgang til GPIO)

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

Koden, der udfører alt arbejdet på siden af pi, vil blive kaldt upon_startup.sh.

Det er et simpelt shell -script, der kører alt.

Trin 10: Houeston, vi har haft et problem … DC -motorer er ikke den samme model

Jeg har allerede testet H-broen, og den fungerer fint, men da jeg tilsluttede de motorer, jeg fik fra robotplatformen, bestilte jeg online, de to motorer drejer med forskellige hastigheder og laver forskellige lyde. Jeg ændrede gashåndtaget til 100% på motorerne. Begge kunne ikke køre med deres maksimale kapacitet.

Det ser ud til at være to forskellige motorer. Den ene har et større drejningsmoment, som er fantastisk til denne slags robot, men den anden ville bare ikke flytte robotten. Så det vender i cirkler.

På dette tidspunkt, hvad jeg har, er det serielle program på Arduino fungerer helt fint, men Tcp -serveren på pc'en og Tcp -klienten på Pi er ikke kodet endnu. I skal jeg udfylde dette indlæg til konkurrencen. Hvad skal jeg gøre?

  1. Først tredobler jeg spændingen for motorerne. Databladet sagde 3V, 6V flyttede dem ikke. Så er den 9V. Jeg tilsluttede teo -batterier parallelt for at fordoble strømmen, og spændingen forbliver den samme.
  2. Har jeg andre motorer, der passer til holderen på platformen? Måske kan jeg se, om de er lignende modeller.
  3. Jeg kan erstatte til Servoer, hvis chokoladen virkelig ramte blæseren.

Skolen startede. Jeg må se, hvad jeg skal gøre.

Bemærk: Hvorfor i alverden skriver jeg de problemer, jeg støder på her? Så hvis du er mindre erfaren og også har de samme problemer, ved du, hvad du skal gøre.

Løsningen:

Så jeg har lavet en anden test. Jeg har tilpasset forskellen i hastighed i Arduino -koden.

BEMÆRK: motorerne kan dreje i forskellige hastigheder for dig! Skift værdierne i Arduino -skitsen.

Trin 11: [TCP]: Hvorfor Tcp og Not Secure Shell? Hvad er TCP?

Jeg har to forklaringer på, hvorfor man bruger Tcp og ikke SSH til P. C. - Pi -kommunikation.

  1. For det første er SSH (Secure Shell, se forklaringer) beregnet til at starte kommandoer fra en fjerncomputer. Det er vanskeligere at få Pi til at reagere med oplysninger, vi ønsker, fordi vores eneste mulighed for at analysere dataene er gennem hård og kedelig strengbehandling.
  2. For det andet ved vi allerede, hvordan vi bruger SSH, og vi vil lære flere måder at kommunikere mellem enheder i denne vejledning.

TCP, eller Transmission Control Protocol, er en kerneprotokol for Internet Protocol Suite. Det stammer fra den første netværksimplementering, hvor det supplerede internetprotokollen (IP). Derfor kaldes hele pakken almindeligvis TCP/IP. TCP giver pålidelig, bestilt og fejlkontrolleret levering af en strøm af oktetter mellem applikationer, der kører på værter, der kommunikerer over et IP-netværk.

(Fra Wikipedia)

Så TCP -fordele er:

  • Sikker
  • Hurtig
  • Fungerer overalt på et netværk
  • Giver metoder til at kontrollere korrekt datatransmission
  • Flow Control: har beskyttelse, hvis datasenderen sender data for hurtigt til, at klienten kan registrere og behandle.

Og ulemperne er:

  • I TCP kan du ikke sende (Send data til alle enheder på et netværk) og multicast (samme, men lidt anderledes- giver mulighed for hver enhedsudsendelse som en server).
  • Fejl i dit program og operativsystemets biblioteker (der selv administrerer TCP -kommunikationen, din router gør næsten ingenting undtagen at forbinde de to [eller flere] enheder)

Hvorfor ikke bruge UDP, spørger du måske? I modsætning til TCP sørger UDP ikke for, at din klient får dataene, før han sender mere. Som at sende en mail og ikke vide, om klienten modtager den. Desuden er UDP mindre sikker. For mere information, læs dette indlæg fra Stack Exchange Super User

Denne artikel er god og anbefales.

Trin 12: [TCP]: Lad os få en klient

Klienten (Raspberry Pi i vores tilfælde), der modtager dataene fra serveren (vores pc i vores tilfælde) får data, der skal sendes til Pi (serielle kommandoer, der udføres på Arduino) og modtager data tilbage (sensoraflæsninger og feedback direkte fra Arduino. Den vedlagte ordning viser forholdet mellem de tre.

Python Wiki TcpCommunication-artiklen viser, at det er så enkelt at foretage sådan kommunikation med et par linjer kode ved hjælp af det indbyggede stikmodul. Vi vil have et program på pc'en og et andet program på Pi.

Vi arbejder med afbrydelser. Lær mere i forklaringstrinnet om dem. Læs også om buffere. Nu kan vi læse de data, vi har, ved hjælp af data = s.recv (BUFFER_SIZE), men det vil være, hvor mange tegn vi har defineret med tomme bid. Kan vi bruge afbrydelser? Et andet spørgsmål: vil bufferen være tom, eller vil den vente på, at serveren sender flere data, i hvilket tilfælde serveren/klienten kaster en timeout -undtagelse?

Lad os tackle den ene ad gangen. Inden vi gør det, har jeg slået op på denne Wikipedia -artikel, der viser brugte TCP- og UDP -porte. Efter et hurtigt kig har jeg besluttet, at dette projekt vil kommunikere på port 12298, fordi det ikke bruges af operativsystemet og lokale tjenester.

Trin 13: Prøv vores Tcp Comms

For at se, om vi kan bruge afbrydelser, kan vi lave en simpel klient og en server ved hjælp af Python -kommandolinjen. Jeg vil gøre det i følgende trin:

  1. Start et program, der sender en tekst via Tcp i en loop gennem en gardinport
  2. Start et andet program (parallelt), der læser hele teksten i en loop og udskriver det på skærmen.

Kun segmenter af programmet vil blive vist. Alle programmer, der kører med Python 3. Alle disse programmer gør, er at sende den serielle kommando fra tastaturet på pc -brugeren til Arduino gennem Pi.

  • SBcontrolPC.py - Køres på pc'en. Starter en TCP -forbindelse på den lokale adresse og på den angivne port (jeg bruger port 12298, se forrige trin hvorfor)
  • SBcontrolPi.py - Køres på Pi. Læser sin buffer hvert halve sekund (0,5 sekund). Starter et shell -script, der administrerer ting som f.eks. Videostreaming osv.

Anbefalede: