Innholdsfortegnelse:

Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi: 15 trinn (med bilder)
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi: 15 trinn (med bilder)

Video: Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi: 15 trinn (med bilder)

Video: Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi: 15 trinn (med bilder)
Video: Bygg din egen carport 2024, November
Anonim
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi
Bygg din internettstyrte videostreamingsrobot med Arduino og Raspberry Pi

Jeg er @RedPhantom (alias LiquidCrystalDisplay / Itay), en 14 år gammel student fra Israel som lærte på Max Shein Junior High School for Advanced Science and Mathematics. Jeg lager dette prosjektet for alle å lære av og dele!

Du har kanskje tenkt for deg selv: hmm … jeg er en nerd … Og barna mine vil at jeg skal lage et prosjekt med dem … Han ønsket å bygge en robot. Hun ville kle den ut som en liten valp. Det er et godt helgedagsprosjekt!

Raspberry Pi er perfekt for enhver bruk: I dag vil vi tydeliggjøre evnen til denne mikrodatamaskinen til å lage en robot. Denne roboten kan:

  • Kjør rundt og bli kontrollert via LAN (WiFi) med hvilken som helst datamaskin som er koblet til det samme WiFi -nettverket som Raspberry Pi er.
  • Stream video live ved hjelp av Raspberry Pi Camera Module
  • Send sensordata med Arduino

For å se hva du trenger for dette fine lysprosjektet, bare les neste trinn (advarsler) og deretter trinnet Wanted: Components.

Her er GitHub -repoen: GITHUB REPO BY ME

Her er prosjektstedet: PROJEKTSTED AV MEG

Trinn 1: Advarsel: Vær forsiktig med å prøve dette hjemme

FORSIKTIGHET:

FORFATTEREN FOR DENNE LÆRNINGSTILTAKENE DU HAR TILstrekkelig kunnskap om elektrisitet og den grunnleggende driften av elektrisk utstyr. HVIS DU IKKE ER FORSIKTIG OG IKKE FØLGER INSTRUKSJONENE I DENNE VEILEDNINGEN, KAN DU SKADE ELEKTRONISK UTSTYR, BRENN SELV ELLER BRUK BRANN. Vær forsiktig og bruk sunn fornuft. Hvis du ikke har kunnskapen som kreves for denne opplæringen (lodding, grunnleggende om elektronikk), vennligst utfør med en person som gjør det. Takk skal du ha.

DENNE INSTRUKTABELS FORFATTER FJERNER ethvert ansvar fra seg selv for skader forårsaket eller tapt eiendom eller fysiske skader. BRUK FELLES SINN

Trinn 2: Komponenter

Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger

Før vi varmer opp loddejernet, må vi gå over hva som skal kobles til hva. Jeg laget dette enkle diagrammet (MS Paint svikter meg aldri) som beskriver hvor en bestemt del er plassert i roboten.

Bildet er bygget slik at du kan zoome inn og se i full oppløsning og lese teksten.

Trinn 6: Adresse for Pi

Arduino snakker med Pi i henhold til planen. Og Pi snakker med datamaskinen, så hvordan fungerer alt dette?

La oss se på vår tilkoblingsinitieringsrekkefølge:

  1. Raspberry Pi starter
  2. Arduino starter
  3. Raspberry Pi starter TCP Client. Den skyter ut sin IP -adresse via en LED.
  4. Raspberry Pi starter seriell kommunikasjonstjeneste og kobles til Arduino

Derfor har vi etablert en slags kommunikasjon:

Datamaskin Raspberry Pi Arduino

Jeg har brukt Visual Basic. NET (Microsoft Visual Studio 2013 Community) til å skrive programmet som snakker med Raspberry Pi og Python for å skrive Arduino/Raspberry Pi -protokollen.

Alt du trenger å gjøre for å kjenne din Pi IP -adresse, er å koble den til en HDMI -skjerm, logge på Shell og skrive inn kommandoen:

vertsnavn -I

Trinn 7: Planen

Nå som vi har Pi's IP -adresse, vil vi SSH inn i den (SSH er Secure Shell - vi kobler eksternt til Linux -skallet) og skriver en fil som viser serverens IP -adresse. Pi, ved oppstart vil også gjøre det og skrive porten den lytter til. Her vil jeg bare gi noen få eksempler fra koden, men den er tilgjengelig for nedlasting fra dette trinnet og fra GitHub -grenen jeg har opprettet. Detaljer om det senere.

Det fungerer slik:

  1. RPi starter opp.
  2. RPi starter Tcp -programmet på sin lokale IP og en angitt port.
  3. RPI begynner å streame video
  4. RPI slår seg av.

Trinn 8: Fysisk

Nå er vi klare til å begynne fysisk å bygge det hele. Hvis du ikke har lest trinn 1 (advarselstekst og lisensiering), vennligst gjør det før du fortsetter. Jeg er ikke ansvarlig for skader forårsaket. Og i tvilstilfelle må denne roboten ikke brukes til militære formål med mindre det er en zombieapokalypse. Og selv da bruke sunn fornuft.

Det foreslås at du leser instruksjonene som du hører i leselisten.

Last ned tilkoblingsskjemaet fra trinnet "Tilkoblinger".

MOTORER

Motorene du har kjøpt ser sannsynligvis slik ut, og det er OK hvis de ikke gjør det: hvis de bare har to ledninger (svart og rød i de fleste tilfeller) burde det fungere. Slå opp databladet på nettet for å se driftsspenningen og strømmen. Still gjerne spørsmål i kommentarfeltet. Jeg leser dem alltid.

H-BRIDGE

Jeg har aldri jobbet med en H-bro før. Jeg googlet litt og fant en god instruks som forklarer prinsippene for en HB. Du kan også se der (se Leseliste -trinn) og koble din også. Jeg vil ikke forklare mye. Du kan lese der og vite alt du bør om denne kretsen.

LED

Denne lille lyspæren kan kjøre fra logisk spenning bare fordi den nesten ikke krever strøm, og en spenning på 3V-5V 4mA-18mA. Valgfri.

ARDUINO

Arduino vil få signaler og kommandoer via seriell tilkobling fra Raspberry Pi. Vi bruker Arduino til å kontrollere motorene våre fordi Raspberry Pi ikke kan sende ut analoge verdier via GPIO.

Trinn 9: Autostart Raspberry Pi

Hver gang du slår på Raspberry Pi, må du skrive inn brukernavn og passord. Vi vil ikke gjøre det fordi noen ganger kan vi bare ikke koble et tastatur til Pi, så vi vil følge disse trinnene fra denne opplæringen for å starte programmet som forbereder Pi automatisk. Hvis det blir stikk i en sløyfe, kan vi alltid Ctrl+C for å avbryte det.

  • sudo crontab -e
  • Og så vil vi skrive inn kommandoen som legger den filen til auto-strartup i cron manager.

Vi vil kalle filen pibot.sh som vil gi kommandoer for å starte alle slags python -skript for å betjene roboten. La oss gå over det: (Vi sudo med gardin -Python -programmer for å gi programmet tilgang 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 som gjør alt arbeidet på siden av pi vil bli kalt upon_startup.sh.

Det er et enkelt skallskript som kjører alt.

Trinn 10: Houeston, vi har hatt et problem … DC -motorer er ikke samme modell

Jeg har allerede testet H-broen, og den fungerer bra, men når jeg kobler motorene jeg fikk fra robotplattformen, bestilte jeg de to motorene i forskjellige hastigheter og lager forskjellige lyder. Jeg byttet gass til 100% på motorene. Begge to kunne ikke løpe med maksimal kapasitet.

Det virker som om dette er to forskjellige motorer. Den ene har et større dreiemoment som er flott for denne typen roboter, men den andre ville bare ikke flytte roboten. Så det snur i sirkler.

På dette tidspunktet er det serielle programmet på Arduino som fungerer helt fint, men Tcp -serveren på PCen og Tcp -klienten på Pi er ikke kodet ennå. På må jeg fullføre denne oppføringen for konkurransen. Hva gjør jeg?

  1. Først tredobler jeg spenningen for motorene. Databladet sa at 3V, 6V ikke flyttet dem. Da er det 9V. Jeg koblet teo -batterier parallelt for å doble strømmen, og spenningen forblir den samme.
  2. Har jeg andre motorer som passer til festet på plattformen? Kanskje jeg kan se om de er lignende modeller.
  3. Jeg kan bytte ut til Servos hvis sjokoladen virkelig traff viften.

Skolen startet. Jeg må se hva jeg skal gjøre.

Merk: Hvorfor i all verden skriver jeg problemene jeg støter på her? Så hvis du er mindre erfaren og også har de samme problemene, vet du hva du skal gjøre.

Løsningen:

Så jeg har gjort en ny test. Jeg har tilpasset forskjellen i hastighet i Arduino -koden.

MERK: motorene kan spinne i forskjellige hastigheter for deg! Endre verdiene i Arduino -skissen.

Trinn 11: [TCP]: Hvorfor Tcp og Not Secure Shell? Hva er TCP?

Jeg har to forklaringer på hvorfor man bruker Tcp og ikke SSH for P. C. - Pi -kommunikasjon.

  1. For det første er SSH (Secure Shell, se forklaringer) ment å starte kommandoer fra en ekstern datamaskin. Å få Pi til å svare med informasjon vi ønsker er vanskeligere fordi vårt eneste alternativ for å analysere dataene er gjennom tøff og kjedelig strengbehandling.
  2. For det andre vet vi allerede hvordan vi bruker SSH, og vi ønsker å lære flere måter å kommunisere mellom enheter på i denne opplæringen.

TCP, eller Transmission Control Protocol, er en kjerneprotokoll for Internet Protocol Suite. Den stammer fra den første nettverksimplementeringen der den kompletterte Internet Protocol (IP). Derfor blir hele suiten ofte referert til som TCP/IP. TCP gir pålitelig, bestilt og feilkontrollert levering av en strøm av oktetter mellom applikasjoner som kjører på verter som kommuniserer over et IP-nettverk.

(Fra Wikipedia)

Så TCP -fordeler er:

  • Sikre
  • Fort
  • Fungerer hvor som helst på et nettverk
  • Tilbyr metoder for å kontrollere korrekt dataoverføring
  • Flow Control: har beskyttelse i tilfelle datasenderen sender data for fort til at klienten kan registrere og behandle.

Og ulempene er:

  • I TCP kan du ikke kringkaste (Send data til alle enheter i et nettverk) og multicast (samme, men lite forskjellig- gir hver enhet kringkasting som en server).
  • Feil i programmet og operativsystembibliotekene (som administrerer TCP -kommunikasjonen selv, ruteren din gjør nesten ingenting bortsett fra å koble de to [eller flere] enhetene)

Hvorfor ikke bruke UDP, kan du spørre? I motsetning til TCP, sørger UDP ikke for at klienten din får dataene før han sender mer. Som å sende en e -post og ikke vite om klienten mottar den. Dessuten er UDP mindre sikker. For mer informasjon, les dette innlegget fra Stack Exchange Super User

Denne artikkelen er god og anbefalt.

Trinn 12: [TCP]: La oss lage en klient

Klienten (Raspberry Pi i vårt tilfelle), som mottar dataene fra serveren (vår PC i vårt tilfelle) vil få data som skal sendes til Pi (serielle kommandoer som vil bli utført på Arduino) og motta data tilbake (sensoravlesninger og tilbakemeldinger direkte fra Arduino. Opplegget vedlagt viser forholdet mellom de tre.

Python Wiki TcpCommunication-artikkelen viser at det er så enkelt å lage slik kommunikasjon med noen få kodelinjer ved hjelp av den innebygde sokkelmodulen. Vi vil ha et program på PC -en og et annet program på Pi.

Vi vil jobbe med avbrudd. Lær mer i forklaringstrinnet om dem. Les også om buffere. Nå kan vi lese dataene vi har ved å bruke data = s.recv (BUFFER_SIZE), men det vil være hvor mange tegn vi har definert med tomme bitt. Kan vi bruke avbrudd? Et annet spørsmål: vil bufferen være tom, eller vil den vente på at serveren sender flere data, i så fall vil serveren/klienten kaste et tidsavbruddsunntak?

La oss takle den ene om gangen. Før vi gjør det, har jeg slått opp denne Wikipedia -artikkelen som viser brukte TCP- og UDP -porter. Etter en rask titt har jeg bestemt meg for at dette prosjektet vil kommunisere på port 12298 fordi det ikke brukes av operativsystemet og lokale tjenester.

Trinn 13: Prøv våre Tcp Comms

For å se om vi kan bruke avbrudd, kan vi lage en enkel klient og en server ved hjelp av Python -kommandolinjen. Jeg vil gjøre det i følgende trinn:

  1. Start et program som sender en tekst via Tcp i en sløyfe gjennom en gardinport
  2. Start et annet program (parallelt) som leser all teksten i en sløyfe og skriver den ut på skjermen.

Bare deler av programmet vil bli vist. Alle programmer som kjøres med Python 3. Alle disse programmene gjør er å sende den serielle kommandoen fra tastaturet til PC -brukeren til Arduino gjennom Pi.

  • SBcontrolPC.py - Skal kjøres på PCen. Starter en TCP -tilkobling på den lokale adressen og på den angitte porten (jeg bruker port 12298, se forrige trinn hvorfor)
  • SBcontrolPi.py - Skal kjøres på Pi. Leser bufferen hvert halve sekund (0,5 sekund). Starter et skallskript som administrerer ting som videostreaming etc.

Anbefalt: