Hej.
I denne artikel vil jeg beskrive processen for at samle min første robot med Arduino. Materialet vil være nyttigt for andre nybegyndere som mig, der ønsker at lave en "selvkørende vogn". Artiklen er en beskrivelse af arbejdets faser med mine tilføjelser om forskellige nuancer. Link til den endelige kode (formodentlig ikke den mest perfekte) findes i slutningen af artiklen.

Så vidt muligt har jeg inddraget min søn (8 år) i processen. Hvad vi opnåede sammen, og hvad der ikke lykkedes - det har jeg afsat en del af artiklen til, måske vil nogen finde det nyttigt.
Generel beskrivelse af robotten
Først et par ord om selve robotten (idé). Jeg havde ikke rigtig lyst til at samle noget standard i starten. Samtidig var komponenterne ret standard - chassiset, motorerne, ultralydssensoren, linjesensoren, lysdioderne, og buzzeren. Fra dette "suppe-sæt" blev der oprindeligt opfundet en robot, der beskytter sit territorium. Den kører efter den indtrængende, der krydsede linjen i cirklen, og vender derefter tilbage til centret. Dog krævede denne variant en tegnet linje og lidt for meget matematik for at holde sig inden for cirklen.
Derfor ændrede jeg efter nogle overvejelser ideen og besluttede at lave en "jæger"-robot. I starten drejer den rundt om sin egen akse for at finde en nærmeste måltavle (et menneske). Hvis "ofret" opdages, tænder "jægeren" lygten og sirenen og begynder at køre mod det. Når personen trækker sig tilbage, vælger robotten et nyt mål og forfølger det, og sådan fortsætter det. En sådan robot har ikke brug for en begrænset cirkel og kan fungere på åbent terræn.
Som I kan se, minder det meget om legen "fangeleg". Selvom robotten ikke blev særlig kvik, interagerer den ærligt med de mennesker, der omgiver den. Børnene elsker det især (nogle gange ser det bare ud til, at de næsten vil trampe på den, hvilket får mit hjerte til at springe et slag…). Jeg mener, at dette er en god løsning til at popularisere teknisk konstruktion.
Robotstruktur
Så vi har besluttet os for ideen, lad os gå videre til layouten. Elementslisten dannes ud fra, hvad robotten skal kunne. Her er alt klart, så lad os straks se på nummereringen:

Robotens "hjerne" er et Arduino Uno-kort (1), der var en del af et kit bestilt fra Kina. Til vores formål er det helt tilstrækkeligt (fokuserer på antallet af anvendte pins). Fra det samme kit tog vi et færdigt chassi (2), hvorpå der er monteret to drivhjul (3) og et baghjul (som roterer frit) (4). Derudover var der en færdig batteriholder (5) i kittet. Foran på robotten sidder der en ultralydssensor (HC-SR04) (6), bagpå - motor-driver (L298N) (7), i midten - en blinkende LED (8), og lidt til siden - en piezo-buzzer (9).
I samlingsfasen ser vi på:
— at alt kan være der
— at det er balanceret
— at det er rationelt placeret
Delvist har vores kinesiske kolleger allerede gjort dette for os. Så batteriholderen er placeret i midten, og de drivhjul står cirka under den. Alle andre kort er lette, så de kan placeres i periferien.
Nuancer:
- I chassiset fra kittet er der mange fabriksforbundne huller, men jeg har ikke forstået logikken bag dem. Motorerne og batteripakken blev let fastgjort, men så begyndte "tilpasningen" med boring af nye huller for at fastgøre hvert enkelt kort.
- De messingstøtter og andet beslag fra reservedelene har været til stor hjælp (nogle gange måtte jeg tænke kreativt).
- Jeg lod ledningerne fra hvert kort gå gennem klemmerne (som jeg også fandt i reservedelene). Meget praktisk, alle kabler ligger pænt og dingler ikke.
Separate enheder
Nu vil jeg gennemgå enhederne og fortælle personligt om hver enkelt.
Batteriholder
Det er klart, at robotten skal have en god strømkilde. Mulighederne kan være mange, men jeg valgte en løsning med 4 AA-batterier. I alt giver de cirka 5 V, og denne spænding kan direkte tilsluttes pin 5V på Arduino-kortet (uden at gå gennem regulatoren).
Jeg var lidt skeptisk, men denne løsning fungerer helt fint.
Da strøm er nødvendigt alle steder, lavede jeg to stik i midten af robotten for bekvemmelighed: et "fordeler" jorden (til højre), og den anden - 5 V (til venstre).

Motorer og driver
Først om motorbefestelsen. Befestelsen er fabrikkmontert, men laget med store toleranser. Med andre ord, motorene kan "vingle" et par millimeter til venstre og høyre. For vårt oppdrag er dette ikke kritisk, men det kan påvirke noen steder (roboten kan begynne å dra i én retning). Bare for sikkerhets skyld har jeg justert motorene helt parallelt og festet dem med lim.

Til å styre motorene, som jeg nevnte tidligere, brukes L298N-driveren. Ifølge dokumentasjonen har den tre pinner for hver motor: en for å endre hastighet og et par pinner for rotasjonsretning. Her er det ett viktig poeng. Det viser seg at hvis forsyningsspenningen er 5 V, fungerer ikke hastighetsreguleringen i det hele tatt! Det vil si, den snurrer ikke i det hele tatt, eller snurrer med maks hastighet. Dette er en spesiell egenskap som fikk meg til å "ødelegge" et par kvelder. Til slutt fant jeg en omtale et sted på et av forumene.
Generelt sett trengte jeg lav rotasjonshastighet når roboten snudde — for at den skulle ha tid til å skanne rommet. Men siden det ikke fungerte, måtte jeg gjøre det annerledes: lite sving — stopp — sving — stopp og så videre. Igjen, ikke så elegant, men funksjonelt.
Jeg vil også legge til her at etter hver forfølgelse velger roboten en tilfeldig retning for den nye svingen (med eller mot klokka).
Ultralydsensor

En annen dings hvor jeg måtte finne en kompromissløsning. Ultralydsensoren gir ustabile tall på virkelige hindringer. Dette var egentlig forventet. Den fungerer perfekt på konkurranser hvor overflatene er glatte, jevne og perpendikulære, men hvis det "blinker" med noen ben foran den — må det innføres ekstra behandling.
Som en slik behandling har jeg brukt med tre målinger. Basert på tester på virkelige barn (ingen barn ble skadd under testene!), viste det seg å være mer enn tilstrekkelig for normalisering av data. Fysikken her er enkel: vi har signaler reflektert fra de nødvendige objektene (som gir ønsket avstand) og reflektert fra mer fjerne, for eksempel vegger. De siste representerer tilfeldige utfall i målingene som 45, 46, 230, 46, 46, 45, 45, 310, 46… Nettopp dem filtrerer medianfilteret bort.
Efter al behandlingen får vi afstanden til den nærmeste genstand. Hvis den er mindre end en bestemt tærskelværdi, aktiverer vi alarmen og kører direkte mod "forbryderen".
Blinker og sirene
Det er nok de simpleste elementer blandt alt det nævnte. De kan ses på billederne ovenfor. Der er ikke meget at sige om hardwaren her, så lad os gå videre til koden.
Styringsprogrammet
Jeg vil ikke gå i dybden med koden, da jeg mener, at linket i slutningen af artiklen giver en tilstrækkelig læselig forklaring. Men det ville være godt at forklare den overordnede struktur.
Det første, jeg måtte forstå: Robotten er en realtidsenhed. Egentlig, skulle jeg huske, for jeg har altid beskæftiget mig med elektronik, både før og nu. Så glem straks delay(), som mange elsker at bruge i eksempler, og som blot "fryser" programmet i en angivet tidsperiode. I stedet, som erfarne folk anbefaler, indfører vi timere til hver blok. Når den krævede periode er gået, udfører vi handlingen (øger lysstyrken af LED'en, tænder motoren osv.).
Timere kan være indbyrdes forbundne. For eksempel arbejder piezo-højttaleren synkront med blinkeren. Det gør programmet lidt lettere.
Selvfølgelig opdeler vi alt i separate funktioner (blinker, lyd, drej, køre fremad osv.). Hvis man ikke gør det, bliver det umuligt at forstå, hvad der kommer hvorfra.
Nuancer af pædagogik
Alt det, der er beskrevet ovenfor, lavede jeg i min fritid om aftenen. I et afslappet tempo brugte jeg omkring tre uger på robotten. Nu kunne vi afslutte her, men jeg har også lovet at fortælle jer om arbejdet med et barn. Hvad kan man gøre i den alder?
Arbejdet efter instruktionen
Vi kontrollerede hver komponent for sig — lysdioder, piezo, motorer, sensorer osv. Der er et stort antal færdige eksempler — nogle direkte i udviklingsmiljøet, andre kan findes på internettet. Det er bestemt opmuntrende. Vi tager koden, tilslutter komponenten, sikrer os, at den fungerer, og så begynder vi at ændre den til vores opgave. Tilslutningerne følger skemaet og under en del af min kontrol laver barnet dem selv. Det er godt. Man skal også kunne arbejde præcist efter instruktionen.
Arbejdsprocessen ("fra det specielle til det generelle")
Dette er et komplekst punkt. Det er vigtigt at lære, at et stort projekt ("bygge en robot") består af mindre opgaver ("tilslutte sensoren", "tilslutte motorerne" osv.), og disse igen består af endnu mindre trin ("find programmet", "tilslut kredsboardet", "upload firmware" osv.). Ved at udføre mere eller mindre klare opgaver i lavere niveauer "lukker" vi opgaverne på mellem-niveau, og derfra opnår vi det samlede resultat. Jeg har forklaret det, men jeg tror, indsigten ikke vil komme lige med det samme. Måske først i teenageårene.
Montering
Boringen, gevind, skruer, møtrikker, lodning og duften af rosin – hvordan skulle vi klart klare os uden dette. Barnet har opnået basisk færdighed "arbejde med loddekolbe" – vi fik loddet nogle forbindelser (jeg hjalp lidt, skal jeg ikke skjule). Husk ikke at glemme at forklare sikkerhedsteknikker.
Arbejdet på computeren
Jeg skrev programmet til robotten, men jeg formåede stadig at opnå nogle utilsigtede resultater.
Først: engelsk. I skolen begyndte de lige først, så vi "kæmpede" os igennem, hvad pishalka, migalka, yarkost og anden translitteration var. Vi forstod i det mindste dette. Jeg valgte bevidst ikke at bruge de kendte engelske ord, da vi ikke er nået til det niveau endnu.
For det andet: effektivt arbejde. Vi lærte de hurtige tastekombinationer, hvordan man hurtigt udfører standardoperationer. Periodisk, når vi skrev programmet, skiftede min søn og jeg pladser, og jeg sagde, hvad der skulle gøres (erstatning, søgning osv.). Jeg måtte gentage igen og igen: "markér med dobbeltklik", "hold Shift nede", "hold Ctrl nede" osv. Læringsprocessen her er ikke hurtig, men jeg tror, færdighederne gradvist vil blive indkodet i "hjernen".
Skjult tekstDu kan sige, at det ovenfor beskrevne er næsten indlysende. Men ærligt talt, denne efterår havde jeg fornøjelsen af at undervise i IT i 9. klasse på en skole. Det er skrækkeligt. Eleverne kender ikke sådanne elementære ting som Ctrl + Z, Ctrl + C og Ctrl + V, at markere tekst ved at holde Shift nede eller dobbeltklikke på et ord og meget mere. Dette er på trods af at de allerede har haft tre års undervisning i IT... Drag dine egne konklusioner.
For det tredje: blind skrivning. Jeg lod barnet skrive kommentarer i koden (lad os træne). Vi placerede straks hænderne korrekt, så fingrene gradvist kunne huske tastenes placering.
Som du kan se, er vi stadig kun lige begyndt. Vi vil fortsætte med at forfine færdighederne og viden, de vil komme til nytte i livet.
For øvrigt, om fremtiden...
Fremtidig udvikling
Robotten er færdig, kører, blinker og piver. Hvad så nu? Inspireret af det opnåede planlægger vi at videreudvikle den. Vi har en idé om at lave fjernstyring - ligesom en månerobot. Det ville være interessant at kontrollere robotens bevægelse fra en hypotetisk kontrolpult, mens den kører et helt andet sted. Men det vil være en anden historie ...
Og til sidst, hovedpersonerne i denne artikel (video ved klik):
Tak for din opmærksomhed!
→
Kilde: habr.com
