Cuprins:

Vitezometru RC de lucru: 4 pași (cu imagini)
Vitezometru RC de lucru: 4 pași (cu imagini)

Video: Vitezometru RC de lucru: 4 pași (cu imagini)

Video: Vitezometru RC de lucru: 4 pași (cu imagini)
Video: New Kawasaki Motorsport ZX25R | ZX4R Segera Menyusul ‼️ #shorts 2024, Septembrie
Anonim
Vitezometru RC de lucru
Vitezometru RC de lucru

Acesta este un proiect scurt pe care l-am creat ca parte a unei construcții RC mai mari a unui Land Rover ușor. Am decis că îmi place să am un vitezometru de lucru în tabloul de bord, dar știam că un servo nu îl va tăia. A existat o singură opțiune rezonabilă: implementați arduino!

Un pic de fundal pentru a începe cu … Nu sunt o persoană de codificare sau electronice. Încă mă gândesc la electricitate în ceea ce privește debitul de apă și sunt oarecum mistuit de rezistențe. Acestea fiind spuse, dacă chiar eu am reușit să fac acest lucru, atunci ar trebui să o puteți face și pe voi!

LISTA DE COMPONENTE:

Microcontroler: am folosit un cip ATTiny85, care costa aproximativ 1 GBP fiecare.

Programator microcontroler: Pentru a obține codul pe cip, aveți nevoie de o modalitate de a-l programa. Cu arduino obișnuit acesta este doar un cablu USB, dar pentru cipul ATTiny aveți nevoie de ceva în plus. Puteți utiliza un alt arduino pentru a face acest lucru sau, la fel ca mine, puteți utiliza un programator Tiny AVR de la Sparkfun.

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

Aș recomanda acest lucru, deoarece am încercat să le programez cu diverse metode, iar aceasta este cea mai ușoară. Consiliul este cam scump, dar o investiție bună dacă faci multe proiecte ATTiny.

Socket cu 8 pini: Dacă puneți cipul într-o priză, mai degrabă decât să-l lipiți direct, vă puteți permite câteva greșeli în asamblare. Vorbit din experiență - nimeni nu vrea să dezlipească jetoanele pentru a le reprograma.

Condensator: Se folosește un condensator de decuplare de 100nF (cod 104). Nu înțeleg foarte bine de ce, dar am citit că condensatorii de decuplare sunt importanți pe internet, deci trebuie să fie adevărat …

Rezistor: Un rezistor de 10kΩ este utilizat pentru a trage linia în arduino. Din nou, încă un mister al electronicii.

Perfboard / Stripboard: o placă de bază pe care să vă asamblați circuitul.

Sârmă de înfășurare: Sârmă învelită în mod regulat este prea groasă pentru a se lipi pe motor. Utilizarea sârmei emailate fine va reduce stresul de pe bornele motorului și vă va face viața mult mai ușoară.

Servo Wire: o panglică cu trei fire care se termină într-o mufă femelă JR cu 3 pini. Am primit-o pe a mea dintr-un servo ars pe care îl „modificam”.

Motor pas cu pas: am folosit un motor pas cu pas bipolar Nidec de 6 mm. Orice stepper mic ar trebui să funcționeze, deși păstrați-l mic, deoarece stepperul este condus direct de la Arduino.

Pini antet: Nu este esențial, dar dacă conectați pasul la 4 pini antet și puneți o priză pe circuitul dvs., vă puteți deconecta cu ușurință tabloul de bord pentru a fi ușor de instalat.

Computer: pentru a vă programa placa, veți avea nevoie de un computer. Eventual cu IDE Arduino. Și poate un cablu USB. Dacă are și un cablu de alimentare, atunci și mai bine.

Pasul 1: Sistemul

Schița de bază a sistemului pe care am creat-o a fost o metodă prin care semnalul de modulare a lățimii pulsului (PWM) provenit de la receptorul RC este convertit într-o măturare a motorului pas cu pas printr-un microcontroler ATTiny 85 (uC).

Iată o resursă privind semnalele PWM și RC, dar pentru a reproduce acest lucru nu trebuie să o înțelegeți strict.

en.wikipedia.org/wiki/Servo_control

ATTiny este aroma mea preferată de Arduino, deoarece este mică, cu încă suficient I / O pini pentru a face lucruri de bază, așa că se potrivește perfect în modele mici și proiecte RC. Principalul dezavantaj al ATTiny este că necesită ceva mai multă configurare pentru a programa unul, dar odată ce l-ai configurat, sunt atât de ieftine încât poți cumpăra stive de ele pentru tot felul de proiecte.

Dimensiunea cadranului vitezometrului este prea mică pentru a avea un motor cu transmisie cu feedback, deci pentru a avea un răspuns proporțional a trebuit să fie utilizat un motor pas cu pas. Un motor pas cu pas este un motor care este deplasat în cantități discrete (sau trepte …!), Ceea ce îl face ideal pentru un sistem fără feedback ca acesta. Singura avertisment este că „pașii” vor face ca mișcarea rezultată să fie sacadată, spre deosebire de netedă. Dacă obțineți un pas cu pas suficient de rotație, nu este vizibil, dar cu pasul pe care l-am folosit în acest proiect având doar 20 de pași într-o rotație completă, saltul unghiular este destul de rău.

Sistemul, la pornire, va rula pasul înapoi pentru două rotații, astfel încât să pună la zero acul. Vitezometrul are nevoie de un știft de odihnă unde doriți să fie marca zero, altfel va roti pentru totdeauna. Apoi mapează semnalele PWM înainte și înapoi la un număr stabilit de pași ai motorului. Ușor, nu …?

Pasul 2: Software-ul

Declinare de responsabilitate: Nu sunt programator. Pentru acest proiect sunt echivalentul digital al Dr. Frankenstein, asamblând ceva care funcționează din diferiți biți de cod găsiți.

Deci, cele mai sincere mulțumiri sunt Duane B, care a creat codul pentru interpretarea semnalelor RC:

rcarduino.blogspot.com/

Și lui Ardunaut, care a creat codul pentru rularea unui pas cu pas ca un indicator analogic:

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

Și amândurora, cele mai sincere scuze pentru ceea ce am făcut codului tău.

Acum, acest lucru nu este posibil, iată ce să încărcați în ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = PIN DIGITAL 2 - utilizați numărul de întrerupere în atașare Interrupt # define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - utilizați numărul PIN în digital Citiți #define NEUTRAL_THROTTLE 1500 // aceasta este durata în micros de accelerație neutră pe o mașină RC electrică # definiți UPPER_THROTTLE 2000 // aceasta este durata în microsecunde a accelerației maxime pe o mașină RC electrică # definiți LOWER_THROTTLE 1000 // aceasta este durata în microsecunde de accelerație minimă pe o mașină electrică RC #define DEADZONE 50 // aceasta este zona mortă a clapetei. Zona mortală totală este dublă față de aceasta. #include #define STEPS 21 // pași pe rotație (limitat la 315 °) Modificați acest lucru pentru a regla cursa maximă a vitezometrului. #define COIL1 3 // Pinii bobinei. ATTiny folosește pinii 0, 1, 3, 4 pentru stepper. Pinul 2 este singurul pin care poate gestiona întreruperile, deci trebuie să fie intrarea. #define COIL2 4 // Încercați să le schimbați dacă motorul pas cu pas nu funcționează corect. #define COIL3 0 #define COIL4 1 // creați o instanță a clasei stepper: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Poziția în pași (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // timpul pentru a reseta în timp ce la accelerație la ralanti int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; volatil nesemnat lung StartPeriod = 0; // setat în întrerupere // am putea folosi nThrottleIn = 0 în buclă în loc de o variabilă separată, dar folosind bNewThrottleSignal pentru a indica că avem un nou semnal // este mai clar pentru acest prim exemplu de configurare nulă () {// spuneți Arduino dorim ca funcția calcInput să fie apelată ori de câte ori INT0 (pinul digital 2) se schimbă de la HIGH la LOW sau LOW la HIGH // captarea acestor modificări ne va permite să calculăm cât timp pulsul de intrare este attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // setați turația motorului la 30 RPM (360 PPS aprox.). stepper.step (STEPS * 2); // Resetați poziția (pașii X în sens invers acelor de ceasornic). } void loop () {Resetval = milis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Resetval = 0; } // Reverse mapping else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetval = 0; } // În afara intervalului superior else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetval = 0; } // În afara intervalului mai mic dacă (ThrottleInAvg Resetcounter) {stepper.step (4); // Încerc să-i spun stepper-ului să se reseteze singur dacă semnalul RC este în zona mortă mult timp. Nu sunt sigur dacă această parte a codului funcționează efectiv. }} int val = SPEED; // obțineți valoarea potențiometrului (interval 0-1023) val = hartă (val, 0, 255, 0, STEPS * 0,75); // harta gamă pot în intervalul pas cu pas. if (abs (val - pos)> 2) {// dacă diferența este mai mare de 2 pași. if ((val - pos)> 0) {stepper.step (-1); // mutați un pas spre stânga. pos ++; } if ((val - pos) <0) {stepper.step (1); // mutați un pas spre dreapta. pos--; }} // întârziere (10); } void calcInput () {// dacă pinul este ridicat, este începutul unei întreruperi dacă (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// obțineți timpul folosind micros - când codul nostru devine foarte ocupat, acest lucru va deveni inexact, dar pentru aplicația curentă // este ușor de înțeles și funcționează foarte bine StartPeriod = micros (); } else {// dacă pinul este scăzut, este marginea de cădere a impulsului, așa că acum putem calcula durata impulsului scăzând // timpul de începere ulStartPeriod din timpul curent returnat de micros () dacă (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Consultați acest lucru pentru mai multe informații despre programarea unui ATTiny85:

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

Pasul 3: Hardware-ul

Hardware-ul
Hardware-ul
Hardware-ul
Hardware-ul
Hardware-ul
Hardware-ul

Consultați schema circuitului pentru construirea circuitului. Modul în care îl asamblați depinde de dvs., dar aș sugera să folosiți o bucată de panou de bord / perfboard utilizat pentru prototiparea plăcilor de circuite și să montați cipul într-o priză.

C1 = 100nF

R1 = 10kΩ

Condensatorul ar trebui să fie montat cât mai aproape de cip pentru a fi cel mai eficient.

Când lipiți firele emailate la motor, fiți extrem de atenți, deoarece bornele de pe motoare doresc să se rupă și să rupă firul bobinei la motor. Pentru a remedia acest lucru, o soluție bună este să lipiți firele, apoi să puneți o blobă mare de epoxidic în 2 părți peste articulație, lăsați-o să se vindece, apoi răsuciți firele împreună. Acest lucru reduce stresul asupra îmbinărilor terminale individuale și ar trebui să le oprească decuplarea. Dacă nu faceți acest lucru, se vor deconecta la cel mai puțin convenabil moment, garantat.

Dacă realizați conectorul pinului antet și configurați pinii astfel: [Ca1, Cb1, Ca2, Cb2] cu Ca1 în picioare pentru bobina A, firul 1 etc. Acest lucru vă permite să schimbați direcția de rotație a indicatorului prin schimbarea fișei în jurul.

Calibrul va avea nevoie de un stop pentru a calibra poziția zero împotriva. Aș recomanda să faceți acul din metal, dacă este posibil. Acest lucru îl oprește flexându-se când lovește capătul de capăt. O modalitate de a obține acul într-o poziție bună este să lipiți temporar acul pe ax, să alimentați modulul, să îl lăsați să se odihnească, apoi să scoateți și să lipiți din nou acul pe ax, cu acul sprijinit de opri. Aceasta aliniază acul cu înfășurarea magnetică a motorului și asigură faptul că acul dvs. trebuie să se întindă întotdeauna împotriva opritorului.

Pasul 4: Epilog

Sperăm că v-a plăcut acest scurt instructabil și l-ați găsit util. Dacă construiești una dintre acestea, anunță-mă!

Noroc!

Recomandat: