Innehållsförteckning:

Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi: 15 steg (med bilder)
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi: 15 steg (med bilder)

Video: Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi: 15 steg (med bilder)

Video: Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi: 15 steg (med bilder)
Video: Bygg din egen carport 2024, November
Anonim
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi
Bygg din internetstyrda videostreamingsrobot med Arduino och Raspberry Pi

Jag är @RedPhantom (aka LiquidCrystalDisplay / Itay), en 14 år gammal student från Israel som lär sig på Max Shein Junior High School for Advanced Science and Mathematics. Jag gör det här projektet för alla att lära av och dela!

Du kanske har tänkt för dig själv: hmm … jag är en nörd … Och mina barn vill att jag ska göra ett projekt med dem … Han ville bygga en robot. Hon ville klä upp den som en liten valp. Det är ett bra helgerprojekt!

Raspberry Pi är perfekt för varje användning: idag kommer vi att beskriva förmågan hos denna mikrodator att skapa en robot. Denna robot kan:

  • Kör runt och kontrolleras via LAN (WiFi) med vilken dator som helst som är ansluten till samma WiFi -nätverk som Raspberry Pi är.
  • Strömma video live med Raspberry Pi kameramodul
  • Skicka sensordata med Arduino

För att se vad du behöver för det här fina ljusprojektet, läs bara nästa steg (varningar) och därefter steget Wanted: Components.

Här är GitHub -repon: GITHUB REPO BY ME

Här är projektwebbplatsen: PROJECT SITE BY ME

Steg 1: Varning: Var försiktig med att prova det här hemma

VARNING:

FÖRFATTAREN FÖR DENNA TUTORIELLA ANTAGNINGAR DU HAR RÄCKLIGT KUNSKAP OM ELEKTRICITET OCH GRUNDLÄGGANDE ANVÄNDNING AV ELEKTRISK UTRUSTNING. OM DU INTE ÄR FÖRSIKTIG OCH INTE FÖLJER INSTRUKTIONERNA I DENNA HANDBOK KAN DU: SKADA ELEKTRONISK UTRUSTNING, BRÄNNA DIG SELV ELLER BRÄNNA. Var försiktig och använd sunt förnuft. Om du inte har den kunskap som krävs för denna handledning (lödning, grunderna i elektronik), utför gärna med en person som gör det. Tack.

DENNA INSTRUKTABELS FÖRESKRIVARE BORTTAGER ALLT ANSVAR FRÅN SJÄLV FÖR SKADA ORSAKAD ELLER Tappad egendom ELLER FYSISK SKADA. ANVÄND SUNT FÖRNUFT

Steg 2: Komponenter

Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar

Innan vi värmer upp lödkolven måste vi gå igenom vad som ska kopplas till vad. Jag gjorde detta enkla diagram (MS Paint sviker mig aldrig) som beskriver var vissa delar finns i roboten.

Bilden är byggd så att du kan zooma in och se i full upplösning och läsa texten.

Steg 6: Adress för Pi

Arduino pratar med Pi enligt planen. Och Pi pratar med datorn, så hur fungerar allt detta?

Låt oss titta på vår anslutningsinitieringssekvens:

  1. Raspberry Pi startar
  2. Arduino börjar
  3. Raspberry Pi startar TCP Client. Den skjuter ut sin IP -adress via en LED.
  4. Raspberry Pi startar seriell kommunikationstjänst och ansluter till Arduino

Därför har vi etablerat någon form av kommunikation:

Dator Raspberry Pi Arduino

Jag har använt Visual Basic. NET (Microsoft Visual Studio 2013 Community) för att skriva programmet som pratar med Raspberry Pi och Python för att skriva Arduino/Raspberry Pi -protokollet.

Allt du behöver göra för att veta din Pi IP -adress är att ansluta den till en HDMI -skärm, logga in på skalet och skriva kommandot:

värdnamn -I

Steg 7: Planen

Nu när vi har Pi: s IP -adress kommer vi att SSH in i den (SSH är Secure Shell - vi ansluter på distans till Linux -skalet) och skriver en fil som visar serverns IP -adress. Pi, vid start kommer också att göra det och skriva porten den lyssnar på. Här kommer jag bara att ge några exempel från koden men den är tillgänglig för nedladdning från detta steg och från GitHub -grenen som jag har skapat. Detaljer om det senare.

Det fungerar så här:

  1. RPi startar.
  2. RPi startar Tcp -programmet på sin lokala IP och en utsedd port.
  3. RPI börjar strömma video
  4. RPI stängs av.

Steg 8: Fysisk

Nu är vi redo att börja fysiskt bygga det hela. Om du inte har läst steg 1 (varningstext och licensiering) gör det innan du fortsätter. Jag ansvarar inte för eventuella skador. Och i tveksamma fall får denna robot inte användas för militära ändamål om det inte är en zombie -apokalyps. Och även då använda sunt förnuft.

Det föreslås att du läser instruktionerna lyssna i läslistan.

Ladda ner anslutningsschemat från steget "Anslutningar".

MOTORER

De motorer du har köpt ser förmodligen ut så här, och det är OK om de inte gör det: om de bara har två ledningar (svart och rött i de flesta fall) borde det fungera. Leta upp deras datablad online för att se deras spänning och ström. Ställ gärna frågor i kommentarsfältet. Jag har alltid läst dem.

H-BRIDGE

Jag har aldrig arbetat med en H-Bridge tidigare. Jag googlade lite och hittade en bra instruerbar förklaring av principerna för ett HB. Du kan titta dit också (se Steg för läslista) och haka din också. Jag kommer inte att förklara mycket. Du kan läsa där och veta allt du borde om denna krets.

LED

Denna lilla lampa kan driva från logisk spänning bara för att den nästan inte kräver någon ström och en spänning på 3V-5V 4mA-18mA. Frivillig.

ARDUINO

Arduino kommer att få signaler och kommandon via seriell anslutning från Raspberry Pi. Vi använder Arduino för att styra våra motorer eftersom Raspberry Pi inte kan mata ut analoga värden via GPIO.

Steg 9: Autostart Raspberry Pi

Varje gång du startar Raspberry Pi måste du ange användarnamn och lösenord. Vi vill inte göra det för ibland kan vi bara inte ansluta ett tangentbord till Pi, så vi kommer att följa dessa steg från denna handledning för att automatiskt starta programmet som förbereder Pi. Om det kommer att fastna i en loop kan vi alltid Ctrl+C för att avbryta det.

  • sudo crontab -e
  • Och sedan kommer vi att ange kommandot som lägger till den filen till auto-strartup i cronhanteraren.

Vi kommer att kalla filen pibot.sh som ger kommandon för att starta alla typer av pythonskript för att styra roboten. Låt oss gå igenom det: (Vi sudo med gardin -Python -program för att låta programmet komma åt 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 gör allt arbete på sidan av pi kommer att kallas upon_startup.sh.

Det är ett enkelt skalskript som kör allt.

Steg 10: Houeston, vi har haft problem … DC -motorer är inte samma modell

Jag har redan testat H-bron och det fungerar bra, men när jag kopplar in motorerna som jag fick från robotplattformen beställde jag online de två motorerna svänger i olika hastigheter och ger olika ljud. Jag bytte gas till 100% på motorerna. Båda kunde inte springa med sin maximala kapacitet.

Det verkar som om det här är två olika motorer. Den ena har ett större vridmoment som är bra för den här typen av robot men den andra skulle bara inte flytta roboten. Så det vänder sig i cirklar.

Vid det här laget är det seriella programmet på Arduino som fungerar helt bra men Tcp -servern på datorn och Tcp -klienten på Pi är inte kodade ännu. Jag måste slutföra detta bidrag för tävlingen. Vad gör jag?

  1. Först tredubblar jag spänningen för motorerna. Databladet sa att 3V, 6V inte flyttade dem. Då är det 9V. Jag anslöt teo -batterier parallellt för att fördubbla strömmen och spänningen förblir densamma.
  2. Har jag andra motorer som passar till fästet på plattformen? Kanske kan jag se om de är liknande modeller.
  3. Jag kan ersätta Servos om chokladen verkligen träffar fläkten.

Skolan började. Jag får se vad jag ska göra.

Obs: Varför i helvete skriver jag de problem jag stöter på här? Så om du är mindre erfaren och har samma problem vet du också vad du ska göra.

Lösningen:

Så jag har gjort ett nytt test. Jag har anpassat skillnaden i hastighet i Arduino -koden.

OBS: motorerna kan snurra i olika hastigheter för dig! Ändra värdena i Arduino -skissen.

Steg 11: [TCP]: Varför Tcp och Not Secure Shell? Vad är TCP?

Jag har två förklaringar till varför man använder Tcp och inte SSH för P. C. - Pi -kommunikation.

  1. För det första är SSH (Secure Shell, se Förklaringar) avsett att starta kommandon från en fjärrdator. Att få Pi att svara med information vi vill ha är svårare eftersom vårt enda alternativ att analysera data är genom tuff och tråkig strängbehandling.
  2. För det andra vet vi redan hur vi använder SSH och vi vill lära oss fler sätt att kommunicera mellan enheter i denna handledning.

TCP, eller Transmission Control Protocol, är ett kärnprotokoll för Internet Protocol Suite. Det har sitt ursprung i den första nätverksimplementeringen där det kompletterade Internet Protocol (IP). Därför kallas hela sviten TCP/IP. TCP tillhandahåller tillförlitlig, beställd och felkontrollerad leverans av en ström av oktetter mellan applikationer som körs på värdar som kommunicerar över ett IP-nätverk.

(Från Wikipedia)

Så TCP -proffsen är:

  • Säkra
  • Snabb
  • Fungerar var som helst i ett nätverk
  • Ger metoder för att kontrollera korrekt dataöverföring
  • Flödeskontroll: har skydd om datasändaren skickar data för snabbt för att klienten ska kunna registrera och bearbeta.

Och nackdelarna är:

  • I TCP kan du inte sända (Skicka data till alla enheter i ett nätverk) och multicast (samma men lite olika- ger varje enhet sändning som en server).
  • Fel i ditt program och operativsystems bibliotek (som själva hanterar TCP -kommunikationen, din router gör nästan ingenting utom att ansluta de två [eller fler] enheterna)

Varför inte använda UDP, kan du fråga? Tja, till skillnad från TCP, ser UDP inte till att din klient får data innan han skickar mer. Som att skicka ett mejl och inte veta om klienten tar emot det. Dessutom är UDP mindre säker. För mer information, läs det här inlägget från Stack Exchange Super User

Denna artikel är bra och rekommenderas.

Steg 12: [TCP]: Lets Make a Client

Klienten (Raspberry Pi i vårt fall), som tar emot data från servern (vår dator i vårt fall) kommer att få data att skicka till Pi (seriella kommandon som kommer att utföras på Arduino) och ta emot data tillbaka (sensoravläsningar och feedback direkt från Arduino. Schemat som bifogas visar förhållandet mellan de tre.

Python Wiki TcpCommunication-artikeln visar att det är så enkelt att göra sådan kommunikation med några koderader med den inbyggda sockelmodulen. Vi kommer att ha ett program på datorn och ett annat program på Pi.

Vi kommer att arbeta med avbrott. Läs mer i steget Förklaringar om dem. Läs också om buffertar. Nu kan vi läsa data vi har med data = s.recv (BUFFER_SIZE) men det kommer att vara hur många tecken vi har definierat med tomma bett. Kan vi använda avbrott? En annan fråga: kommer bufferten att vara tom eller väntar det på att servern ska skicka mer data, i vilket fall servern/klienten kommer att ta ett timeout -undantag?

Låt oss ta itu med den i taget. Innan vi gör det har jag letat upp den här Wikipedia -artikeln som listar använda TCP- och UDP -portar. Efter en snabb titt har jag bestämt att detta projekt kommer att kommunicera på port 12298 eftersom det inte används av operativsystemet och lokala tjänster.

Steg 13: Prova våra Tcp -kommandon

För att se om vi kan använda avbrott kan vi skapa en enkel klient och en server med Python -kommandoraden. Jag kommer att göra det i följande steg:

  1. Starta ett program som skickar en text via Tcp i en loop genom en gardinport
  2. Starta ett annat program (parallellt) som läser all text i en loop och skriver ut det på skärmen.

Endast delar av programmet visas. Alla program som körs med Python 3. Alla dessa program är att skicka det seriella kommandot från tangentbordet på PC -användaren till Arduino via Pi.

  • SBcontrolPC.py - Körs på datorn. Startar en TCP -anslutning på den lokala adressen och på den angivna porten (jag använder port 12298, se föregående steg varför)
  • SBcontrolPi.py - Körs på Pi. Läser dess buffert varje halv sekund (0,5 sekunder). Startar ett skalskript som hanterar saker som videoströmning etc.

Rekommenderad: