Erfaring med å lage den første roboten på Arduino (robot "jeger")

Hallo

I denne artikkelen vil jeg beskrive prosessen med å sette sammen min første robot ved hjelp av Arduino. Materialet vil være nyttig for andre nybegynnere som meg som ønsker å lage en slags "selvløpende vogn." Artikkelen er en beskrivelse av stadiene i arbeidet med mine tillegg på ulike nyanser. En lenke til den endelige koden (mest sannsynlig ikke den mest ideelle) er gitt på slutten av artikkelen.

Erfaring med å lage den første roboten på Arduino (robot "jeger")

Når det var mulig, involverte jeg sønnen min (8 år) i å delta. Hva fungerte nøyaktig med det og hva som ikke gjorde det - jeg har dedikert en del av artikkelen til dette, kanskje det vil være nyttig for noen.

Generell beskrivelse av roboten

Først noen ord om selve roboten (ideen). Jeg ville egentlig ikke sette sammen noe standard i starten. Samtidig var settet med komponenter ganske standard - chassis, motorer, ultralydsensor, linjesensor, lysdioder, diskanthøyttaler. Opprinnelig ble en robot oppfunnet fra dette "suppesettet" som vokter territoriet. Han kjører mot lovbryteren som har krysset sirkellinjen, og går så tilbake til sentrum. Denne versjonen krevde imidlertid en tegnet linje, pluss ekstra matematikk for å holde seg i sirkelen til enhver tid.

Derfor, etter litt omtanke, endret jeg ideen noe og bestemte meg for å lage en "jeger"-robot. Ved starten snur den rundt sin akse og velger et nærliggende mål (person). Hvis "byttet" oppdages, slår "jegeren" på blinklysene og sirenen og begynner å kjøre mot det. Når personen beveger seg bort/løper, velger roboten et nytt mål og forfølger det, og så videre. En slik robot trenger ikke en begrenset sirkel, og den kan fungere i åpne områder.

Som du kan se, er dette mye som et innhentingsspill. Selv om roboten til slutt ikke viste seg å være rask nok, samhandler den ærlig med menneskene rundt den. Barn liker det spesielt godt (noen ganger ser det imidlertid ut til at de er i ferd med å tråkke på det, hjertet hopper over et slag...). Jeg tror dette er en god løsning for å popularisere teknisk design.

Robotstruktur

Så vi har bestemt oss for ideen, la oss gå videre til oppsett. Listen over elementer er dannet ut fra hva roboten skal kunne. Alt her er ganske åpenbart, så la oss umiddelbart se på nummereringen:

Erfaring med å lage den første roboten på Arduino (robot "jeger")

Robotens "hjerner" er et arduino uno-brett (1); var i et sett bestilt fra Kina. For våre formål er det ganske nok (vi fokuserer på antall pinner som brukes). Fra det samme settet tok vi et ferdig chassis (2), hvor to drivhjul (3) og ett bak (fritt roterende) (4) er festet. Settet inkluderte også et ferdig batterirom (5). Foran roboten er det en ultralydsensor (HC-SR04) (6), bak er det en motordriver (L298N) (7), i midten er det en LED-blink (8), og litt til på siden er det en diskanthøyttaler (9).

På layoutstadiet ser vi på:

– slik at alt passer
- å være balansert
- å være rasjonelt plassert

Våre kinesiske kolleger har allerede delvis gjort dette for oss. Så det tunge batterirommet er plassert i midten, og drivhjulene er plassert omtrent under det. Alle andre brett er lette og kan plasseres i periferien.

nyanser:

  1. Chassiset fra settet har mange fabrikkhull, men jeg har fortsatt ikke funnet ut hva logikken er i dem. Motorene og batteripakken ble sikret uten problemer, så begynte "justeringen" med å bore nye hull for å sikre dette eller hint brettet.
  2. Messingstativene og andre festemidler fra lagringsområder var til stor hjelp (noen ganger måtte vi få dem ut).
  3. Jeg førte samleskinnene fra hvert brett gjennom klemmene (igjen fant jeg dem på lager). Veldig praktisk, alle ledningene ligger pent og dingler ikke.

Individuelle blokker

Nå skal jeg gå gjennom blokker og jeg vil fortelle deg personlig om hver enkelt.

batterirom

Det er klart at roboten må ha en god energikilde. Alternativene kan variere, jeg valgte alternativet med 4 AA-batterier. Totalt gir de omtrent 5 V, og denne spenningen kan tilføres direkte til 5V-pinnen på arduino-kortet (omgå stabilisatoren).

Selvfølgelig var jeg litt forsiktig, men denne løsningen er ganske gjennomførbar.

Siden strøm er nødvendig overalt, laget jeg for enkelhets skyld to kontakter i midten av roboten: den ene "fordeler" bakken (til høyre), og den andre - 5 V (til venstre).

Erfaring med å lage den første roboten på Arduino (robot "jeger")

Motorer og sjåfør

Først om montering av motorene. Festet er fabrikklaget, men laget med store toleranser. Motorene kan med andre ord vingle et par millimeter til venstre og høyre. For vår oppgave er dette ikke kritisk, men enkelte steder kan det ha effekt (roboten vil begynne å bevege seg til siden). I tilfelle satte jeg motorene strengt parallelt og festet dem med lim.

Erfaring med å lage den første roboten på Arduino (robot "jeger")

For å kontrollere motorene, som jeg skrev ovenfor, brukes L298N-driveren. I følge dokumentasjonen har den tre pinner for hver motor: en for å endre hastigheten og et par pinner for rotasjonsretningen. Det er ett viktig poeng her. Det viser seg at hvis forsyningsspenningen er 5 V, så fungerer hastighetskontrollen rett og slett ikke! Det vil si, enten snur den ikke i det hele tatt, eller så snur den seg maksimalt. Dette er funksjonen som fikk meg til å "drepe" et par kvelder. Til slutt fant jeg en omtale et sted på et av forumene.

Generelt sett trengte jeg en lav rotasjonshastighet når jeg snudde roboten - slik at den hadde tid til å skanne plassen. Men siden det ikke ble noe ut av denne ideen, måtte jeg gjøre det annerledes: en liten sving - stopp - sving - stopp osv. Igjen, ikke så elegant, men gjennomførbar.

Jeg vil også legge til her at etter hver forfølgelse velger roboten en tilfeldig retning for en ny sving (med eller mot klokken).

Ultralydsensor

Erfaring med å lage den første roboten på Arduino (robot "jeger")

Nok en maskinvare hvor vi måtte se etter en kompromissløsning. Ultralydsensoren produserer ustabile tall på reelle hindringer. Egentlig var dette forventet. Ideelt sett fungerer det et sted i konkurranser der det er glatte, jevne og vinkelrette overflater, men hvis noens ben "blinker" foran den, må ytterligere behandling introduseres.

Som en slik prosessering jeg satt median filter for tre tellinger. Basert på tester på ekte barn (ingen barn ble skadet under testene!), viste det seg å være ganske tilstrekkelig for å normalisere dataene. Fysikken her er enkel: vi har signaler som reflekteres fra nødvendig gjenstander (som gir den nødvendige avstanden) og reflektert fra fjernere, for eksempel vegger. Sistnevnte er tilfeldige utslipp i målinger av formen 45, 46, 230, 46, 46, 45, 45, 310, 46... Det er disse som medianfilteret kutter av.

Etter all behandlingen får vi avstanden til nærmeste objekt. Hvis det er mindre enn en viss terskelverdi, slår vi på alarmen og kjører rett mot "inntrengeren".

Blinklys og sirene

Kanskje de enkleste elementene i alle de ovennevnte. De kan sees på bildene over. Det er ingenting å skrive om maskinvare her, så la oss nå gå videre til kode.

Kontrollprogram

Jeg ser ikke poenget med å beskrive koden i detalj, hvem trenger den - lenken er på slutten av artikkelen, alt er ganske lesbart der. Men det ville vært fint å forklare den generelle strukturen.

Det første vi måtte forstå var at en robot er en sanntidsenhet. Mer presist, for å huske, for både før og nå jobber jeg fortsatt med elektronikk. Så vi glemmer umiddelbart utfordringen forsinkelse(), som de elsker å bruke i eksempelskisser, og som ganske enkelt "fryser" programmet i en bestemt tidsperiode. I stedet, som erfarne folk anbefaler, introduserer vi tidtakere for hver blokk. Det nødvendige intervallet har passert - handlingen er utført (økte lysstyrken på LED-en, slått på motoren og så videre).

Tidtakere kan kobles sammen. For eksempel fungerer diskanthøyttaleren synkront med blinklyset. Dette forenkler programmet litt.

Naturligvis deler vi alt ned i separate funksjoner (blinkende lys, lyd, snu, gå fremover og så videre). Hvis du ikke gjør dette, vil du ikke kunne finne ut hva som kommer fra hvor og hvor.

Nyanser av pedagogikk

Jeg gjorde alt beskrevet ovenfor på fritiden om kveldene. På en rolig måte brukte jeg omtrent tre uker på roboten. Dette kunne ha endt her, men jeg lovet også å fortelle deg om å jobbe med et barn. Hva kan gjøres i denne alderen?

Arbeid etter instruksjoner

Vi sjekket først hver detalj separat - lysdioder, diskanthøyttaler, motorer, sensorer osv. Det finnes et stort antall ferdige eksempler - noen rett i utviklingsmiljøet, andre finnes på Internett. Dette gjør meg absolutt glad. Vi tar koden, kobler til delen, sørger for at den fungerer, så begynner vi å endre den for å passe til oppgaven vår. Barnet gjør koblingene i henhold til diagrammet og under noe av min tilsyn. Dette er bra. Du må også kunne jobbe strengt i henhold til instruksjonene.

Arbeidsrekkefølge ("fra spesielt til generelt")

Dette er et vanskelig poeng. Du må lære at et stort prosjekt ("lage en robot") består av små oppgaver ("koble til en sensor," "koble til motorer"...), og de på sin side består av enda mindre trinn ("finn en program," "koble til et kort." ", "last ned fastvare"...). Ved å utføre mer eller mindre forståelige oppgaver på lavere nivå, "lukker" vi oppgavene på mellomnivået, og fra dem dannes det samlede resultatet. Jeg forklarte, men jeg tror erkjennelsen ikke kommer snart. Et sted, sannsynligvis, i ungdomsårene.

Installasjon

Boring, gjenger, skruer, muttere, lodding og lukten av kolofonium – hvor skulle vi vært uten? Barnet fikk den grunnleggende ferdigheten "Å jobbe med et loddebolt" - han klarte å lodde flere forbindelser (jeg hjalp litt, jeg vil ikke skjule det). Ikke glem sikkerhetsforklaringen.

Dataarbeid

Jeg skrev programmet for roboten, men jeg klarte likevel å oppnå noen gunstige resultater.

Først: engelsk. De hadde nettopp begynt på skolen, så vi slet med å finne ut hva pishalka, migalka, yarkost og andre translitterasjoner var. Dette skjønte vi i hvert fall. Jeg brukte bevisst ikke innfødte engelske ord, siden vi ennå ikke har nådd dette nivået.

For det andre: effektivt arbeid. Vi lærte hurtigtastkombinasjoner og hvordan man raskt kan utføre standardoperasjoner. Med jevne mellomrom, når vi skrev programmet, byttet sønnen min og jeg plass, og jeg sa hva som måtte gjøres (erstatning, søk osv.). Jeg måtte gjenta om og om igjen: "dobbelklikk velg", "hold Shift", "hold Ctrl" og så videre. Læringsprosessen her er ikke rask, men jeg tror ferdighetene gradvis vil bli deponert "i subcortex."

Skjult tekstDu kan si at ovenstående er nesten åpenbart. Men, ærlig talt, denne høsten hadde jeg muligheten til å undervise i informatikk i 9. klasse på én skole. Det er forferdelig. Elevene kan ikke så grunnleggende ting som Ctrl + Z, Ctrl + C og Ctrl + V, velge tekst mens du holder nede Shift eller dobbeltklikker på et ord, og så videre. Dette til tross for at de gikk tredje året på informatikk... Trekk din egen konklusjon.

For det tredje: trykk på skriving. Jeg overlot kommentarene i koden til barnet å skrive (la ham øve). Vi plasserte umiddelbart hendene riktig slik at fingrene våre gradvis husket plasseringen av nøklene.

Som du ser er vi fortsatt bare i gang. Vi vil fortsette å finpusse ferdighetene og kunnskapene våre, de vil være nyttige i livet.

Forresten, om fremtiden...

Videre utvikling

Roboten er laget, kjører, blinker og piper. Hva nå? Inspirert av det vi har oppnådd, planlegger vi å foredle det ytterligere. Det er en idé å lage en fjernkontroll - som en måne-rover. Det ville vært interessant å sitte ved en fjernkontroll å kontrollere bevegelsen til en robot som kjører et helt annet sted. Men det blir en annen historie...

Og på slutten, faktisk heltene i denne artikkelen (video ved å klikke):

Erfaring med å lage den første roboten på Arduino (robot "jeger")

Takk for din oppmerksomhet!

Kodelink

Kilde: www.habr.com

Legg til en kommentar