Oppdatering: Smart Car, hardware siden


Her er en oppdatering av fremgang på hardware siden for de forrige 2 ukene:
Uke 11-17 nov. Målene for uka var:

  1. Å koble opp den fysiske platformen med arduino og driverkortet drevet fra batteriet, men ikke ennå koble sammen raspberry pi og arduino.
  2. Programmere systemet til å kjøre rett frem, rygge, og svinge/rotere.
  3. Finne avstander i forhold til rotasjon av hjul for å kunne beregne kjøre og svingeavstander basert på feedback fra sensorer når de blir koblet opp.

Jeg brukte breadboard vi fikk med i Arduino Nano pakken til å splitte strøm fra batteriet. I starten brukte jeg Arduino Nano til å gi både Arduino Mega og driverkortets 5V logikk regulert 5V strøm. Grunnet en manglende motstand i koblingen til jord og at driverkortet prøvde å kjøre på 5V slapp Arduino Nanoen fri den blå røyken i en diode på undersiden. Jeg fikk tak i en ny Nano, men har valgt å ikke bruke den siden da det ikke var noe behov for det. Nå brukes breadboard bare til å sette opp eller splitte koblinger og felles jord. Driverkortet forsyner sin egen 5V logikk med strøm fra batteri via egen spenningsregulator, og Arduino Mega tar også strøm fra batteriet til sin Vin via en motsand som begrenser strømtrekk og regulerer spenning selv. Mål 1 ble oppfyllt.

Når mål 1 var oppfylt kjørte jeg diverse testprogrammer som satt strøm på motorene med PWM signal til driverkortet for å kontrollere kraft, og kjørte blindt siden sensorene ikke var koblet inn ennå. Metoder for alle ønskede kjøremønstrene ble satt opp og fungerte. Det var forskjell i moment/kraft på motorene og litt feilballansering av vekten til komponentene om bord, så motorene måtte ha forskjellig kraft for å kjøre rett, og ved aktiv bremsing (bytte motorene til rygg med full fart) både bremset og svingte buggsteren. Mål 2 ble oppfylt.

Jeg målte opp diameter på hjulene, avstand mellom hjulene, avstander fra midtpunktet mellom hjulene, og hvor store overheng som var ut fra hjulene og fronthjulet. Ut fra dette regnet jeg ut svingradius (ett hjul i drift), rotasjonsradius(hjulene hver sin vei), og avstand pr hjulrotasjon og pr eike på hjulene. Dette igjen ble brukt til estimater for antall eiker rotasjon på hvert hjul for gitte grader rotasjon. Poenget med å måle pr eike var å bruke dette med transisjoner av sensorverdier som måler eiker som passerer på hjulene for å måle avstand, fart, svinging osv neste uken. Mål 3 ble oppfylt.

Uke 18-24 nov. Målene for uka var:

  1.  Koble til sensorer for måling av kjøreavstand, og få brukbar data fra disse.
  2. Bruke målinger fra sensorene til å se om fysiske mål tatt forrige uke stemte, og korrigere disse.
  3. Bruke sensordata i feedback loop til å kjøre rett en gitt avstand, korrigere kurs underveis, og stoppe etter avstanden.
  4. Bruke sensordata i en feedback loop til å svinge et gitt antall grader.

Grunnet en uoppdaget feilkobling av kabler gikk 5+ timer med til buggtesting av kjøreavstandssensorene via analoge readouts. Output fra sensorene er analoge data som måler reflektert lys. Når feilkoblingen ble oppdaget og en modifikasjon av koblingene med en ekstra motstand mellom sensor output og Arduino input ble sensordata konvertert til et digitalt signal som var både stabilt, responsivt og ganske nøyaktig. Mål 1 ble oppfyllt.

Jeg målte opp en meter og dyttet manuelt buggsteren mens Arduinoen telte og dumpet transisjoner av sensordata for begge hjulene til PC over seriell. De fysiske målene så ut til å stemme ganske bra fra avstand (ca 4% avvik fra estimert via mål med tommestokk), og målingene var så godt i sync som jeg klarte å dytte buggsteren rett. Mål 2 ble oppfylt.

Jeg laget en metode for å kjøre rett og kalibrere med sensordata i en feedback loop. Pga kraftforskjell mellom motorene måtte det korrigeres forskjellig PWM dutycycle for hjulene i software for å kjøre rett. På slutten av testing og kalibrering kjørte buggsteren 3m rett frem og stoppet innenfor et punkt grovt ca 15cm radius av punktet den var siktet på. (dette var grovkalibrering). Punkt 3 oppfylt som forventet, mer kalibrering senere.
Grunnet stor innlevering i et annet fag ble det ikke tid til mål 4.
Mål for denne uka (25 nov – 1 des):

  1. Bruke sensordata i en feedback loop til å svinge et gitt antall grader.
  2. Koble til IR sensor og bruke denne som stopp-trigger for krasjprevensjon.
  3. Koble til ultralyd sensor for avstandsmåling, få brukbare sensordata, estimere nøyaktighet ved avstander, og klargjøre for sending til Raspberry pi over seriell.
  4. Ta i mot kommandoer for kjøring over seriell fra Raspberry pi og eksekvere disse.
  5. Forbedre metoder (ved å bruke interrupts?) og jobbe på bedre kalibrering av sensordata sampling/tolking og feedback loops for mer nøyaktig navigasjon.

(edit med bilder og muligens video av blind kjøretest fra forrige 2 uker kommer)


Leave a Reply