Innholdsfortegnelse:

Arbeidende RC -bilhastighetsmåler: 4 trinn (med bilder)
Arbeidende RC -bilhastighetsmåler: 4 trinn (med bilder)

Video: Arbeidende RC -bilhastighetsmåler: 4 trinn (med bilder)

Video: Arbeidende RC -bilhastighetsmåler: 4 trinn (med bilder)
Video: Тайна Великой Китайской Стены 2024, November
Anonim
Arbeidende RC bilhastighetsmåler
Arbeidende RC bilhastighetsmåler

Dette er et kort prosjekt som jeg opprettet som en del av en større RC -konstruksjon av en lett Land Rover. Jeg bestemte meg for at jeg hadde lyst til å ha et arbeidshastighetsmåler i dashbordet, men jeg visste at en servo ikke ville kutte det. Det var bare ett rimelig alternativ: distribuer arduinoen!

Litt bakgrunn til å begynne med … Jeg er ikke en kodende eller elektronisk person. Jeg tenker fortsatt på elektrisitet når det gjelder vannføring og er litt mystifisert av motstander. Når det er sagt, hvis jeg var i stand til å få dette til å fungere, så burde du også kunne det!

DELELISTE:

Mikrokontroller: Jeg brukte en ATTiny85 -brikke, som kostet omtrent £ 1 hver.

Mikrokontrollerprogrammerer: For å få koden på brikken trenger du en måte å programmere den på. Med vanlig arduino er dette bare en USB -kabel, men for ATTiny -brikken trenger du noe ekstra. Du kan bruke en annen arduino til å gjøre dette, eller som meg kan du bruke en liten AVR -programmerer fra Sparkfun.

learn.sparkfun.com/tutorials/tiny-avr-prog…

Jeg vil anbefale dette, siden jeg har prøvd å programmere dem med forskjellige metoder, og denne er den enkleste. Brettet er litt dyrt, men en god investering hvis du gjør mange ATTiny -prosjekter.

8 Pin Chip Socket: Hvis du setter brikken i en stikkontakt i stedet for å lodde den direkte, har du råd til deg noen feil ved montering. Talt av erfaring - ingen vil desolde sjetonger for å omprogrammere dem.

Kondensator: En avkoblingskondensator på 100nF (kode 104) brukes. Jeg forstår ikke helt hvorfor, men jeg leste at frakoblingskondensatorer er viktige på internett, så det må være sant …

Motstand: En 10kΩ motstand brukes til å trekke linjen ned i arduinoen. Igjen, enda et mysterium om elektronikk.

Perfboard/Stripboard: Noen baseboard som du kan montere kretsen på.

Winding Wire: Vanlig mantlet ledning er for tykk til å loddes på motoren. Bruk av fin emaljert ledning vil redusere belastningen på motorterminalene og gjøre livet ditt mye enklere.

Servotråd: Et bånd med tre ledninger som ender i en 3-pinners JR hunkontakt. Jeg fikk min fra en utbrent servo som jeg "modifiserte".

Stepper Motor: Jeg brukte en 6 mm bipolar Nidec stepper motor. Enhver liten stepper bør fungere, selv om den skal være liten, ettersom stepper blir kjørt direkte fra Arduino.

Toppstifter: Ikke avgjørende, men hvis du kobler stepper til 4 toppstifter og setter en kontakt på kretsen din, kan du enkelt koble fra dashbordet for enkel installasjon.

Datamaskin: For å programmere brettet trenger du en datamaskin. Muligens med Arduino IDE. Og kanskje en USB -kabel. Hvis den også har en strømkabel, så enda bedre.

Trinn 1: Systemet

Den grunnleggende oversikten over systemet jeg opprettet, var en metode der PWM -signalet (Pulse Width Modulation) som kommer fra RC -mottakeren konverteres til et trinnmotorsvei via en ATTiny 85 mikrokontroller (uC).

Her er en ressurs om PWM -signaler og RC, men for å replikere dette trenger du ikke strengt å forstå det.

en.wikipedia.org/wiki/Servo_control

ATTiny er min favorittsmak av Arduino fordi den er liten med nok I/O -pinner til å gjøre grunnleggende ting, så den passer perfekt inn i små modeller og RC -prosjekter. Den største ulempen med ATTiny er at den krever litt mer oppsett for å programmere en, men når du har konfigurert den, er de så billige at du kan kjøpe stabler av dem til alle slags prosjekter.

Størrelsen på hastighetsmåleren er for liten til å ha en girmotor med tilbakemelding, så for å få en proporsjonal respons måtte en trinnmotor brukes. En trinnmotor er en motor som beveges i diskrete mengder (eller trinn …!), Noe som gjør den ideell for et system uten tilbakemelding som dette. Den eneste advarselen er at trinnene vil føre til at den resulterende bevegelsen blir rykkete i motsetning til jevn. Hvis du får en stepper med nok trinn per rotasjon, er det ikke merkbart, men med stepper som jeg brukte i dette prosjektet har bare 20 eller så trinn i en full rotasjon, er vinkelhoppet ganske dårlig.

Systemet, ved oppstart, vil kjøre stepperen bakover i to omdreininger for å nullstille nålen. Hastighetsmåleren trenger en hvilepinne der du vil at nullmerket skal være, ellers vil det bare snurre for alltid. Deretter kartlegger det PWM -signalene forover og bakover til et bestemt antall trinn i motoren. Lett, ikke sant?

Trinn 2: Programvaren

Ansvarsfraskrivelse: Jeg er ikke en programmerer. For dette prosjektet er jeg den digitale ekvivalenten til Dr. Frankenstein, som samler noe som fungerer ut fra forskjellige funnet kodebiter.

Så min hjerteligste takk går til Duane B, som laget koden for å tolke RC -signaler:

rcarduino.blogspot.com/

Og til Ardunaut, som laget koden for å kjøre en stepper som en analog måler:

arduining.com/2012/04/22/arduino-driving-a…

Og til begge, mine mest oppriktige unnskyldninger for det jeg gjorde med koden din.

Nå er det ute av veien, her er hva du skal laste opp til ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - bruk avbruddsnummeret i vedlegg Interrupt #definer THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - bruk PIN -nummeret i digitalRead #define NEUTRAL_THROTTLE 1500 // av nøytral gass på en elektrisk RC -bil #define UPPER_THROTTLE 2000 // dette er varigheten i mikrosekunder for maksimal gass på en elektrisk RC -bil #define LOWER_THROTTLE 1000 // dette er varigheten i mikrosekunder av nminimum gass på en elektrisk RC -bil #define DEADZONE 50 // dette er gassens dødsone. Den totale dødsonen er dobbelt så høy. #include #define STEPS 21 // trinn per omdreining (begrenset til 315 °) Endre dette for å justere hastighetsmålerens maksimale kjøring. #define COIL1 3 // Coil Pins. ATTiny bruker pinnene 0, 1, 3, 4 for stepper. Pin 2 er den eneste pin som kan håndtere avbrudd, så det må være input. #define COIL2 4 // Prøv å endre disse hvis trinnmotoren ikke fungerer som den skal. #define COIL3 0 #define COIL4 1 // opprett en forekomst av stepper -klassen: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Posisjon i trinn (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // tid for å tilbakestille mens den er på tomgangshjul int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; flyktig usignert lang StartPeriod = 0; // satt i interrupt // vi kunne bruke nThrottleIn = 0 i loop i stedet for en separat variabel, men ved å bruke bNewThrottleSignal for å indikere at vi har et nytt signal // er det tydeligere for dette første eksempelet tomromskonfigurasjon () {// fortell Arduino vi vil at funksjonen calcInput skal kalles når INT0 (digital pin 2) endres fra HIGH til LOW eller LOW til HIGH // å fange disse endringene vil tillate oss å beregne hvor lenge inngangspulsen er attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // sett motorhastigheten til 30 o/ min (360 PPS ca.). stepper.step (TRINN * 2); // Tilbakestill posisjon (X trinn mot klokken). } void loop () {Resetval = millis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Tilbakestilling = 0; } // Omvendt kartlegging ellers hvis (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Tilbakestilling = 0; } // Utenfor rekkevidde øvre ellers hvis (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Tilbakestilling = 0; } // Utenfor området lavere annet hvis (ThrottleInAvg Resetcounter) {stepper.step (4); // Jeg prøver å be trinneren om å tilbakestille seg selv hvis RC-signalet er i dødssonen i lang tid. Ikke sikker på om denne delen av koden faktisk fungerer. }} int val = SPEED; // få potensiometerverdien (område 0-1023) val = map (val, 0, 255, 0, STEG * 0,75); // kartgryteområde i stepperområdet. hvis (abs (val - pos)> 2) {// hvis forskjellen er større enn 2 trinn. hvis ((val - pos)> 0) {stepper.step (-1); // flytt ett trinn til venstre. pos ++; } hvis ((val - pos) <0) {stepper.step (1); // flytt ett trinn til høyre. pos--; }} // forsinkelse (10); } void calcInput () {// hvis pinnen er høy, er starten på et avbrudd hvis (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// få tid til å bruke mikro - når koden vår blir veldig travel, blir dette unøyaktig, men for den nåværende applikasjonen er den // lett å forstå og fungerer veldig bra StartPeriod = micros (); } annet {// hvis pinnen er lav, er det den fallende kanten av pulsen, så nå kan vi beregne pulsvarigheten ved å trekke // starttiden ulStartPeriod fra gjeldende tid som returneres av mikro () hvis (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Se dette for mer informasjon om programmering av en ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

Trinn 3: Maskinvaren

Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren

Se kretsdiagrammet for å bygge kretsen. Hvordan du monterer det er opp til deg, men jeg vil foreslå å bruke litt stripboard/perfboard som brukes til prototyping av kretskort, og montere brikken i en stikkontakt.

C1 = 100nF

R1 = 10kΩ

Kondensatoren bør monteres så nær brikken som mulig for å være mest effektiv.

Når du lodder de emaljerte ledningene til motoren, må du være ekstremt forsiktig, da terminalene på motorene liker å snappe av og kutte spoletråden til motoren. For å bøte på dette, er en god løsning å lodde ledningene på, og deretter legge en stor klump 2-delt epoxy over skjøten, la den herde og deretter vri ledningene sammen. Dette reduserer belastningen på individuelle terminalledd og bør stoppe dem med å snappe av. Hvis du ikke gjør dette, vil de snappe av på det minst praktiske tidspunktet, garantert.

Hvis du lager hodestiftkontakten, og setter opp pinnene slik: [Ca1, Cb1, Ca2, Cb2] med Ca1 står for spole A, ledning 1 etc. Dette lar deg endre rotasjonsretningen til måleren ved å bytte pluggen rundt.

Måleren vil trenge en endestopp for å kalibrere nullposisjonen mot. Jeg vil anbefale å lage nålen av metall hvis det er mulig. Dette stopper bøyningen når den treffer endepunktet. En måte å få nålen i en god posisjon er å midlertidig lime nålen til akselen, slå på modulen, la den hvile og deretter fjerne og lime nålen på akselen igjen, med nålen hvilende mot ende stopp. Dette justerer nålen med motorens magnetiske tannhjul, og sikrer at nålen din alltid skal hvile mot endestopperen.

Trinn 4: Epilog

Forhåpentligvis har du hatt glede av denne korte instruksen og syntes den var nyttig. Gi meg beskjed hvis du bygger en av disse!

Lykke til!

Anbefalt: