Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

Hallå

I den här artikeln vill jag beskriva processen för att montera min första robot med Arduino. Materialet kommer att vara användbart för andra nybörjare som jag som vill göra någon slags "självgående vagn". Artikeln är en beskrivning av stadierna för att arbeta med mina tillägg på olika nyanser. En länk till den slutliga koden (förmodligen inte den mest idealiska) ges i slutet av artikeln.

Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

När det var möjligt involverade jag min son (8 år) i att delta. Vad exakt fungerade med det och vad som inte gjorde det - jag har dedikerat en del av artikeln till detta, kanske det kommer att vara användbart för någon.

Allmän beskrivning av roboten

Först några ord om själva roboten (idé). Jag ville inte riktigt sätta ihop något standard i början. Samtidigt var uppsättningen av komponenter ganska standard - chassi, motorer, ultraljudssensor, linjesensor, lysdioder, diskant. Ursprungligen uppfanns en robot från detta "soppset" som vaktar dess territorium. Han kör mot gärningsmannen som har passerat cirkellinjen och återvänder sedan till mitten. Den här versionen krävde dock en dragen linje, plus extra matematik för att hålla sig i cirkeln hela tiden.

Därför, efter lite funderande, ändrade jag idén något och bestämde mig för att göra en "jägare"-robot. I början vänder den sig runt sin axel och väljer ett närliggande mål (person). Om "bytet" upptäcks, sätter "jägaren" på blinkljusen och sirenen och börjar köra mot det. När personen flyttar iväg/springer iväg väljer roboten ett nytt mål och förföljer det osv. En sådan robot behöver inte en begränsad cirkel, och den kan arbeta i öppna ytor.

Som du kan se påminner detta mycket om ett ikappspel. Även om roboten i slutändan inte visade sig vara tillräckligt snabb, interagerar den ärligt med människorna omkring den. Barn gillar det särskilt (ibland verkar det dock som att de är på väg att trampa på det, deras hjärta hoppar över ett slag...). Jag tror att detta är en bra lösning för att popularisera teknisk design.

Robot struktur

Så vi har bestämt oss för idén, låt oss gå vidare till layout. Listan med element bildas utifrån vad roboten ska kunna göra. Allt här är ganska uppenbart, så låt oss omedelbart titta på numreringen:

Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

Robotens "hjärnor" är en arduino uno-bräda (1); var i ett set beställt från Kina. För våra ändamål räcker det (vi fokuserar på antalet använda stift). Från samma kit tog vi ett färdigt chassi (2), på vilket två drivhjul (3) och ett bak (fritt roterande) (4) är fästa. Satsen innehöll även ett färdigt batterifack (5). Framför roboten finns en ultraljudssensor (HC-SR04) (6), på baksidan finns en motordrivare (L298N) (7), i mitten finns en LED-blinkare (8), och lite till på sidan finns en diskanthögtalare (9).

I layoutstadiet tittar vi på:

– så att allt passar
- att vara balanserad
- att vara rationellt placerad

Våra kinesiska kollegor har redan delvis gjort detta åt oss. Så det tunga batterifacket är placerat i mitten och drivhjulen är placerade ungefär under det. Alla andra brädor är lätta och kan placeras på periferin.

nyanser:

  1. Chassit från satsen har många fabrikshål, men jag har fortfarande inte kommit på vad logiken är i dem. Motorerna och batteripaketet säkrades utan problem, sedan började ”justeringen” med att man borrade nya hål för att säkra den eller den brädan.
  2. Mässingsställen och andra fästen från förvaringsutrymmen var till stor hjälp (ibland var vi tvungna att få ut dem).
  3. Jag förde samlingsskenorna från varje bräda genom klämmorna (igen, jag hittade dem i förvaring). Mycket bekvämt, alla kablar ligger fint och dinglar inte.

Enskilda block

Nu ska jag gå igenom block och jag ska berätta personligen om var och en.

Batterifack

Det är klart att roboten måste ha en bra energikälla. Alternativen kan variera, jag valde alternativet med 4 AA-batterier. Totalt ger de cirka 5 V, och denna spänning kan appliceras direkt på 5V-stiftet på arduinokortet (förbigående av stabilisatorn).

Naturligtvis var jag försiktig, men den här lösningen är ganska användbar.

Eftersom ström behövs överallt, gjorde jag för bekvämlighets skull två kontakter i mitten av roboten: en "fördelar" marken (till höger) och den andra - 5 V (till vänster).

Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

Motorer och förare

Först om montering av motorerna. Fästet är fabrikstillverkat, men gjort med stora toleranser. Motorerna kan med andra ord vinkla ett par millimeter åt vänster och höger. För vår uppgift är detta inte kritiskt, men på vissa ställen kan det ha effekt (roboten börjar röra sig åt sidan). För säkerhets skull ställde jag in motorerna strikt parallellt och fixade dem med lim.

Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

För att styra motorerna, som jag skrev ovan, används L298N-drivrutinen. Enligt dokumentationen har den tre stift för varje motor: en för att ändra hastigheten och ett par stift för rotationsriktningen. Det finns en viktig punkt här. Det visar sig att om matningsspänningen är 5 V, så fungerar varvtalskontrollen helt enkelt inte! Det vill säga, antingen vänder den inte alls, eller så vänder den till maximalt. Det här är funktionen som fick mig att "döda" ett par kvällar. Till slut hittade jag ett omnämnande någonstans på ett av forumen.

Generellt sett behövde jag en låg rotationshastighet när jag vände roboten - så att den hann med att skanna utrymmet. Men eftersom det inte blev något av denna idé, var jag tvungen att göra det annorlunda: en liten sväng - stopp - sväng - stopp, etc. Återigen, inte så elegant, men fungerande.

Jag ska också lägga till här att efter varje jakt väljer roboten en slumpmässig riktning för en ny sväng (medurs eller moturs).

ultraljudssensor

Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

Ytterligare en hårdvara där vi var tvungna att leta efter en kompromisslösning. Ultraljudssensorn producerar instabila siffror på verkliga hinder. Egentligen var detta väntat. Helst fungerar det någonstans i tävlingar där det finns släta, jämna och vinkelräta ytor, men om någons ben "blinkar" framför den måste ytterligare bearbetning införas.

Som sådan bearbetning ställer jag in medianfilter för tre punkter. Baserat på tester på riktiga barn (inga barn kom till skada under testerna!) visade det sig vara ganska tillräckligt för att normalisera data. Fysiken här är enkel: vi har signaler som reflekteras från nödvändig objekt (som ger erforderligt avstånd) och reflekteras från mer avlägsna sådana, till exempel väggar. De senare är slumpmässiga utsläpp i mätningar av formen 45, 46, 230, 46, 46, 45, 45, 310, 46... Det är dessa som medianfiltret skär av.

Efter all bearbetning får vi avståndet till närmaste objekt. Om det är lägre än ett visst tröskelvärde slår vi på larmet och kör rakt mot "inkräktaren".

Blinkare och siren

Kanske de enklaste delarna av alla ovanstående. De kan ses på bilderna ovan. Det finns inget att skriva om hårdvara här, så nu går vi vidare till koda.

Styrprogram

Jag ser inte poängen med att beskriva koden i detalj, vem behöver den - länken finns i slutet av artikeln, allt är ganska läsbart där. Men det skulle vara trevligt att förklara den allmänna strukturen.

Det första vi var tvungna att förstå var att en robot är en realtidsenhet. Mer exakt, för att komma ihåg, för både förr och nu jobbar jag fortfarande med elektronik. Så vi glömmer omedelbart utmaningen dröjsmål(), som de älskar att använda i exempelskisser, och som helt enkelt "fryser" programmet under en viss tidsperiod. Istället introducerar vi, som erfarna personer rekommenderar, timers för varje block. Det erforderliga intervallet har passerat - åtgärden har utförts (ökade ljusstyrkan på lysdioden, slog på motorn och så vidare).

Timers kan kopplas samman. Till exempel fungerar diskanthögtalaren synkront med blinkaren. Detta förenklar programmet lite.

Naturligtvis delar vi upp allt i separata funktioner (blinkande ljus, ljud, svängning, framåt, och så vidare). Om du inte gör detta kommer du inte att kunna ta reda på vad som kommer ifrån var och var.

Nyanser av pedagogik

Jag gjorde allt som beskrivs ovan på min fritid på kvällarna. På ett lugnt sätt tillbringade jag ungefär tre veckor på roboten. Det här kunde ha slutat här, men jag lovade också att berätta om arbetet med ett barn. Vad kan man göra i den här åldern?

Arbeta enligt instruktionerna

Vi kontrollerade först varje detalj separat - lysdioder, diskant, motorer, sensorer etc. Det finns ett stort antal färdiga exempel - några direkt i utvecklingsmiljön, andra finns på Internet. Detta gör mig verkligen glad. Vi tar koden, ansluter delen, ser till att den fungerar, sedan börjar vi ändra den för att passa vår uppgift. Barnet gör kopplingarna enligt diagrammet och under en del av min tillsyn. Det här är bra. Du måste också kunna arbeta strikt enligt instruktionerna.

Arbetsordning ("från särskilt till allmänt")

Detta är en svår punkt. Du måste lära dig att ett stort projekt ("gör en robot") består av små uppgifter ("anslut en sensor", "anslut motorer"...), och de i sin tur består av ännu mindre steg ("hitta en program," "anslut ett kort." ", "ladda ner firmware"...). Genom att utföra mer eller mindre förståeliga uppgifter på den lägre nivån "stänger" vi uppgifterna på mellannivån, och från dem bildas det övergripande resultatet. Jag förklarade, men jag tror att insikten inte kommer snart. Någonstans, förmodligen, i tonåren.

Installation

Borrning, gängor, skruvar, muttrar, lödning och lukten av kolofonium - var skulle vi vara utan det? Barnet fick den grundläggande färdigheten "Arbeta med en lödkolv" - han lyckades löda flera anslutningar (jag hjälpte till lite, jag kommer inte att dölja det). Glöm inte säkerhetsförklaringen.

Datorarbete

Jag skrev programmet för roboten, men jag lyckades ändå uppnå några gynnsamma resultat.

Först: engelska. De hade precis börjat i skolan, så vi kämpade för att komma på vad pishalka, migalka, yarkost och andra translitterationer var. Vi förstod åtminstone detta. Jag använde medvetet inte infödda engelska ord, eftersom vi ännu inte har nått denna nivå.

För det andra: effektivt arbete. Vi lärde ut snabbtangentskombinationer och hur man snabbt utför standardoperationer. Med jämna mellanrum, när vi skrev programmet, bytte min son och jag plats och jag sa vad som behövde göras (byte, sökning, etc.). Jag var tvungen att upprepa om och om igen: "dubbelklicka på välj", "håll ned Shift", "håll ned Ctrl" och så vidare. Inlärningsprocessen här är inte snabb, men jag tror att färdigheterna gradvis kommer att deponeras "i subcortex."

Dold textMan kan säga att ovanstående är nästan självklart. Men ärligt talat, i höstas hade jag möjlighet att undervisa i datavetenskap i 9:an på en skola. Det är hemskt. Elever kan inte så grundläggande saker som Ctrl + Z, Ctrl + C och Ctrl + V, att markera text medan du håller ned Skift eller dubbelklickar på ett ord, och så vidare. Detta trots att de gick tredje året på att läsa datavetenskap... Dra din egen slutsats.

För det tredje: tryck på att skriva. Jag anförtrodde kommentarerna i koden till barnet att skriva (låt honom öva). Vi placerade omedelbart våra händer korrekt så att våra fingrar gradvis kom ihåg var nycklarna var.

Som ni ser är vi fortfarande bara igång. Vi kommer att fortsätta att finslipa våra färdigheter och kunskaper, de kommer att vara användbara i livet.

Förresten, om framtiden...

Ytterligare utveckling

Roboten tillverkas, kör, blinkar och piper. Och nu då? Inspirerade av vad vi har uppnått planerar vi att förfina det ytterligare. Det finns en idé att göra en fjärrkontroll - som en månrover. Det skulle vara intressant att sitta vid en fjärrkontroll styra rörelsen hos en robot som kör på en helt annan plats. Men det blir en annan historia...

Och i slutet, faktiskt, hjältarna i den här artikeln (video genom att klicka):

Erfarenhet av att skapa den första roboten på Arduino (robot "jägare")

Tack för din uppmärksamhet!

Länk till kod

Källa: will.com

Lägg en kommentar