Innehållsförteckning:

Avancerad rad efter robot: 22 steg (med bilder)
Avancerad rad efter robot: 22 steg (med bilder)

Video: Avancerad rad efter robot: 22 steg (med bilder)

Video: Avancerad rad efter robot: 22 steg (med bilder)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, November
Anonim
Image
Image
Prototypning - Perfboard
Prototypning - Perfboard

Detta är en avancerad linje efter robot baserad på Teensy 3.6 och QTRX linjesensor som jag har byggt och har arbetat med ganska länge. Det finns några stora förbättringar i design och prestanda från min tidigare serie efter robot. Robotens hastighet och respons har förbättrats. Den övergripande strukturen är kompakt och lätt. Komponenterna är anordnade nära hjulaxeln för att minimera vinkelmomentet. Högeffektsmikrometallväxelmotorer ger tillräckligt vridmoment och aluminiumnav-silikonhjul ger välbehövlig dragkraft vid höga hastigheter. Rekvisita och hjulkodare gör att roboten kan bestämma dess position och orientering. Med Teensyview monterat ombord kan all relevant information visualiseras och viktiga programparametrar uppdateras med tryckknappar.

För att börja bygga denna robot behöver du följande tillbehör (och mycket tid och tålamod till ditt förfogande).

Tillbehör

Elektronik

  • Teensy 3.6 Development Board
  • Prop Shield med rörelsesensorer
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Reflektanssensor Array
  • 15x20cm dubbelsidig prototyp PCB
  • Pololu Step-Up/Step-Down Spänningsregulator S9V11F3S5
  • Pololu Justerbar 4-5-20V Step-Up Spänningsregulator U3V70A
  • MP12 6V 1580 rpm mikroväxelmotor med pulsgivare (x2)
  • DRV8833 Dual Motor Driver Carrier (x2)
  • 3,7V, 750mAh Li-Po-batteri
  • På / Av knapp
  • Elektrolytkondensator 470uF
  • Elektrolytkondensator 1000uF (x2)
  • Keramisk kondensator 0.1uF (x5)
  • Tryckknappar (x3)
  • 10mm grön LED (x2)

Hårdvara

  • Atom Silikonhjul 37x34mm (x2)
  • Pololu Ball Caster med 3/8”metallboll
  • N20 motorfäste (x2)
  • Bult och muttrar

Kablar och kontakter

  • 24AWG flexibla trådar
  • 24 -stifts FFC till DIP -breakout och FFC -kabel (typ A, 150 mm längd)
  • Rund kvinnlig stifthuvud
  • Rund kvinnlig stifthuvud lång terminal
  • Rätvinklig dubbelradig kvinnlig rubrik
  • Rätvinklig dubbelradig hanrubrik
  • Manlig stifthuvud
  • Manlig nålstifthuvud

Verktyg

  • Multimeter
  • Lödkolv
  • Lödtråd
  • Wire stripper
  • Avbitartång

Steg 1: Systemöversikt

Precis som med min tidigare design av en självbalanserande robot, är denna robot en sammansättning av brytskivor monterade på en skiva som också tjänar syftet med en struktur.

Robotens viktigaste system beskrivs nedan.

Mikrokontroller: Teensy 3.6 utvecklingskort med 32-bitars 180MHz ARM Cortex-M4-processor.

Linjesensor: Pololus QTRX-MD-16A 16-kanals analoga utgångssensorsystem i mediumdensitetsarrangemang (8 mm sensoravstånd).

Drivning: 6V, 1580rpm, högeffektsmikrometallväxelmotorer med magnetisk hjulkodare och silikonhjul monterade på aluminiumnav.

Vägmätare: Magnetiska hjulkodarpar för uppskattning av koordinaterna och avståndet.

Orienteringssensor: Stödskydd med rörelsesensorer för uppskattning av robotens position och riktning.

Strömförsörjning: 3,7V, 750mAh lipo -batteri som strömkälla. 3.3V steg-upp/ner-regulator driver mikrokontroller, sensorer och displayenhet. Justerbar steg-upp regulator driver de två motorerna.

Användargränssnitt: Teensyview för att visa information. Tre-knapps brytning för att acceptera användarinmatningar. Två antal gröna lysdioder med en diameter på 10 mm för statusindikering under körning.

Steg 2: Låt oss börja med prototyper

Image
Image

Vi kommer att implementera ovanstående krets på perfboard. Vi måste först hålla våra breakout -brädor redo genom att löda rubriker på dem. Videon kommer att ge en uppfattning om vilka rubriker som ska lödas på vilka brytbrädor.

Efter att ha lödt rubriker på utbrottskort, stapla Teensyview och tryckknappsutbrott ovanpå Teensy.

Steg 3: Prototypning - Perfboard

Prototypning - Perfboard
Prototypning - Perfboard

Skaffa 15x20cm dubbelsidiga prototypen perfboard och markera gränsen med en permanent markör som visas på bilden. Borra hål i storlek M2 för montering av sensoruppsättning, hjul och mikrometallväxelmotorer på platser markerade med en vit cirkel. Vi kommer senare att klippa av perfektbrädan längs gränsen efter lödning och testning av alla komponenter.

Vi börjar vår prototyp med att löda huvudstiften och uttagen på perfboard. Breakout -brädorna kommer senare att sättas in på dessa rubriker. Var noga med placeringen av rubrikerna på perfboard. Vi kommer att ansluta alla ledningar baserat på denna layout av rubriker.

Steg 4: Prototypning - Prop Shield

Prototypning - Prop Shield
Prototypning - Prop Shield
Prototypning - Prop Shield
Prototypning - Prop Shield
Prototypning - Prop Shield
Prototypning - Prop Shield
Prototypning - Prop Shield
Prototypning - Prop Shield

Vi kommer först att löda anslutningarna till propskyddet. Eftersom vi bara använder rörelsessensorerna för propskyddet måste vi bara ansluta SCL-, SDA- och IRQ -stift förutom 3V- och jordstift på propskölden.

När anslutningen är klar, sätt in Teensy och propskärm och kalibrera rörelsesensorerna genom att följa stegen som nämns här.

Steg 5: Prototypning - kraft och mark

Prototypning - kraft och mark
Prototypning - kraft och mark

Löd alla ström- och jordanslutningar som hänvisar till bilden. Sätt i alla brytbrädor på plats och säkerställ kontinuiteten med en multimeter. Kontrollera de olika spänningsnivåerna ombord.

  • Li-po utspänning (vanligtvis mellan 3V och 4,2V)
  • Steg upp/ner regulatorns utspänning (3,3V)
  • Justerbar steg-ut regulator utgångsspänning (inställd på 6V)

Steg 6: Prototypning - Motorförarbärare

Prototypning - Motorförarbärare
Prototypning - Motorförarbärare
Prototypning - Motorförarbärare
Prototypning - Motorförarbärare
Prototypning - Motorförarbärare
Prototypning - Motorförarbärare

DRV8833 dubbelmotordrivrutinens bärarkort kan leverera 1,2A kontinuerliga och 2A toppströmmar per kanal. Vi kommer att ansluta de två kanalerna parallellt för att driva en motor. Löd anslutningarna genom att följa stegen nedan.

  • Parallellt de två ingångarna och de två utgångarna från motorförarhållaren som visas på bilden.
  • Anslut ingångskontrolltrådarna till motorföraren.
  • Anslut en 1000uF elektrolytkondensator och en 0.1uF keramisk kondensator över Vin- och Gnd -terminalerna på de två bärarkorten.
  • Anslut en 0.1uF keramisk kondensator över motordrivarens utgångar.

Steg 7: Prototypning - Line Sensor Array Header

Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header
Prototypning - Line Sensor Array Header

Teensy 3.6 har två ADC: er ADC0 och ADC1 som är multiplexerade till 25 tillgängliga pinnar. Vi kan komma åt alla två stift från de två ADC: erna samtidigt. Vi kommer att ansluta åtta linjesensorer vardera till ADC0 och ADC1. Sensorerna för jämnt tal kommer att anslutas till ADC1 och udda nummersensorer till ADC0. Löd anslutningarna genom att följa stegen nedan. Vi kommer senare att ansluta linjesensorn med FFC till DIP -adapter och kabel.

  • Anslut alla jämna sensorstift (16, 14, 12, 10, 8, 6, 4, 2) enligt bilden. Dra tråden för anslutning av sensorstift 12 genom baksidan av perfboard.
  • Anslut sändarens kontrollstift (EVEN) till Teensy pin 30.
  • Anslut alla udda sensorstift (15, 13, 11, 9, 7, 5, 3, 1) enligt bilden.
  • Anslut en 470uF elektrolytkondensator över Vcc och Gnd.

Om du noga observerar linjesensorns stift och motsvarande sidhuvudstift på perboard, kommer du att märka att linjesensorns översta rad kartar till den nedre raden av rubriken på perboard och vice versa. Detta beror på att när vi ansluter linjesensorn till perfboardet med hjälp av dubbla rad rätvinkliga rubriker, kommer raderna att justeras korrekt. Det tog mig ganska lång tid att räkna ut detta och korrigera stifttilldelningarna i programmet.

Steg 8: Prototypning - Micro Gear Motor och Encoder

Prototypning - Micro Gear Motor och Encoder
Prototypning - Micro Gear Motor och Encoder
  • Fixera mikrometallväxelmotorn med pulsgivare med N20 -motorfästen.
  • Anslut motor- och givarkablarna enligt bilden.
  • Vänster pulsgivare - Teensy pins 4 & 0
  • Höger pulsgivare - tonårspinnar 9 och 27

Steg 9: Prototypning - lysdioder

Prototypning - lysdioder
Prototypning - lysdioder
Prototypning - lysdioder
Prototypning - lysdioder

De två lysdioderna indikerar om roboten har upptäckt en sväng eller inte. Jag har använt ett motstånd i 470-ohm-serien för att ansluta lysdioderna till Teensy.

  • Vänster LED -anod till Teensy pin 6
  • Höger LED -anod till Teensy pin 8

Steg 10: Prototypning - Breakouts

Image
Image
Prototypning - Breakouts
Prototypning - Breakouts

Nu när vi har slutfört all vår lödning på perfboard kan vi noggrant skära längs gränsen som är markerad på perfboard och ta bort de extra bitarna av perfboard. Fäst också de två hjulen och hjulet.

Sätt in alla brytbrädor i respektive uttag. För att sätta in FFC-DIP-breakout och för att fixa QTRX-MD-16A-linjesensorn, se videon.

Steg 11: Översikt över programvarubibliotek

Programvarubibliotek Översikt
Programvarubibliotek Översikt

Vi kommer att programmera Teensy i Arduino IDE. Vi kommer att behöva några bibliotek innan vi börjar. De bibliotek som vi kommer att använda är:

  • Kodare
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

Och några som har skrivits specifikt för denna robot,

  • Tryckknapp
  • LineSensor
  • TeensyviewMeny
  • Motorer

De bibliotek som är specifika för denna robot diskuteras i detalj och finns tillgängliga för nedladdning i nästa steg.

Steg 12: Bibliotek förklarade - PushButton

Detta bibliotek är för att koppla ihop tryckknappens brytkort med Teensy. De funktioner som används är

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Genom att anropa denna konstruktör genom att skapa ett objekt konfigureras tryckknappsstiften till INPUT_PULLUP -läge.

int8_t waitForButtonPress (void);

Denna funktion väntar tills en knapp trycks in och släpps och returnerar nyckelkoden.

int8_t getSingleButtonPress (void);

Denna funktion kontrollerar om en knapp trycks in och släpps. Om ja, returnerar nyckelkoden annars noll.

Steg 13: Bibliotek förklarade - linjesensor

LineSensor är biblioteket för gränssnitt mellan linjesensormatrisen och Teensy. Följande är de funktioner som används.

LineSensor (void);

Att ringa denna konstruktör genom att skapa ett objekt initierar ADC0 och ADC1, läser tröskel-, minsta och högsta värden från EEPROM och konfigurerar sensorstiften till ingångsläge och sändarkontrollstift till utgångsläge.

void kalibrera (uint8_t calibrationMode);

Denna funktion kalibrerar linjesensorerna. Kalibreringsläget kan vara antingen MIN_MAX eller MEDIAN_FILTER. Denna funktion förklaras i detalj i ett senare steg.

void getSensorsAnalog (uint16_t *sensorValue, uint8_t mode);

Läser sensormatris i något av de tre lägen som skickas som argument. Läget är sändarnas tillstånd och kan vara ON, OFF eller TOGGLE. TOGGLE -läget kompenserar sensoravläsningarna av reflektans på grund av omgivande ljus. Sensorerna anslutna till ADC0 och ADC1 läses synkront.

int getLinePosition (uint16_t *sensorValue);

Beräknar positionen för sensoruppsättningen över linjen med hjälp av metoden för vägda medelvärden.

uint16_t getSensorsBinary (uint16_t *sensorValue);

Returnerar en 16-bitars representation av sensorernas tillstånd. En binär indikerar att sensorn är över linjen och en binär noll indikerar att sensorn är utanför linjen.

uint8_t countBinary (uint16_t binaryValue);

Genom att överföra 16-bitarsrepresentationen av sensorvärden till denna funktion returneras antalet sensorer som är över linjen.

void getSensorsNormalized (uint16_t *sensorValue, uint8_t mode);

Läser sensorvärdena och begränsar varje sensorvärde till dess motsvarande min- och maxvärden. Sensorvärdena mappas sedan från motsvarande min till max intervall till 0 till 1000 intervall.

Steg 14: Bibliotek förklarade - TeensyviewMenu

TeensyviewMenu är biblioteket där funktionerna för displaymenyn kan nås. Följande är de funktioner som används.

TeensyViewMenu (void);

Att kalla denna konstruktör skapar ett objekt av klassen LineSensor, PushButton och TeensyView.

void intro (void);

Detta är för att navigera i menyn.

void test (void);

Detta kallas internt i menyn när linjesensorvärdena ska visas på Teensyview för testning.

Steg 15: Bibliotek förklarade - motorer

Motors är biblioteket som används för att köra de två motorerna. Följande är de funktioner som används.

Motorer (tomrum);

Genom att anropa denna konstruktör genom att skapa ett objekt konfigureras motorriktningskontrollen och PWM -styrstift till utgångsläge.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Att kalla den här funktionen driver de två motorerna med hastigheter som passerade som argument. Värdet på hastigheten kan variera från -255 till +255 med ett negativt tecken som indikerar att rotationsriktningen är omvänd.

Steg 16: Testning - Encoder Odometry

Vi kommer att testa magnethjulskodarna och visa position och avstånd som täcks av roboten.

Ladda upp DualEncoderTeensyview.ino. Programmet visar kodarens fästingar på Teensyview. Kodaren markerar steg om du flyttar roboten framåt och minskar om du flyttar den bakåt.

Ladda nu upp EncoderOdometry.ino. Detta program visar robotens position i form av x-y-koordinater, visar det totala avståndet täckt i centimeter och vinkeln vriden i grader.

Jag har hänvisat till Implementing Dead Reckoning by Odometry on a Robot with R/C Servo Differential Drive av Seattle Robotics Society för att bestämma position från kodare -fästingar.

Steg 17: Testning - Prop Shield Motion Sensors

Se till att du har kalibrerat rörelsesensorerna genom att följa stegen som nämns här.

Ladda nu upp PropShieldTeensyView.ino. Du bör kunna se accelerometer-, gyro- och magnetometervärdena för alla tre axlarna på Teensyview.

Steg 18: Programöversikt

Programmet för den avancerade linjeföljaren är skrivet i Arduino IDE. Programmet fungerar i följande sekvens som förklaras nedan.

  • Värden som lagras i EEPROM läses och menyn visas.
  • När du trycker på LAUNCH kommer programmet in i slingan.
  • Normaliserade linjesensorvärden läses.
  • Binärt värde för linjens position erhålls med normaliserade sensorvärden.
  • Antalet sensorer som är över linjen beräknas utifrån det binära värdet för linjens position.
  • Kodarfästingar uppdateras och totala sträckan täcks, xy-koordinater och vinkel uppdateras.
  • För olika värden på binärt antal som sträcker sig från 0 till 16 körs en uppsättning instruktioner. Om det binära antalet ligger i intervallet 1 till 5 och om sensorerna som ligger över linjen ligger intill varandra, anropas PID -rutin. Rotation utförs i andra kombinationer av binärt värde och binärt antal.
  • I PID -rutinen (som är en PD -rutin) körs motorerna med hastigheter som beräknas baserat på fel, förändring av fel, Kp och Kd -värden.

Programmet mäter för närvarande inte orienteringsvärden från prop shield. Detta pågår och håller på att uppdateras.

Ladda upp TestRun20.ino. Vi kommer att se hur man navigerar i menyn, justerar inställningar och hur man kalibrerar linjesensorerna i nästa steg som vi testar vår robot.

Steg 19: Navigera i meny och inställningar

Menyn har följande inställningar som kan navigeras med vänster och höger tryckknappar och väljas med mittknappen. Inställningarna och deras funktioner beskrivs nedan.

  1. KALIBRERA: För att kalibrera linjesensorer.
  2. TEST: För att visa värden för linjesensorer.
  3. Lansering: För att börja raden efter.
  4. MAX HASTIGHET: Ställer in den övre gränsen för robotens hastighet.
  5. ROTERA HASTIGHET: För att ställa in den övre gränsen för robotens hastighet när den utför ett varv, det vill säga när båda hjulen svänger med samma hastighet i motsatta riktningar.
  6. KP: Proportionell konstant.
  7. KD: Derivatkonstant.
  8. RUN MODE: För att välja mellan två driftlägen - NORMAL och ACCL. I NORMAL -läge kör roboten med fördefinierade hastigheter som motsvarar linjepositionsvärden. I ACCL -läge ersätts MAX SPEED för roboten med ACCL SPEED vid fördefinierade steg av spåret. Detta kan användas för att påskynda roboten vid raka delar av banan. Följande inställningar är endast tillgängliga om RUN MODE är inställt som ACCL.
  9. LAP DISTANCE: För att ställa in den totala längden på racerbanan.
  10. ACCL SPEED: För att ställa in robotens accelerationshastighet. Denna hastighet ersätter MAX SPEED i olika stadier av spåret enligt definitionen nedan.
  11. NEJ. AV STEG: För att ställa in antalet steg där ACCL SPEED används.
  12. STEG 1: För att ställa in start- och slutavstånd för steget där MAX SPEED ersätts med ACCL SPEED. För varje etapp kan start- och slutavstånd ställas in separat.

Steg 20: Kalibrering av linjesensor

Image
Image

Linjesensorkalibrering är den process genom vilken tröskelvärdet för var och en av de 16 sensorerna bestäms. Detta tröskelvärde används för att bestämma om en viss sensor är över linjen eller inte. För att bestämma tröskelvärdena för 16 sensorer använder vi någon av de två metoderna.

MEDIAN FILTER: I denna metod placeras linjesensorerna ovanför den vita ytan och ett fördefinierat antal sensoravläsningar tas för alla 16 sensorer. Medianvärdena för alla 16 sensorer bestäms. Samma process upprepas efter att linjesensorerna har placerats över den svarta ytan. Tröskelvärdet är medelvärdet av medianvärdena för svarta och vita ytor.

MIN MAX: I denna metod läses sensorvärdena upprepade gånger tills användaren ber om ett stopp. De maximala och lägsta värdena för varje sensor lagras. Tröskelvärdet är genomsnittet av lägsta och högsta värde.

De sålunda erhållna tröskelvärdena mappas till 0 till 1000 intervall.

Kalibreringen av linjesensorer med MIN MAX -metoden visas i videon. Efter kalibrering av linjesensorerna kan data visualiseras enligt bilden. Följande information visas.

  • En 16-bitars binär representation av linjeposition med en binär 1 som indikerar att motsvarande linjesensor är över linjen och en binär 0 som indikerar att linjesensorn är utanför linjen.
  • En räkning av det totala antalet sensorer som är över linjen.
  • Minsta, maximala och sensorvärden (råa och normaliserade) för de 16 sensorerna, en sensor i taget.
  • Linjeposition i intervallet -7500 till +7500.

Lägsta och högsta linjesensorvärden lagras sedan i EEPROM.

Steg 21: Testkörning

Image
Image

Videon är av en testkörning där roboten är programmerad att stanna efter att den avslutat ett varv.

Steg 22: Slutliga tankar och förbättringar

Robots tävling
Robots tävling

Hårdvaran som sätts ihop för att bygga denna robot används inte fullt ut av programmet som kör den. Många förbättringar kan göras på programdelen. Rörelsessensorerna för propsköld används för närvarande inte för att bestämma position och orientering. Mätdata från kodare kan kombineras med orienteringsdata från prop -skärm för att exakt bestämma position och riktning för roboten. Dessa data kan sedan användas för att programmera roboten för att lära sig spåret i flera varv. Jag uppmuntrar dig att experimentera med den här delen och dela dina resultat.

Lycka till.

Robots tävling
Robots tävling

Andra pris i Robot Contest

Rekommenderad: