Inhoudsopgave:

Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi - Ajarnpa
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi - Ajarnpa

Video: Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi - Ajarnpa

Video: Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi - Ajarnpa
Video: Programmeer een Chatbot - Programmeren met kunstmatige intelligentie missie 2 2024, November
Anonim
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi

Ik ben @RedPhantom (ook bekend als LiquidCrystalDisplay / Itay), een 14-jarige student uit Israël die studeert op de Max Shein Junior High School for Advanced Science and Mathematics. Ik maak dit project voor iedereen om van te leren en te delen!

Je hebt misschien bij jezelf gedacht: hmm… ik ben een nerd… En mijn kinderen willen dat ik een project met hen maak… Hij wilde een robot bouwen. Ze wilde het verkleden als een kleine puppy. Het is een goed weekendproject!

De Raspberry Pi is perfect voor elk gebruik: vandaag zullen we de mogelijkheden van deze microcomputer om een robot te maken expliciet maken. Deze robot kan:

  • Rijd rond en laat je bedienen via LAN (WiFi) met elke computer die is aangesloten op hetzelfde wifi-netwerk als de Raspberry Pi.
  • Stream video live met de Raspberry Pi Camera Module
  • Sensorgegevens verzenden met Arduino

Om te zien wat je nodig hebt voor dit mooie lichtproject, lees je gewoon de volgende stap (waarschuwingen) en daarna de stap Gezocht: Componenten.

Hier is de GitHub-repo: GITHUB REPO BY ME

Hier is de projectsite: PROJECTSITE DOOR MIJ

Stap 1: Waarschuwing: wees voorzichtig als u dit thuis probeert

VOORZICHTIGHEID:

DE AUTEUR VAN DEZE HANDLEIDING GAAT AAN DAT U VOLDOENDE KENNIS HEBT OVER ELEKTRICITEIT EN DE BASISBEDIENING VAN ELEKTRISCHE APPARATUUR. ALS U NIET VOORZICHTIG BENT EN DE INSTRUCTIES IN DEZE HANDLEIDING NIET VOLGT, KAN U: ELEKTRONISCHE APPARATUUR BESCHADIGEN, ZICH VERBRANDEN OF BRAND VEROORZAKEN. Wees voorzichtig en gebruik uw gezond verstand. Als je niet over de kennis beschikt die nodig is voor deze tutorial (solderen, basis van elektronica), voer het dan uit met iemand die dat wel heeft. Bedankt.

DE AUTEUR VAN DIT INSTRUCTABLE VERWIJDERT ELKE VERANTWOORDELIJKHEID VAN ZICHZELF VOOR SCHADE VEROORZAAKT OF VERLIES VAN EIGENDOMMEN OF FYSIEKE SCHADE. GEBRUIK GEZOND VERSTAND

Stap 2: Componenten

Verbindingen
Verbindingen
Verbindingen
Verbindingen
Verbindingen
Verbindingen
Verbindingen
Verbindingen

Voordat we de soldeerbout opwarmen, moeten we bespreken wat met wat moet worden verbonden. Ik heb deze eenvoudige grafiek gemaakt (MS Paint laat me nooit in de steek) die beschrijft waar bepaalde onderdelen zich in de robot bevinden.

De afbeelding is zo opgebouwd dat u kunt inzoomen en in volledige resolutie kunt zien en de tekst kunt lezen.

Stap 6: Adres voor de Pi

De Arduino praat met de Pi volgens het plan. En de Pi praat met de computer, dus hoe werkt dit allemaal?

Laten we eens kijken naar onze verbindingsinitiatievolgorde:

  1. Raspberry Pi start
  2. Arduino start
  3. Raspberry Pi start de TCP-client. Het schiet zijn IP-adres uit via een LED.
  4. Raspberry Pi start seriële communicatieservice en maakt verbinding met Arduino

Daarom hebben we een soort van communicatie tot stand gebracht:

Computer Raspberry Pi Arduino

Ik heb Visual Basic. NET (Microsoft Visual Studio 2013 Community) gebruikt om het programma te schrijven dat met de Raspberry Pi en Python praat om het Arduino/Raspberry Pi-protocol te schrijven.

Het enige dat u hoeft te doen om uw Pi IP-adres te kennen, is om het op een HDMI-scherm aan te sluiten, in te loggen op de Shell en de opdracht te typen:

hostnaam -I

Stap 7: Het plan

Nu we het IP-adres van Pi hebben, zullen we er SSH in plaatsen (SSH is Secure Shell - we maken op afstand verbinding met de Linux-shell) en schrijven een bestand dat het IP-adres van de server weergeeft. De Pi zal dit bij het opstarten ook doen en de poort schrijven waarnaar hij luistert. Hier zal ik slechts een paar voorbeelden van de code geven, maar deze kan worden gedownload van deze stap en van de GitHub-tak die ik heb gemaakt. Details daarover later.

Het werkt als volgt:

  1. RPi start op.
  2. RPi start het Tcp-programma op zijn lokale IP en een aangewezen poort.
  3. RPI begint video te streamen
  4. RPI wordt afgesloten.

Stap 8: fysiek gaan

Nu zijn we klaar om het hele ding fysiek te gaan bouwen. Als je stap 1 (waarschuwingstekst en licenties) nog niet hebt gelezen, doe dit dan voordat je doorgaat. Ik ben niet verantwoordelijk voor eventuele schade. En in geval van twijfel mag deze robot niet voor militaire doeleinden worden gebruikt, tenzij het een zombie-apocalyps is. En zelfs dan gebruik je gezond verstand.

Het wordt aanbevolen om de instructables te lezen in de leeslijst.

Download het verbindingsschema uit de stap "Verbindingen".

MOTOREN

De motoren die je hebt gekocht zien er waarschijnlijk zo uit, en het is oké als ze dat niet doen: als ze maar twee draden hebben (in de meeste gevallen zwart en rood), zou het moeten werken. Zoek online hun datasheet op om hun bedrijfsspanning en -stroom te zien. Stel gerust vragen in het commentaargedeelte. Ik lees ze altijd.

H-BRUG

Ik heb nog nooit met een H-brug gewerkt. Ik googlede een beetje en vond een goede instructable waarin de principes van een HB worden uitgelegd. Je kunt daar ook kijken (zie de stap Leeslijst) en de jouwe ook vasthaken. Ik zal niet veel uitleggen. Je kunt daar lezen en alles weten wat je moet weten over dit circuit.

LED

Deze kleine gloeilamp kan werken op logische spanning, alleen omdat hij bijna geen stroom nodig heeft, en een spanning van 3V-5V 4mA-18mA. Optioneel.

ARDUINO

Arduino krijgt signalen en opdrachten via seriële verbinding van de Raspberry Pi. We gebruiken Arduino om onze motoren te besturen, omdat Raspberry Pi geen analoge waarden kan uitvoeren via de GPIO.

Stap 9: Raspberry Pi automatisch starten

Elke keer dat u Raspberry Pi opstart, moet u de gebruikersnaam en het wachtwoord typen. We willen dat niet doen omdat we soms gewoon geen toetsenbord op de Pi kunnen aansluiten, dus we zullen deze stappen uit deze tutorial volgen om het programma dat de Pi voorbereidt automatisch te starten. Als het in een lus blijft hangen, kunnen we altijd Ctrl+C gebruiken om het te onderbreken.

  • sudo crontab -e
  • En dan zullen we de opdracht invoeren die dat bestand toevoegt aan auto-strartup in de cron-manager.

We zullen het bestand pibot.sh noemen dat commando's zal geven om allerlei python-scripts te starten om de robot te bedienen. Laten we het bespreken: (We sudo met gordijn Python-programma's om het programma toegang te geven tot de GPIO)

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

De code die al het werk aan de zijkant van de pi doet, wordt upon_startup.sh aangeroepen.

Het is een eenvoudig shellscript dat alles uitvoert.

Stap 10: Houeston, we hebben een probleem gehad … DC-motoren zijn niet hetzelfde model

Ik heb de H-Bridge al getest en het werkt prima, maar als ik de motoren aanhaak die ik van het robotplatform heb gekregen dat ik online heb besteld, draaien die twee motoren met verschillende snelheden en maken ze verschillende geluiden. Ik veranderde het gaspedaal naar 100% op de motoren. Beiden konden niet op hun maximale capaciteit draaien.

Het lijkt erop dat dit twee verschillende motoren zijn. De ene heeft een groter koppel wat geweldig is voor dit soort robot, maar de andere zou de robot gewoon niet bewegen. Het draait dus rondjes.

Wat ik nu heb, is dat het seriële programma op de Arduino helemaal goed werkt, maar de Tcp-server op de pc en de Tcp-client op de Pi zijn nog niet gecodeerd. Bij Ik moet deze inzending voor de wedstrijd invullen. Wat zal ik doen?

  1. Eerst verdrievoudig ik de spanning voor de motoren. De datasheet zei dat 3V, 6V ze niet verplaatste. Het is dan 9V. Ik heb teo-batterijen parallel aangesloten om de stroom te verdubbelen en de spanning blijft hetzelfde.
  2. Heb ik andere motoren die op de steun op het platform passen? Misschien kan ik zien of het vergelijkbare modellen zijn.
  3. Ik kan vervangen door servo's als de chocolade echt de ventilator raakt.

School begon. Ik zal moeten zien wat ik moet doen.

Opmerking: waarom schrijf ik in vredesnaam de problemen die ik hier tegenkom? Dus als u minder ervaren bent en ook dezelfde problemen heeft, weet u wat u moet doen.

De oplossing:

Dus ik heb nog een test gedaan. Ik heb het snelheidsverschil in de Arduino-code aangepast.

OPMERKING: de motoren kunnen voor u in verschillende snelheden draaien! Wijzig de waarden in de Arduino-schets.

Stap 11: [TCP]: Waarom Tcp en Shell niet beveiligen? Wat is TCP?

Ik heb twee verklaringen waarom Tcp en niet SSH voor de pc worden gebruikt. - Pi-communicatie.

  1. Ten eerste is SSH (Secure Shell, zie uitleg) bedoeld om commando's te starten vanaf een externe computer. De Pi laten reageren met informatie die we willen, is moeilijker omdat onze enige optie om de gegevens te analyseren, is door middel van zware en vervelende stringverwerking.
  2. Ten tweede weten we al hoe we de SSH moeten gebruiken en willen we in deze tutorial meer manieren van communicatie tussen apparaten leren.

TCP, of Transmission Control Protocol, is een kernprotocol van de Internet Protocol Suite. Het is ontstaan in de initiële netwerkimplementatie waarin het het Internet Protocol (IP) aanvulde. Daarom wordt de hele suite gewoonlijk TCP/IP genoemd. TCP biedt betrouwbare, geordende en op fouten gecontroleerde levering van een stroom octetten tussen applicaties die worden uitgevoerd op hosts die communiceren via een IP-netwerk.

(Van Wikipedia)

Dus TCP Pro's zijn:

  • Zeker
  • Snel
  • Werkt overal op een netwerk
  • Biedt methoden om de juiste gegevensoverdracht te controleren
  • Flow Control: heeft bescherming voor het geval de gegevensverzender de gegevens te snel verzendt voor de klant om te registreren en te verwerken.

En de nadelen zijn:

  • In TCP kun je niet uitzenden (gegevens naar alle apparaten op een netwerk verzenden) en multicast (hetzelfde maar weinig anders - geeft de mogelijkheid om elk apparaat uit te zenden als een server).
  • Bugs in uw programma- en besturingssysteembibliotheken (die zelf de TCP-communicatie beheren, uw router doet bijna niets behalve de twee [of meer] apparaten verbinden)

Waarom geen UDP gebruiken, vraagt u zich misschien af? Welnu, in tegenstelling tot TCP, zorgt UDP er niet voor dat uw klant de gegevens krijgt voordat hij meer verzendt. Zoals het verzenden van een e-mail en niet weten of de klant deze ontvangt. Bovendien is UDP minder veilig. Lees voor meer informatie dit bericht van Stack Exchange Super User

Dit artikel is goed en aanbevolen.

Stap 12: [TCP]: Laten we een klant maken

De client (Raspberry Pi in ons geval), die de gegevens van de server ontvangt (onze pc in ons geval) krijgt gegevens om naar de Pi te sturen (seriële opdrachten die op de Arduino worden uitgevoerd) en ontvangt gegevens terug (sensormetingen en feedback rechtstreeks van de Arduino. Het bijgevoegde schema toont de relatie tussen de drie.

Het Python Wiki TcpCommunication-artikel laat zien dat het zo eenvoudig is om dergelijke communicatie te maken met een paar regels code met behulp van de ingebouwde socketmodule. We hebben een programma op de pc en een ander programma op de Pi.

We gaan werken met interrupts. Lees er meer over in de stap Uitleg over hen. Lees daar ook over buffers. Nu kunnen we de gegevens die we hebben lezen met data=s.recv(BUFFER_SIZE), maar het zal zijn hoeveel tekens we hebben gedefinieerd met lege beten. Kunnen we interrupts gebruiken? Nog een vraag: zal de buffer leeg zijn of wacht hij tot de server meer gegevens verzendt, in welk geval de server/client een time-outuitzondering genereert?

Laten we dat een voor een aanpakken. Voordat we dit doen, heb ik dit Wikipedia-artikel opgezocht met een lijst van gebruikte TCP- en UDP-poorten. Na een snelle blik heb ik besloten dat dit project zal communiceren op poort 12298 omdat het niet wordt gebruikt door het besturingssysteem en lokale services.

Stap 13: Probeer onze Tcp-communicatie

Laten we, om te zien of we interrupts kunnen gebruiken, een eenvoudige client en een server maken met behulp van de Python-opdrachtregel. Dat doe ik in de volgende stappen:

  1. Start een programma dat een tekst via Tcp in een lus door een gordijnpoort stuurt
  2. Start een ander programma (parallel) dat alle tekst in een lus leest en op het scherm afdrukt.

Alleen segmenten van het programma worden getoond. Alle programma's draaien met Python 3. Al deze programma's doen het seriële commando van het toetsenbord van de pc-gebruiker naar de Arduino sturen via de Pi.

  • SBcontrolPC.py - Te draaien op de pc. Start een TCP-verbinding op het lokale adres en op de opgegeven poort (ik gebruik poort 12298, zie vorige stap waarom)
  • SBcontrolPi.py - Te draaien op de Pi. Leest zijn buffer elke halve seconde (0,5 seconden). Start een shellscript dat zaken als videostreaming enz. beheert.

Aanbevolen: