Talaan ng mga Nilalaman:

Buuin ang Iyong Kinokontrol na Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi: 15 Hakbang (na may Mga Larawan)
Buuin ang Iyong Kinokontrol na Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi: 15 Hakbang (na may Mga Larawan)

Video: Buuin ang Iyong Kinokontrol na Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi: 15 Hakbang (na may Mga Larawan)

Video: Buuin ang Iyong Kinokontrol na Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi: 15 Hakbang (na may Mga Larawan)
Video: DE0-Nano — Краткое руководство по началу работы с Altera Cyclone IV FPGA | Шаг за шагом 2024, Hulyo
Anonim
Buuin ang Iyong Kontroladong Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi
Buuin ang Iyong Kontroladong Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi
Buuin ang Iyong Kontroladong Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi
Buuin ang Iyong Kontroladong Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi
Buuin ang Iyong Kontroladong Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi
Buuin ang Iyong Kontroladong Video-Streaming Robot ng iyong Internet Sa Arduino at Raspberry Pi

Ako si @RedPhantom (aka LiquidCrystalDisplay / Itay), isang 14 na taong mag-aaral mula sa Israel na natututo sa Max Shein Junior High School para sa Advanced Science at Matematika. Ginagawa ko ang proyektong ito para matuto ang lahat at magbahagi!

Maaaring naisip mo sa iyong sarili: hmm … Ako ay isang geek … At nais ng aking mga anak na gumawa ako ng isang proyekto sa kanila … Nais niyang bumuo ng isang robot. Nais niyang bihisan ito tulad ng isang maliit na tuta. Ito ay isang magandang proyekto sa katapusan ng linggo!

Ang Raspberry Pi ay perpekto para sa bawat paggamit: ngayon ay detalyado namin ang mga kakayahan ng micro-computer na ito upang makagawa ng isang robot. Ang robot na ito ay maaaring:

  • Magmaneho sa paligid at makontrol sa pamamagitan ng LAN (WiFi) gamit ang anumang computer na konektado sa parehong WiFi network tulad ng Raspberry Pi.
  • Mag-stream ng live na video gamit ang Raspberry Pi Camera Module
  • Magpadala ng data ng sensor gamit ang Arduino

Upang makita kung ano ang kailangan mo para sa magandang proyekto sa ilaw na ito basahin lamang ang susunod na hakbang (mga babala) at pagkatapos nito ang hakbang ng Wanted: Components.

Narito ang repo ng GitHub: GITHUB REPO NG AKIN

Narito ang Project Site: SITE NG PROYEKTO NG AKIN

Hakbang 1: Babala: Maging Maingat na Sinubukan Ito sa Bahay

Pag-iingat:

ANG AUTHOR NG TUTORIAL ASSUMES NA ITO AY MAY sapat na KAALAMAN TUNGKOL SA Kuryente AT ANG BATAYANG PAGSUSULIT NG KAGAMITANG Elektrikal. KUNG IKAW AY HINDI MAG-INGAT AT HUWAG SUMUNOD SA INSTRUCTIONS SA TUTORIAL NA ITO MAAARI: Pinsala ang Elektronikong Kagamitan, BUMALIK SA IYONG SARILI O MAGHARI NG ISANG APOY. Mangyaring mag-ingat at gumamit ng sentido komun. Kung wala kang kinakailangang kaalaman para sa tutorial na ito (paghihinang, mga pangunahing kaalaman sa electronics), mangyaring magsagawa sa isang indibidwal na mayroon. Salamat.

ANG AUTHOR NG INSTRUKTABANG ITO AY TANGGALIN SA ANUMANG RESPONSIBILIDAD MULA SA KANYA PARA SA PAMAMAHIT NA DAHIL O NAWALA NG PROPERTY O PISIKAL NA PAMAMAHALA. GAMITIN ANG PANGKALAHATANG PANG-SINSE

Hakbang 2: Mga Bahagi

Mga koneksyon
Mga koneksyon
Mga koneksyon
Mga koneksyon
Mga koneksyon
Mga koneksyon
Mga koneksyon
Mga koneksyon

Bago natin painitin ang naghinang na Bakal, kailangan nating lampasan kung ano ang dapat na konektado sa kung ano. Ginawa ko ang simpleng tsart na ito (hindi ako pinababayaan ng MS Paint) na naglalarawan kung saan matatagpuan ang ilang bahagi sa loob ng robot.

Ang imahe ay binuo upang maaari kang mag-zoom in at makita sa buong resolusyon at mabasa ang teksto.

Hakbang 6: Address para sa Pi

Ang Arduino ay nakikipag-usap sa Pi alinsunod sa plano. At ang Pi ay nakikipag-usap sa computer, kaya paano ito gumagana lahat?

Hayaang tingnan ang aming Koneksyon ng Pagsunud-sunod ng Koneksyon:

  1. Magsisimula ang Raspberry Pi
  2. Nagsisimula ang Arduino
  3. Sinimulan ng Raspberry Pi ang TCP Client. Ini-shoot nito ang IP address sa pamamagitan ng isang LED.
  4. Sinimulan ng Raspberry Pi ang Serial Serbisyo na serbisyo at kumokonekta sa Arduino

Samakatuwid itinatag namin ang ilang uri ng komunikasyon:

Computer Raspberry Pi Arduino

Gumamit ako ng Visual Basic. NET (Microsoft Visual Studio 2013 Community) upang isulat ang program na nakikipag-usap sa Raspberry Pi at Python upang isulat ang Arduino / Raspberry Pi protocol.

Ang kailangan mo lang gawin upang malaman ang iyong Pi IP address, upang ikonekta ito sa isang HDMI screen, mag-log in sa Shell at i-type ang utos:

hostname -ako

Hakbang 7: Ang Plano

Ngayon na nakuha namin ang IP address ni Pi ay SSH namin ito (Ang SSH ay Secure Shell - kumonekta kami nang malayuan sa shell ng Linux) at magsulat ng isang file na nagpapakita ng IP address ng Server. Ang Pi, sa pagsisimula ay gagawin din ito at isulat ang port na nakikinig sa. Dito lamang ako magbibigay ng ilang mga halimbawa mula sa code ngunit magagamit itong i-download mula sa hakbang na ito at mula sa GitHub branch na aking nilikha. Mga detalye sa na mamaya.

Gumagana ito tulad nito:

  1. Nagsisimula ang RPi.
  2. Sinimulan ng RPi ang programa ng Tcp sa lokal na IP at isang itinalagang port.
  3. Nagsisimula ang RPI na mag-stream ng video
  4. Natahimik ang RPI.

Hakbang 8: Pupunta sa Physical

Ngayon, handa na kaming simulang pisikal na buuin ang buong bagay. Kung hindi mo pa nababasa ang hakbang 1 (babalang teksto at paglilisensya) mangyaring gawin ito bago magpatuloy. Hindi ako responsable para sa anumang pinsala na dulot. At sa kaso ng pagdududa, ang robot na ito ay hindi dapat gamitin para sa mga hangaring militar maliban kung ito ay isang zombie apocalypse. At kahit na gumamit ng sentido komun.

Iminumungkahi na basahin mo ang mga itinuturo na makinig sa Listahan ng Pagbasa.

I-download ang scheme ng koneksyon mula sa hakbang na "Mga Koneksyon."

Mga MOTOR

Ang mga motor na iyong binili ay maaaring ganito ang hitsura, at OK kung hindi: kung mayroon lamang silang dalawang wires (itim at pula sa karamihan ng mga kaso) dapat itong gumana. Hanapin ang kanilang datasheet online upang makita ang kanilang boltahe sa pagpapatakbo at kasalukuyang. Huwag mag-atubiling magtanong sa seksyon ng komento. Lagi ko silang binabasa.

H-BRIDGE

Hindi pa ako nakatrabaho sa isang H-Bridge dati. Nag-google ako nang kaunti at natagpuan ang isang mabuting itinuturo na nagpapaliwanag ng mga prinsipyo ng isang HB. Maaari ka ring tumingin doon (tingnan ang Hakbang sa Listahan ng Basahin) at i-hook mo rin. Hindi ko masyadong ipaliwanag. Maaari mong basahin doon at malaman ang lahat ng dapat mong gawin tungkol sa circuit na ito.

LED

Ang maliit na lightbolb na ito ay maaaring tumakbo mula sa lohikal na boltahe dahil lamang sa nangangailangan ito ng halos walang kasalukuyang, at isang boltahe ng 3V-5V 4mA-18mA. Opsyonal.

ARDUINO

Makakakuha ang Arduino ng mga signal at utos sa pamamagitan ng koneksyon ng Serial mula sa Raspberry Pi. Ginagamit namin ang Arduino upang makontrol ang aming mga motor dahil ang Raspberry Pi ay hindi maaaring maglabas ng mga halagang analog sa pamamagitan ng GPIO.

Hakbang 9: Pag-autostart ng Raspberry Pi

Sa tuwing lalakas mo ang Raspberry Pi, kakailanganin mong i-type ang username at password. Hindi namin nais na gawin iyon dahil kung minsan hindi lamang namin makakonekta ang isang keyboard sa Pi, kaya susundin namin ang mga hakbang na ito mula sa tutorial na ito upang awtomatikong simulan ang program na naghahanda ng Pi. Kung makakapunta ito sa isang loop maaari naming laging Ctrl + C upang makagambala ito.

  • sudo crontab -e
  • At pagkatapos ay ipasok namin ang utos na nagdaragdag ng file na iyon sa auto-strartup sa cron manager.

Tatawagan namin ang file na pibot.sh na magbibigay ng mga utos upang simulan ang lahat ng uri ng mga script sa python upang mapatakbo ang robot. Tingnan natin ito: (Nag-sudo kami na may mga programang Python ng kurtina upang payagan ang programa na ma-access ang GPIO)

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

Ang code na gumagawa ng lahat ng gawain sa gilid ng pi ay tatawagan sa_startup.sh.

Ito ay isang simpleng script ng shell na nagpapatakbo ng lahat.

Hakbang 10: Houeston, Nagkaroon kami ng problema … Ang DC Motors ay hindi ang Parehong Model

Nasubukan ko na ang H-Bridge at gumagana ito ng maayos, ngunit kapag na-hook ko ang mga motor na nakuha ko mula sa platform ng robot ay inorder ko sa online ang dalawang motor na iyon na magkakaiba-iba ng bilis at magkakaiba ng mga ingay. Binago ko ang throttle sa 100% sa mga motor. Pareho sa kanila ang hindi tumakbo sa kanilang maximum na kakayahan.

Tila ang mga ito ay dalawang magkakaibang mga motor. Ang isa ay may isang mas malaking metalikang kuwintas na kung saan ay mahusay para sa ganitong uri ng robot ngunit ang iba ay hindi ilipat ang robot. Kaya't nagiging bilog ito.

Sa puntong ito, ang nakuha ko ay ang serial program sa Arduino na gumagana nang kabuuan ngunit ang Tcp server sa PC at ang Tcp Client sa Pi ay hindi pa naka-code. Sa kailangan kong kumpletuhin ang entry na ito para sa kumpetisyon. Ano ang gagawin ko?

  1. Una, triple ko ang boltahe para sa mga motor. Sinabi ng datasheet na 3V, 6V ay hindi ilipat ang mga ito. 9V na noon. Nakakonekta ako sa mga baterya na kahanay upang doble ang kasalukuyang at ang boltahe ay mananatiling pareho.
  2. Mayroon ba akong ibang mga motor na akma sa bundok sa platform? Siguro nakikita ko Kung magkatulad ang mga ito ng mga modelo.
  3. Maaari kong palitan kay Servos kung talagang tumama sa tsokolate ang tsokolate.

Nagsimula ang paaralan. Kailangan kong makita kung anong gagawin.

Tandaan: Bakit sa mundo ko isinusulat ang mga problemang nakakaharap ko dito? Kaya't kung hindi ka gaanong may karanasan at may parehong mga problema malalaman mo rin ang dapat gawin.

Ang solusyon:

Kaya't gumawa ako ng isa pang pagsubok. Inangkop ko ang pagkakaiba sa bilis sa Arduino code.

TANDAAN: ang mga motor ay maaaring paikutin sa iba't ibang mga bilis para sa iyo! Baguhin ang mga halaga sa Arduino sketch.

Hakbang 11: [TCP]: Bakit Tcp at Hindi Secure Shell? Ano ang TCP?

Mayroon akong dalawang paliwanag kung bakit gamitin ang Tcp at hindi SSH para sa P. C. - Pi komunikasyon.

  1. Una, ang SSH (Secure Shell, tingnan ang Mga Paliwanag) ay sinadya upang maglunsad ng mga utos mula sa isang remote computer. Ang paggawa ng Pi na tumugon sa impormasyong nais namin ay mas mahirap dahil ang aming tanging pagpipilian upang pag-aralan ang data ay sa pamamagitan ng matigas at nakakapagod na pagproseso ng string.
  2. Pangalawa, alam na namin kung paano gamitin ang SSH at nais naming malaman ang higit pang mga paraan ng komunikasyon sa pagitan ng mga aparato sa tutorial na ito.

Ang TCP, o Transmission Control Protocol, ay isang pangunahing protokol ng Internet Protocol Suite. Nagmula ito sa paunang pagpapatupad ng network kung saan ito umakma sa Internet Protocol (IP). Samakatuwid, ang buong suite ay karaniwang tinutukoy bilang TCP / IP. Nagbibigay ang TCP ng maaasahang, nakaayos, at naka-check ng error sa isang stream ng mga octet sa pagitan ng mga application na tumatakbo sa mga host na nakikipag-usap sa isang IP network.

(Mula sa Wikipedia)

Kaya ang mga TCP Pro ay:

  • Ligtas
  • Mabilis
  • Gumagawa kahit saan sa isang network
  • Nagbibigay ng mga pamamaraan upang suriin ang tamang paghahatid ng data
  • Pagkontrol ng Daloy: mayroong proteksyon sakaling ang nagpapadala ng data ay nagpapadala ng data ng napakabilis para magparehistro at magproseso ang kliyente.

At ang kahinaan ay:

  • Sa TCP hindi ka maaaring mag-broadcast (Magpadala ng data sa lahat ng mga aparato sa isang network) at multicast (pareho ngunit kakaunti ang nagbibigay ng kakayahang mag-broadcast ang bawat aparato tulad ng isang server).
  • Mga bug sa iyong programa at mga aklatan ng operating system (na namamahala sa kanilang sarili ng komunikasyon sa TCP, halos walang ginagawa ang iyong router maliban sa ikonekta ang dalawang [o higit pang] mga aparato)

Bakit hindi gamitin ang UDP, maaari mong tanungin? Sa gayon, hindi katulad ng TCP, hindi tinitiyak ng UDP na makuha ng iyong kliyente ang data bago magpadala ng higit pa. Tulad ng pagpapadala ng isang Email at hindi alam kung natanggap ito ng kliyente. Bukod, ang UDP ay hindi gaanong ligtas. Para sa karagdagang impormasyon, basahin ang post na ito mula sa Stack Exchange Super User

Ang artikulong ito ay mabuti at inirerekumenda.

Hakbang 12: [TCP]: Hinahayaan kang Gumawa ng isang Client

Ang kliyente (Raspberry Pi sa aming kaso), na tumatanggap ng data mula sa server (Ang aming PC sa aming kaso) ay makakakuha ng data upang ipadala sa Pi (Serial na mga utos na isasagawa sa Arduino) at tatanggap ng data pabalik (Mga Pagbasa ng Sensor at puna nang direkta mula sa Arduino. Ang kalakip na iskema ay nagpapakita ng ugnayan sa pagitan ng tatlo.

Ipinapakita ng artikulo ng Python Wiki TcpCommunication na napakasimple nito upang makagawa ng nasabing komunikasyon sa ilang mga linya ng code gamit ang built-in na socket module. Magkakaroon kami ng isang programa sa PC at isa pang programa sa Pi.

Magtatrabaho kami sa mga nakakagambala. Matuto nang higit pa sa hakbang sa Mga Paliwanag tungkol sa mga ito. Basahin din doon ang tungkol sa mga buffer. Ngayon, maaari nating basahin ang data na mayroon kami gamit ang data = s.recv (BUFFER_SIZE) ngunit ito ay kung gaano karaming mga character na tinukoy namin na may walang laman na kagat. Maaari ba kaming gumamit ng mga nakakagambala? Isa pang tanong: magiging walang laman ang buffer o maghihintay ba ito upang magpadala ang server ng higit pang data kung saan ang server / client ay magtatapon ng isang pagbubukod ng pag-timeout?

Hinahayaan natin itong harapin nang paisa-isa. Bago natin ito ginawa, tiningnan ko ang artikulong ito sa Wikipedia na naglilista ng mga ginamit na port ng TCP at UDP. Matapos ang isang mabilis na pagtingin napagpasyahan kong ang proyektong ito ay makikipag-usap sa port 12298 dahil hindi ito ginagamit ng Operating System at mga lokal na serbisyo.

Hakbang 13: Subukan ang Aming Tcp Comms

Upang makita kung maaari kaming gumamit ng mga nakakagambala, hinahayaan na gumawa ng isang simpleng client at isang server gamit ang Python Command Line. Gagawin ko ito sa mga sumusunod na hakbang:

  1. Magsimula ng isang programa na nagpapadala ng isang teksto sa pamamagitan ng Tcp sa isang loop sa pamamagitan ng isang port ng kurtina
  2. Magsimula ng isa pang programa (kahanay) na magbabasa ng lahat ng teksto sa isang loop at i-print ito sa screen.

Mga segment lamang ng programa ang ipapakita. Ang lahat ng mga programa ay tumatakbo sa Python 3. Ang ginagawa ng mga programang ito ay upang maipadala ang serial command mula sa keyboard ng gumagamit ng PC sa Arduino sa pamamagitan ng Pi.

  • SBcontrolPC.py - Patakbuhin sa PC. Nagsisimula ng isang koneksyon sa TCP sa lokal na address at sa tinukoy na port (Gumagamit ako ng port 12298, tingnan ang nakaraang hakbang kung bakit)
  • SBcontrolPi.py - Patakbuhin sa Pi. Binabasa ang buffer nito bawat kalahating segundo (0.5 segundo). Nagsisimula ng isang shell script na namamahala ng mga bagay tulad ng streaming ng video atbp.

Inirerekumendang: