Tere.
Selles artiklis tahan ma kirjeldada oma esimese Arduino roboti kokkupanemise protsessi. Materjal on kasulik teistele algajatele nagu mina, kes soovivad valmistada mĂ”ne âise liikuv kaubikuâ. Artikkel keskendub etapiviisile minuga koos ja erinevate nĂŒansside kirjeldamisele. Kood, mille tulemused (tĂ”enĂ€oliselt mitte kĂ”ige ideaalsem) on antud artikli lĂ”pus.

VĂ”imaluse korral kaasasin oma poja (8 aastat). Mida tĂ€pselt temaga vĂ€lja tuli, ja mida mitte â sellele pĂŒhendasin osa artiklist, vĂ”ib-olla on see kellegi jaoks kasulik.
Roboti ĂŒldine kirjeldus
Alustuseks paar sĂ”na roboti kohta (idee). Esialgu ei olnud mul suurt tahtmist koguda midagi tavalist. Samas oli komponentide komplekt ĂŒsna standardne â ĆĄassiid, mootorid, ultraheliandur, jooneandur, LED-lambid, kĂ”lar. Esmalt mĂ”tlesin vĂ€lja roboti, mis kaitseb oma territooriumi. Ta sĂ”idab ebaseadusliku isiku suunas, kes on ĂŒletanud ringi joone, ja siis naaseb keskele. Kuid selles variandis oli vajalik joon, pluss lisamatemaatika, et pidevalt ringis pĂŒsida.
SeetĂ”ttu pĂ€rast mĂ”ningaid kaalutlemisi muutsin ma ideed veidi ja otsustasin teha roboti-âjahtijaâ. Alguses pöördub ta ĂŒmber oma telje, valides lĂ€hima sihtmĂ€rgi (inimese). Kui âohverâ on avastatud, lĂŒlitab âjahtijaâ sisse vilkuva valguse ja sireeni ning hakkab tema poole liikuma. Kui inimene lĂ€heb eemale vĂ”i jookseb Ă€ra, valib robot uue sihtmĂ€rgi ja jĂ€litab seda, ja nii edasi. Sellisele robotile ei ole piiratud ring vajalik ning ta suudab töötada avatud alal.
Nagu nĂ€ha, meenutab see suuresti mĂ€ngu âkargamineâ. Kuigi robot ei osutunud piisavalt ketramiseks, suhtleb ta ausalt teda ĂŒmbritsevate inimestega. Erakordselt meeldib see lastele (mĂ”nikord tundub, et nad on kohe-kohe valmis selle sisse trampima, sĂŒda lĂ€heb hĂŒppamaâŠ). Arvan, et see on hea lahendus tehnilise konstrueerimise populariseerimiseks.
Roboti struktuur
Nii et oleme idee paika pannud, liigume edasi komponeerimise. Elementide loetelu koostatakse sellest, mida robot peab oskama. Siin on kĂ”ik ĂŒsna ilmne, seega vaatame kohe nummerdamist:

Roboti "aju" - arduino uno plaat (1); see oli tellitud komplektis Hiinast. Meie vajaduste jaoks on see tĂ€iesti piisav (toetume kasutatavate pinnade arvule). Samast komplektist vĂ”tsime valmis ĆĄassi (2), millele on kinnitatud kaks esitavat ratast (3) ja ĂŒks taga (vabalt pööratav) (4). Samuti oli komplektis valmis akuhoidik (5). Roboti ees asub ultraheliandur (HC-SR04) (6), taga - mootori juhtimisĂŒksus (L298N) (7), keskel - vilkuv LED (8) ja veidi kĂ”rvale - kĂ”lar (9).
KokkuvÔtte koostamise etapis vaatame:
â et kĂ”ik mahuks
â et see oleks tasakaalus
â et kĂ”ik oleks ratsionaalselt paigutatud
Osaliselt on selle meie eest teinud Hiina kolleegid. Seega on raske akuhoidik paigutatud keskele ja ligikaudu tema all asuvad esitavad rattad. KĂ”ik ĂŒlejÀÀnud plaadid on kerged, seega saab neid paigutada perifeeriasse.
Detailid:
- Komplekti ƥassiis on palju tehaseavasid, kuid milline on nende loogika - ma pole seda siiani mÔistnud. Mootorid ja akupakk kinnitusid probleemideta, edasi algas "kohandamise" etapp uute avade puurimisega, et kinnitada erinevad plaadid.
- Messingist toestikud ja muu kinnitus, mis mul varudes oli, aitasid mind vÀga (mÔnikord pidin vÀlja tulema).
- Iga plaadi kaablid viisin lÀbi klambrite (leidsin samuti varudest). See on vÀga mugav, kÔik kaablid on kenasti paigutatud ja ei poga.
Erilised moodulid
NĂŒĂŒd tutvustan mooduleid ja rÀÀgin igaĂŒhe kohta.
Akuhoidik
On selge, et robot peab olema hea energiaallikas. Variant vÔib olla erinev, valisin 4 AA aku variandi. Kokku annavad nad ligikaudu 5 V, ja seda pinget saab otse toita arduino plaadi 5V pinnale (stabilisaatorit vahele jÀtmata).
MÔningane ettevaatus muidugi oli, kuid see lahendus on tÀiesti töökindel.
Kuna toide on vajalik igal pool, tegin mugavuse huvides robotile keskuses kaks pistikut: ĂŒks "jagab" maapinda (paremal), teine - 5 V (vasakul).

Mootorid ja juhtimisseade
Esiteks mootorite kinnitamisest. Kinnitamine on tehase, kuid tehtud suurte taluvustega. TeisisĂ”nu, mootorid saavad liikuda paar millimeetrit vasakule-poole. Meie ĂŒlesande jaoks pole see kriitiline, kuid kuskil vĂ”ib see mĂ”jutada (robot hakkab kalduma). Igaks juhuks keerasin mootorid rangelt paralleelselt ja kinnitasin liimiga.

Mootorite juhtimiseks, nagu ma varem mainisin, kasutatakse L298N draiverit. Dokumentatsiooni kohaselt on igal mootoril kolm pinni: ĂŒks kiirusreguleerimiseks ja kaks pöörlemissuuna jaoks. Siin on ĂŒks oluline moment. Selgus, et kui toitepinge on 5 V, siis kiirusreguleerimine lihtsalt ei tööta! See tĂ€hendab, et kas ei pöördu ĂŒldse vĂ”i pöörleb maksimumi peal. Selline omadus, mille tĂ”ttu ma âtapnudâ paar Ă”htut. LĂ”puks leidsin mainimise kuskil ĂŒhel foorumil.
Ăldiselt vajasin madalat pöörlemiskiirust roboti pööramiseks â et tal oleks aega ruumi skaneerida. Kuid kuna sellisest ideest ei tulnud midagi vĂ€lja, pidi minema teistmoodi: vĂ€ike pööramine â peatumine â pööramine â peatumine ja nii edasi. JĂ€lle, mitte nii elegantne, kuid töökorras.
Lisaks mainin, et pÀrast iga jÀlitamist valib robot uue pöörde suuna juhuslikult (kella suunas vÔi vastupidi).
Ultraheli andur

Veel ĂŒks riist, kus pidi otsima kompromisslahendust. Ultraheli andur annab tegelike takistuste korral ebastabiilseid nĂ€itajaid. Tegelikult oli see ootuspĂ€rane. Ideaalselt töötab ta kuskil vĂ”istlustel, kus on siledad, tasased ja risti pinnad, kuid kui tema ees âvilguvadâ kellegi jalad â siis tuleb rakendada tĂ€iendavat töötlemist.
Sellise töötlemise puhul paigaldasin kolme mÔÔtmise jaoks. Reaalsete laste testide pĂ”hjal (katsete kĂ€igus ei kannatanud ĂŒkski laps!) oli see piisav andmete normaliseerimiseks. FĂŒĂŒsika on siin lihtne: meil on signaalid, mis on peegeldunud vajalikelt objektidelt (millel on vajalik kaugus) ja peegeldunud kaugematelt, nĂ€iteks seintelt. Teised esindavad juhuslikke kĂ”rvalekaldeid mÔÔtmistes nagu 45, 46, 230, 46, 46, 45, 45, 310, 46⊠Just neid mediaanfilter ja eemaldate.
PĂ€rast kogu töötlemist saame kauguse lĂ€hima objekti juurde. Kui see on vĂ€iksem teatud piirmÀÀrast, siis lĂŒlitame sisse hĂ€ire ja suundume otse "rikkuja" juurde.
Vilkuv tuli ja sireen
Need on vĂ”ib-olla kĂ”ige lihtsamad elemendid, mida siin loetletud. Nende vorme on nĂ€ha ĂŒlalolevatel fotodel. Varustusest ei ole mĂ”tet rÀÀkida, seega liigume nĂŒĂŒd edasi koodi.
Juhtimisprogramm
Koodi detailne kirja panemine ei tundu mĂ”ttekas, kes vajab â link artikli lĂ”pus, seal on kĂ”ik piisavalt arusaadav. KĂŒll aga oleks hea selgitada ĂŒldstruktuuri.
Esimene asi, mida pidin mĂ”istma: robot on reaalajas seade. TĂ€psemalt öeldes tuleb see meelde tuletada, kuna olen enamasti tegelenud elektroonikaga. Seega unustame kohe Ă€ra delay(), mida vĂ€ga armastatakse kasutada nĂ€idisteskeemides, ja mis lihtsalt "kĂŒlmutab" programmi mÀÀratud ajaperioodiks. Selle asemel, nagu soovitavad kogenud inimesed, kasutame igas plokis ajastajaid. Kui soovitud periood on möödas, siis teeme toimingu (suurendame LED valgustust, lĂŒlitame mootori sisse jne).
Ajastajad vĂ”ivad olla omavahel seotud. NĂ€iteks, helina töötamine toimub sĂŒnkroonselt vilkuva tulega. See lihtsustab programmi.
Muidugi jagame kÔik eraldi funktsioonideks (vilkuv tuli, heli, pöörde, edasiviimine jne). Kui seda ei tehta, siis hiljem ei saa enam aru, kust mis tuleb ja kuhu lÀheb.
Pedagoogika nĂŒansid
Kogu eelöeldut tegin ma oma vabal ajal Ôhtuti. Aeglasemas tempos kulus mul roboti peale umbes kolm nÀdalat. Sellega vÔikski lÔpetada, kuid lubasin teile ka rÀÀkida, kuidas töötada lastega. Mida on sellises eas vÔimalik teha?
Töö juhendiga
Iga detaili kontrollisime esmalt eraldi â LEDid, heliseja, mootori, andurid jne. On palju valmis nĂ€iteid â mĂ”ned otse arenduskeskkonnas, teised leiate internetist. See on kindlasti rÔÔmustav. VĂ”tame koodi, ĂŒhendame detaili, veendume, et see töötab, ja siis hakkame seda oma ĂŒlesande jaoks muutma. Laste ĂŒhendused vastavalt skeemile ja mu teatud kontrollile teevad nad ise. See on hea. TĂ€pselt juhendi jĂ€rgi töötamiseks peab samuti oskama.
Töökorraldus ("ĂŒldiselt konkreetse kaudu")
See, this is a complex point. One needs to get accustomed to the idea that a large project ("building a robot") consists of smaller tasks ("connecting the sensor", "connecting the motors", etc.), which, in turn, break down into even smaller steps ("find the program", "connect the board", "upload the firmware"). By tackling more or less understandable lower-level tasks, we 'close' the mid-level tasks, and from those, the overall result takes shape. I've explained this, but I think the understanding will come later, probably around the teenage years.
Paigaldamine
Drilling, threading, screws, nuts, soldering, and the smell of rosin â how could we do without this? The child has acquired the basic skill of 'Working with a soldering iron' â we managed to solder a few connections (I did help a bit, I won't deny). Do not forget about explaining safety techniques.
Working on the computer
I wrote the program for the robot, but we still managed to achieve some incidental results.
First: English. They just started teaching it at school, so we were 'struggling' with understanding what pishalka, migalka, yarkost, and other transliteration terms meant. At least we got that part. I consciously avoided using native English words, since we hadn't reached that level yet.
Second: effective work. We learned hotkey combinations for quickly performing standard operations. Periodically, when writing the program, my son and I switched places, and I explained what needed to be done (replacement, search, etc.). I had to repeat over and over: 'highlight by double-clicking', 'hold Shift', 'hold Ctrl', and so on. The learning process is not quick here, but I think the skills will gradually settle into 'the subconscious'.
Peidetud tekstYou might say that the above is almost obvious. But honestly, this fall I had the misfortune of teaching computer science to 9th graders in one school. It was terrible. The students don't know basic things like Ctrl + Z, Ctrl + C, and Ctrl + V, text highlighting while holding Shift, or double-clicking on a word, and more. This is after theyâve had three years of computer science education... You can draw your own conclusions.
Third: touch typing. I entrusted my child with typing comments in code (let them practice). We immediately positioned the hands correctly so that the fingers would gradually memorize the key placements.
As you can see, we're still just getting started. We will continue honing our skills and knowledge; they will come in handy in life.
By the way, about the perspective...
Edasine areng
Robot on tehtud, see sĂ”idab, vilgub ja piiksub. Mis nĂŒĂŒd edasi? Inspireerituna saavutatuist plaanime seda veel edasi arendada. On mĂ”te luua kaugjuhtimine - nagu kuulaht, oleks huvitav istuda mĂ”nel puldil ja juhtida roboti liikumist, mis liigub tĂ€iesti uues kohas. Kuid see on juba muu luguâŠ
Ja lÔpuks, pÔhimÔtteliselt, selle artikli kangelased (video lingil):
AitÀh tÀhelepanu eest!
â
Allikas: habr.com
