Erfaring med at skabe den første robot på Arduino (robot "jæger")

Hej

I denne artikel vil jeg beskrive processen med at samle min første robot ved hjælp af Arduino. Materialet vil være nyttigt for andre begyndere som mig, der ønsker at lave en slags "selvkørende vogn." Artiklen er en beskrivelse af stadierne i arbejdet med mine tilføjelser om forskellige nuancer. Et link til den endelige kode (sandsynligvis ikke den mest ideelle) er givet i slutningen af ​​artiklen.

Erfaring med at skabe den første robot på Arduino (robot "jæger")

Når det var muligt, involverede jeg min søn (8 år) i at deltage. Hvad der præcist fungerede med det, og hvad gjorde det ikke - jeg har dedikeret en del af artiklen til dette, måske vil det være nyttigt for nogen.

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 sættet af komponenter ret standard - chassis, motorer, ultralydssensor, linjesensor, LED'er, diskanthøjttaler. Oprindeligt blev en robot opfundet ud fra dette "suppesæt", der bevogter sit territorium. Han kører hen mod gerningsmanden, der har krydset cirkellinjen, og vender derefter tilbage til midten. Denne version krævede dog en tegnet linje plus ekstra matematik for at blive i cirklen hele tiden.

Derfor ændrede jeg tanken noget og besluttede mig for at lave en "jæger"-robot. I starten drejer den om sin akse og vælger et nærliggende mål (person). Hvis "byttet" opdages, tænder "jægeren" de blinkende lys og sirene og begynder at køre hen imod det. Når personen bevæger sig væk/løber væk, vælger robotten et nyt mål og forfølger det, og så videre. Sådan en robot behøver ikke en begrænset cirkel, og den kan arbejde i åbne områder.

Som du kan se, minder dette meget om et indhentningsspil. Selvom robotten i sidste ende ikke viste sig at være hurtig nok, interagerer den ærligt med folkene omkring den. Børn kan især lide det (nogle gange ser det dog ud til, at de er ved at trampe på det, deres hjerte springer et slag...). Jeg synes, dette er en god løsning til at popularisere teknisk design.

Robot struktur

Så vi har besluttet os for ideen, lad os gå videre til layout. Listen over elementer er dannet ud fra, hvad robotten skal kunne. Alt her er ret indlysende, så lad os straks se på nummereringen:

Erfaring med at skabe den første robot på Arduino (robot "jæger")

Robottens "hjerne" er et arduino uno-bræt (1); var i et sæt bestilt fra Kina. Til vores formål er det ganske nok (vi fokuserer på antallet af brugte ben). Fra det samme sæt tog vi et færdiglavet chassis (2), hvorpå to drivhjul (3) og et baghjul (frit roterende) (4) er fastgjort. Sættet indeholdt også et færdiglavet batterirum (5). Foran robotten er der en ultralydssensor (HC-SR04) (6), bagpå er der en motordriver (L298N) (7), i midten er der en LED-blink (8), og lidt til på siden er der en diskanthøjttaler (9).

På layoutstadiet ser vi på:

- så alt passer
- at være afbalanceret
- at være rationelt placeret

Vores kinesiske kolleger har allerede delvist gjort dette for os. Så det tunge batterirum er placeret i midten, og drivhjulene er placeret omtrent under det. Alle andre brædder er lette og kan placeres i periferien.

Nuancer:

  1. Chassiset fra sættet har mange fabrikshuller, men jeg har stadig ikke fundet ud af, hvad logikken er i dem. Motorer og batteripakke blev sikret uden problemer, så begyndte “justeringen” med at bore nye huller for at sikre det ene eller det andet bræt.
  2. Messingstativerne og andre fastgørelsesanordninger fra opbevaringsområder var en stor hjælp (nogle gange var vi nødt til at få dem ud).
  3. Jeg førte samleskinnerne fra hvert bræt gennem klemmerne (igen, jeg fandt dem på lager). Meget praktisk, alle ledningerne ligger pænt og dingler ikke.

Individuelle blokke

Nu går jeg igennem blokke og jeg vil fortælle dig personligt om hver enkelt.

batterirum

Det er klart, at robotten skal have en god energikilde. Valgmulighederne kan variere, jeg valgte muligheden med 4 AA-batterier. I alt giver de cirka 5 V, og denne spænding kan tilføres direkte til 5V-pinden på arduino-kortet (omgå stabilisatoren).

Selvfølgelig var jeg lidt forsigtig, men denne løsning er ganske brugbar.

Da der er brug for strøm overalt, lavede jeg for nemheds skyld to stik i midten af ​​robotten: den ene "fordeler" jorden (til højre), og den anden - 5 V (til venstre).

Erfaring med at skabe den første robot på Arduino (robot "jæger")

Motorer og chauffør

Først om montering af motorerne. Beslaget er fabriksfremstillet, men lavet med store tolerancer. Med andre ord kan motorerne slingre et par millimeter til venstre og højre. For vores opgave er dette ikke kritisk, men nogle steder kan det have en effekt (robotten vil begynde at bevæge sig til siden). For en sikkerheds skyld indstillede jeg motorerne strengt parallelt og fikserede dem med lim.

Erfaring med at skabe den første robot på Arduino (robot "jæger")

For at styre motorerne, som jeg skrev ovenfor, bruges L298N driveren. Ifølge dokumentationen har den tre stifter til hver motor: en til at ændre hastigheden og et par stifter til omdrejningsretningen. Der er en vigtig pointe her. Det viser sig, at hvis forsyningsspændingen er 5 V, så virker hastighedskontrollen simpelthen ikke! Det vil sige, enten vender den slet ikke, eller også drejer den maksimalt. Dette er den funktion, der fik mig til at "dræbe" et par aftener. Til sidst fandt jeg en omtale et sted på et af foraerne.

Generelt havde jeg brug for en lav rotationshastighed, når jeg drejede robotten - så den havde tid til at scanne rummet. Men da der ikke kom noget ud af denne idé, var jeg nødt til at gøre det anderledes: et lille sving - stop - drej - stop osv. Igen, ikke så elegant, men brugbart.

Jeg vil også tilføje her, at efter hver forfølgelse vælger robotten en tilfældig retning for et nyt sving (med eller mod uret).

ultralydssensor

Erfaring med at skabe den første robot på Arduino (robot "jæger")

Endnu et stykke hardware, hvor vi skulle lede efter en kompromisløsning. Ultralydssensoren producerer ustabile tal på rigtige forhindringer. Faktisk var dette forventet. Ideelt set fungerer det et sted i konkurrencer, hvor der er glatte, jævne og vinkelrette overflader, men hvis nogens ben "blinker" foran det, skal der indføres yderligere behandling.

Som sådan forarbejdning sætter jeg median filter for tre tæller. Baseret på tests på rigtige børn (ingen børn kom til skade under testene!), viste det sig at være ganske tilstrækkeligt til at normalisere dataene. Fysikken her er enkel: Vi har signaler reflekteret fra nødvendig genstande (der giver den nødvendige afstand) og reflekteres fra fjernere, for eksempel vægge. Sidstnævnte er tilfældige emissioner i målinger af formen 45, 46, 230, 46, 46, 45, 45, 310, 46... Det er disse, som medianfilteret afskærer.

Efter al bearbejdningen får vi afstanden til den nærmeste genstand. Hvis det er mindre end en vis tærskelværdi, så tænder vi for alarmen og kører lige mod "indtrængen".

Blinklys og sirene

Måske de enkleste elementer af alle ovenstående. De kan ses på billederne ovenfor. Der er ikke noget at skrive om hardware her, så lad os nu gå videre til kode.

Kontrolprogram

Jeg kan ikke se meningen med at beskrive koden i detaljer, hvem har brug for den - linket er i slutningen af ​​artiklen, alt er ret læseligt der. Men det ville være rart at forklare den generelle struktur.

Det første, vi skulle forstå, var, at en robot er en enhed i realtid. Mere præcist at huske, for både før og nu arbejder jeg stadig med elektronik. Så vi glemmer straks udfordringen forsinke(), som de elsker at bruge i eksempler på skitser, og som simpelthen "fryser" programmet i en bestemt periode. I stedet, som erfarne folk rådgiver, introducerer vi timere for hver blok. Det krævede interval er passeret - handlingen er blevet udført (forøget lysstyrken på LED'en, tændt for motoren og så videre).

Timere kan sammenkobles. For eksempel arbejder diskanthøjttaleren synkront med blinkeren. Dette forenkler programmet lidt.

Naturligvis opdeler vi alt i separate funktioner (blinkende lys, lyd, drejning, bevægelse fremad og så videre). Hvis du ikke gør dette, vil du ikke være i stand til at finde ud af, hvad der kommer fra hvor og hvor.

Nuancer af pædagogik

Jeg lavede alt beskrevet ovenfor i min fritid om aftenen. På en afslappet måde tilbragte jeg omkring tre uger på robotten. Det kunne være endt her, men jeg lovede også at fortælle dig om arbejdet med et barn. Hvad kan man gøre i denne alder?

Arbejd efter instruktionerne

Vi tjekkede først hver detalje separat - LED'er, diskant, motorer, sensorer osv. Der er en lang række færdige eksempler - nogle lige i udviklingsmiljøet, andre kan findes på internettet. Dette gør mig bestemt glad. Vi tager koden, forbinder delen, sikrer os, at den virker, så begynder vi at ændre den, så den passer til vores opgave. Barnet laver forbindelserne i henhold til diagrammet og under noget af mit opsyn. Det er godt. Du skal også kunne arbejde strengt efter instruktionerne.

Arbejdsrækkefølge ("fra bestemt til almen")

Dette er en svær pointe. Du skal lære, at et stort projekt ("lave en robot") består af små opgaver ("tilslut en sensor", "tilslut motorer"...), og de består til gengæld af endnu mindre trin ("find en program," "tilslut et kort." ", "download firmware"...). Ved at udføre mere eller mindre forståelige opgaver på det lavere niveau "lukker" vi opgaverne på mellemniveauet, og ud fra dem dannes det samlede resultat. Jeg forklarede, men jeg tror, ​​at erkendelsen ikke kommer snart. Et eller andet sted, sandsynligvis i ungdomsårene.

Installation

Boring, gevind, skruer, møtrikker, lodning og duften af ​​kolofonium - hvor ville vi være uden det? Barnet modtog den grundlæggende færdighed "At arbejde med et loddejern" - han formåede at lodde flere forbindelser (jeg hjalp lidt, jeg vil ikke skjule det). Glem ikke sikkerhedsforklaringen.

Computer arbejde

Jeg skrev programmet til robotten, men det lykkedes mig alligevel at opnå nogle gunstige resultater.

Først: engelsk. De var lige begyndt på det i skolen, så vi kæmpede for at finde ud af, hvad pishalka, migalka, yarkost og andre translitterationer var. Det forstod vi i hvert fald. Jeg brugte bevidst ikke indfødte engelske ord, da vi endnu ikke har nået dette niveau.

For det andet: effektivt arbejde. Vi lærte hurtigtastkombinationer og hvordan man hurtigt udfører standardhandlinger. Med jævne mellemrum, når vi skrev programmet, byttede min søn og jeg plads, og jeg sagde, hvad der skulle gøres (udskiftning, søgning osv.). Jeg var nødt til at gentage igen og igen: "dobbeltklik på vælg", "hold Shift", "hold Ctrl" og så videre. Læringsprocessen her er ikke hurtig, men jeg tror, ​​at færdighederne gradvist vil blive deponeret "i subcortex."

Skjult tekstMan kan sige, at ovenstående er næsten indlysende. Men helt ærligt, så havde jeg i efteråret mulighed for at undervise i datalogi i 9. klasse på én skole. Det er forfærdeligt. Eleverne ved ikke så grundlæggende ting som Ctrl + Z, Ctrl + C og Ctrl + V, markere tekst, mens de holder Shift nede eller dobbeltklikker på et ord, og så videre. Det på trods af, at de var i gang med deres tredje år på datalogi... Træk din egen konklusion.

For det tredje: berøringstastning. Jeg betroede kommentarerne i koden til barnet at skrive (lad ham øve sig). Vi placerede straks vores hænder korrekt, så vores fingre efterhånden huskede placeringen af ​​nøglerne.

Som du kan se, er vi stadig lige i gang. Vi vil fortsætte med at finpudse vores færdigheder og viden; de vil være nyttige i livet.

Forresten, om fremtiden...

Yderligere udvikling

Robotten er lavet, kører, blinker og bipper. Hvad nu? Inspireret af det, vi har opnået, planlægger vi at forfine det yderligere. Der er en idé at lave en fjernbetjening – som en månerover. Det ville være interessant at sidde ved en fjernbetjening at styre bevægelsen af ​​en robot, der kører et helt andet sted. Men det bliver en anden historie...

Og til sidst, faktisk heltene i denne artikel (video ved at klikke):

Erfaring med at skabe den første robot på Arduino (robot "jæger")

Tak for din opmærksomhed!

Kode link

Kilde: www.habr.com

Tilføj en kommentar