Üdvözöljük.
Ebben a cikkben szeretném bemutatni az első robotom összeszerelésének folyamatát az Arduino-n. Az anyag hasznos lesz más, hozzám hasonló kezdők számára, akik szeretnének készíteni valamilyen „önjáró kocsit”. A cikk a munkafázisokról szól, a különböző részleteim kiegészítéseivel. A végső kód hivatkozása (valószínűleg nem a legjobb) a cikk végén található.

Amennyire csak lehetett, bevontam a fiamat (8 éves). Arról, hogy mi működött az ő esetében és mi nem - erre egy részt szenteltem a cikkben, talán másoknak hasznos lesz.
A robot általános leírása
Először néhány szó magáról a robotról (ötlet). Nem akartam valami sablonosat összerakni a kezdetekben. Ugyanakkor a komponensek készlete meglehetősen standard volt - alváz, motorok, ultrahangos érzékelő, vonalkövető érzékelő, LED-ek, hangszóró. Először ebből a „levessel” egy robotot terveztem, amely őrzi a területét. A robot a körvonalat átlépő megsértő felé halad, majd visszatér a középpontba. Azonban ebben a változatban szükség volt egy rajzolt vonalra, plusz extra matematikára, hogy folyamatosan a körben maradhasson.
Ezért némi gondolkodás után az ötletet kicsit módosítottam, és úgy döntöttem, hogy vadászrobotot készítek. Kezdetben a saját tengelye körül forgolódik, hogy célt válasszon a közelben (embert). Ha az „áldozat” felfedezésre kerül, a „vadász” bekapcsolja a villogót és a szirénát, és elindul felé. Amikor az ember eltávolodik/elfut, a robot új célt választ, és követi azt, és így tovább. Ez a robot nem igényel korlátozott kört, és nyílt területen is tud működni.
Ahogy látja, ez nagyrészt hasonlít a „fogócska” játékra. Bár végül a robot nem lett elég fürge, de őszintén interakcióba lép a körülötte lévő emberekkel. Ezt különösen a gyerekek szeretik (néha úgy tűnik, mintha mindjárt eltapossák, ez a szívem is hevesen ver...). Úgy gondolom, hogy ez jó megoldás a műszaki tervezés népszerűsítésére.
A robot struktúrája
Tehát meghatároztuk az ötletet, lépjünk át a kialakításra. Az elemlista abból áll, amit a robotnak tudnia kell. Itt minden eléggé nyilvánvaló, ezért nézzük meg az számozást:

A robot's "brain" — the Arduino Uno board (1); it was part of a kit ordered from China. For our purposes, it is sufficient (we are focused on the number of pins used). From the same kit, we took a ready-made chassis (2), which mounts two drive wheels (3) and one rear wheel (freely rotating) (4). The kit also included a ready-made battery compartment (5). At the front of the robot is an ultrasonic sensor (HC-SR04) (6), at the back — a motor driver (L298N) (7), in the center — a flashing LED (8), and slightly off-center — a speaker (9).
During the assembly stage, we are looking to:
— ensure everything fits
— achieve balance
— ensure rational placement
Partially, this has already been done for us by our Chinese colleagues. Thus, the heavy battery compartment is placed in the center, and approximately beneath it are the drive wheels. All other boards are light, and they can be placed around the periphery.
Details:
- The chassis from the kit has many factory holes, but I couldn't figure out their logic. The motors and battery block were secured without issues; then came the adjustment phase with drilling new holes to secure various boards.
- Brass stands and other fasteners from the reserves were quite helpful (sometimes I had to improvise).
- I passed the wires from each board through the clamps (again, found them in the reserves). It's very convenient; all the wires lie neatly and do not hang loose.
Individual blocks
Now I will go through the blocks and tell about each one individually.
Battery compartment
It is clear that the robot needs a good power source. There can be different options; I chose the one with 4 AA batteries. Together, they provide about 5V, and this voltage can be fed directly to the 5V pin of the Arduino board (bypassing the regulator).
I did have some reservations, but this solution works fine.
Since power is needed everywhere, for convenience, I made two connectors in the center of the robot: one "distributes" ground (on the right), and the other — 5V (on the left).

Motors and driver
Először is, a motorok rögzítéséről. A rögzítés gyári, de nagy tűrésekkel készült. Más szóval, a motorok „jobbra-balra” eltérhetnek néhány millimétert. A feladatunk szempontjából ez nem kritikus, de valahol befolyásolhatja (a robot elkezdhet oldalra húzni). Mindenesetre a motorokat pontosan párhuzamosan állítottam be és ragasztóval rögzítettem.

A motorok vezérlésére, ahogy korábban említettem, az L298N meghajtót használják. A dokumentáció alapján minden motorhoz három érintkező tartozik: egy a sebesség változtatásához és egy pár az irány meghatározásához. Van itt egy fontos szempont. Kiderült, hogy ha a tápegység feszültsége 5 V, akkor a sebességszabályozás egyszerűen nem működik! Vagy egyáltalán nem forog, vagy maximálisan forog. Ez egy olyan jellemző, ami miatt „elvesztegettem” pár estémet. Végül találtam egy említést egy fórumon.
Általában alacsony fordulatra volt szükségem a robot megfordításakor - hogy legyen ideje bejárni a teret. De mivel ezzel a koncepcióval nem jutottam előre, másképp kellett csinálnom: kis fordulat - megállás - fordulat - megállás, és így tovább. Ismétlem, nem annyira elegáns, de működik.
Még hozzáteszem, hogy minden üldözés után a robot véletlenszerű irányt választ az új fordulathoz (óra járásával megegyező vagy ellentétes irányban).
Ultrahangos érzékelő

Még egy szerelvény, ahol kompromisszumos megoldást kellett keresni. Az ultrahangos érzékelő valós akadályok előtt instabil adatokat ad. Ezt várható volt. Tökéletesen működik versenyeken, ahol sima, egyenes és merőleges felületek vannak, de ha előtte „felvillannak” emberek lábai - ott további feldolgozást kell bevezetni.
Ennek a feldolgozásnak a részeként állítottam be három mérésből. A valós gyerekek tesztelése alapján (a tesztek alatt egyetlen gyermek sem sérült meg!), ez teljesen elegendőnek bizonyult az adatok normalizálásához. A fizika itt egyszerű: van egy jeleink, amelyek visszaverődnek a szükséges objektumokról (ezek adják meg a szükséges távolságot), és a távolabbi objekumokról, például falakról. Az utóbbiak véletlenszerű kiugrásokat okoznak a mérésekben, mint például 45, 46, 230, 46, 46, 45, 45, 310, 46… Ezeket a medián szűrő blokkolja.
A feldolgozás után megkapjuk a legközelebbi objektumhoz mért távolságot. Ha ez egy bizonyos küszöbérték alatt van, akkor aktiváljuk a riasztást és azonnal a "szabályszegőhöz" indulunk.
Villogó fény és sziréna
Valószínűleg a leggyakoribb elemek a felsoroltak közül. Ezek a fenti fényképeken is láthatók. Az elektronikai alkatrészekről nem sokat tudok írni, így most áttérünk a kódra.
A vezérlőprogram
Nem látom értelmét a kód részletes kiírásának, azt, akit érdekel, a cikk végén található hivatkozásban elolvashatja, ott elég érthető. Viszont az általános struktúrát jó lenne megmagyarázni.
Az első dolog, amit meg kellett értenem: a robot egy valós idejű eszköz. Pontosabban, emlékeznem kellett, mert régebben és most is foglalkozom elektronikával. Tehát azonnal elfelejtjük a delay(), amelyet nagyon szeretnek használni a példakódokban, és amely egyszerűen "megállítja" a programot az adott időtartamra. Ehelyett, ahogy tapasztalt emberek javasolják, időzítőket alkalmazunk minden blokkhoz. Elérve a szükséges időtartamot — végrehajtunk egy műveletet (megnöveljük a LED fényerejét, bekapcsoljuk a motort, stb.).
Az időzítők összefonódhatnak. Például a sípoló szinkronban működik a villogóval. Ez egy kicsit leegyszerűsíti a programot.
Természetesen mindent külön funkciókra bontunk (villogó, hang, fordulás, előrehaladás stb.). Ha nem így teszünk, később már nem tudjuk, hogy mi honnan jön és hová megy.
Pedagógiai finomságok
Minden, amit fentebb említettem, szabadidőmben, esténként csináltam. Lassan, körülbelül három hetet töltöttem a robottal. Ezen akár meg is állhatnék, de még ígértem, hogy beszélek a gyermekkel való munkáról. Mit lehet tenni ilyen korban?
Munka az útmutató alapján
Minden egyes alkatrészt először külön-külön ellenőriztünk — LED-ek, sípoló, motorok, érzékelők stb. Rengeteg kész példa létezik — egyesek közvetlenül a fejlesztői környezetben, másokat az interneten találhatunk. Ez kétségtelenül örömteli. Elvesszük a kódot, csatlakoztatjuk az alkatrészt, meggyőződünk arról, hogy működik, majd máris elkezdjük módosítani a saját feladatunk szerint. A kapcsolásokat a séma alapján, részben az irányításom alatt a gyermek maga végzi. Ez jó. A pontos utasítások követését is meg kell tanulni.
Munkafolyamat rendje ("a konkréttól az általánosig")
Ez egy bonyolult pont. Meg kell tanulni, hogy a nagy projekt ("robot készítése") apróbb feladatokból ("érzékelő csatlakoztatása", "motorok csatlakoztatása" ...) áll, amelyek viszont még apróbb lépésekre ("program keresése", "tábla csatlakoztatása", "firmware betöltése" ...) bonthatók. Az alsó szintű, valamennyire érthető feladatok végrehajtásával "lezárjuk" a középső szintű feladatokat, amelyekből már összeáll a végső eredmény. Magyaráztam, de azt hiszem, a megértés még nem jön el hamarosan. Valahol talán a serdülőkor környékén.
Szerelés
Fúrás, menetek, csavarok, anyák, forrasztás és a colofonium szaga – hogy is lenne ez nélküle. A gyerek megszerezte az alap "Forrasztópáka használata" készséget – sikerült néhány csatlakozást forrasztania (egy kicsit segítettem, nem tagadom). Ne feledkezzünk meg a biztonsági előírások magyarázatáról sem.
Munka a számítógépen
A robothoz a programot én írtam, de néhány mellékes eredmény elérésére is sikerült sort keríteni.
Első: angol. Az iskolában épp csak elkezdték tanulni, így "nehezen" fésültük ki, mi az a pishalka, migalka, yarkost és egyéb transliterált szavak. Legalább ezt megértettük. Tudatosan nem használtam az angol szavakat, mivel még nem értünk el arra a szintre.
Második: hatékony munka. Megtanultuk a gyors billentyűkombinációkat, hogyan kell gyorsan végrehajtani az ismétlődő műveleteket. Időnként, amikor a programot írtuk, a fiam helyet cseréltünk, és mondtam, mit kell csinálni (cserét, keresést stb.). Folyamatosan ismételgettem: "jelöld ki dupla kattintással", "tartsd lenyomva a Shift-et", "tartsd lenyomva a Ctrl-t" és így tovább. Az oktatás folyamata nem gyors, de úgy gondolom, a készségek fokozatosan "beépülnek az alványba".
Rejtett szövegAzt mondhatod, hogy a fent leírtak szinte nyilvánvalóak. De őszintén, ezen a télen infóórát kellett tartanom a 9. osztályosoknak egy iskolában. Ez borzalmas. A diákok nem tudják az olyan alap dolgokat, mint a Ctrl + Z, Ctrl + C és Ctrl + V, a szöveg kijelölése Shift lenyomva tartásával vagy dupla kattintással a szón, és így tovább. Ez annak ellenére, hogy már három éve tanulnak informatikát... Levonhatod a következtetést magad.
Harmadik: gépelés vakon. A kódokban való megjegyzéseket a gyereknek bíztam, hogy gyakoroljon. Azonnal helyesen állítottuk be a kezét, hogy az ujjak fokozatosan megjegyezzék a billentyűk elhelyezkedését.
Ahogy látod, nálunk még csak most kezdődnek a dolgok. A készségeket és ismereteket tovább fogjuk csiszolni, hasznosak lesznek az életben.
Az előnyökről és a kilátásokról...
További fejlesztés
A robot kész, működik, villog és sípol. Mi jöhet most? Az elért eredmények inspirálásával tervezzük, hogy tovább fejlesztjük. Van egy ötletem, hogy távirányítót készítsünk – úgy, mint a holdjáró. Érdekes lenne, hogy egy fiktív pult mögött ülve irányítsuk a robot mozgását, amely teljesen más helyen közlekedik. De ez már egy másik történet...
És a végén, a cikk hősei (videó a kattintásra):
Köszönöm a figyelmet!
→
Forrás: habr.com
