Indholdsfortegnelse:

Arbejdende RC bilhastighedsmåler: 4 trin (med billeder)
Arbejdende RC bilhastighedsmåler: 4 trin (med billeder)

Video: Arbejdende RC bilhastighedsmåler: 4 trin (med billeder)

Video: Arbejdende RC bilhastighedsmåler: 4 trin (med billeder)
Video: Доведи дело до конца, перестань тратить время понапрасну — Сэм Беннетт — Virtual Frontier E48 2024, September
Anonim
Arbejdende RC bilhastighedsmåler
Arbejdende RC bilhastighedsmåler

Dette er et kort projekt, som jeg skabte som en del af en større RC -konstruktion af en letvægts Land Rover. Jeg besluttede, at jeg havde lyst til at have et arbejdshastighedsmåler i instrumentbrættet, men jeg vidste, at en servo ikke ville skære det. Der var kun en rimelig mulighed: implementer arduinoen!

Lidt baggrund til at begynde med … Jeg er ikke en kode- eller elektronikperson. Jeg tænker stadig på elektricitet i form af vandgennemstrømning og er noget mystificeret af modstande. Når det er sagt, hvis selv jeg var i stand til at få dette til at fungere, så burde du også kunne!

LISTE OVER DELE:

Mikrocontroller: Jeg brugte en ATTiny85 -chip, som kostede cirka £ 1 hver.

Mikrokontrollerprogrammerer: For at få koden på chippen har du brug for en måde at programmere den på. Med almindelig arduino er dette bare et USB -kabel, men til ATTiny -chippen har du brug for noget ekstra. Du kan bruge en anden arduino til at gøre dette, eller ligesom jeg kan du bruge en lille AVR -programmer fra Sparkfun.

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

Jeg vil anbefale dette, da jeg har prøvet at programmere dem med forskellige metoder, og denne er den letteste. Boardet er lidt dyrt, men en god investering, hvis du laver mange ATTiny -projekter.

8 Pin Chip Socket: Hvis du sætter chippen i en stikkontakt i stedet for at lodde den direkte, har du råd til dig selv nogle fejl i samlingen. Talt af erfaring - ingen ønsker at aflodde chips for at omprogrammere dem.

Kondensator: En afkoblingskondensator på 100nF (kode 104) bruges. Jeg forstår ikke helt hvorfor, men jeg læste, at afkoblingskondensatorer er vigtige på internettet, så det må være sandt …

Modstand: En 10kΩ modstand bruges til at trække linjen ned i arduinoen. Igen endnu et mysterium om elektronik.

Perfboard/Stripboard: Nogle bundplader, hvorpå du kan samle dit kredsløb.

Winding Wire: Almindelig omsluttet tråd er for tyk til at lodde på motoren. Brug af fin emaljeret ledning vil reducere belastningen på motorterminalerne og gøre dit liv meget lettere.

Servotråd: Et bånd med tre ledninger, der ender i et 3-benet JR-hunstik. Jeg fik min fra en udbrændt servo, som jeg 'modificerede'.

Stepper Motor: Jeg brugte en 6 mm bipolar Nidec stepper motor. Enhver lille stepper bør fungere, selvom den skal holdes lille, da stepperen køres direkte fra Arduino.

Header Pins: Ikke vigtigt, men hvis du leder din stepper til 4 header pins og sætter en stikkontakt på dit kredsløb, kan du nemt tage stikket ud af dit instrumentbræt for at lette installationen.

Computer: For at programmere dit board, skal du bruge en computer. Muligvis med Arduino IDE. Og måske et USB -kabel. Hvis det også har et strømkabel, så er det endnu bedre.

Trin 1: Systemet

Den grundlæggende oversigt over det system, jeg oprettede, var en metode, hvorved PWM -signalet (Pulsbreddemodulation), der kommer fra RC -modtageren, konverteres til en trinmotorfejning via en ATTiny 85 mikrokontroller (uC).

Her er en ressource om PWM -signaler og RC, men for at replikere dette behøver du ikke strengt at forstå det.

da.wikipedia.org/wiki/Servo_control

ATTiny er min yndlingssmag af Arduino, fordi den er lille med stadig nok I/O -ben til at gøre grundlæggende ting, så den passer perfekt til små modeller og RC -projekter. Den største ulempe ved ATTiny er, at det kræver lidt mere opsætning for at kunne programmere et, men når du har konfigureret det, er de så billige, at du kan købe stakke af dem til alle slags projekter.

Hastighedsmålerens størrelse er for lille til at have en gearmotor med feedback, så for at få en proportionel reaktion skulle der bruges en trinmotor. En trinmotor er en motor, der flyttes i diskrete mængder (eller trin …!), Hvilket gør den ideel til et system uden tilbagemelding. Den eneste advarsel er, at 'trinene' vil få den resulterende bevægelse til at blive rykkende i modsætning til glat. Hvis du får en stepper med nok trin pr. Rotation, er det ikke mærkbart, men med den stepper, jeg brugte i dette projekt, der kun har omkring 20 trin i en fuld rotation, er vinkelhoppet ganske dårligt.

Systemet vil ved opstart køre stepperen baglæns i to omdrejninger for at nulstille nålen. Hastighedsmåleren har brug for en hvilepind, hvor du vil have nulmærket, ellers vil det bare dreje for evigt. Derefter kortlægger det PWM -signalerne frem og tilbage til et bestemt antal trin i motoren. Nemt, ikke …?

Trin 2: Softwaren

Ansvarsfraskrivelse: Jeg er ikke en programmør. Til dette projekt er jeg den digitale ækvivalent til Dr. Frankenstein, der samler noget, der fungerer ud fra forskellige fundne kodestykker.

Så min hjerteligste tak går til Duane B, der lavede koden til fortolkning af RC -signaler:

rcarduino.blogspot.com/

Og til Ardunaut, der lavede koden til at køre en stepper som en analog måler:

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

Og til begge, mine mest oprigtige undskyldninger for, hvad jeg gjorde med din kode.

Nu er det ude af vejen, her er hvad du skal uploade til ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - brug afbrydelsesnummeret i vedhæft Interrupt #definer THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - brug PIN -nummeret i digitalRead #define NEUTRAL_THROTTLE 1500 // af neutral gas på en elektrisk RC bil #define UPPER_THROTTLE 2000 // dette er varigheden i mikrosekunder for maksimal gas på en elektrisk RC bil #define LOWER_THROTTLE 1000 // dette er varigheden i mikrosekunder af nminimum gas på en elektrisk RC bil #define DEADZONE 50 // dette er gassens dødzone. Den samlede deadzone er dobbelt så høj. #include #define STEPS 21 // trin pr. omdrejning (begrænset til 315 °) Skift dette for at justere speedometerets maksimale vandring. #define COIL1 3 // Coil Pins. ATTiny bruger benene 0, 1, 3, 4 til stepperen. Pin 2 er den eneste pin, der kan håndtere afbrydelser, så det skal være input. #define COIL2 4 // Prøv at ændre disse rundt, hvis trinmotoren ikke kører korrekt. #define COIL3 0 #define COIL4 1 // opret en forekomst af stepper -klassen: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Position i trin (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // tid til at nulstille, mens den er i tomgang, gasspjældet nulstilling = 0; flygtig int ThrottleIn = LOWER_THROTTLE; flygtig usigneret lang StartPeriod = 0; // indstillet i interrupt // vi kunne bruge nThrottleIn = 0 i loop i stedet for en separat variabel, men ved hjælp af bNewThrottleSignal for at angive, at vi har et nyt signal // er klarere for dette første eksempel hulrumsopsætning () {// fortæl Arduino vi vil have funktionen calcInput til at blive kaldt, når INT0 (digital pin 2) skifter fra HIGH til LOW eller LOW til HIGH // ved at fange disse ændringer vil give os mulighed for at beregne, hvor længe inputpulsen er attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // indstil motorhastigheden til 30 o/ min (360 PPS ca.). stepper.step (TRIN * 2); // Nulstil position (X trin mod uret). } 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); Nulstilling = 0; } // Omvendt kortlægning ellers hvis (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Nulstilling = 0; } // Uden for rækkevidde øvre ellers hvis (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Nulstilling = 0; } // Uden for rækkevidde lavere ellers hvis (ThrottleInAvg Resetcounter) {stepper.step (4); // Jeg prøver at fortælle stepperen at nulstille sig selv, hvis RC-signalet er i deadzonen i lang tid. Ved ikke om denne del af koden rent faktisk virker. }} int val = SPEED; // få potentiometerværdien (område 0-1023) val = map (val, 0, 255, 0, STEPS * 0,75); // kort grydeområde i stepperområdet. hvis (abs (val - pos)> 2) {// hvis forskellen er større end 2 trin. hvis ((val - pos)> 0) {stepper.step (-1); // flyt et trin til venstre. pos ++; } hvis ((val - pos) <0) {stepper.step (1); // flytte et trin til højre. pos--; }} // forsinkelse (10); } void calcInput () {// hvis stiften er høj, er starten på en afbrydelse, hvis (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// få tid til at bruge mikro - når vores kode bliver virkelig optaget, bliver dette unøjagtigt, men for den aktuelle applikation er den // let at forstå og fungerer meget godt StartPeriod = micros (); } ellers {// hvis stiften er lav, er det den faldende kant af pulsen, så nu kan vi beregne pulsvarigheden ved at trække // starttiden ulStartPeriod fra den aktuelle tid returneret af mikro () hvis (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Se dette for mere information om programmering af en ATTiny85:

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

Trin 3: Hardware

Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen

Se kredsløbsdiagrammet for at bygge kredsløbet. Hvordan du samler det er op til dig, men jeg vil foreslå at bruge lidt stripboard/perfboard, der bruges til prototyping af printkort, og montere chippen i en stikkontakt.

C1 = 100nF

R1 = 10kΩ

Kondensatoren skal monteres så tæt på chippen som muligt for at være mest effektiv.

Når du lodder de emaljerede ledninger til motoren, skal du være yderst forsigtig, da terminalerne på motorerne kan lide at snappe af og afbryde spoletråden til motoren. For at afhjælpe dette er en god løsning at lodde ledningerne på og derefter lægge en stor klat 2-delt epoxy over leddet, lad det hærde og derefter sno ledningerne sammen. Dette reducerer belastningen på de enkelte terminalled og bør stoppe dem med at snappe af. Hvis du ikke gør dette, snapper de af på det mindst bekvemme tidspunkt, garanteret.

Hvis du laver header pin -stikket, og opsætter benene således: [Ca1, Cb1, Ca2, Cb2] med Ca1 står for Coil A, wire 1 etc. Dette giver dig mulighed for at ændre målerens rotationsretning ved at skifte stikket rundt om.

Måleren skal bruge en endestop for at kalibrere nulpositionen mod. Jeg vil anbefale at gøre nålen af metal, hvis det er muligt. Dette stopper den med at bøje, når den rammer enden. En måde at få nålen i en god position er at midlertidigt lime nålen til akslen, tænde modulet, lade det hvile og derefter fjerne og genlimme nålen på akslen, mens nålen hviler mod endestop. Dette justerer nålen med motorens magnetiske tandhjul og sikrer, at din nål altid skal hvile mod endestoppet.

Trin 4: Epilog

Forhåbentlig har du nydt denne korte instruktive og fundet den nyttig. Hvis du bygger en af disse, lad mig det vide!

Held og lykke!

Anbefalede: