Indholdsfortegnelse:

Avanceret linje efter robot: 22 trin (med billeder)
Avanceret linje efter robot: 22 trin (med billeder)

Video: Avanceret linje efter robot: 22 trin (med billeder)

Video: Avanceret linje efter robot: 22 trin (med billeder)
Video: Hvordan reagerer børn, når man fortæller, at der ikke er råd til at holde jul? 2024, Juli
Anonim
Image
Image
Prototyping - Perfboard
Prototyping - Perfboard

Dette er en avanceret linje efter robot baseret på Teensy 3.6 og QTRX linjesensor, som jeg har bygget og har arbejdet på i et stykke tid. Der er nogle store forbedringer i design og ydeevne fra min tidligere linje efter robot. Robotens hastighed og respons er forbedret. Den overordnede struktur er kompakt og let. Komponenterne er anbragt tæt på hjulaksen for at minimere vinkelmomentet. Højeffektive mikrometalgearmotorer giver tilstrækkeligt drejningsmoment, og aluminiumsnav-silikonehjul giver tiltrængt trækkraft ved høje hastigheder. Propskærm og hjulkodere gør det muligt for robotten at bestemme sin position og retning. Med Teensyview monteret om bord kan alle relevante oplysninger visualiseres, og vigtige programparametre kan opdateres ved hjælp af trykknapper.

For at begynde at bygge denne robot skal du bruge følgende forsyninger (og meget tid og tålmodighed til din rådighed).

Forbrugsvarer

Elektronik

  • Teensy 3.6 Development Board
  • Propskærm med bevægelsessensorer
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Refleksansensor Array
  • 15x20cm dobbeltsidet prototype PCB
  • Pololu Step-Up/Step-Down Spændingsregulator S9V11F3S5
  • Pololu Justerbar 4-5-20V Step-Up Spændingsregulator U3V70A
  • MP12 6V 1580 o / min mikro gearmotor med encoder (x2)
  • DRV8833 Dual Motor Driver Carrier (x2)
  • 3,7V, 750mAh Li-Po batteri
  • TÆND/SLUK -kontakt
  • Elektrolytkondensator 470uF
  • Elektrolytisk kondensator 1000uF (x2)
  • Keramisk kondensator 0.1uF (x5)
  • Trykknapper (x3)
  • 10 mm grøn LED (x2)

Hardware

  • Atom Silikone hjul 37x34mm (x2)
  • Pololu kuglehjul med 3/8”metalbold
  • N20 motorophæng (x2)
  • Bolt og møtrikker

Kabler og stik

  • 24AWG fleksible ledninger
  • 24 pin FFC til DIP breakout og FFC kabel (Type A, 150 mm længde)
  • Rund kvindelig pin -header
  • Rund kvindelig pin header lang terminal
  • Højret vinklet dobbelt række kvindelig overskrift
  • Højre-vinklet dobbelt række mandlig header
  • Male pin header
  • Mandlig nålestift

Værktøjer

  • Multimeter
  • Loddekolbe
  • Loddetråd
  • Wire stripper
  • Trådskærer

Trin 1: Oversigt over systemer

Som med mit tidligere design af en selvbalancerende robot, er denne robot en samling af breakout-plader monteret på et perfboard, som også tjener formålet med en struktur.

Robotens større systemer er beskrevet nedenfor.

Mikrocontroller: Teensy 3.6 udviklingskort med 32-bit 180MHz ARM Cortex-M4 processor.

Linjesensor: Pololus QTRX-MD-16A 16-kanals analoge output line sensor sensor i medium-density arrangement (8 mm sensor pitch).

Drive: 6V, 1580rpm, high power micro metal gearmotorer med magnetisk hjulkoder og silikone hjul monteret på aluminiumsnav.

Kilometertæller: Magnetiske hjulkoderpar til estimering af koordinater og tilbagelagt afstand.

Orienteringssensor: Propskærm med bevægelsessensorer til estimering af robotens position og kurs.

Strømforsyning: 3,7V, 750mAh lipo -batteri som strømkilde. 3.3V trin-op/ned-regulator driver mikrokontroller, sensorer og displayenhed. Justerbar trin-up regulator driver de to motorer.

Brugergrænseflade: Teensyview til visning af oplysninger. Tre-knap breakout til accept af brugerinput. To numre med grønne lysdioder med en diameter på 10 mm til statusindikation under kørsel.

Trin 2: Lad os starte med prototyper

Image
Image

Vi implementerer ovenstående kredsløb på perfboardet. Vi skal først holde vores breakout boards klar ved at lodde overskrifter på dem. Videoen vil give en idé om, hvilke overskrifter der skal loddes på hvilke breakout boards.

Efter lodning af overskrifter på breakout boards, stables Teensyview og trykknap breakout oven på Teensy.

Trin 3: Prototyping - Perfboard

Prototyping - Perfboard
Prototyping - Perfboard

Få den 15x20cm dobbeltsidede prototype perfboard og marker grænsen med en permanent markør som vist på billedet. Bor huller i størrelse M2 til montering af sensorarray, hjul og mikrometalgearmotorer på steder markeret med en hvid cirkel. Vi skærer senere perfboardet langs grænsen efter lodning og testning af alle komponenter.

Vi vil begynde vores prototyper med at lodde hovedstifterne og fatningerne på perfboardet. Udbrudstavlerne indsættes senere på disse overskrifter. Vær omhyggelig opmærksom på placeringen af overskrifterne på perfboardet. Vi forbinder alle ledninger baseret på dette layout af overskrifter.

Trin 4: Prototyping - Prop Shield

Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield

Vi lodder først forbindelserne til propskærmen. Da vi kun bruger støtteskjoldets bevægelsessensorer, skal vi kun forbinde SCL-, SDA- og IRQ -ben bortset fra 3V- og jordstifterne på propskærmen.

Når forbindelsen er fuldført, skal du indsætte Teensy og propskærm og kalibrere bevægelsessensorerne ved at følge de trin, der er nævnt her.

Trin 5: Prototyping - magt og jord

Prototyping - magt og jord
Prototyping - magt og jord

Lod alle strøm- og jordforbindelser, der henviser til billedet. Sæt alle breakout boards på plads og sikre kontinuitet ved hjælp af et multimeter. Kontroller de forskellige spændingsniveauer om bord.

  • Li-po udgangsspænding (normalt mellem 3V og 4,2V)
  • Trin-op/ned regulator udgangsspænding (3.3V)
  • Justerbar trin-up regulator udgangsspænding (indstillet til 6V)

Trin 6: Prototyping - Motor Driver Carrier

Prototyping - Motorførerholder
Prototyping - Motorførerholder
Prototyping - Motorførerholder
Prototyping - Motorførerholder
Prototyping - Motorførerholder
Prototyping - Motorførerholder

DRV8833 dual motor driver carrier board kan levere 1,2A kontinuerlig og 2A spidsstrømme pr. Kanal. Vi forbinder de to kanaler parallelt for at drive en motor. Lod lodforbindelserne ved at følge nedenstående trin.

  • Parallelt de to indgange og de to udgange fra motorførerholderen som vist på billedet.
  • Tilslut inputkontrolkablerne til motordriveren.
  • Tilslut en 1000uF elektrolytkondensator og en 0.1uF keramisk kondensator på tværs af Vin- og Gnd -terminalerne på de to bærerkort.
  • Tilslut en 0.1uF keramisk kondensator på tværs af motordriverens udgangsterminaler.

Trin 7: Prototyping - Line Sensor Array Header

Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header

Teensy 3.6 har to ADC'er - ADC0 og ADC1, der er multiplekset til 25 tilgængelige pins. Vi kan få adgang til alle to pins fra de to ADC'er på samme tid. Vi tilslutter otte linjesensorer hver til ADC0 og ADC1. Sensorer med lige tal vil blive forbundet til ADC1 og ulige talssensorer til ADC0. Lod lodforbindelserne ved at følge nedenstående trin. Vi tilslutter senere linjesensoren ved hjælp af FFC til DIP -adapter og kabel.

  • Tilslut alle lige sensorstifter (16, 14, 12, 10, 8, 6, 4, 2) som vist på billedet. Før ledningen til tilslutning af sensorstift 12 gennem bagsiden af perfboardet.
  • Tilslut senderens kontrolpind (EVEN) til Teensy pin 30.
  • Tilslut alle ulige sensorstifter (15, 13, 11, 9, 7, 5, 3, 1) som vist på billedet.
  • Tilslut en 470uF elektrolytkondensator på tværs af Vcc og Gnd.

Hvis du nøje observerer linjesensorstifterne og deres tilsvarende headerstifter på perboardet, vil du bemærke, at den øverste række af linjesensoren er knyttet til den nederste række af headeren på perboardet og omvendt. Dette skyldes, at når vi forbinder linjesensoren til perfboardet ved hjælp af to rækker retvinklede overskrifter, vil rækkerne flugte korrekt. Det tog mig lang tid at finde ud af dette og rette pin -tildelingerne i programmet.

Trin 8: Prototyping - Micro Gear Motor og Encoder

Prototyping - Micro Gear Motor og Encoder
Prototyping - Micro Gear Motor og Encoder
  • Fastgør mikrometalgearmotoren med encoder ved hjælp af N20 -motorophæng.
  • Tilslut motor og encoder ledninger som vist på billedet.
  • Venstre encoder - Teensy pins 4 & 0
  • Højre encoder - teenagepinde 9 og 27

Trin 9: Prototyping - lysdioder

Prototyping - lysdioder
Prototyping - lysdioder
Prototyping - lysdioder
Prototyping - lysdioder

De to lysdioder angiver, om robotten har registreret et sving eller ej. Jeg har brugt en 470-ohm serie modstand til at forbinde lysdioderne med Teensy.

  • Venstre LED -anode til Teensy pin 6
  • Højre LED -anode til Teensy pin 8

Trin 10: Prototyping - Breakouts

Image
Image
Prototyping - Breakouts
Prototyping - Breakouts

Nu hvor vi har afsluttet al vores lodning på perfboardet, kan vi omhyggeligt skære langs grænsen markeret på perfboardet og fjerne de ekstra stykker perfboard. Monter også de to hjul og hjulet.

Indsæt alle breakout boards i deres respektive stikkontakter. Se videoen for at indsætte FFC-DIP-breakout og for at fastsætte QTRX-MD-16A-linjesensoren.

Trin 11: Oversigt over softwarebiblioteker

Oversigt over softwarebiblioteker
Oversigt over softwarebiblioteker

Vi programmerer Teensy i Arduino IDE. Vi skal bruge nogle biblioteker, før vi begynder. De biblioteker, vi vil bruge, er:

  • Encoder
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

Og nogle der er skrevet specielt til denne robot,

  • Trykknap
  • LineSensor
  • TeensyviewMenu
  • Motorer

De biblioteker, der er specifikke for denne robot, diskuteres detaljeret og kan downloades i de næste trin.

Trin 12: Biblioteker forklaret - PushButton

Dette bibliotek er til grænseflade mellem trykknappens udbrudstavle og Teensy. De anvendte funktioner er

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

Ved at kalde denne konstruktør ved at oprette et objekt, konfigureres trykknapperne til INPUT_PULLUP -tilstand.

int8_t waitForButtonPress (ugyldig);

Denne funktion venter, indtil der trykkes på en knap og slippes, og nøglekoden returneres.

int8_t getSingleButtonPress (void);

Denne funktion kontrollerer, om der trykkes på en knap og slippes. Hvis ja, returnerer nøglekoden ellers nul.

Trin 13: Biblioteker forklaret - Linjesensor

LineSensor er biblioteket til grænseflade mellem linjesensor array og Teensy. Følgende er de anvendte funktioner.

LineSensor (ugyldig);

Ved at kalde denne konstruktør ved at oprette et objekt initialiseres ADC0 og ADC1, læser tærskelværdier, minimums- og maksimumværdier fra EEPROM og konfigurerer sensorstifterne til inputtilstand og emitterkontrolstift til udgangstilstand.

tomrumskalibrering (uint8_t calibrationMode);

Denne funktion kalibrerer linjesensorerne. Kalibreringsmetoden kan enten være MIN_MAX eller MEDIAN_FILTER. Denne funktion forklares detaljeret i et senere trin.

void getSensorsAnalog (uint16_t *sensorValue, uint8_t mode);

Læser sensor array i en hvilken som helst af de tre tilstande, der blev sendt som argument. Tilstanden er emitteres tilstand og kan være ON, OFF eller TOGGLE. TOGGLE -tilstand kompenserer sensoraflæsninger af reflektans på grund af omgivende lys. Sensorerne forbundet til ADC0 og ADC1 læses synkront.

int getLinePosition (uint16_t *sensorValue);

Beregner sensorarrayets position over linjen ved hjælp af den vejede gennemsnitlige metode.

uint16_t getSensorsBinary (uint16_t *sensorValue);

Returnerer en 16-bit repræsentation af sensorernes tilstand. En binær angiver, at sensoren er over linjen, og et binært nul angiver, at sensoren er uden for linjen.

uint8_t countBinary (uint16_t binaryValue);

Ved at videregive 16-bit repræsentationen af sensorværdier til denne funktion returneres antallet af sensorer, der er over linjen.

void getSensorsNormalized (uint16_t *sensorValue, uint8_t mode);

Læser sensorværdierne og begrænser hver sensorværdi til de tilsvarende min- og maxværdier. Sensorværdierne kortlægges derefter fra deres tilsvarende min til max område til 0 til 1000 område.

Trin 14: Forklarede biblioteker - TeensyviewMenu

TeensyviewMenu er biblioteket, hvor funktionerne i displaymenuen kan åbnes. Følgende er de anvendte funktioner.

TeensyViewMenu (ugyldig);

At kalde denne konstruktør opretter et objekt i klassen LineSensor, PushButton og TeensyView.

void intro (void);

Dette er til at navigere i menuen.

void test (void);

Dette kaldes internt i menuen, når linjesensorværdierne skal vises på Teensyview til test.

Trin 15: Biblioteker forklaret - Motorer

Motors er biblioteket, der bruges til at køre de to motorer. Følgende er de anvendte funktioner.

Motorer (tomrum);

Ved at kalde denne konstruktør ved at oprette et objekt konfigureres motorretningskontrollen og PWM -styrepinde til udgangstilstand.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Opkald til denne funktion driver de to motorer med hastigheder, der er bestået som argumenter. Hastighedsværdien kan variere fra -255 til +255 med et negativt tegn, der angiver, at rotationsretningen er omvendt.

Trin 16: Test - Encoder Odometry

Vi vil teste de magnetiske hjulkodere og vise den position og afstand, der er dækket af robotten.

Upload DualEncoderTeensyview.ino. Programmet viser encoder -kryds på Teensyview. Encoderen markerer trinvis, hvis du flytter robotten fremad og reducerer, hvis du flytter den bagud.

Upload nu EncoderOdometry.ino. Dette program viser robotens position i form af xy-koordinater, viser den samlede afstand dækket i centimeter og vinklen drejet i grader.

Jeg har henvist til Implementing Dead Reckoning by Odometry on a Robot with R/C Servo Differential Drive af Seattle Robotics Society til bestemmelse af position ud fra encoder -flåter.

Trin 17: Test - Prop Shield Motion Sensors

Sørg for, at du har kalibreret bevægelsessensorerne ved at følge trinene nævnt her.

Upload nu PropShieldTeensyView.ino. Du bør kunne se accelerometer-, gyro- og magnetometerværdierne for alle tre akser på Teensyview.

Trin 18: Programoversigt

Programmet for den avancerede linjefolger er skrevet i Arduino IDE. Programmet fungerer i følgende rækkefølge forklaret nedenfor.

  • Værdier gemt i EEPROM læses, og menuen vises.
  • Når der trykkes på LAUNCH, går programmet i loop.
  • Normaliserede linjesensorværdier læses.
  • Binær værdi af linjeposition opnås ved hjælp af normaliserede sensorværdier.
  • Antallet af sensorer, der er over linjen, beregnes ud fra den binære værdi af linjepositionen.
  • Koderflåter opdateres og samlet distance tilbagelagt, xy-koordinater og vinkel opdateres.
  • For forskellige værdier af binærtælling fra 0 til 16 udføres et sæt instruktioner. Hvis det binære tal er i området 1 til 5, og hvis sensorerne, der er over linjen, støder op til hinanden, kaldes PID -rutinen. Rotation udføres i andre kombinationer af binær værdi og binært tal.
  • I PID -rutine (som faktisk er en PD -rutine) drives motorerne med hastigheder beregnet baseret på fejl, ændring i fejl, Kp og Kd -værdier.

Programmet måler i øjeblikket ikke orienteringsværdier fra prop shield. Dette er et igangværende arbejde og opdateres.

Upload TestRun20.ino. Vi vil se, hvordan du navigerer i menuen, justerer indstillinger og hvordan du kalibrerer linjesensorerne i de næste trin, hvorefter vi tester vores robot.

Trin 19: Navigering i menu og indstillinger

Menuen har følgende indstillinger, som kan navigeres ved hjælp af venstre og højre trykknapper og vælges ved hjælp af den midterste trykknap. Indstillingerne og deres funktioner er beskrevet nedenfor.

  1. KALIBRERING: Til kalibrering af linjesensorer.
  2. TEST: Visning af linjesensorværdier.
  3. LANCERING: For at starte linjen efter.
  4. MAX HASTIGHED: For at indstille den øvre grænse for robotens hastighed.
  5. ROTERINGSHASTIGHED: For at indstille den øvre grænse for robotens hastighed, når den udfører et sving, dvs. når begge hjul drejer med lige store hastigheder i modsatte retninger.
  6. KP: Proportionel konstant.
  7. KD: Afledt konstant.
  8. RUN MODE: For at vælge mellem to driftstilstande - NORMAL og ACCL. I NORMAL -tilstand kører robotten med foruddefinerede hastigheder svarende til linjepositionsværdier. I ACCL -tilstand erstattes robotens MAX SPEED med ACCL SPEED på foruddefinerede stadier af sporet. Dette kan bruges til at fremskynde robotten i lige dele af sporet. Følgende indstillinger er kun tilgængelige, hvis RUN MODE er indstillet til ACCL.
  9. LAP DISTANCE: For at indstille racerbanens samlede længde.
  10. ACCL SPEED: For at indstille robotens accelerationshastighed. Denne hastighed erstatter MAX SPEED på forskellige stadier af sporet som defineret nedenfor.
  11. INGEN. AF STAGE: Til at indstille antallet af trin, hvor ACCL SPEED bruges.
  12. TRINN 1: For at indstille start- og slutdistancerne for det trin, hvor MAX SPEED erstattes af ACCL SPEED. For hver etape kan start- og slutdistancerne indstilles separat.

Trin 20: Kalibrering af linjesensor

Image
Image

Linjesensorkalibrering er den proces, ved hvilken tærskelværdien for hver af de 16 sensorer bestemmes. Denne tærskelværdi bruges til at afgøre, om en bestemt sensor er over stregen eller ej. For at bestemme tærskelværdierne for 16 sensorer bruger vi en af de to metoder.

MEDIAN FILTER: I denne metode placeres linjesensorerne over den hvide overflade, og der foretages et foruddefineret antal sensoraflæsninger for alle 16 sensorer. Medianværdierne for alle 16 sensorer bestemmes. Den samme proces gentages efter placering af linjesensorerne over den sorte overflade. Tærskelværdien er gennemsnittet af medianværdier for sorte og hvide overflader.

MIN MAX: I denne metode læses sensorværdierne gentagne gange, indtil brugeren beder om et stop. De maksimale og mindste værdier, som hver sensor støder på, gemmes. Tærskelværdien er gennemsnittet af minimums- og maksimumværdier.

De således opnåede tærskelværdier kortlægges til 0 til 1000 område.

Kalibreringen af linjesensorer ved MIN MAX -metoden er vist i videoen. Efter kalibrering af linjesensorerne kan dataene visualiseres som vist på billedet. Følgende oplysninger vises.

  • En 16-bit binær repræsentation af linjeposition med en binær 1, der angiver, at den tilsvarende linjesensor er over linjen og en binær 0, der angiver, at linjesensoren er uden for linjen.
  • En optælling af det samlede antal sensorer, der er over stregen.
  • Minimum, maksimum og sensorværdier (rå og normaliseret) for de 16 sensorer, en sensor ad gangen.
  • Linjeposition i området -7500 til +7500.

Minimums- og maksimumlinjesensorværdierne gemmes derefter i EEPROM.

Trin 21: Testkørsel

Image
Image

Videoen er af en testkørsel, hvor robotten er programmeret til at stoppe, efter at den har gennemført en omgang.

Trin 22: Endelige tanker og forbedringer

Robotkonkurrence
Robotkonkurrence

Den hardware, der er sat sammen til at bygge denne robot, udnyttes ikke fuldt ud af det program, der driver den. Der kan foretages mange forbedringer på programdelen. Bevægelsessensorerne på propskærmen bruges ikke i øjeblikket til at bestemme position og orientering. Kilometertællingsdataene fra encodere kan kombineres med orienteringsdataene fra propskærm for nøjagtigt at bestemme robotens position og kurs. Disse data kan derefter bruges til at programmere robotten til at lære sporet i flere omgange. Jeg opfordrer dig til at eksperimentere med denne del og dele dine resultater.

Held og lykke.

Robotkonkurrence
Robotkonkurrence

Anden pris i robotkonkurrencen

Anbefalede: