Innholdsfortegnelse:

Avansert linje etter robot: 22 trinn (med bilder)
Avansert linje etter robot: 22 trinn (med bilder)

Video: Avansert linje etter robot: 22 trinn (med bilder)

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

Dette er en avansert linje etter robot basert på Teensy 3.6 og QTRX linjesensor som jeg har bygget og har jobbet med ganske lenge. Det er noen store forbedringer i design og ytelse fra min tidligere serie etter robot. Hastigheten og responsen til roboten har blitt bedre. Den generelle strukturen er kompakt og lett. Komponentene er plassert nær hjulaksen for å minimere vinkelmomentet. Høyeffektive mikrometallgirmotorer gir tilstrekkelig dreiemoment og aluminiumsnav silikonhjul gir tiltrengt trekkraft ved høye hastigheter. Propskjerm og hjulkodere gjør at roboten kan bestemme posisjonen og retningen. Med Teensyview montert om bord, kan all relevant informasjon visualiseres og viktige programparametere oppdateres ved hjelp av trykknapper.

For å begynne å bygge denne roboten trenger du følgende rekvisita (og mye tid og tålmodighet til din disposisjon).

Rekvisita

Elektronikk

  • Teensy 3.6 Development Board
  • Prop Shield med bevegelsessensorer
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Array for reflekssensorer
  • 15x20cm dobbeltsidig prototype PCB
  • Pololu Step-Up/Step-Down Spenningsregulator S9V11F3S5
  • Pololu justerbar 4-5-20V trinnvis spenningsregulator U3V70A
  • MP12 6V 1580 o / min mikro girmotor med encoder (x2)
  • DRV8833 Dual Motor Driver Carrier (x2)
  • 3,7V, 750mAh Li-Po batteri
  • På / av bryter
  • Elektrolytisk kondensator 470uF
  • Elektrolytisk kondensator 1000uF (x2)
  • Keramisk kondensator 0.1uF (x5)
  • Trykknapper (x3)
  • 10mm grønn LED (x2)

Maskinvare

  • Atom Silikonhjul 37x34mm (x2)
  • Pololu Ball Caster med 3/8”metallball
  • N20 motorfeste (x2)
  • Bolt og muttere

Kabler og kontakter

  • 24AWG fleksible ledninger
  • 24 -pins FFC til DIP breakout og FFC -kabel (Type A, 150 mm lengde)
  • Rund kvinnelig pin -overskrift
  • Rund kvinnelig pin header lang terminal
  • Høyvinklet toraders kvinnelig overskrift
  • Rettvinklet toraders hannoverskrift
  • Male pin header
  • Mannlig nålpinnehode

Verktøy

  • Multimeter
  • Loddejern
  • Loddetråd
  • Wire stripper
  • Wire cutter

Trinn 1: Systemoversikt

Som med min tidligere design av en selvbalanserende robot, er denne roboten en samling av breakout-brett montert på et perfboard som også tjener formålet med en struktur.

De viktigste systemene til roboten er skissert nedenfor.

Mikrokontroller: Teensy 3.6 utviklingstavle med 32-biters 180MHz ARM Cortex-M4-prosessor.

Linjesensor: Pololus QTRX-MD-16A 16-kanals analoge utgangssensorserie i middels tetthet (8 mm sensorhøyde).

Drive: 6V, 1580rpm, mikrometallgirkasser med høy effekt med magnetisk hjulkoder og silikonhjul montert på aluminiumsnav.

Kilometerteller: Magnetiske hjulkoderpar for estimering av koordinater og tilbakelagt avstand.

Orienteringssensor: Propskjerm med bevegelsessensorer for estimering av posisjon og kurs for roboten.

Strømforsyning: 3,7V, 750mAh lipo -batteri som strømkilde. 3.3V trinn-opp/ned-regulator driver mikrokontroller, sensorer og displayenhet. Justerbar trinn-opp regulator driver de to motorene.

Brukergrensesnitt: Teensyview for visning av informasjon. Utbrudd med tre knapper for å akseptere brukerinnganger. To tall med grønne lysdioder med en diameter på 10 mm for statusindikasjon mens du kjører.

Trinn 2: La oss starte prototyping

Image
Image

Vi skal implementere kretsen ovenfor på perfboardet. Vi må først holde utbruddstavlene klare ved å lodde overskrifter på dem. Videoen vil gi en ide om hvilke overskrifter som skal loddes på hvilke utbruddstavler.

Etter lodding av overskrifter på utbruddstavler, kan du stable Teensyview og trykknapputbrudd på toppen av Teensy.

Trinn 3: Prototyping - Perfboard

Prototyping - Perfboard
Prototyping - Perfboard

Skaff 15x20cm dobbeltsidig prototype perfboard og merk grensen med en permanent markør som vist på bildet. Bor hull i størrelse M2 for montering av sensorarrangementet, hjulet og mikrometallgirmotorer på steder merket med en hvit sirkel. Vi vil senere kutte perfboardet langs grensen etter lodding og testing av alle komponentene.

Vi begynner vår prototyping med å lodde toppnålene og stikkontaktene på perfboardet. Utbruddstavlene vil senere bli satt inn på disse overskriftene. Vær nøye med posisjonen til topptekstene på perfboardet. Vi vil koble alle ledninger basert på denne oppsettet av overskrifter.

Trinn 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 skal først lodde tilkoblingene til støtteskjoldet. Siden vi bare bruker bevegelsessensorene til støtteskjoldet, må vi bare koble til SCL-, SDA- og IRQ -pinner bortsett fra 3V- og bakkepinnene på støtteskjoldet.

Når tilkoblingen er fullført, setter du inn Teensy og støtteskjerm og kalibrerer bevegelsessensorene ved å følge trinnene som er nevnt her.

Trinn 5: Prototyping - Power and Ground

Prototyping - kraft og grunn
Prototyping - kraft og grunn

Lodd alle strøm- og jordforbindelsene som refererer til bildet. Sett inn alle breakout boards på plass og sikre kontinuitet ved hjelp av et multimeter. Kontroller de forskjellige spenningsnivåene om bord.

  • Li-po utgangsspenning (vanligvis mellom 3V og 4,2V)
  • Trinn opp/ned regulator utgangsspenning (3.3V)
  • Justerbar trinn-ut regulator utgangsspenning (satt til 6V)

Trinn 6: Prototyping - Motor Driver Carrier

Prototyping - Motorførerbærer
Prototyping - Motorførerbærer
Prototyping - Motorførerbærer
Prototyping - Motorførerbærer
Prototyping - Motorførerbærer
Prototyping - Motorførerbærer

DRV8833 dual motor driver carrier board kan levere 1,2A kontinuerlig og 2A toppstrømmer per kanal. Vi kobler de to kanalene parallelt for å drive en motor. Lodd tilkoblingene ved å følge trinnene nedenfor.

  • Parallelt de to inngangene og de to utgangene til motorførerdriveren som vist på bildet.
  • Koble inngangskontrolltrådene til motordriveren.
  • Koble en 1000uF elektrolytisk kondensator og en 0.1uF keramisk kondensator på tvers av Vin- og Gnd -terminalene på de to bærerkortene.
  • Koble til en 0,1 uF keramisk kondensator på tvers av motordriverens utgangsterminaler.

Trinn 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 ADCer - ADC0 og ADC1 som er multiplekset til 25 tilgjengelige pinner. Vi kan få tilgang til to pins fra de to ADC -ene samtidig. Vi vil koble åtte linjesensorer hver til ADC0 og ADC1. Partallsensorene blir koblet til ADC1 og oddetallssensorer til ADC0. Lodd tilkoblingene ved å følge trinnene nedenfor. Vi vil senere koble linjesensoren ved hjelp av FFC til DIP -adapter og kabel.

  • Koble alle jevne sensorpinner (16, 14, 12, 10, 8, 6, 4, 2) som vist på bildet. Før ledningen for tilkobling av sensorstift 12 gjennom baksiden av perfboardet.
  • Koble senderens kontrollpinne (EVEN) til Teensy pin 30.
  • Koble alle oddssensorpinnene (15, 13, 11, 9, 7, 5, 3, 1) som vist på bildet.
  • Koble til en 470uF elektrolytisk kondensator på tvers av Vcc og Gnd.

Hvis du nøye observerer linjesensorpinnene og de tilhørende toppnålene på perboardet, vil du legge merke til at den øverste raden i linjesensoren kartlegger den nederste raden i toppteksten på perboardet og omvendt. Dette er fordi når vi kobler linjesensoren til perfboardet ved hjelp av to raders rettvinklede overskrifter, vil radene justeres riktig. Det tok meg ganske lang tid å finne ut av dette og korrigere pin -oppgavene i programmet.

Trinn 8: Prototyping - Micro Gear Motor og Encoder

Prototyping - Micro Gear Motor og Encoder
Prototyping - Micro Gear Motor og Encoder
  • Fest mikrometallgirmotoren med encoder ved hjelp av N20 -motorfester.
  • Koble til motor- og kodertrådene som vist på bildet.
  • Venstre encoder - Teensy pins 4 & 0
  • Høyre encoder - Teensy pins 9 og 27

Trinn 9: Prototyping - lysdioder

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

De to lysdiodene indikerer om roboten har oppdaget en sving eller ikke. Jeg har brukt en motstand i 470 ohm-serien for å koble lysdiodene til Teensy.

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

Trinn 10: Prototyping - Breakouts

Image
Image
Prototyping - Breakouts
Prototyping - Breakouts

Nå som vi har fullført all lodding på perfboardet, kan vi forsiktig kutte langs grensen som er merket på perfboardet og fjerne de ekstra bitene av perfboard. Fest også de to hjulene og hjulet.

Sett alle breakout -brettene i de respektive stikkontaktene. For å sette inn FFC-DIP breakout og for å fikse QTRX-MD-16A linjesensoren, se videoen.

Trinn 11: Oversikt over programvarebiblioteker

Oversikt over programvarebiblioteker
Oversikt over programvarebiblioteker

Vi skal programmere Teensy i Arduino IDE. Vi trenger noen biblioteker før vi begynner. Bibliotekene vi skal bruke er:

  • Koder
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

Og noen som er skrevet spesielt for denne roboten,

  • Trykknapp
  • LineSensor
  • TeensyviewMeny
  • Motorer

Bibliotekene som er spesifikke for denne roboten, blir diskutert i detalj og kan lastes ned i de neste trinnene.

Trinn 12: Biblioteker forklart - PushButton

Dette biblioteket er for grensesnitt mellom trykknappbryterbrettet og Teensy. Funksjonene som brukes er

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

Når du kaller denne konstruktøren ved å opprette et objekt, konfigureres trykknappene til INPUT_PULLUP -modus.

int8_t waitForButtonPress (ugyldig);

Denne funksjonen venter til en knapp trykkes og slippes og returnerer nøkkelkoden.

int8_t getSingleButtonPress (void);

Denne funksjonen sjekker om en knapp trykkes og slippes. Hvis ja, returnerer nøkkelkoden ellers null.

Trinn 13: Biblioteker forklart - Linjesensor

LineSensor er biblioteket for grensesnitt mellom linjesensormatrisen og Teensy. Følgende er funksjonene som brukes.

LineSensor (ugyldig);

Å ringe denne konstruktøren ved å opprette et objekt initialiserer ADC0 og ADC1, leser terskel-, minimums- og maksimumsverdier fra EEPROM og konfigurerer sensorpinnene til inngangsmodus og senderens kontrollpinne til utgangsmodus.

ugyldig kalibrering (uint8_t calibrationMode);

Denne funksjonen kalibrerer linjesensorene. Kalibreringsmodus kan enten være MIN_MAX eller MEDIAN_FILTER. Denne funksjonen forklares i detalj i et senere trinn.

void getSensorsAnalog (uint16_t *sensorValue, uint8_t mode);

Leser sensormatrisen i hvilken som helst av de tre modusene som ble sendt som argument. Modusen er tilstanden til emitterne og kan være PÅ, AV eller VIKLE. TOGGLE -modus kompenserer sensoravlesningene av reflektans på grunn av omgivende lys. Sensorene koblet til ADC0 og ADC1 leses synkront.

int getLinePosition (uint16_t *sensorValue);

Beregner posisjonen til sensormatrisen over linjen ved hjelp av metoden for vektet gjennomsnitt.

uint16_t getSensorsBinary (uint16_t *sensorValue);

Returnerer en 16-biters representasjon av sensorenes tilstand. En binær indikerer at sensoren er over linjen og en binær null indikerer at sensoren er utenfor linjen.

uint8_t countBinary (uint16_t binaryValue);

Ved å sende 16-biters representasjon av sensorverdier til denne funksjonen returneres antallet sensorer som er over linjen.

void getSensorsNormalized (uint16_t *sensorValue, uint8_t mode);

Leser sensorverdiene og begrenser hver sensorverdi til de tilsvarende min- og maksverdiene. Sensorverdiene blir deretter kartlagt fra sitt tilsvarende min til maks område til 0 til 1000 område.

Trinn 14: Biblioteker forklart - TeensyviewMenu

TeensyviewMenu er biblioteket der du kan få tilgang til funksjonene for visningsmenyen. Følgende er funksjonene som brukes.

TeensyViewMenu (ugyldig);

Ved å kalle denne konstruktøren opprettes et objekt av klassen LineSensor, PushButton og TeensyView.

void intro (void);

Dette er for å navigere i menyen.

void test (void);

Dette kalles internt i menyen når linjesensorverdiene skal vises på Teensyview for testing.

Trinn 15: Biblioteker forklart - Motorer

Motors er biblioteket som brukes til å kjøre de to motorene. Følgende er funksjonene som brukes.

Motorer (tomrom);

Når du kaller denne konstruktøren ved å opprette et objekt, konfigureres motorretningskontrollen og PWM -kontrollpinnene til utgangsmodus.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Å kalle denne funksjonen driver de to motorene med hastigheter som passeres som argumenter. Verdien av hastigheten kan variere fra -255 til +255 med et negativt tegn som indikerer at rotasjonsretningen er reversert.

Trinn 16: Testing - Encoder Odometry

Vi vil teste de magnetiske hjulkoderne og vise posisjonen og avstanden som er dekket av roboten.

Last opp DualEncoderTeensyview.ino. Programmet viser koderen merker på Teensyview. Koderen merker av trinn hvis du flytter roboten fremover og reduserer hvis du flytter den bakover.

Last nå opp EncoderOdometry.ino. Dette programmet viser posisjonen til roboten når det gjelder x-y-koordinater, viser den totale avstanden dekket i centimeter og vinkelen snudd i grader.

Jeg har henvist til Implementing Dead Reckoning by Odometry on a Robot with R/C Servo Differential Drive av Seattle Robotics Society for å bestemme posisjon fra encoder flått.

Trinn 17: Testing - Prop Shield Motion Sensors

Sørg for at du har kalibrert bevegelsessensorene ved å følge trinnene som er nevnt her.

Last nå opp PropShieldTeensyView.ino. Du bør kunne se akselerometer-, gyro- og magnetometerverdiene for alle tre aksene på Teensyview.

Trinn 18: Programoversikt

Programmet for den avanserte linjefolgeren er skrevet i Arduino IDE. Programmet fungerer i følgende sekvens forklart nedenfor.

  • Verdier lagret i EEPROM leses og menyen vises.
  • Når du trykker på LAUNCH, går programmet inn i løkken.
  • Normaliserte linjesensorverdier leses.
  • Binærverdi for linjeposisjon oppnås ved bruk av normaliserte sensorverdier.
  • Antall sensorer som er over linjen, beregnes ut fra den binære verdien av linjeposisjonen.
  • Koderflått oppdateres og total distanse dekkes, x-y-koordinater og vinkel oppdateres.
  • For forskjellige verdier av binærtall fra 0 til 16, utføres et sett med instruksjoner. Hvis det binære antallet er i området 1 til 5, og hvis sensorene som er over linjen er ved siden av hverandre, kalles PID -rutinen. Rotasjon utføres i andre kombinasjoner av binær verdi og binærtall.
  • I PID -rutinen (som faktisk er en PD -rutine) drives motorene med hastigheter beregnet basert på feil, endring i feil, Kp og Kd -verdier.

Programmet måler for øyeblikket ikke orienteringsverdier fra prop shield. Dette er et arbeid som pågår og oppdateres.

Last opp TestRun20.ino. Vi vil se hvordan du navigerer i menyen, justerer innstillinger og hvordan vi kalibrerer linjesensorene i de neste trinnene som vi vil teste roboten vår på.

Trinn 19: Navigere i meny og innstillinger

Menyen har følgende innstillinger som kan navigeres med venstre og høyre trykknapp og velges med den midtre knappen. Innstillingene og deres funksjoner er beskrevet nedenfor.

  1. KALIBRERE: For å kalibrere linjesensorer.
  2. TEST: For å vise linjesensorverdier.
  3. LANSERING: For å starte linjen etter.
  4. MAX SPEED: For å angi den øvre grensen for robotens hastighet.
  5. ROTERINGSHASTIGHET: For å angi den øvre grensen for robotens hastighet når den utfører en sving, dvs. når begge hjulene svinger med like hastighet i motsatte retninger.
  6. KP: proporsjonal konstant.
  7. KD: Derivativ konstant.
  8. RUN MODE: For å velge mellom to driftsmoduser - NORMAL og ACCL. I NORMAL -modus kjører roboten med forhåndsdefinerte hastigheter som tilsvarer linjeposisjonsverdier. I ACCL -modus erstattes MAX SPEED for roboten med ACCL SPEED på forhåndsdefinerte stadier av sporet. Dette kan brukes til å få fart på roboten i rette deler av sporet. Følgende innstillinger er bare tilgjengelige hvis RUN MODE er angitt som ACCL.
  9. LAP DISTANCE: For å angi den totale lengden på racerbanen.
  10. ACCL SPEED: For å stille inn akselerasjonshastigheten til roboten. Denne hastigheten erstatter MAX SPEED på forskjellige stadier av sporet som definert nedenfor.
  11. NEI. AV STEGER: For å angi antall trinn der ACCL SPEED brukes.
  12. TRINN 1: For å angi start- og sluttavstandene til trinnet der MAX SPEED erstattes med ACCL SPEED. For hver etappe kan start- og sluttavstandene settes separat.

Trinn 20: Kalibrering av linjesensor

Image
Image

Linjesensorkalibrering er prosessen der terskelverdien til hver av de 16 sensorene bestemmes. Denne terskelverdien brukes til å bestemme om en bestemt sensor er over linjen eller ikke. For å bestemme terskelverdiene til 16 sensorer, bruker vi en av de to metodene.

MEDIAN FILTER: I denne metoden plasseres linjesensorene over den hvite overflaten og et forhåndsdefinert antall sensoravlesninger tas for alle 16 sensorene. Medianverdiene til alle 16 sensorene bestemmes. Den samme prosessen gjentas etter at linjesensorene er plassert over den svarte overflaten. Terskelverdien er gjennomsnittet av medianverdier for svarte og hvite overflater.

MIN MAX: I denne metoden leses sensorverdiene gjentatte ganger til brukeren ber om stopp. Maksimums- og minimumsverdiene for hver sensor lagres. Terskelverdien er gjennomsnittet av minimums- og maksimumsverdier.

Terskelverdiene som er oppnådd blir kartlagt til 0 til 1000 område.

Kalibreringen av linjesensorer med MIN MAX -metoden er vist i videoen. Etter kalibrering av linjesensorene kan dataene visualiseres som vist på bildet. Følgende informasjon vises.

  • En 16-biters binær representasjon av linjeposisjon med en binær 1 som indikerer at den tilsvarende linjesensoren er over linjen og en binær 0 som indikerer at linjesensoren er utenfor linjen.
  • En telling av det totale antallet sensorer som er over linjen.
  • Minimum, maksimum og sensorverdier (rå og normalisert) for de 16 sensorene, én sensor om gangen.
  • Linjeposisjon i området -7500 til +7500.

Minimum og maksimum linjesensorverdier lagres deretter i EEPROM.

Trinn 21: Testkjøring

Image
Image

Videoen er av en testkjøring der roboten er programmert til å stoppe etter at den har fullført en runde.

Trinn 22: Endelige tanker og forbedringer

Robotkonkurranse
Robotkonkurranse

Maskinvaren som er satt sammen for å bygge denne roboten, utnyttes ikke fullt ut av programmet som driver den. Mange forbedringer kan gjøres på programdelen. Bevegelsessensorene til støtteskjoldet brukes for øyeblikket ikke til å bestemme posisjon og retning. Kilometertelldataene fra kodere kan kombineres med orienteringsdataene fra støtteskjoldet for å bestemme posisjonen og kursen til roboten nøyaktig. Disse dataene kan deretter brukes til å programmere roboten til å lære sporet i flere runder. Jeg oppfordrer deg til å eksperimentere med denne delen og dele resultatene dine.

Lykke til.

Robotkonkurranse
Robotkonkurranse

Andre pris i robotkonkurransen

Anbefalt: