Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Systemoversikt
- Trinn 2: La oss starte prototyping
- Trinn 3: Prototyping - Perfboard
- Trinn 4: Prototyping - Prop Shield
- Trinn 5: Prototyping - Power and Ground
- Trinn 6: Prototyping - Motor Driver Carrier
- Trinn 7: Prototyping - Line Sensor Array Header
- Trinn 8: Prototyping - Micro Gear Motor og Encoder
- Trinn 9: Prototyping - lysdioder
- Trinn 10: Prototyping - Breakouts
- Trinn 11: Oversikt over programvarebiblioteker
- Trinn 12: Biblioteker forklart - PushButton
- Trinn 13: Biblioteker forklart - Linjesensor
- Trinn 14: Biblioteker forklart - TeensyviewMenu
- Trinn 15: Biblioteker forklart - Motorer
- Trinn 16: Testing - Encoder Odometry
- Trinn 17: Testing - Prop Shield Motion Sensors
- Trinn 18: Programoversikt
- Trinn 19: Navigere i meny og innstillinger
- Trinn 20: Kalibrering av linjesensor
- Trinn 21: Testkjøring
- Trinn 22: Endelige tanker og forbedringer
Video: Avansert linje etter robot: 22 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
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
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
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
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
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
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
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
- 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
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
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
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.
- KALIBRERE: For å kalibrere linjesensorer.
- TEST: For å vise linjesensorverdier.
- LANSERING: For å starte linjen etter.
- MAX SPEED: For å angi den øvre grensen for robotens hastighet.
- 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.
- KP: proporsjonal konstant.
- KD: Derivativ konstant.
- 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.
- LAP DISTANCE: For å angi den totale lengden på racerbanen.
- ACCL SPEED: For å stille inn akselerasjonshastigheten til roboten. Denne hastigheten erstatter MAX SPEED på forskjellige stadier av sporet som definert nedenfor.
- NEI. AV STEGER: For å angi antall trinn der ACCL SPEED brukes.
- 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
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
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
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.
Andre pris i robotkonkurransen
Anbefalt:
Linje etter robot: 5 trinn
Line Following Robot: Hei alle, I denne instruksen vil jeg dele hvordan du lager en Line Following Robot ved hjelp av et sett fra Amazon. Jeg brukte dette settet til å lære barnet mitt hvordan man lodde. Vanligvis er disse settene rett frem, du får alt materiale, komponenter osv. Med settet
Linje etter robot ved bruk av TIVA Microcontroller TM4C1233H6PM: 3 trinn
Linjefølge -robot ved bruk av TIVA Microcontroller TM4C1233H6PM: En linje etter robot er en allsidig maskin som brukes til å oppdage og ta etter de mørke linjene som er tegnet på den hvite overflaten. Siden denne roboten er produsert ved hjelp av et brødbrett, vil den være usedvanlig enkel å bygge. Dette systemet kan smeltes sammen
Hvordan lage en linje etter robot ved hjelp av Rpi 3: 8 trinn
Hvordan lage en linje etter robot ved hjelp av Rpi 3: I denne opplæringen lærer du å bygge en linjefølgende robotbuggy slik at den enkelt kan suse rundt et spor
Linje etter robot: 3 trinn
Linjefølgende robot: En linje etter robot er en allsidig maskin som brukes til å oppdage og ta etter de mørke linjene som er tegnet på den hvite overflaten. Siden denne roboten er produsert ved hjelp av et brødbrett, vil den være usedvanlig enkel å bygge. Dette systemet kan smeltes sammen
PID-basert linje etter robot med POLOLU QTR 8RC-sensor Array: 6 trinn (med bilder)
PID-basert linje etter robot med POLOLU QTR 8RC-sensor Array: Hei! Dette er min første oppskrift på instrukser, og i dag tar jeg deg nedover veien, og forklarer hvordan du kan mobbe en PID-basert linje etter robot ved hjelp av QTR-8RC før vi går videre til bygningen av roboten, må vi forstå