INHOUDSOPGAWE:

Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi: 15 stappe (met foto's)
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi: 15 stappe (met foto's)

Video: Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi: 15 stappe (met foto's)

Video: Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi: 15 stappe (met foto's)
Video: Стелс-игра, похожая на Metal Gear Solid. 👥 - Terminal GamePlay 🎮📱 🇷🇺 2024, November
Anonim
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi
Bou u internetbeheerde videostroomrobot met Arduino en Raspberry Pi

Ek is @RedPhantom (oftewel LiquidCrystalDisplay / Itay), 'n 14 -jarige student uit Israel wat aan die Max Shein Junior High School for Advanced Science and Mathematics leer. Ek maak hierdie projek vir almal om van te leer en te deel!

U het moontlik by uself gedink: hmm … ek is 'n geek … En my kinders wil hê ek moet 'n projek saam met hulle maak … Hy wou 'n robot bou. Sy wou dit soos 'n klein hondjie aantrek. Dit is 'n goeie naweke -projek!

Die Raspberry Pi is perfek vir elke gebruik: vandag sal ons die vermoëns van hierdie mikro-rekenaar om 'n robot te maak, uiteensit. Hierdie robot kan:

  • Ry rond en word beheer via LAN (WiFi) met behulp van enige rekenaar wat aan dieselfde WiFi -netwerk gekoppel is as Raspberry Pi.
  • Stroom video regstreeks met die Raspberry Pi -kameramodule
  • Stuur sensordata met Arduino

Lees die volgende stap (waarskuwings) om te sien wat u nodig het vir hierdie lekker ligte projek, en daarna die stap Wanted: Components.

Hier is die GitHub -repo: GITHUB REPO DEUR MY

Hier is die projekwerf: PROJEKWERF DEUR MY

Stap 1: Waarskuwing: wees versigtig om dit tuis te probeer

LET WEL:

DIE SKRYWER VAN HIERDIE TUTORIËLE AANTEKENINGE U HET VOLGENDE KENNIS VAN ELEKTRISITEIT EN DIE BASIESE WERKING VAN ELEKTRIESE TOERUSTING. As u nie versigtig is nie en die instruksies nie in hierdie handleiding volg nie, kan u dit beskadig: elektroniese toerusting beskadig, verbrand of 'n brand veroorsaak. Wees versigtig en gebruik gesonde verstand. As u nie die nodige kennis het vir hierdie tutoriaal nie (soldeer, basiese beginsels van elektronika), moet u dit doen met 'n persoon wat dit doen. Dankie.

DIE SKRYWER VAN HIERDIE INSTRUKSIE VERWYDER ENIGE VERANTWOORDELIKHEID VANAF Homself VIR SKADE OORGERIGE OF VERLORE EIENDOM OF FISIESE SKADE. GEBRUIK GEMEENTE SIN

Stap 2: Komponente

Verbindings
Verbindings
Verbindings
Verbindings
Verbindings
Verbindings
Verbindings
Verbindings

Voordat ons die soldeerbout verhit, moet ons kyk na wat daaraan gekoppel moet word. Ek het hierdie eenvoudige grafiek gemaak (MS Paint laat my nooit in die steek nie) wat beskryf waar sekere dele in die robot geleë is.

Die beeld is so gebou dat u kan inzoomen en in volle resolusie kan sien en die teks kan lees.

Stap 6: Adres vir die Pi

Die Arduino praat volgens die plan met die Pi. En die Pi praat met die rekenaar, so hoe werk dit alles?

Kom ons kyk na ons verbindingsinvolgingsvolgorde:

  1. Framboos Pi begin
  2. Arduino begin
  3. Raspberry Pi begin TCP Client. Dit skiet sy IP -adres uit via 'n LED.
  4. Raspberry Pi begin Serial Communications -diens en maak verbinding met Arduino

Daarom het ons 'n soort kommunikasie tot stand gebring:

Raspberry Pi Arduino -rekenaar

Ek het Visual Basic. NET (Microsoft Visual Studio 2013 Community) gebruik om die program te skryf wat met die Raspberry Pi en Python praat om die Arduino/Raspberry Pi -protokol te skryf.

Al wat u hoef te doen om u Pi -IP -adres te ken, is om dit aan te sluit op 'n HDMI -skerm, aan te meld by die Shell en die opdrag in te voer:

gasheernaam -I

Stap 7: Die plan

Noudat ons die IP -adres van Pi het, sal ons dit SSH (SSH is Secure Shell - ons koppel op afstand aan die Linux -dop) en skryf 'n lêer wat die bediener se IP -adres vertoon. Die Pi, by die aanvang, sal dit ook doen en die poort skryf waarna dit luister. Hier gee ek slegs 'n paar voorbeelde uit die kode, maar dit kan afgelaai word vanaf hierdie stap en van die GitHub -tak wat ek geskep het. Besonderhede daaroor later.

Dit werk so:

  1. RPi begin.
  2. RPi begin die Tcp -program op sy plaaslike IP en 'n aangewese poort.
  3. RPI begin video stroom
  4. RPI sluit af.

Stap 8: Gaan fisies

Nou is ons gereed om die hele ding fisies te bou. As u nie stap 1 (waarskuwingsteks en lisensiëring) gelees het nie, doen dit asseblief voordat u verder gaan. Ek is nie verantwoordelik vir enige skade wat aangerig word nie. En in geval van twyfel, mag hierdie robot nie vir militêre doeleindes gebruik word nie, tensy dit 'n zombie -apokalips is. En selfs dan gesonde verstand gebruik.

Dit word aanbeveel dat u die instruksies in die leeslys lees.

Laai die verbindingskema af vanaf die stap "Verbindings".

MOTORS

Die motors wat u gekoop het, lyk waarskynlik so, en as dit nie die geval is nie, is dit goed: as dit slegs twee drade het (in die meeste gevalle swart en rooi), behoort dit te werk. Soek hul datablad aanlyn om hul werkspanning en stroom te sien. Vra gerus vrae in die kommentaar afdeling. Ek het hulle altyd gelees.

H-BRUG

Ek het nog nooit met 'n H-Bridge gewerk nie. Ek het 'n bietjie gegoogle en 'n goeie instruksie gevind wat die beginsels van 'n HB verduidelik. U kan ook daar kyk (sien leeslys stap) en u s'n ook haak. Ek sal nie veel verduidelik nie. U kan daar lees en alles weet wat u moet weet oor hierdie kring.

LED

Hierdie klein gloeilamp kan van logiese spanning werk net omdat dit byna geen stroom benodig nie, en 'n spanning van 3V-5V 4mA-18mA. Opsioneel.

ARDUINO

Arduino kry seine en opdragte via seriële verbinding vanaf die Raspberry Pi. Ons gebruik Arduino om ons motors te beheer omdat Raspberry Pi nie analoog waardes kan uitvoer via die GPIO nie.

Stap 9: Begin Raspberry Pi outomaties

Elke keer as u Raspberry Pi aanskakel, moet u die gebruikersnaam en wagwoord tik. Ons wil dit nie doen nie, want soms kan ons eenvoudig nie 'n sleutelbord aan die Pi koppel nie, daarom volg ons hierdie stappe uit hierdie handleiding om die program wat die Pi voorberei, outomaties te begin. As dit in 'n lus vassteek, kan ons altyd Ctrl+C onderbreek.

  • sudo crontab -e
  • En dan voer ons die opdrag in wat die lêer by die outomatiese opstart voeg in die cron-bestuurder.

Ons sal die lêer pibot.sh noem, wat opdragte gee om allerhande python -skrifte te begin om die robot te bestuur. Kom ons gaan daaroor: (Ons sudo met gordyn -Python -programme sodat die program toegang tot die GPIO kan kry)

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

Die kode wat al die werk aan die kant van die pi verrig, word upon_startup.sh genoem.

Dit is 'n eenvoudige skulpskrif wat alles bestuur.

Stap 10: Houeston, ons het 'n probleem gehad … DC -motors is nie dieselfde model nie

Ek het die H-Bridge al getoets en dit werk goed, maar toe ek die motors wat ek van die robotplatform gekry het, haak, het ek aanlyn bestel dat die twee motors teen verskillende snelhede draai en verskillende geluide maak. Ek het die gashendel verander na 100% op die motors. Albei kon nie op hul maksimum vermoë hardloop nie.

Dit lyk asof dit twee verskillende motors is. Die een het 'n groter wringkrag wat ideaal is vir hierdie soort robot, maar die ander een sal die robot net nie beweeg nie. So draai dit in sirkels.

Op hierdie punt werk die seriële program op die Arduino heeltemal goed, maar die Tcp -bediener op die rekenaar en die Tcp -kliënt op die Pi is nog nie gekodeer nie. Ek moet hierdie inskrywing vir die kompetisie voltooi. Wat moet ek doen?

  1. Eerstens verdriedubbel ek die spanning vir die motors. Die datablad het gesê dat 3V, 6V hulle nie beweeg nie. Dit is dan 9V. Ek het teo batterye parallel gekoppel om die stroom te verdubbel en die spanning bly dieselfde.
  2. Het ek ander motors wat by die houer op die platform pas? Miskien kan ek sien of dit soortgelyke modelle is.
  3. Ek kan na Servos vervang as die sjokolade die waaier regtig tref.

Skool begin. Ek sal moet sien wat om te doen.

Let wel: Waarom skryf ek die probleme wat ek hier ondervind? As u dus minder ervare is en dieselfde probleme ondervind, weet u wat u moet doen.

Die oplossing:

So ek het nog 'n toets gedoen. Ek het die snelheidsverskil in die Arduino -kode aangepas.

LET WEL: die motors kan vir u in verskillende snelhede draai! Verander die waardes in die Arduino -skets.

Stap 11: [TCP]: Waarom Tcp en Not Secure Shell? Wat is TCP?

Ek het twee verduidelikings waarom Tcp gebruik word en nie SSH vir die P. C. - Pi -kommunikasie.

  1. Eerstens is SSH (Secure Shell, sien verduidelikings) bedoel om opdragte vanaf 'n afgeleë rekenaar te begin. Dit is moeiliker om die Pi te laat reageer met inligting wat ons wil hê, want ons enigste opsie om die data te ontleed, is deur moeilike en vervelige stringverwerking.
  2. Tweedens, ons weet reeds hoe ons die SSH moet gebruik, en ons wil in hierdie tutoriaal meer maniere van kommunikasie tussen toestelle leer.

TCP, of Transmission Control Protocol, is 'n kernprotokol van die Internet Protocol Suite. Dit het sy oorsprong in die aanvanklike netwerk -implementering waarin dit die internetprotokol (IP) aangevul het. Daarom word die hele suite algemeen TCP/IP genoem. TCP bied 'n betroubare, geordende en foutgekontroleerde aflewering van 'n stroom oktette tussen toepassings wat op gashere loop wat oor 'n IP-netwerk kommunikeer.

(Van Wikipedia)

TCP -voordele is dus:

  • Veilig
  • Vinnig
  • Werk oral op 'n netwerk
  • Bied metodes om die korrekte data -oordrag na te gaan
  • Vloeibeheer: het beskerming as die data -sender data te vinnig stuur sodat die kliënt kan registreer en verwerk.

En die nadele is:

  • In TCP kan u nie uitsaai nie (Stuur data na alle toestelle op 'n netwerk) en multicast (dieselfde maar min anders- dit gee elke toestel die uitsending soos 'n bediener).
  • Foute in u program- en bedryfstelselbiblioteke (wat self die TCP -kommunikasie bestuur, u router doen amper niks behalwe om die twee [of meer] toestelle aan te sluit)

Waarom u UDP nie gebruik nie, vra u miskien? Anders as TCP, verseker UDP nie dat u kliënt die data kry voordat hy meer stuur nie. Soos om 'n e -pos te stuur en nie te weet of die kliënt dit ontvang nie. Boonop is UDP minder veilig. Lees hierdie plasing van Stack Exchange Super User vir meer inligting

Hierdie artikel is goed en word aanbeveel.

Stap 12: [TCP]: laat ons 'n kliënt maak

Die kliënt (Raspberry Pi in ons geval), wat die data van die bediener ontvang (ons rekenaar in ons geval), kry data om na die Pi te stuur (reeksopdragte wat op die Arduino uitgevoer sal word) en data terug ontvang (sensorlesings en terugvoer direk vanaf die Arduino. Die aangehegte skema toon die verband tussen die drie.

Die Python Wiki TcpCommunication-artikel toon aan dat dit so eenvoudig is om so 'n paar reëls kode te kommunikeer met behulp van die ingeboude sokmodule. Ons het 'n program op die rekenaar en 'n ander program op die Pi.

Ons werk met onderbrekings. Kom meer te wete in die stap oor die verduidelikings. Lees ook daar oor buffers. Nou kan ons die data wat ons het, lees met behulp van data = s.recv (BUFFER_SIZE), maar dit is hoeveel karakters ons gedefinieer het met leë byt. Kan ons onderbrekings gebruik? 'N Ander vraag: is die buffer leeg, of wag dit totdat die bediener meer data stuur, in welke geval die bediener/kliënt 'n uitsondering op 'n tydsberekening sal gee?

Kom ons pak die een op 'n slag aan. Voordat ons dit doen, het ek hierdie Wikipedia -artikel opgesoek wat gebruikte TCP- en UDP -poorte bevat. Na 'n vinnige kyk het ek besluit dat hierdie projek op poort 12298 sal kommunikeer omdat dit nie deur die bedryfstelsel en plaaslike dienste gebruik word nie.

Stap 13: Probeer ons Tcp -kommissies

Om te sien of ons onderbrekings kan gebruik, kan ons 'n eenvoudige kliënt en 'n bediener maak met behulp van die Python -opdraglyn. Ek sal dit in die volgende stappe doen:

  1. Begin 'n program wat 'n teks via Tcp in 'n lus deur 'n gordynpoort stuur
  2. Begin 'n ander program (parallel) wat al die teks in 'n lus lees en dit op die skerm druk.

Slegs segmente van die program sal vertoon word. Alle programme wat met Python 3. uitgevoer word. Al hierdie programme is om die reeksopdrag vanaf die sleutelbord van die rekenaargebruiker via die Pi na die Arduino te stuur.

  • SBcontrolPC.py - Word op die rekenaar uitgevoer. Begin 'n TCP -verbinding op die plaaslike adres en op die gespesifiseerde poort (ek gebruik poort 12298, sien vorige stap waarom)
  • SBcontrolPi.py - Om op die Pi te werk. Lees die buffer elke halfsekonde (0,5 sekondes). Begin 'n dopskrip wat dinge bestuur, soos die videostroom, ens.

Aanbeveel: