micromouse är en robot som använder en labyrint lösa algoritm för att självständigt lösa en labyrint problem. I det här inlägget kommer jag att dela hur mitt team och jag lyckades göra det med den välbehövliga vägledningen från några mycket hjälpsamma människor.
under min hösttermin på UC Berkeley tog jag en studentledd klass för att skapa en robot som autonomt löser ett labyrintproblem. Mina tankar är att om du är i UC Berkeley, intresserad av elektronikprojekt och letar efter ett mycket guidat program med fantastiska instruktörer, är detta ett bra ställe att vara! För mig är den här kursen speciell eftersom det var där jag började min resa till robotik, tinkering och tillverkning och är en som jag tyckte mycket om. Kursen gav mig stora grunder, och jag lärde mig mer på vägen när jag började ta på mig nya projekt.
här är en grov uppsättning instruktioner om hur du börjar ditt Micromouse-projekt som nybörjare:
- reservdelslista
- sätta ihop hårdvarudelarna
- ställa in Teensy Micro Controller & Arduino IDE
- Teensy pinOut introduktion
- använda sensorer
- spänningsreglering
- h Bromotor styrenhet för att styra motorn
- använda Hall Effect Rotorary Encoder
- sätta ihop allt
- kodning
- hur du styr din hårdvara med kod
- Sensing
- PID-kontroll
- Maze solving Algorithm
- finjustering
- hur du felsöker
reservdelslista
- mekaniska delar
- chassi
- hjul
- massor av tejp, om du inte tänker 3D-skriva ut skräddarsydda delar eller spendera pengar för att köpa anpassade fästen
- elektriska delar
- Breadboard, ledningar
- två 5 volts Mini DC-motorer
- ett litet 7 till 9 volts batteri
- 7805 spänningsregulator
- Hall sensor rotorary encoder
- H-Bridge
- Teensy (eller någon liten micro controller. Arduino fungerar också!)
- två Avståndssensorer (jag använde en infraröd sensor)
att sätta ihop hårdvaran
2.1 ställa in Teensy Micro Controller & Arduino IDE
Teensy är en mikrokontroller som fungerar som en Arduino. En stor fördel är dess storlek. Som namnet antyder är Teenst liten och kompakt, vilket är bra!
vi börjar med att placera Teensy ovanpå några huvudstift och sedan lödda huvudstiften på Teensy och sedan montera den ordentligt på vår brödbräda.
om du inte redan har installerat Arduino IDE på din dator. https://www.arduino.cc/en/Main/Software
mycket viktigt: om du använder Teensy 3.1, se till att du installerar den version av Arduino som är kompatibel med Teensy. Här är länken för att installera Teensyduino, så att din Teensy kan arbeta med Arduino IDE: https://www.pjrc.com/teensy/td_download.html
2.2 kretsen
2.21) batteri strömförsörjning: strömförsörjning måste vara 7.2 V och högre. Genom krets konvention, vi kan kalla detta Vcc2.
2.22) 5V reglerad strömförsörjning: elektroniska chipkomponenter behöver ofta en stabil strömförsörjningsspänning för att fungera korrekt. Problemet är att med enheter som motorer som kan dra stora varierande mängder ström, orsakar detta matningsspänningen att doppa. Det är därför vi behöver en spänningsregulator för att leverera den stabila 5V till dina andra elektroniska komponenter.
2.23) Micro controller: det här är hjärnorna hos alla robotar som verkar ha någon form av intelligent tänkande. En mikrokontroller kan verka komplicerad i början, men för att komma igång är det verkligen inte så svårt. Här är grunderna: enkla men mycket viktiga.
2.23 a) digitala ingångsstift: kunna läsa och skriva binära signaler. Olika mikrokontroller har olika logiska nivåer, men de flesta mikrokontroller har en logisk nivå på antingen 3.3 V eller 5V. Arduino är till exempel en mikrokontroller med en logisk nivå på 5V. vid läsning registrerar en spänning någonstans nära 5V så hög, medan en spänning någonstans nära 0V registrerar så låg.
2.23 b) Pulsbreddsmodulerade (PWM) stift: dessa är digitala ingångsstift med en speciell förmåga att mata ut en pulsbreddsmodulerad signal. Det är en digital signal som är hög för en viss procentandel av tiden och låg för en annan procentandel av tiden. Detta kallas arbetscykeln. En PWM-signal med en 60% arbetscykel är logiknivå hög 60% av tiden, medan logiknivå låg 40% av tiden. Läs mer om PWM här.
2.23 c) analoga stift: dessa stift kan läsa en analog spänning var som helst från 0 till nämnda mängd volt. När det gäller Arduino, dess 0-5V. de kan läsa den med varierande grad av upplösning, beroende på hur många bitar Analog till Digital omvandlare används. En 8 bitars analog till digital omvandlare kan läsa en upplösning på 2^8 = 256. För en 5V logisk nivå kan den läsa till en precision av 5V / 256 = 19,5 mV.
2.23 d) digitala avbrott: Vissa digitala stift på mikrokontroller kan konfigureras som avbrottssignaler. Ett avbrott är väldigt coolt. När en stift är konfigurerad som en avbrottsstift upptäcker den antingen (1) en stigande signalkant (2) en fallande signalkant eller (3) en förändring i logiknivå. Endera av dessa kommer att utlösa vad vi kallar en interrupt service rutin (ISR). ISR är en kort funktion i kod som utlöses när ett avbrott upptäcks.
2.26) motorer: motorer är enheter som vänder när de ges en spänning. I det här fallet använder vi den borstade likströmsmotorn. Den heter som sådan eftersom det finns en kommutator DC-borste inuti den som hjälper den att vända ordentligt när den ges en spänning. Motorer drar i allmänhet en stor ström och alla motorer har en viss spänningseffekt. När motorerna vrider, producerar de en back-emf. Detta kan låta kontraintuitivt, men en motor som vrider med sin maximala hastighet drar faktiskt minst ström på grund av bak emf. Tvärtom, en motor som är stallad (dvs den vill flytta men kan inte på grund av yttre krafter) drar mest ström.
2.25) motordrivare: detta behövs för att styra motorns hastighet/riktning med hjälp av en mikrokontroller. Detta beror på att din mikrokontroller inte kan leverera tillräckligt med spänning eller ström för att driva en motor. Dessutom, när motorerna snurrar, kan den genererade back-emf lätt skada din mikrokontroller. Ett gränssnitt behövs mellan de två för att styra motorns hastighet och riktning. Den använda motorstyrenheten var en SN754410 fyrdubbla halv-h-drivrutin. Vad en motorstyrenhet gör är att den tar signalen från din mikrostyrenhet (vanligtvis en pulsbreddsmodulerad Signal) och aktiverar sedan en ’digital switch’ från ditt batteri till din motor. Vad det gör är att det slår på en digital switch från batteriet till din motor extremt snabbt. Om den här digitala omkopplaren är på 100% av tiden (eller 100% arbetscykel), körs motorn med full effekt. Om den digitala omkopplaren endast är på 50% av tiden går motorn med 50% effekt.
2.26) kodare: kodare är smarta enheter som upptäcker rörelse. Som till exempel upptäcker vissa kodare hur många gånger ett hjul har snurrat, andra är ännu mer exakta för att berätta exakt vilken vinkel en robotarm har vänt etc. För Micromouse använder vi kodare som upptäcker hur många gånger ett hjul har vänt. Det finns hall effect-kodare eller optiska kodare. Två typer av kodare, men gör i princip samma sak. De utlöser en digital puls när ett hjul har vänt! Hur en hall effect encoder fungerar är att det finns en liten permanentmagnet inuti något som är fäst vid motoraxeln. När motorn vrider, vänder magneten också. Det finns sensorer som upptäcker när magneten har passerat. När den gör det skickar den ut en puls som kan läsas av en mikrokontroller. Vi skickar vanligtvis den signalen till en pin-kod som är konfigurerad som en digital avbrottsstift.
2.27) infraröda avståndssensorer: känner av avstånd med infraröd. Vad det gör är att det skjuter ut en infraröd signal och väntar på att signalen studsar tillbaka för att bestämma hur långt objektet är borta från det. Du kan experimentera, men om du avböjer signalen från en lutande yta kanske du inte får en avläsning av din IR-sensor. Detta gör det inte så perfekt. Denna IR-sensor har också ett begränsat intervall som den kan upptäcka avstånd. Röd tråd är för 5V ström, svart tråd för GND, gul tråd för signal. För denna speciella IR-sensor, beroende på hur långt IR-sensorn känner av ditt objekt, ger den en annan analog spänning. Vad du kan göra är att läsa den analoga spänningen med en mikrokontroller. Läs databladet här för att veta mer information om IR-sensorn.
2.3 kretsscheman & ledningar
här är ett grovt kretsschema. Observera att jag inte angav exakt vilka stift som ska anslutas till ledningarna. Detta beror på att pin-numren varierar beroende på vilken mikrokontroller du använder, men här ger jag de övergripande principerna:
signaler från kodaren ska anslutas till en Digital Avbrottsstift. På så sätt, när en signal skickas, kan mikrokontroller veta att hjulet har vänt 1 runda.
signaler från den infraröda sensorn ska kopplas till en Analog ingångsstift.
signaler som matas in i motorstyrenheten ska komma ut från en PWM-stift.
*infoga kretsschema
3.0 kod & kontroller:
jag kommer inte att publicera kod, men här är några allmänna begrepp:
3.1 Hur får musen att röra sig rakt eller vända:
denna mus styrs differentiellt. Det finns två hjul, med två motorer på varje hjul. Om båda hjulen vrider med samma hastighet går musen rakt. Om det vänstra hjulet snabbar upp medan det högra hjulet saktar ner, svänger musen åt höger. Detta kallas differentialstyrning.
3.2 kontroller & felkorrigering
men man måste tänka på hur man styr musen. Hur får vi det att röra sig inuti labyrinten utan att krascha in i en vägg? Vi kanske tror att vi skickar två lika signaler till vänster och höger motorer för att berätta för musen att gå rakt. Så musen ska gå rakt rätt? Fel! Olika orsaker kan leda till att motorerna inte svarar på det sätt vi säger det till. I grund och botten är varje motor byggd nästan densamma, men inte exakt densamma. Hårdvara byggs aldrig perfekt och det finns alltid något ändligt fel.
Hur ser vi till att musen faktiskt rör sig i den riktning vi säger till den? Vi behöver det som kallas closed loop control. Vilket innebär att vi koppla upp sensorer för att mäta utgången och sedan mata resultatet tillbaka in i ingången för att utföra felkorrigering. Mer om det senare. Vi behöver vad vi kallar en PID (Proportional Integral derivat) controller.
i det här fallet kanske vi vill få musen att hålla ett strikt avstånd från väggen. Säg, 5 cm från väggen till höger. Vi kallar detta börvärdet. Varje avvikelse från börvärdet är vad vi kallar fel. När ett fel upptäcks vill vi att musen ska korrigera sig själv. När felet är stort vill vi ha en stor korrigeringsåtgärd. När felet är litet vill vi ha en liten korrigeringsåtgärd.
sensorer på sidan av musen bestämmer avståndet musen är från en vägg. Säg att musen är för långt bort från väggen till höger. Vi vill att det vänstra hjulet ska svänga snabbare, medan det högra hjulet svänger långsammare så att musen kan röra sig åt höger för att korrigera felet. Om musen är väldigt långt från 5cm börvärdet, som 10cm från väggen, vill vi att vänsterhjulet ska svänga mycket snabbt, medan högerhjulet saktar ner mycket. Om musen bara är 6 cm från väggen vill vi att vänsterhjulet ökar i hastighet och högerhjulet minskar hastigheten, men bara mycket lite.