Inhoudsopgave:

Werkende RC auto snelheidsmeter - Ajarnpa
Werkende RC auto snelheidsmeter - Ajarnpa

Video: Werkende RC auto snelheidsmeter - Ajarnpa

Video: Werkende RC auto snelheidsmeter - Ajarnpa
Video: $29 RC Car Speedometer?!?! Just How Good Is It? #shorts 2024, September
Anonim
Werkende RC auto snelheidsmeter
Werkende RC auto snelheidsmeter

Dit is een kort project dat ik heb gemaakt als onderdeel van een grotere RC-build van een lichtgewicht Land Rover. Ik besloot dat ik graag een werkende snelheidsmeter in het dashboard wilde hebben, maar ik wist dat een servo het niet zou redden. Er was maar één redelijke optie: de arduino inzetten!

Een beetje achtergrond om mee te beginnen … Ik ben geen coderings- of elektronica-persoon. Ik denk nog steeds aan elektriciteit in termen van waterstroom en ben enigszins verbijsterd door weerstanden. Dat gezegd hebbende, als zelfs ik in staat was om dit te laten werken, dan zou jij dat ook moeten kunnen!

ONDERDELEN LIJST:

Microcontroller: ik gebruikte een ATTiny85-chip, die ongeveer £ 1 per stuk kostte.

Microcontroller-programmeur: om de code op de chip te krijgen, heb je een manier nodig om deze te programmeren. Bij gewone arduino is dit gewoon een USB-kabel, maar voor de ATTiny-chip heb je iets extra's nodig. Je kunt hiervoor een andere arduino gebruiken of, zoals ik, een Tiny AVR-programmeur van Sparkfun gebruiken.

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

Ik zou dit aanraden, omdat ik ze met verschillende methoden heb geprobeerd te programmeren en deze is de gemakkelijkste. Het bord is een beetje duur, maar een goede investering als je veel ATTiny-projecten doet.

8-pins chip-socket: als u de chip in een socket plaatst in plaats van deze rechtstreeks te solderen, kunt u zich enkele fouten bij de montage veroorloven. Gesproken uit ervaring - niemand wil chips desolderen om ze te herprogrammeren.

Condensator: Er wordt een ontkoppelcondensator van 100nF (code 104) gebruikt. Ik begrijp niet helemaal waarom, maar ik las dat ontkoppelcondensatoren belangrijk zijn op internet, dus het moet waar zijn…

Weerstand: Een weerstand van 10 kΩ wordt gebruikt om de lijn naar de Arduino te trekken. Nogmaals, nog een ander mysterie van elektronica.

Perfboard / Stripboard: een plint waarop u uw circuit kunt monteren.

Wikkeldraad: Normaal omhulde draad is te dik om op de motor te solderen. Het gebruik van fijne geëmailleerde draad vermindert de spanning op de motorklemmen en maakt uw leven een stuk gemakkelijker.

Servodraad: een driedraads lint dat eindigt in een 3-pins JR-vrouwelijke stekker. Ik kreeg de mijne van een uitgebrande servo die ik aan het 'wijzigen' was.

Stappenmotor: Ik heb een bipolaire Nidec-stappenmotor van 6 mm gebruikt. Elke kleine stepper zou moeten werken, maar houd ze klein, omdat de stepper rechtstreeks vanuit de Arduino wordt aangestuurd.

Header-pinnen: niet essentieel, maar als u uw stepper aansluit op 4 header-pinnen en een stopcontact op uw circuit plaatst, kunt u uw dashboard eenvoudig loskoppelen voor eenvoudige installatie.

Computer: Om je board te programmeren heb je een computer nodig. Eventueel met de Arduino IDE. En misschien een USB-kabel. Als het ook een stroomkabel heeft, dan nog beter.

Stap 1: Het systeem

De basisstructuur van het systeem dat ik heb gemaakt, was een methode waarbij het pulsbreedtemodulatie (PWM) -signaal afkomstig van de RC-ontvanger wordt omgezet in een stappenmotorzwaai via een ATTiny 85-microcontroller (uC).

Hier is een bron over PWM-signalen en RC, maar om dit te repliceren, hoeft u het niet strikt te begrijpen.

en.wikipedia.org/wiki/Servo_control

De ATTiny is mijn favoriete smaak van Arduino omdat hij klein is met nog steeds genoeg I/O-pinnen om basisdingen te doen, dus past perfect in kleine modellen en RC-projecten. Het belangrijkste nadeel van de ATTiny is dat het wat meer instellingen vereist om er een te programmeren, maar als je het eenmaal hebt ingesteld, zijn ze zo goedkoop dat je er stapels van kunt kopen voor allerlei soorten projecten.

De maat van de snelheidsmeter is te klein om een motorreductor met feedback te hebben, dus om een proportionele respons te hebben moest er een stappenmotor worden gebruikt. Een stappenmotor is een motor die in discrete hoeveelheden (of stappen…!) wordt bewogen, wat hem ideaal maakt voor een no-feedback systeem als dit. Het enige voorbehoud is dat de 'stappen' ervoor zorgen dat de resulterende beweging schokkerig is in plaats van soepel. Als je een stepper krijgt met voldoende stappen per rotatie, is dat niet merkbaar, maar met de stepper die ik in dit project heb gebruikt met slechts 20 of zo stappen in een volledige rotatie, is de hoeksprong behoorlijk slecht.

Het systeem zal bij het opstarten de stepper twee omwentelingen achteruit laten lopen, om de naald op nul te zetten. De snelheidsmeter heeft een rustpin nodig waar u de nulmarkering wilt hebben, anders blijft hij voor altijd ronddraaien. Vervolgens brengt het de voorwaartse en achterwaartse PWM-signalen in kaart met een bepaald aantal stappen van de motor. Makkelijk, toch…?

Stap 2: De software

Disclaimer: ik ben geen programmeur. Voor dit project ben ik het digitale equivalent van Dr. Frankenstein, die iets assembleert dat werkt uit verschillende gevonden stukjes code.

Dus mijn hartelijke dank gaat uit naar Duane B, die de code heeft gemaakt voor het interpreteren van RC-signalen:

rcarduino.blogspot.com/

En aan Ardunaut, die de code maakte om een stepper als analoge meter te laten werken:

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

En aan beiden, mijn oprechte excuses voor wat ik met je code heb gedaan.

Nu dat uit de weg is, is dit wat u naar de ATTiny moet uploaden:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - gebruik het interruptnummer in attachInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - gebruik het PIN-nummer in digitalRead #define NEUTRAL_THROTTLE 1500 // dit is de duur in microseconden van neutraal gas op een elektrische RC-auto #define UPPER_THROTTLE 2000 // dit is de duur in microseconden van maximaal gas geven op een elektrische RC-auto #define LOWER_THROTTLE 1000 // dit is de duur in microseconden van nminimum gas geven op een elektrische RC-auto #define DEADZONE 50 // dit is de dode zone van het gaspedaal. De totale dode zone is het dubbele hiervan. #include #define STEPS 21 // stappen per omwenteling (beperkt tot 315°) Wijzig dit om de maximale slag van de snelheidsmeter aan te passen. #define COIL1 3 // Spoelpennen. De ATTiny gebruikt pinnen 0, 1, 3, 4 voor de stepper. Pin 2 is de enige pin die interrupts aankan, dus het moet de invoer zijn. #define COIL2 4 // Probeer deze te veranderen als de stappenmotor niet goed werkt. #define COIL3 0 #define COIL4 1 // maak een instantie van de stepper-klasse: Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Positie in stappen (0-630) = (0 ° -315 °) int SPEED = 0; vlotter ThrottleInAvg = 0; int MetingenToAverage = 60; vlotter Resetteller = 10; // tijd om te resetten bij stationair toerental int Resetval = 0; vluchtige int ThrottleIn = LOWER_THROTTLE; vluchtig unsigned long StartPeriod = 0; // zet in de interrupt // we zouden nThrottleIn = 0 in lus kunnen gebruiken in plaats van een aparte variabele, maar met bNewThrottleSignal om aan te geven dat we een nieuw signaal hebben // is duidelijker voor dit eerste voorbeeld void setup() { // vertel de Arduino we willen dat de functie calcInput wordt aangeroepen wanneer INT0 (digitale pin 2) verandert van HOOG naar LAAG of LAAG naar HOOG // door deze wijzigingen op te vangen, kunnen we berekenen hoe lang de ingangspuls is attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // stel de motorsnelheid in op 30 RPM (ongeveer 360 PPS). stepper.step (STEPS * 2); // Reset positie (X stappen tegen de klok in). } 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); Resetwaarde = 0; } // Reverse mapping else if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetwaarde = 0; } // Buiten bereik bovenste else if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Resetwaarde = 0; } // Buiten bereik lager else if (ThrottleInAvg Resetcounter) { stepper.step (4); // Ik probeer de stepper te vertellen zichzelf opnieuw in te stellen als het RC-signaal zich lange tijd in de dode zone bevindt. Ik weet niet zeker of dit deel van de code echt werkt. } } int val = SNELHEID; // haal de potentiometerwaarde (bereik 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // map pot bereik in het stepper bereik. if (abs(val - pos) > 2) { // if differentiëren is groter dan 2 stappen. if ((val - pos) > 0) { stepper.step(-1); // ga een stap naar links. pos++; } if ((val - pos) < 0) { stepper.step(1); // ga een stap naar rechts. pos-; } } // vertraging (10); } void calcInput () {// als de pin hoog is, is dit het begin van een interrupt if (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) { // haal de tijd met behulp van micros - wanneer onze code erg druk is, wordt dit onnauwkeurig, maar voor de huidige applicatie is // gemakkelijk te begrijpen en werkt heel goed StartPeriod = micros(); } else { // als de pin laag is, is dit de dalende flank van de puls, dus nu kunnen we de pulsduur berekenen door de // starttijd ulStartPeriod af te trekken van de huidige tijd die wordt geretourneerd door micros() if (StartPeriod) { ThrottleIn = (int)(micros() - StartPeriode); Startperiode = 0; } } }

Raadpleeg dit voor meer informatie over het programmeren van een ATtiny85:

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

Stap 3: De hardware

de hardware
de hardware
de hardware
de hardware
de hardware
de hardware

Raadpleeg het schakelschema voor het bouwen van de schakeling. Hoe je het in elkaar zet, is aan jou, maar ik raad aan om een stukje stripboard/perfboard te gebruiken dat wordt gebruikt voor het maken van prototypes van printplaten, en de chip in een socket te monteren.

C1 = 100nF

R1 = 10kΩ

De condensator moet zo dicht mogelijk bij de chip worden gemonteerd om het meest effectief te zijn.

Wees uiterst voorzichtig bij het solderen van de geëmailleerde draden aan de motor, aangezien de klemmen op de motoren graag afbreken en de spoeldraad naar de motor doorsnijden. Om dit te verhelpen, is een goede oplossing om de draden vast te solderen, en dan een grote klodder 2-componenten epoxy over de verbinding te leggen, te laten uitharden en dan de draden in elkaar te draaien. Dit vermindert de spanning op afzonderlijke aansluitverbindingen en zou moeten voorkomen dat ze afbreken. Als je dit niet doet, breken ze gegarandeerd af op het minst geschikte moment.

Als je de header pin connector maakt en de pinnen als volgt instelt: [Ca1, Cb1, Ca2, Cb2] waarbij Ca1 staat voor Coil A, wire 1 etc. Hiermee kun je de draairichting van de meter veranderen door de plug te verwisselen in de omgeving van.

De meter heeft een eindstop nodig om de nulpositie tegen te kalibreren. Ik zou aanraden om de naald indien mogelijk van metaal te maken. Dit stopt het buigen wanneer het de eindstop raakt. Een manier om de naald in een goede positie te krijgen, is door de naald tijdelijk op de as te lijmen, de module aan te zetten, te laten rusten en vervolgens de naald te verwijderen en opnieuw op de as te lijmen, waarbij de naald tegen de as rust. einde stop. Dit lijnt de naald uit met de magnetische vertanding van de motor en zorgt ervoor dat uw naald altijd tegen de eindstop moet komen te rusten.

Stap 4: Epiloog

Hopelijk heb je genoten van deze korte instructable en vond je het nuttig. Als je er een bouwt, laat het me dan weten!

Veel geluk!

Aanbevolen: