Turinys:

Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“: 15 žingsnių (su nuotraukomis)
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“: 15 žingsnių (su nuotraukomis)

Video: Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“: 15 žingsnių (su nuotraukomis)

Video: Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“: 15 žingsnių (su nuotraukomis)
Video: CS50 2013 - Week 9 2024, Liepa
Anonim
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“
Sukurkite savo interneto valdomą vaizdo transliacijos robotą naudodami „Arduino“ir „Raspberry Pi“

Aš @RedPhantom (dar žinomas kaip LiquidCrystalDisplay / Itay), 14 metų studentas iš Izraelio, besimokantis Max Shein jaunesniojoje pažangiųjų mokslų ir matematikos vidurinėje mokykloje. Kuriu šį projektą, kad visi galėtų pasimokyti ir pasidalinti!

Galbūt jūs pagalvojote: hmm … aš esu geikas … Ir mano vaikai nori, kad su jais įgyvendinčiau projektą … Jis norėjo sukurti robotą. Ji norėjo ją aprengti kaip mažą šuniuką. Tai geras savaitgalio projektas!

„Raspberry Pi“puikiai tinka bet kokiam naudojimui: šiandien mes atskleisime šio mikrokompiuterio galimybes sukurti robotą. Šis robotas gali:

  • Važiuokite ir būkite valdomi per LAN („WiFi“) naudodami bet kurį kompiuterį, prijungtą prie to paties „WiFi“tinklo, kaip ir „Raspberry Pi“.
  • Tiesiogiai transliuokite vaizdo įrašą naudodami „Raspberry Pi“fotoaparato modulį
  • Siųskite jutiklio duomenis naudodami „Arduino“

Norėdami pamatyti, ko jums reikia šiam gražiam šviesos projektui, tiesiog perskaitykite kitą žingsnį (įspėjimai), o po to - „Wanted: Components“žingsnį.

Čia yra „GitHub“repo: „GITHUB REPO BY ME“

Čia yra projekto svetainė: PROJEKTO SVETAINĖ

1 žingsnis: Įspėjimas: būkite atsargūs bandydami tai padaryti namuose

ATSARGIAI:

ŠIŲ PAMOKŲ AUTORIUS DARO, KAD JŪS TURIITE pakankamai žinių apie ELEKTRĄ IR PAGRINDINĮ ELEKTROS ĮRANGOS VEIKIMĄ. Jei nesate atsargus ir nesilaikysite šios pamokos instrukcijų, kurių galite imtis: SUGALINKITE ELEKTRONINĘ ĮRANGĄ, NUSIDEGIITE AR PADĖKITE GAISRO. Būkite atsargūs ir vadovaukitės sveiku protu. Jei neturite žinių, reikalingų šiai pamokai (litavimas, elektronikos pagrindai), atlikite tai su asmeniu, kuris tai daro. Ačiū.

ŠIS INSTRUKCIJOS AUTORIUS NUOŠALO JOKIĄ ATSAKOMYBĘ UŽ ŽALĄ, KELIĄ SUŽALOJAMA AR NETEKTA TURTO ARBA FIZINĖ ŽALA. NAUDOTI BENDRĄJĄ PASAKĄ

2 žingsnis: komponentai

Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai

Prieš kaitindami lituoklį, turime išsiaiškinti, kas prie ko turi būti prijungtas. Aš sudariau šią paprastą diagramą („MS Paint“niekada manęs nenuvilia), kurioje aprašoma, kur tam tikra roboto dalis yra.

Vaizdas sukurtas taip, kad galėtumėte priartinti, matyti visa raiška ir skaityti tekstą.

6 žingsnis: Pi adresas

„Arduino“kalbasi su „Pi“pagal planą. O „Pi“kalba su kompiuteriu, tad kaip visa tai veikia?

Pažvelkime į mūsų ryšio inicijavimo seką:

  1. „Raspberry Pi“prasideda
  2. „Arduino“prasideda
  3. „Raspberry Pi“paleidžia „TCP Client“. Jis išmeta savo IP adresą per šviesos diodą.
  4. „Raspberry Pi“pradeda „Serial Communications“paslaugą ir prisijungia prie „Arduino“

Todėl mes sukūrėme tam tikrą bendravimą:

Kompiuterinis Raspberry Pi Arduino

Aš naudoju „Visual Basic. NET“(„Microsoft Visual Studio 2013 Community“), norėdamas parašyti programą, kuri kalba su „Raspberry Pi“ir „Python“, kad parašytų „Arduino“/„Raspberry Pi“protokolą.

Viskas, ką jums reikia padaryti, kad žinotumėte savo Pi IP adresą, yra prijungti jį prie HDMI ekrano, prisijungti prie „Shell“ir įvesti komandą:

pagrindinio kompiuterio vardas -aš

7 žingsnis: planas

Dabar, kai turime Pi IP adresą, mes į jį SSH (SSH yra „Secure Shell“- mes prisijungiame nuotoliniu būdu prie „Linux“apvalkalo) ir parašysime failą, kuriame bus rodomas serverio IP adresas. Paleidęs „Pi“taip pat tai padarys ir parašys prievadą, kurio klausosi. Čia pateiksiu tik keletą pavyzdžių iš kodo, tačiau jį galima atsisiųsti iš šio veiksmo ir iš mano sukurtos „GitHub“šakos. Išsami informacija apie tai vėliau.

Tai veikia taip:

  1. RPi paleidžiamas.
  2. RPi paleidžia Tcp programą savo vietiniame IP ir tam skirtame prievade.
  3. RPI pradeda transliuoti vaizdo įrašus
  4. RPI išsijungia.

8 žingsnis: Eikite fiziškai

Dabar mes esame pasirengę pradėti fiziškai kurti visa tai. Jei neskaitėte 1 veiksmo (įspėjamasis tekstas ir licencijavimas), prieš tęskite tai. Aš nesu atsakingas už padarytą žalą. Ir jei kyla abejonių, šio roboto negalima naudoti kariniams tikslams, nebent tai būtų zombių apokalipsė. Ir net tada naudokitės sveiku protu.

Siūloma perskaityti instrukcijas, kurias galite perskaityti skaitymo sąraše.

Atsisiųskite ryšio schemą iš veiksmo „Ryšiai“.

MOTORS

Jūsų nusipirkti varikliai tikriausiai atrodo taip, ir gerai, jei ne: jei jie turi tik du laidus (dažniausiai juodą ir raudoną), tai turėtų veikti. Ieškokite jų duomenų lapo internete, kad pamatytumėte jų darbinę įtampą ir srovę. Nesivaržykite užduoti klausimų komentarų skiltyje. Visada juos skaitau.

H-TILTAS

Aš niekada nedirbau su „H-Bridge“. Aš šiek tiek googlinau ir radau gerą pamoką, paaiškinantį HB principus. Taip pat galite pasižiūrėti ten (žr. Skaitymo sąrašo veiksmą) ir užsikabinti savo. Aš daug neaiškinsiu. Ten galite perskaityti ir žinoti viską, ką turėtumėte apie šią grandinę.

LED

Ši maža lemputė gali veikti nuo loginės įtampos vien todėl, kad jai beveik nereikia srovės, o įtampa yra 3V-5V 4mA-18mA. Neprivaloma.

ARDUINO

„Arduino“gaus signalus ir komandas per serijinį ryšį iš „Raspberry Pi“. Savo varikliams valdyti naudojame „Arduino“, nes „Raspberry Pi“negali išvesti analoginių verčių per GPIO.

9 veiksmas: „Raspberry Pi“automatinis paleidimas

Kiekvieną kartą, kai įjungsite „Raspberry Pi“, turėsite įvesti vartotojo vardą ir slaptažodį. Mes nenorime to daryti, nes kartais tiesiog negalime prijungti klaviatūros prie „Pi“, todėl atliksime šiuos šios pamokos veiksmus, kad automatiškai paleistume programą, kuri paruošia „Pi“. Jei jis įstrigs cikle, mes visada galime Ctrl+C jį nutraukti.

  • sudo crontab -e
  • Tada įvesime komandą, kuri prideda tą failą prie „cron manager“automatinio strartup.

Mes vadinsime failą pibot.sh, kuris duos komandas paleisti visų rūšių python scenarijus, kad valdytų robotą. Eikime per tai: (Sudo su užuolaidų „Python“programomis, kad programa galėtų pasiekti GPIO)

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

Kodas, kuris atlieka visą darbą pi pusėje, bus vadinamas upon_startup.sh.

Tai paprastas apvalkalo scenarijus, kuriame veikia viskas.

10 žingsnis: Houeston, mes turėjome problemą … „DC Motors“nėra tas pats modelis

Aš jau išbandžiau „H-Bridge“ir jis veikia gerai, bet kai užkabinau variklius, kuriuos gavau iš roboto platformos, kurią užsisakiau internetu, tie du varikliai sukasi skirtingu greičiu ir skleidžia skirtingus garsus. Varikliuose pakeičiau droselį iki 100%. Abu jie negalėjo bėgti maksimaliai.

Atrodo, kad tai yra du skirtingi varikliai. Vienas turi didesnį sukimo momentą, kuris puikiai tinka tokio tipo robotams, tačiau kitas tiesiog nejudina roboto. Taigi jis sukasi ratais.

Šiuo metu aš turiu tai, kad „Arduino“serijinė programa veikia visiškai gerai, tačiau kompiuterio Tcp serveris ir „Tcp“klientas dar nėra užkoduoti. Man reikia užpildyti šį konkurso įrašą. Ką aš darau?

  1. Pirma, trigubai padidinu variklių įtampą. Duomenų lape nurodyta, kad 3V, 6V jų nejudino. Tada 9V. Aš prijungiau teo baterijas lygiagrečiai, kad padvigubintumėte srovę, o įtampa išlieka ta pati.
  2. Ar turiu kitų variklių, kurie tinka prie platformos laikiklio? Galbūt galiu pamatyti, ar jie yra panašūs modeliai.
  3. Galiu pakeisti „Servos“, jei šokoladas tikrai nukentės nuo ventiliatoriaus.

Prasidėjo mokykla. Turėsiu pažiūrėti, ką daryti.

Pastaba: Kodėl aš čia rašau problemas, su kuriomis susiduriu? Taigi, jei esate mažiau patyręs ir turite tų pačių problemų, žinosite, ką daryti.

Sprendimas:

Taigi padariau dar vieną testą. Aš pritaikiau „Arduino“kodo greičio skirtumą.

PASTABA: varikliai gali suktis skirtingu greičiu! Pakeiskite „Arduino“eskizo reikšmes.

11 veiksmas: [TCP]: Kodėl „Tcp“ir „Secure Shell“? Kas yra TCP?

Turiu du paaiškinimus, kodėl P. C. naudoti Tcp, o ne SSH. - Pi komunikacija.

  1. Pirma, SSH (Secure Shell, žr. Paaiškinimus) skirta paleisti komandas iš nuotolinio kompiuterio. „Pi“atsakyti į norimą informaciją yra sunkiau, nes vienintelė mūsų galimybė analizuoti duomenis yra sudėtingas ir varginantis eilutės apdorojimas.
  2. Antra, mes jau žinome, kaip naudoti SSH, ir šioje pamokoje norime sužinoti daugiau bendravimo būdų tarp įrenginių.

TCP arba perdavimo valdymo protokolas yra pagrindinis „Internet Protocol Suite“protokolas. Jis atsirado pradiniame tinklo diegime, kuriame jis papildė interneto protokolą (IP). Todėl visas rinkinys paprastai vadinamas TCP/IP. TCP užtikrina patikimą, užsakytą ir klaidų patikrintą oktetų srauto pristatymą tarp programų, veikiančių pagrindiniame kompiuteryje, bendraujančiame per IP tinklą.

(Iš Vikipedijos)

Taigi TCP pranašumai yra šie:

  • Saugus
  • Greitai
  • Veikia bet kurioje tinklo vietoje
  • Pateikiami būdai, kaip patikrinti teisingą duomenų perdavimą
  • Srauto valdymas: turi apsaugą, jei duomenų siuntėjas siunčia duomenis per greitai, kad klientas galėtų užsiregistruoti ir apdoroti.

Ir trūkumai yra šie:

  • Naudojant TCP negalima transliuoti (siųsti duomenų į visus tinklo įrenginius) ir daugialypės transliacijos (tas pats, bet mažai skiriasi- suteikia galimybę kiekvienam įrenginiui transliuoti kaip serveris).
  • Programos ir operacinės sistemos bibliotekų klaidos (kurios pačios tvarko TCP ryšį, jūsų maršrutizatorius beveik nieko nedaro, išskyrus dviejų ar daugiau įrenginių prijungimą)

Kodėl nepasinaudojus UDP, galite paklausti? Na, priešingai nei TCP, UDP neužtikrina, kad jūsų klientas gautų duomenis prieš siųsdamas daugiau. Kaip ir el. Laiško siuntimas ir nežinojimas, ar klientas jį gauna. Be to, UDP yra mažiau saugus. Norėdami gauti daugiau informacijos, perskaitykite šį „Stack Exchange Super User“įrašą

Šis straipsnis yra geras ir rekomenduojamas.

12 žingsnis: [TCP]: Leiskite sukurti klientą

Klientas (mūsų atveju „Raspberry Pi“), gavęs duomenis iš serverio (mūsų kompiuteris mūsų atveju), gaus duomenis, kuriuos nusiųs į „Pi“(serijinės komandos, kurios bus vykdomos „Arduino“), ir gaus duomenis atgal (jutiklių rodmenys) ir grįžtamąjį ryšį tiesiai iš „Arduino“. Pridedama schema rodo šių trijų santykį.

Iš „Python Wiki TcpCommunication“straipsnio matyti, kad taip paprasta užmegzti tokį ryšį naudojant kelias kodo eilutes naudojant įmontuotą lizdo modulį. Mes turėsime programą kompiuteryje ir kitą programą „Pi“.

Mes dirbsime su pertraukomis. Sužinokite daugiau apie juos paaiškinimo žingsnyje. Taip pat skaitykite apie buferius. Dabar galime perskaityti turimus duomenis naudodami duomenis = s.recv (BUFFER_SIZE), bet tai bus simbolių, kuriuos apibrėžėme tuščiais įkandimais, skaičius. Ar galime naudoti pertraukas? Kitas klausimas: ar buferis bus tuščias, ar lauks, kol serveris atsiųs daugiau duomenų, tokiu atveju serveris/klientas išmes laiko skirtojo išimtį?

Leiskite tai spręsti vienu metu. Prieš tai darydamas, aš peržiūrėjau šį Vikipedijos straipsnį, kuriame išvardyti naudojami TCP ir UDP prievadai. Greitai peržiūrėjęs nusprendžiau, kad šis projektas bus perduotas 12298 prievade, nes juo nesinaudoja operacinė sistema ir vietinės tarnybos.

13 veiksmas: išbandykite mūsų „Tcp Comms“

Norėdami sužinoti, ar galime naudoti pertraukas, sukurkite paprastą klientą ir serverį naudodami „Python“komandų eilutę. Aš tai padarysiu atlikdamas šiuos veiksmus:

  1. Paleiskite programą, kuri siunčia tekstą per Tcp ciklu per užuolaidų prievadą
  2. Paleiskite kitą programą (lygiagrečiai), kuri nuskaito visą ciklo tekstą ir atspausdina jį ekrane.

Bus rodomi tik programos segmentai. Visos programos veikia su „Python 3“. Visos šios programos yra siunčiamos serijinės komandos iš kompiuterio vartotojo klaviatūros į „Arduino“per „Pi“.

  • SBcontrolPC.py - turi būti paleistas kompiuteryje. Pradeda TCP ryšį vietiniu adresu ir nurodytu prievadu (naudoju 12298 prievadą, žr. Ankstesnį veiksmą, kodėl)
  • SBcontrolPi.py - būti paleistas naudojant „Pi“. Skaito savo buferį kas pusę sekundės (0,5 sekundės). Paleidžia apvalkalo scenarijų, kuris valdo tokius dalykus kaip vaizdo transliacija ir pan.

Rekomenduojamas: