Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Hello

Sa artikulong ito gusto kong ilarawan ang proseso ng pag-assemble ng aking unang robot gamit ang Arduino. Ang materyal ay magiging kapaki-pakinabang sa iba pang mga baguhan tulad ko na gustong gumawa ng ilang uri ng "self-running cart." Ang artikulo ay isang paglalarawan ng mga yugto ng pagtatrabaho sa aking mga karagdagan sa iba't ibang mga nuances. Ang isang link sa huling code (malamang na hindi ang pinaka-perpekto) ay ibinibigay sa dulo ng artikulo.

Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Hangga't maaari, sinali ko ang aking anak na lalaki (8 taong gulang) sa paglahok. Ano ang eksaktong nagtrabaho dito at kung ano ang hindi - Inilaan ko ang bahagi ng artikulo dito, marahil ito ay magiging kapaki-pakinabang sa isang tao.

Pangkalahatang paglalarawan ng robot

Una, ilang salita tungkol sa robot mismo (ideya). Hindi ko talaga nais na mag-assemble ng isang bagay na pamantayan sa simula. Kasabay nito, ang hanay ng mga bahagi ay medyo pamantayan - chassis, engine, ultrasonic sensor, line sensor, LEDs, tweeter. Sa una, isang robot ang naimbento mula sa "set ng sopas" na ito na nagbabantay sa teritoryo nito. Nagmamaneho siya patungo sa nagkasala na tumawid sa linya ng bilog, at pagkatapos ay bumalik sa gitna. Gayunpaman, ang bersyon na ito ay nangangailangan ng isang iginuhit na linya, at dagdag na matematika upang manatili sa bilog sa lahat ng oras.

Samakatuwid, pagkatapos ng ilang pag-iisip, medyo binago ko ang ideya at nagpasya na gumawa ng isang "hunter" na robot. Sa simula, lumiliko ito sa axis nito, pumipili ng malapit na target (tao). Kung ang "biktima" ay nakita, ang "mangangaso" ay i-on ang mga kumikislap na ilaw at sirena at nagsimulang magmaneho patungo dito. Kapag lumayo/tumakas ang tao, pipili ang robot ng bagong target at hinahabol ito, at iba pa. Ang nasabing robot ay hindi nangangailangan ng isang limitadong bilog, at maaari itong gumana sa mga bukas na lugar.

Gaya ng nakikita mo, ito ay parang laro ng catch-up. Bagama't sa huli ang robot ay hindi naging sapat na mabilis, tapat itong nakikipag-ugnayan sa mga tao sa paligid nito. Gustong-gusto ito ng mga bata (kung minsan, gayunpaman, tila tatapakan na nila ito, bumibilis ang tibok ng kanilang puso...). Sa tingin ko ito ay isang magandang solusyon para sa pagpapasikat ng teknikal na disenyo.

Istruktura ng robot

So, we've decided on the idea, let's move on to layout. Ang listahan ng mga elemento ay nabuo mula sa kung ano ang dapat na magagawa ng robot. Ang lahat dito ay medyo halata, kaya tingnan natin agad ang pagnunumero:

Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Ang "utak" ng robot ay isang arduino uno board (1); ay nasa isang set na inorder mula sa China. Para sa aming mga layunin, ito ay sapat na (nakatuon kami sa bilang ng mga pin na ginamit). Mula sa parehong kit kumuha kami ng isang yari na chassis (2), kung saan ang dalawang gulong ng drive (3) at isang likuran (malayang umiikot) (4) ay nakakabit. Kasama rin sa kit ang isang handa na kompartimento ng baterya (5). Sa harap ng robot ay may ultrasonic sensor (HC-SR04) (6), sa likod ay may motor driver (L298N) (7), sa gitna ay may LED flasher (8), at medyo sa gilid may tweeter (9).

Sa yugto ng layout, tinitingnan namin ang:

- para magkasya ang lahat
- upang maging balanse
- upang mailagay nang makatwiran

Bahagyang nagawa na ito ng aming mga kasamahang Tsino para sa amin. Kaya, ang mabigat na kompartimento ng baterya ay inilalagay sa gitna, at ang mga gulong ng drive ay matatagpuan humigit-kumulang sa ilalim nito. Ang lahat ng iba pang mga board ay magaan at maaaring ilagay sa paligid.

Mga Nuances:

  1. Ang chassis mula sa kit ay may maraming mga butas ng pabrika, ngunit hindi ko pa rin naiisip kung ano ang lohika sa kanila. Ang mga makina at baterya pack ay na-secure nang walang mga problema, pagkatapos ay ang "pagsasaayos" ay nagsimula sa pagbabarena ng mga bagong butas upang ma-secure ito o ang board na iyon.
  2. Malaking tulong ang mga brass rack at iba pang fastener mula sa mga storage area (minsan kailangan naming ilabas ang mga ito).
  3. Naipasa ko ang mga busbar mula sa bawat board sa pamamagitan ng mga clamp (muli, nakita ko ang mga ito sa imbakan). Tunay na maginhawa, ang lahat ng mga wire ay nakahiga nang maayos at hindi nakabitin.

Mga indibidwal na bloke

Ngayon dadaan ako mga bloke at sasabihin ko sa iyo nang personal ang tungkol sa bawat isa.

lalagyan ng baterya

Ito ay malinaw na ang robot ay dapat magkaroon ng isang mahusay na mapagkukunan ng enerhiya. Maaaring mag-iba ang mga opsyon, pinili ko ang opsyon na may 4 na baterya ng AA. Sa kabuuan ay nagbibigay sila ng humigit-kumulang 5 V, at ang boltahe na ito ay maaaring direktang mailapat sa 5V pin ng arduino board (bypassing ang stabilizer).

Siyempre, mayroon akong ilang pag-iingat, ngunit ang solusyon na ito ay lubos na magagawa.

Dahil ang kapangyarihan ay kinakailangan sa lahat ng dako, para sa kaginhawahan gumawa ako ng dalawang konektor sa gitna ng robot: ang isa ay "namamahagi" sa lupa (sa kanan), at ang pangalawa - 5 V (sa kaliwa).

Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Mga motor at driver

Una, tungkol sa pag-mount ng mga makina. Ang mount ay gawa sa pabrika, ngunit ginawa na may malalaking tolerance. Sa madaling salita, ang mga makina ay maaaring umalog ng ilang milimetro sa kaliwa at kanan. Para sa aming gawain hindi ito kritikal, ngunit sa ilang mga lugar maaari itong magkaroon ng epekto (ang robot ay magsisimulang lumipat sa gilid). Kung sakali, itinakda ko ang mga makina na mahigpit na kahanay at inayos ang mga ito gamit ang pandikit.

Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Upang kontrolin ang mga motor, tulad ng isinulat ko sa itaas, ginagamit ang driver ng L298N. Ayon sa dokumentasyon, mayroon itong tatlong pin para sa bawat motor: isa para sa pagbabago ng bilis at isang pares ng mga pin para sa direksyon ng pag-ikot. Mayroong isang mahalagang punto dito. Ito ay lumiliko na kung ang supply boltahe ay 5 V, kung gayon ang kontrol ng bilis ay hindi gumagana! Iyon ay, alinman sa hindi ito lumiliko, o ito ay lumiliko sa maximum. Ito ang tampok na nagdulot sa akin na "pumatay" ng ilang gabi. Sa huli, nakakita ako ng pagbanggit sa isang lugar sa isa sa mga forum.

Sa pangkalahatan, kailangan ko ng mababang bilis ng pag-ikot kapag pinihit ang robot - upang magkaroon ito ng oras upang i-scan ang espasyo. Ngunit, dahil walang nagmula sa ideyang ito, kinailangan kong gawin ito nang iba: isang maliit na pagliko - paghinto - pagliko - paghinto, atbp. Muli, hindi masyadong matikas, ngunit magagawa.

Idaragdag ko rin dito na pagkatapos ng bawat pagtugis ay pipili ang robot ng random na direksyon para sa isang bagong pagliko (clockwise o counterclockwise).

Ultrasonic na sensor

Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Isa pang piraso ng hardware kung saan kailangan naming maghanap ng solusyon sa kompromiso. Ang ultrasonic sensor ay gumagawa ng hindi matatag na mga numero sa mga tunay na hadlang. Sa totoo lang, ito ay inaasahan. Sa isip, ito ay gumagana sa isang lugar sa mga kumpetisyon kung saan may makinis, pantay at patayo na mga ibabaw, ngunit kung ang mga binti ng isang tao ay "flash" sa harap nito, ang karagdagang pagproseso ay kailangang ipakilala.

Tulad ng pagpoproseso na itinakda ko panggitna filter para sa tatlong bilang. Batay sa mga pagsusuri sa mga tunay na bata (walang mga bata ang napinsala sa panahon ng mga pagsusulit!), naging sapat na ito upang gawing normal ang data. Ang pisika dito ay simple: mayroon kaming mga senyas na sinasalamin mula sa kailangan mga bagay (nagbibigay ng kinakailangang distansya) at naipapakita mula sa mas malalayong mga bagay, halimbawa, mga dingding. Ang huli ay mga random na emisyon sa mga sukat ng form 45, 46, 230, 46, 46, 45, 45, 310, 46... Ito ang mga ito na pinuputol ng median na filter.

Matapos ang lahat ng pagproseso, nakukuha namin ang distansya sa pinakamalapit na bagay. Kung ito ay mas mababa sa isang tiyak na halaga ng threshold, pagkatapos ay i-on namin ang alarma at magmaneho nang diretso patungo sa "manghihimasok".

Flasher at sirena

Marahil ang pinakasimpleng elemento ng lahat ng nasa itaas. Makikita ang mga ito sa mga larawan sa itaas. Walang maisusulat tungkol sa hardware dito, kaya't magpatuloy tayo sa code.

Kontrol na programa

Hindi ko nakikita ang punto sa paglalarawan ng code nang detalyado, kung sino ang nangangailangan nito - ang link ay nasa dulo ng artikulo, ang lahat ay medyo nababasa doon. Ngunit mainam na ipaliwanag ang pangkalahatang istraktura.

Ang unang bagay na kailangan naming maunawaan ay ang isang robot ay isang real-time na device. Mas tiyak, tandaan, dahil parehong dati at ngayon ay nagtatrabaho pa rin ako sa electronics. Kaya, agad naming nakakalimutan ang tungkol sa hamon antala (), na gustung-gusto nilang gamitin sa mga halimbawang sketch, at "nag-freeze" lang sa programa para sa isang tinukoy na tagal ng panahon. Sa halip, gaya ng ipinapayo ng mga may karanasang tao, nagpapakilala kami ng mga timer para sa bawat bloke. Ang kinakailangang agwat ay lumipas - ang aksyon ay naisagawa (nadagdagan ang liwanag ng LED, naka-on ang makina, at iba pa).

Ang mga timer ay maaaring magkakaugnay. Halimbawa, gumagana ang tweeter kasabay ng flasher. Pinapasimple nito ang programa nang kaunti.

Naturally, pinaghiwa-hiwalay namin ang lahat sa magkakahiwalay na mga pag-andar (mga kumikislap na ilaw, tunog, pag-ikot, pasulong, at iba pa). Kung hindi mo ito gagawin, hindi mo malalaman kung saan nanggagaling at saan.

Nuances ng pedagogy

Ginawa ko ang lahat ng inilarawan sa itaas sa aking libreng oras sa gabi. Sa isang masayang paraan, gumugol ako ng halos tatlong linggo sa robot. Maaaring dito na ito natapos, ngunit nangako rin akong sasabihin sa iyo ang tungkol sa pakikipagtulungan sa isang bata. Ano ang maaaring gawin sa edad na ito?

Magtrabaho ayon sa mga tagubilin

Una naming sinuri ang bawat detalye nang hiwalay - LEDs, tweeter, motors, sensor, atbp. Mayroong isang malaking bilang ng mga handa na mga halimbawa - ang ilan ay nasa mismong kapaligiran ng pag-unlad, ang iba ay matatagpuan sa Internet. Ito ay tiyak na nagpapasaya sa akin. Kinukuha namin ang code, ikinonekta ang bahagi, siguraduhing gumagana ito, pagkatapos ay sinimulan naming baguhin ito upang umangkop sa aming gawain. Ginagawa ng bata ang mga koneksyon ayon sa diagram at sa ilalim ng ilan sa aking pangangasiwa. Mabuti ito. Kailangan mo ring makapagtrabaho nang mahigpit ayon sa mga tagubilin.

Pagkakasunud-sunod ng trabaho ("mula sa partikular hanggang pangkalahatan")

Ito ay isang mahirap na punto. Kailangan mong matutunan na ang isang malaking proyekto ("gumawa ng isang robot") ay binubuo ng maliliit na gawain ("magkonekta ng sensor," "magkonekta ng mga motor"...), at ang mga iyon, naman, ay binubuo ng mas maliliit na hakbang ("maghanap ng isang program," "kunekta sa isang board." ", "i-download ang firmware"...). Sa pamamagitan ng pagsasagawa ng higit pa o hindi gaanong naiintindihan na mga gawain ng mas mababang antas, "sinasara" namin ang mga gawain ng gitnang antas, at mula sa kanila ang pangkalahatang resulta ay nabuo. Ipinaliwanag ko, ngunit sa palagay ko ang pagsasakatuparan ay hindi darating sa lalong madaling panahon. Sa isang lugar, marahil, sa pamamagitan ng pagdadalaga.

Pag-install

Pagbabarena, sinulid, turnilyo, mani, paghihinang at amoy ng rosin - nasaan tayo kung wala ito? Natanggap ng bata ang pangunahing kasanayan na "Paggawa gamit ang isang panghinang na bakal" - pinamamahalaang niyang maghinang ng ilang mga koneksyon (Nakatulong ako ng kaunti, hindi ko ito itatago). Huwag kalimutan ang tungkol sa paliwanag sa kaligtasan.

Trabaho sa kompyuter

Isinulat ko ang programa para sa robot, ngunit nakamit ko pa rin ang ilang mga kanais-nais na resulta.

Una: Ingles. Sinimulan lang nila ito sa paaralan, kaya nahihirapan kaming malaman kung ano ang pishalka, migalka, yarkost at iba pang mga transliterasyon. At least naintindihan namin ito. Sinadya kong hindi gumamit ng mga katutubong salitang Ingles, dahil hindi pa tayo nakakarating sa antas na ito.

Pangalawa: mahusay na trabaho. Itinuro namin ang mga kumbinasyon ng hotkey at kung paano mabilis na maisagawa ang mga karaniwang operasyon. Paminsan-minsan, kapag sinusulat namin ang programa, kami ng aking anak na lalaki ay nagpalitan ng mga lugar, at sinabi ko kung ano ang kailangang gawin (pagpapalit, paghahanap, atbp.). Kinailangan kong ulitin nang paulit-ulit: "i-double-click ang piliin", "hawakan ang Shift", "hawakan ang Ctrl" at iba pa. Ang proseso ng pag-aaral dito ay hindi mabilis, ngunit sa tingin ko ang mga kasanayan ay unti-unting idedeposito "sa subcortex."

Nakatagong tekstoMasasabi mong halos halata na ang nasa itaas. Ngunit, sa totoo lang, nitong taglagas ay nagkaroon ako ng pagkakataong magturo ng computer science sa ika-9 na baitang sa isang paaralan. nakakakilabot yun. Hindi alam ng mga mag-aaral ang mga pangunahing bagay gaya ng Ctrl + Z, Ctrl + C at Ctrl + V, pagpili ng text habang pinipindot ang Shift o pag-double click sa isang salita, at iba pa. Ito ay sa kabila ng katotohanang nasa ikatlong taon na sila sa pag-aaral ng computer science... Draw your own conclusion.

Pangatlo: pindutin ang pag-type. Ipinagkatiwala ko ang mga komento sa code sa bata upang mag-type (hayaan siyang magsanay). Agad naming inilagay ng tama ang aming mga kamay upang unti-unting maalala ng aming mga daliri ang lokasyon ng mga susi.

Tulad ng nakikita mo, nagsisimula pa lang tayo. Patuloy nating hahasain ang ating mga kakayahan at kaalaman; ito ay magiging kapaki-pakinabang sa buhay.

Sa pamamagitan ng paraan, tungkol sa hinaharap ...

Ang karagdagang pag-unlad

Ang robot ay ginawa, nagmamaneho, kumukurap at nagbeep. Ano ngayon? Dahil sa inspirasyon ng aming nakamit, plano naming pinuhin pa ito. May ideya na gumawa ng remote control - tulad ng isang lunar rover. Magiging kawili-wili, nakaupo sa isang remote control, upang kontrolin ang paggalaw ng isang robot na nagmamaneho sa isang ganap na naiibang lugar. Ngunit iyon ay magiging ibang kuwento ...

At sa dulo, sa katunayan, ang mga bayani ng artikulong ito (video sa pamamagitan ng pag-click):

Karanasan sa paglikha ng unang robot sa Arduino (robot "hunter")

Salamat sa iyo!

Link ng code

Pinagmulan: www.habr.com

Magdagdag ng komento