Talaan ng mga Nilalaman:

Simpleng Arduino Robotics Platform !: 5 Mga Hakbang
Simpleng Arduino Robotics Platform !: 5 Mga Hakbang

Video: Simpleng Arduino Robotics Platform !: 5 Mga Hakbang

Video: Simpleng Arduino Robotics Platform !: 5 Mga Hakbang
Video: Learn Arduino in 30 Minutes: Examples and projects 2024, Disyembre
Anonim
Simpleng Arduino Robotics Platform!
Simpleng Arduino Robotics Platform!
Simpleng Arduino Robotics Platform!
Simpleng Arduino Robotics Platform!

Nakuha ko lang ang isang Arduino pagkatapos maglaro kasama ang ilang mga AVR microcontroller sa mga pagpupulong ng koponan ng Robotics. Nagustuhan ko ang ideya ng isang talagang murang programmable chip na maaaring magpatakbo ng halos anumang bagay mula sa isang simpleng interface ng computer kaya't nakakuha ako ng Arduino dahil mayroon na itong magandang board at USB interface. Para sa aking unang proyekto ng Arduino, naghukay ako ng isang kit ng Vex Robotics na inilatag ko mula sa ilang mga kumpetisyon na ginawa ko noong high school. Palagi kong ginusto na gumawa ng isang computer driven platform ng robotics ngunit ang Vex microcontroller ay nangangailangan ng isang cable ng programa na wala ako. Napagpasyahan kong gamitin ang aking bagong Arduino (at marahil sa paglaon ay isang hubad na AVR chip kung gagawin ko ito) upang himukin ang platform. Sa kalaunan nais kong makakuha ng isang netbook at pagkatapos ay maaari kong magmaneho ng robot gamit ang WiFi at matingnan ang webcam nito mula sa malayo.

Nagawa kong makakuha ng disenteng serial protocol at isang simpleng halimbawa na hinihimok ang robot gamit ang isang Xbox 360 controller na konektado sa isang Linux PC.

Hakbang 1: Ano ang Magagawa nito…

Ano ang Magagawa nito…
Ano ang Magagawa nito…
Ano ang Magagawa nito…
Ano ang Magagawa nito…

Ang Arduino ay isang napaka-maraming nalalaman platform. Ang aking pangunahing layunin ay makuha lamang ang Arduino upang mai-interface ang dalawang mga motor ng Vex sa PC, ngunit marami akong natirang input / output na pin at nagpasyang magdagdag ng ilang labis na bagay. Sa ngayon mayroon akong isang RGB LED para sa katayuan ng serial port (berde kung ang mga pakete ay mabuti, pula kung masama sila) at isang PC fan na hinimok ng isang transistor. Maaari din akong magdagdag ng mga switch at sensor ngunit hindi ko pa inilalagay ang alinman sa mga iyon. Ang pinakamagandang bagay tungkol dito ay maaari mong idagdag ang anumang nais mo sa isang Arduino robot. Kakailanganin lamang ang kaunting interface code upang makontrol ang labis na mga bagay-bagay at makakuha ng input sa computer.

Hakbang 2: Mga Bahagi

Mga Bahagi
Mga Bahagi
Mga Bahagi
Mga Bahagi
Mga Bahagi
Mga Bahagi

Para sa aking robot, gumamit ako ng ilang magkakaibang mga bahagi. Karamihan sa mga bahagi ay mula sa mga lumang bagay na inilagay ko sa paligid ng aking basement.1) Arduino Duemilanove w / ATMega328 Ito ang pinakabagong Arduino, at dahil nakuha ko ito ilang araw na ang nakalilipas mayroon akong pinakabagong. Gayunpaman, ang code ay sapat na maliit na dapat madali itong magkasya sa anumang Arduino. Maaari itong kahit na magkasya sa isang ATTiny (kung magtatayo ako ng isang robot controller bukod sa Arduino, ang ATTiny 2313 ay mukhang isang mahusay na pagpipilian, mas maliit ito at mas mura ngunit mayroon pa ring maraming mga output at isang serial interface ng UART) 2) Vex Robotics PlatformI Nakakuha ng isang Vex kit ilang taon na ang nakakalipas upang makabuo ng isang robot na kontrolado ng radyo upang kunin ang mga bagay-bagay para sa isang kumpetisyon sa high school. Itinayo ko ang pangunahing batayang "square bot" na mayroong 4 na gulong na hinimok ng dalawang motor. Maaari mong palitan ang iba pang mga base ng robot kung mayroon kang ilang iba pang platform na nais mong himukin. Ang mahalagang bagay na dapat tandaan ay ang mga motor ng Vex ay mahalagang tuluy-tuloy na pag-ikot ng servos, gumagamit sila ng pulso-lapad na modulasyon upang senyasan kung gaano kabilis at sa anong direksyong liliko. Ang mga motor ng Vex ay maganda sapagkat mayroon silang isang mataas na hanay ng mga operating voltages, sa isang lugar sa pagitan ng 5 hanggang 15 volts. Gumagamit ako ng 12V dahil mayroon akong 12V na baterya. Para sa karamihan ng karaniwang mga hobby servos, kakailanganin mo ng isang mas mababang boltahe (madalas na 6 volts).3) Ang baterya ng isang robot ay walang silbi nang walang isang supply ng kuryente. Para sa pagsubok gumagamit ako ng isang karaniwang 9V wall-wart adapter mula sa RadioShack, ngunit para sa walang operasyon na cordless nakita ko ang isang 12V NiMH na baterya pack sa isang sinaunang laptop. Bagaman hindi ito sapat na hawak ng isang singil upang patakbuhin ang laptop ay hinihimok nito ang aking Vex robot na mabuti lang. Maaari rin itong paganahin ang Arduino gamit ang Vin input pin sa power konector, ang Arduino ay makokontrol ang 12V pababa sa 5 at kahit na i-output ito ang output ng 5V na output sa konektor ng kuryente. 4) Pangunahing Breadboard Kasalukuyan akong gumagamit ng isang breadboard upang kawad lahat. Sa paglaon makakakuha ako ng isang mas mahusay na prototyping board at panghinang sa ilang mga mas permanenteng koneksyon ngunit sa ngayon ang breadboard ay ginagawang madali upang baguhin ang mga bagay. Ang aking breadboard ay "pangunahing breadboard" ng SparkFun, isang breadboard lamang sa isang metal plate na may 3 terminal.5) MAX232-based RS232-TTL converter Kung nais mong himukin ang iyong robot gamit ang isang koneksyon sa serial port na RS-232 (kumpara sa built ng Arduino sa USB) maaari kang gumamit ng converter ng RS232-TTL. Gumagamit ako ng isang MAX232 dahil mayroon akong ilan sa kanila na nakahiga at hinanginan ko ito sa isang maliit na piraso ng prototyping board na may kinakailangang mga capacitor. Kailangan ko ang RS-232 dahil ang aking luma na laptop ay mayroon lamang isang USB port at ginagamit ko iyon para sa isang game controller upang himukin ang robot. 6) Mga karagdagang bahagi tulad ng ninanais. Para sa madaling pag-debug ng serial protocol, naglagay ako ng RGB LED dito Nakakuha ng isa sa aking order ng Arduino sanhi ng tunog nila cool). Ang ilaw ay kumikislap ng pula, berde, asul sa pagkakasunud-sunod kapag ang Arduino ay nag-boot upang ipakita ang robot ay na-reboot at pagkatapos ay sindihan ang berde kapag ang isang motor packet ay natanggap, Blue kapag ang isang fan packet ay natanggap, at Pula kapag ang isang hindi maganda o hindi kilalang natanggap ang packet. Upang himukin ang tagahanga ginamit ko ang isang karaniwang NPN transistor (ang parehong ipinakita ko sa aking huling Instructable) at isang risistor sa pagitan ng transistor at ng Arduino (ang transistor ay gumuhit ng sobrang kasalukuyang at nagpapainit ng Arduino, kaya't naglagay ako ng isang limitasyon resistor upang itigil ito).

Hakbang 3: Arduino at PC Programming

Arduino at PC Programming
Arduino at PC Programming

Upang mai-program ang Arduino, malinaw na kakailanganin mo ang Arduino software at isang USB cable. Maaari mo ring programa ang Arduino gamit ang isang serial port at isang TTL level converter kung ang iyong PC ay may serial port. Tandaan na ang USB serial interface ay hindi makikipag-usap sa processor ng Aregaino's ATMega kung mayroong isang level converter na nakakonekta sa mga serial pin ng Arduino (pin 0 at 1) kaya idiskonekta ito bago gamitin ang USB. Sa Arduino kakailanganin namin ang isang serial interface na pinapayagan ang PC upang makontrol ang mga motor. Kakailanganin din namin ang isang PWM servo drive system upang maipadala ang mga tamang signal sa mga motor ng Vex at tiyaking pupunta sila sa mga tamang direksyon kapag binigyan ng tamang mga halaga. Nagdagdag din ako ng ilang simpleng LED flashing, pangunahin para sa indication ng katayuan ngunit din dahil mukhang cool ito. Sa PC kakailanganin naming buksan ang serial port at magpadala ng mga frame ng data na mauunawaan ng Arduino program. Kailangan ding magkaroon ng PC ang mga halaga ng motor. Isang madaling paraan upang magawa ito ay ang paggamit ng USB game pad o joystick, gumagamit ako ng isang Xbox 360 controller. Ang isa pang pagpipilian ay ang paggamit ng isang naka-network na computer (alinman sa isang netbook o isang maliit na mini ITX board) sa robot mismo upang magmaneho nang wireless. Sa pamamagitan ng isang netbook, maaari mo ring gamitin ang onboard webcam upang mag-stream pabalik ng isang video feed at ihimok ang iyong robot mula sa malayo. Ginamit ko ang sistema ng sockets ng Linux upang gawin ang pagprogram sa network para sa aking pag-setup. Ang isang programa (ang "server ng joystick") ay pinapatakbo sa isang hiwalay na PC na may isang controller na naka-plug dito, at isa pang programa (ang "client") ay pinapatakbo sa netbook na konektado sa Arduino. Iniuugnay nito ang dalawang computer at nagpapadala ng impormasyon ng joystick sa netbook, na pagkatapos ay nagpapadala ng mga serial packet sa Arduino na nagtutulak sa robot. Upang kumonekta sa Arduino gamit ang isang Linux PC (sa C ++) dapat mo munang buksan ang serial port sa tama baud rate at pagkatapos ay ipadala ang mga halaga gamit ang isang protocol na ginamit mo rin sa code ng Arduino. Ang aking serial format ay simple at epektibo. Gumagamit ako ng 4 bytes bawat "frame" upang maipadala ang dalawang bilis ng motor (bawat isa ay isang solong byte). Ang una at huling byte ay mga hard-coded na halaga na ginagamit upang mapanatili ang Arduino mula sa pagpapadala ng maling byte sa PWM code at maging sanhi ng pagkabaliw ng mga motor. Ito ang pangunahing layunin ng RGB LED, kumikislap ito ng pula kapag hindi kumpleto ang serial frame. Ang 4 bytes ay ang mga sumusunod: 255 (hard coded "start" byte),,, 200 (hard coded "end" byte) Upang masiguro ang maaasahang pagtanggap ng data, siguraduhing naglalagay ka ng sapat na pagkaantala sa pagitan ng mga loop ng programa. Kung pinatakbo mo ang iyong PC code nang napakabilis, magbaha ito sa daungan at maaaring magsimulang bumagsak ang Arduino o kahit na maling pagbasa ng mga byte. Kahit na hindi ito bumaba ng impormasyon maaari rin itong umapaw sa serial port buffer ng Arduino. Para sa mga motor ng Vex, ginamit ko ang Arduino Servo library. Dahil ang mga motor ng Vex ay tuloy-tuloy lamang na mga motor sa pag-ikot, ginagamit nila ang eksaktong parehong senyas na ginagamit ng mga servos. Gayunpaman, sa halip na 90 degree ang sentro ng punto, ito ang hintuan kung saan ang motor ay hindi umiikot. Ang pagbaba ng "anggulo" ay sanhi ng motor upang magsimulang umiikot sa isang direksyon, habang ang pagtaas ng anggulo ay ginagawang ikot sa ibang direksyon. Mas malayo ang layo mula sa gitnang point na naroroon ka, mas mabilis ang pag-ikot ng motor. Habang hindi nito masisira ang anumang bagay kung magpapadala ka ng mga halagang higit sa 180 degree sa mga motor, payuhan ko ang paglilimita sa mga halaga mula 0 hanggang 180 degree (na sa kasong ito ay mga pagtaas ng bilis). Dahil gusto ko ng mas maraming kontrol at mas mababa sa kontrol ng pagmamaneho ng robot, nagdagdag ako ng isang "limitasyon ng bilis" ng software sa aking programa na hindi pinapayagan ang bilis na tumaas sa itaas ng 30 "degree" sa alinmang direksyon (saklaw ay 90 +/- 30). Plano ko sa pagdaragdag ng isang serial port command na nagbabago sa limitasyon ng bilis, upang maalis ng computer ang limit sa mabilis kung nais mong mabilis (sumubok ako sa mga maliliit na silid kaya ayaw kong bumilis ito at pag-crash sa pader, lalo na may isang netbook dito). Para sa karagdagang impormasyon, i-download ang nakalakip na code sa dulo ng Instructable na ito.

Hakbang 4: Magdagdag ng isang Netbook upang Galugarin ang Hindi Kilalang Mga Daigdig Mula sa isang Distansya

Magdagdag ng isang Netbook upang Galugarin ang Hindi Kilalang Mga Daigdig Mula sa isang Distansya
Magdagdag ng isang Netbook upang Galugarin ang Hindi Kilalang Mga Daigdig Mula sa isang Distansya
Magdagdag ng isang Netbook upang Galugarin ang Hindi Kilalang Mga Daigdig Mula sa isang Distansya
Magdagdag ng isang Netbook upang Galugarin ang Hindi Kilalang Mga Daigdig Mula sa isang Distansya

Sa pamamagitan ng isang buong PC na nakasakay sa iyong Arduino robot, nagagawa mong itaboy ang iyong robot mula sa malayo maabot ng iyong WiFi nang walang anumang mga tanikala upang limitahan ang robot sa isang lugar. Ang isang mahusay na kandidato para sa trabahong ito ay isang netbook, dahil ang mga netbook ay maliit, magaan, may built-in na baterya, may WiFi, at karamihan ay nakagawa pa ng mga webcam na maaaring magamit upang mai-stream ang view ng robot pabalik sa isang ligtas na lugar kung saan ka makontrol ito. Gayundin, kung ang iyong netbook ay nilagyan ng serbisyo ng mobile broadband, ang iyong saklaw ay halos walang limitasyong. Sa sapat na mga baterya maaari mong itaboy ang iyong robot sa lokal na lugar ng pizza at maglagay ng order sa loob ng webcam (hindi inirerekomenda, ang mga robot ay hindi pinapayagan sa mga lugar ng pizza, kahit na sila ay mga tao ay malamang na subukan na nakawin ang robot at baka pati yung pizza). Maaari ding maging isang mahusay na paraan upang tuklasin ang madilim na kailaliman ng iyong basement mula sa ginhawa ng iyong upuan sa opisina, kahit na ang pagdaragdag ng ilang mga headlight ay maaaring maging kapaki-pakinabang sa kasong ito.

Maraming mga paraan upang magawa itong gumana, marahil ay mas madali kaysa sa akin, kahit na hindi ako pamilyar sa mga wika sa Pagproseso o batay sa script kaya't pinili kong gamitin ang Linux at C ++ upang lumikha ng isang wireless control link sa pagitan ng aking base station (aka lumang ThinkPad) at ang aking bagong netbook ng Lenovo IdeaPad na konektado sa base ng drive ng Arduino. Ang parehong PC ay tumatakbo sa Ubuntu. Ang aking ThinkPad ay naka-plug sa LAN ng aking paaralan at ang aking IdeaPad ay konektado sa aking WiFi access point na konektado din sa LAN ng paaralan (Hindi ako makakuha ng maaasahang stream ng video mula sa WiFi ng paaralan dahil ginagamit ito ng iba, kaya't itinakda ko up ang aking sariling router upang magbigay ng isang mahusay na koneksyon). Ang isang mahusay na koneksyon ay lalong mahalaga sa aking kaso dahil hindi ko naipatupad ang anumang error-check o pag-timeout. Kung biglang bumaba ang koneksyon sa network, ang robot ay nagpapatuloy hanggang sa mag-crash ito sa isang bagay o patakbuhin ko at pigilan ito. Ito ang pangunahing kadahilanan sa likod ng aking pasya na pabagalin ang drivetrain pareho sa pamamagitan ng paggalaw ng mga motor at pagpapatupad ng isang limitasyon sa bilis ng software.

Hakbang 5: Kumuha ng isang Video Feed

Matapos ang iyong robotic explorer ay maaaring magmaneho nang wireless, malamang na gugustuhin mong magkaroon ng isang feed ng video mula sa netbook upang masabi mo kung nasaan ang iyong robot. Kung gumagamit ka ng Ubuntu (o kahit na hindi ka!) Inirerekumenda kong gamitin ang VLC Media Player upang mag-stream. Kung hindi mo pa ito na-install, talagang nawawala ka, kaya i-install ito gamit ang utos na "sudo apt-get install vlc", mag-browse para sa VLC sa Ubuntu Software Center (9.10 lamang), o i-download ang installer sa videolan. org kung nasa Windows ka. Kakailanganin mo ang VLC na tumatakbo sa parehong PC. Ang VLC ay may kakayahang mag-streaming pati na rin ang paglalaro ng mga stream sa isang network. Sa netbook (robot PC) siguraduhin muna na ang iyong webcam (alinman sa built-in o konektadong USB) ay gumagana sa pamamagitan ng pag-click sa Open Capture Device at pagsubok sa Video para sa Linux 2 (ang ilang mas matatandang aparato ay maaaring mangailangan ng Video para sa Linux kaysa sa bagong 2 bersyon). Dapat mong makita ang view ng camera sa screen ng netbook. Upang mai-stream ito, piliin ang Streaming mula sa menu ng File at pagkatapos ay piliin ang tab na Capture Device sa tuktok ng window na lilitaw. Tandaan na ang Ubuntu (at maraming iba pang mga distro ng Linux) ay pinapayagan kang pindutin ang Alt upang mag-click at i-drag ang mga bintana na masyadong malaki para sa iyong screen (lalo na kapaki-pakinabang sa mga mas lumang netbook, kahit na kahit ang aking IdeaPad ay may isang kakaibang 1024x576 na resolusyon nang walang maliwanag na dahilan). Upang mabawasan ang pagkaantala, mag-click sa "Ipakita ang Higit Pang Mga Pagpipilian" at babaan ang halaga ng pag-cache. Ang halaga na maaari mong babaan minsan ay nakasalalay sa aparato, hindi ito matatag kung babawasan mo ito ng sobra. Sa 300ms maaari kang makakuha ng kaunting pagkaantala ngunit hindi ito masyadong masama.

Susunod, i-click ang Stream upang pumunta sa susunod na menu. I-click ang Susunod, pagkatapos ay piliin at idagdag ang HTTP bilang isang bagong patutunguhan. Ngayon ay i-set up ang Transcoding upang gawing mas maliit ang stream. Gumawa ako ng isang pasadyang profile na gumagamit ng M-JPEG sa 60kb / s at 8fps. Ito ay dahil ang paggamit ng isang advanced na codec tulad ng MPEG o Theora ay makakain ng napakalaking oras ng CPU sa Atom processor ng netbook at maaari itong humantong sa pagtigil ng iyong feed ng video nang walang maliwanag na dahilan. Ang MJPEG ay isang simpleng codec na madaling gamitin sa mababang bitrates. Matapos simulan ang iyong stream, buksan ang VLC sa iyong iba pang PC, buksan ang isang stream ng network, piliin ang HTTP, at pagkatapos ay i-type ang IP address ng iyong netbook (alinman sa lokal o Internet depende sa kung paano ka kumokonekta) na sinusundan ng ": 8080". Kailangan mong tukuyin ang port para sa isang kakaibang dahilan, kung hindi man ay nagbibigay ito sa iyo ng mga error. Kung mayroon kang isang disenteng koneksyon, dapat mong makita ang feed ng iyong webcam sa iyong iba pang PC, ngunit magkakaroon ito ng kaunting (halos isang segundo) pagkaantala. Hindi ko alam eksakto kung bakit nangyayari ang pagka-antala na ito, ngunit hindi ko mawari kung paano ito mapupuksa. Ngayon buksan ang control app at simulan ang pagmamaneho ng iyong netbook robot. Makuha ang isang pakiramdam para sa kung paano gumagana ang pagkaantala kapag nagmamaneho upang hindi ka mahulog sa anumang bagay. Kung ito ay gumagana, tapos na ang iyong netbook robot.

Inirerekumendang: