Sommario:

Tachimetro per auto RC funzionante: 4 passaggi (con immagini)
Tachimetro per auto RC funzionante: 4 passaggi (con immagini)

Video: Tachimetro per auto RC funzionante: 4 passaggi (con immagini)

Video: Tachimetro per auto RC funzionante: 4 passaggi (con immagini)
Video: Tachimetro Contagiri RPM Digitale con Arduino, LCD e Sensore Infrarosso o Fotocellula - Fai da Te 2024, Dicembre
Anonim
Tachimetro per auto RC funzionante
Tachimetro per auto RC funzionante

Questo è un breve progetto che ho creato come parte di una costruzione RC più grande di una Land Rover leggera. Ho deciso che mi sarebbe piaciuto avere un tachimetro funzionante nel cruscotto, ma sapevo che un servo non lo avrebbe tagliato. C'era solo un'opzione ragionevole: distribuire l'arduino!

Un po' di background per cominciare… Non sono un esperto di programmazione o di elettronica. Penso ancora all'elettricità in termini di flusso d'acqua e sono un po' sconcertato dai resistori. Detto questo, se anche io sono stato in grado di farlo funzionare, allora dovresti essere in grado di farlo anche tu!

ELENCO DELLE PARTI:

Microcontrollore: ho usato un chip ATTiny85, che costa circa £ 1 ciascuno.

Programmatore di microcontrollori: per inserire il codice sul chip, è necessario un modo per programmarlo. Con il normale arduino questo è solo un cavo USB, ma per il chip ATTiny, hai bisogno di qualcosa in più. Puoi usare un altro arduino per farlo o, come me, puoi usare un programmatore Tiny AVR di Sparkfun.

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

Lo consiglierei, poiché ho provato a programmarli con vari metodi e questo è il più semplice. La scheda è un po' costosa, ma è un buon investimento se fai molti progetti ATTiny.

Presa per chip a 8 pin: se metti il chip in una presa invece di saldarlo direttamente, puoi permetterti alcuni errori di assemblaggio. Parlato per esperienza: nessuno vuole dissaldare i chip per riprogrammarli.

Condensatore: viene utilizzato un condensatore di disaccoppiamento da 100nF (codice 104). Non capisco bene perché, ma ho letto che i condensatori di disaccoppiamento sono importanti su Internet, quindi deve essere vero…

Resistore: un resistore da 10 kΩ viene utilizzato per abbassare la linea nell'arduino. Ancora una volta, un altro mistero dell'elettronica.

Perfboard/Stripboard: alcuni battiscopa su cui assemblare il circuito.

Filo di avvolgimento: il filo con guaina normale è troppo spesso per essere saldato sul motore. L'uso di filo smaltato fine ridurrà lo stress sui terminali del motore e ti semplificherà la vita.

Servo Wire: un nastro a tre fili che termina in una spina femmina JR a 3 pin. Ho preso il mio da un servo bruciato che stavo "modificando".

Motore passo-passo: ho usato un motore passo-passo Nidec bipolare da 6 mm. Qualsiasi piccolo stepper dovrebbe funzionare, anche se tienili piccoli, poiché lo stepper viene guidato direttamente dall'Arduino.

Pin dell'intestazione: non essenziale, ma se colleghi lo stepper a 4 pin dell'intestazione e metti una presa sul circuito, puoi facilmente scollegare il cruscotto per facilitare l'installazione.

Computer: per programmare la tua scheda, avrai bisogno di un computer. Possibilmente con l'IDE Arduino. E forse un cavo USB. Se ha anche un cavo di alimentazione, ancora meglio.

Passaggio 1: il sistema

Lo schema di base del sistema che ho creato era un metodo in base al quale il segnale di modulazione di larghezza di impulso (PWM) proveniente dal ricevitore RC viene convertito in uno sweep del motore passo-passo tramite un microcontrollore ATTiny 85 (uC).

Ecco una risorsa sui segnali PWM e RC, ma per replicare questo non è strettamente necessario capirlo.

en.wikipedia.org/wiki/Servo_control

L'ATTiny è il mio gusto preferito di Arduino perché è piccolo con ancora abbastanza pin I/O per fare le cose di base, quindi si adatta perfettamente a piccoli modelli e progetti RC. Il principale svantaggio di ATTiny è che richiede un po' più di configurazione per programmarne uno, ma una volta che lo hai impostato sono così economici che puoi acquistarne pile per tutti i tipi di progetti.

La dimensione del quadrante del tachimetro è troppo piccola per avere un motoriduttore con feedback, quindi per avere una risposta proporzionale è stato necessario utilizzare un motore passo-passo. Un motore passo-passo è un motore che viene mosso in quantità discrete (o passi…!), il che lo rende ideale per un sistema senza feedback come questo. L'unico avvertimento è che i "passi" faranno sì che il movimento risultante sia a scatti anziché liscio. Se ottieni uno stepper con abbastanza passi per rotazione, ciò non è evidente, ma con lo stepper che ho usato in questo progetto con solo 20 o giù di lì passi in una rotazione completa, il salto angolare è piuttosto scadente.

Il sistema, all'accensione, eseguirà lo stepper all'indietro di due giri, in modo da azzerare l'ago. Il tachimetro ha bisogno di un perno di appoggio dove vuoi che sia lo zero, altrimenti girerà per sempre. Quindi mappa i segnali PWM avanti e indietro su un determinato numero di passi del motore. Facile, vero…?

Passaggio 2: il software

Disclaimer: non sono un programmatore. Per questo progetto sono l'equivalente digitale del Dr. Frankenstein, assemblando qualcosa che funziona con vari pezzi di codice trovati.

Quindi, i miei più sentiti ringraziamenti vanno a Duane B, che ha creato il codice per interpretare i segnali RC:

rcarduino.blogspot.com/

E ad Ardunaut, che ha creato il codice per l'esecuzione di uno stepper come misuratore analogico:

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

E ad entrambi, le mie più sincere scuse per quello che ho fatto al tuo codice.

Ora che è fuori mano, ecco cosa caricare su ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - usa il numero di interrupt in attachInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - usa il PIN in digitalRead #define NEUTRAL_THROTTLE 1500 // questa è la durata in microsecondi di acceleratore in folle su un'auto RC elettrica #define UPPER_THROTTLE 2000 // questa è la durata in microsecondi dell'acceleratore massimo su un'auto RC elettrica #define LOWER_THROTTLE 1000 // questa è la durata in microsecondi dell'acceleratore minimo su un'auto RC elettrica #define DEADZONE 50 // questa è la zona morta dell'acceleratore. La zona morta totale è doppia. #include #define STEPS 21 // step per giro (limitato a 315°) Modifica questo parametro per regolare la corsa massima del tachimetro. #define COIL1 3 // Perni bobina. L'ATTiny utilizza i pin 0, 1, 3, 4 per lo stepper. Il pin 2 è l'unico pin in grado di gestire gli interrupt, quindi deve essere l'input. #define COIL2 4 // Prova a cambiarli se il motore passo-passo non funziona correttamente. #define COIL3 0 #define COIL4 1 // crea un'istanza della classe stepper: Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); int posizione = 0; //Posizione in passi(0-630)= (0°-315°) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // tempo per resettare al minimo int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; volatile unsigned long StartPeriod = 0; // set nell'interrupt // potremmo usare nThrottleIn = 0 in loop invece di una variabile separata, ma usando bNewThrottleSignal per indicare che abbiamo un nuovo segnale // è più chiaro per questo primo esempio void setup() { // dillo ad Arduino vogliamo che la funzione calcInput venga chiamata ogni volta che INT0 (pin digitale 2) cambia da HIGH a LOW o LOW a HIGH // catturare questi cambiamenti ci permetterà di calcolare per quanto tempo l'impulso di ingresso è attachInterrupt(THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // imposta la velocità del motore a 30 giri/min (360 PPS circa). stepper.step(PASSI * 2); //Reimposta posizione (X passi in senso antiorario). } 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); Valore di ripristino = 0; } // Inverti la mappatura else if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map(ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Valore di ripristino = 0; } // Fuori range upper else if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Valore di ripristino = 0; } // Out of range lower else if (ThrottleInAvg Resetcounter) { stepper.step(4); // Sto cercando di dire allo stepper di reimpostarsi se il segnale RC è nella zona morta per molto tempo. Non sono sicuro che questa parte del codice funzioni effettivamente. } } int val = VELOCITÀ; // ottiene il valore del potenziometro (range 0-1023) val = map(val, 0, 255, 0, STEPS * 0.75); // mappa l'intervallo del pot nell'intervallo stepper. if (abs(val - pos) > 2) { //se la differenza è maggiore di 2 step. if ((val - pos) > 0) { stepper.step(-1); // sposta di un passo a sinistra. pos++; } if ((val - pos) < 0) { stepper.step(1); // sposta di un passo a destra. pos--; } } // ritardo(10); } void calcInput() { // se il pin è alto, è l'inizio di un'interruzione if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) { // prendi il tempo usando i micro - quando il nostro codice diventa davvero occupato questo diventerà impreciso, ma per l'applicazione corrente è // facile da capire e funziona molto bene StartPeriod = micros(); } else { // se il pin è basso, è il fronte di discesa dell'impulso, quindi ora possiamo calcolare la durata dell'impulso sottraendo // ora di inizio ulStartPeriod dall'ora corrente restituita da micros() if (StartPeriod) { ThrottleIn = (int)(micros() - InizioPeriod); PeriodoInizio = 0; } } }

Fare riferimento a questo per ulteriori informazioni sulla programmazione di un ATTiny85:

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

Passaggio 3: l'hardware

L'hardware
L'hardware
L'hardware
L'hardware
L'hardware
L'hardware

Fare riferimento allo schema del circuito per la costruzione del circuito. Il modo in cui assemblare dipende da te, ma suggerirei di utilizzare un po' di stripboard/perfboard utilizzato per la prototipazione di circuiti stampati e di montare il chip in uno zoccolo.

C1 = 100nF

R1 = 10kΩ

Il condensatore dovrebbe essere montato il più vicino possibile al chip per essere più efficace.

Quando si saldano i fili smaltati al motore, prestare estrema attenzione, poiché i terminali sui motori si spezzano e tagliano il filo della bobina al motore. Per rimediare a questo, una buona soluzione è saldare i fili, quindi mettere una grossa goccia di resina epossidica in 2 parti sopra il giunto, lasciarlo polimerizzare, quindi attorcigliare i fili insieme. Ciò riduce lo stress sui singoli giunti terminali e dovrebbe impedire che si spezzino. Se non lo fai, si spezzeranno nel momento meno conveniente, garantito.

Se si crea il connettore del pin dell'intestazione e si impostano i pin in questo modo: [Ca1, Cb1, Ca2, Cb2] con Ca1 che sta per Bobina A, filo 1 ecc. Ciò consente di modificare la direzione di rotazione del calibro scambiando la spina in giro.

Il misuratore avrà bisogno di un finecorsa per calibrare la posizione zero rispetto a. Consiglierei di fare l'ago in metallo, se possibile. Questo impedisce che si fletta quando colpisce il finecorsa. Un modo per mettere l'ago in una buona posizione è incollare temporaneamente l'ago sull'asse, alimentare il modulo, lasciarlo riposare, quindi rimuovere e incollare nuovamente l'ago sull'asse, con l'ago appoggiato contro l'asse finecorsa. Questo allinea l'ago con l'ingranaggio magnetico del motore e assicura che l'ago si fermi sempre contro il finecorsa.

Fase 4: Epilogo

Spero che ti sia piaciuto questo breve tutorial e che l'abbia trovato utile. Se costruisci uno di questi, fammi sapere!

Buona fortuna!

Consigliato: