Sommario:
- Passaggio 1: componenti richiesti
- Passaggio 2: panoramica dei timer Arduino per la generazione del segnale
- Passaggio 3: LED lampeggiante
- Passaggio 4: dimmer LED
- Passaggio 5: convertitore digitale-analogico (DAC)
- Passaggio 6: Metronomo
- Passaggio 7: spettro sonoro
- Passaggio 8: Servomotori
- Passaggio 9: Duplicatore di tensione e inverter
- Passaggio 10: trasferimento di potenza wireless
Video: Arduino Timer: 8 progetti: 10 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Arduino Uno o Nano possono generare segnali digitali accurati su sei pin dedicati utilizzando i tre timer integrati. Richiedono solo pochi comandi per l'impostazione e non utilizzano cicli della CPU per essere eseguiti!
L'utilizzo dei timer può intimidire se si parte dalla scheda tecnica completa di ATMEGA328, che ha 90 pagine dedicate alla loro descrizione! Diversi comandi Arduino incorporati utilizzano già i timer, ad esempio millis(), delay(), tone(), AnalogWrite() e la libreria servo. Ma per usare tutta la loro potenza, dovrai impostarli tramite i registri. Condivido qui alcune macro e funzioni per renderlo più semplice e trasparente.
Dopo una breve panoramica dei timer, segui 8 fantastici progetti che si basano sulla generazione del segnale con i timer.
Passaggio 1: componenti richiesti
Per realizzare tutti gli 8 progetti avrai bisogno di:
- Un Arduino Uno o compatibile
- Uno scudo prototipo con mini protoboard
- 6 cavi jumper per breadboard
- 6 ponticelli breadboard corti (fai da te con un cavo di collegamento a nucleo solido da 10 cm)
- 2 cavi di coccodrillo
- 1 LED bianco da 5 mm
- una resistenza da 220 Ohm
- un resistore da 10kOhm
- un potenziometro da 10kOhm
- 2 condensatori ceramici da 1muF
- 1 condensatore elettrolitico 10muF
- 2 diodi, 1n4148 o simili
- 2 micro servomotori SG90
- 1 altoparlante da 8 Ohm
- 20 m di filo smaltato sottile (0,13 mm)
Passaggio 2: panoramica dei timer Arduino per la generazione del segnale
Timer0 e timer2 sono timer a 8 bit, il che significa che possono contare da 0 a 255 al massimo. Timer1 è un timer a 16 bit, quindi può contare fino a 65535. Ogni timer ha due pin di uscita associati: 6 e 5 per timer0, 9 e 10 per timer1, 11 e 3 per timer2. Il timer viene incrementato ad ogni ciclo di clock di Arduino, o ad una velocità ridotta di un fattore di prescala, che è 8, 64, 256 o 1024 (anche 32 e 128 sono consentiti per il timer2). I timer contano da 0 a "TOP" e poi di nuovo (PWM veloce) o verso il basso (PWM corretto di fase). Il valore di "TOP" determina quindi la frequenza. I pin di uscita possono essere impostati, ripristinati o capovolti al valore del registro di confronto delle uscite, in modo che questi determinino il ciclo di lavoro. Solo il timer1 ha la capacità di impostare in modo indipendente la frequenza e i duty cycle per entrambi i pin di uscita.
Passaggio 3: LED lampeggiante
La frequenza più bassa che può essere raggiunta con i timer a 8 bit è 16MHz/(511*1024)=30, 6Hz. Quindi per far lampeggiare un LED con 1Hz, abbiamo bisogno del timer1, che può raggiungere frequenze 256 volte più piccole, 0,12 Hz.
Collega un LED con il suo anodo (gamba lunga) al pin9 e collega il suo catodo con una resistenza da 220 Ohm a massa. Carica il codice. Il LED lampeggerà esattamente a 1Hz con un duty cycle del 50%. La funzione loop() è vuota: il timer viene inizializzato in setup() e non necessita di ulteriori attenzioni.
Passaggio 4: dimmer LED
La modulazione dell'ampiezza dell'impulso è un modo efficace per regolare l'intensità di un LED. Con un driver adeguato, è anche il metodo preferito per regolare la velocità dei motori elettrici. Poiché il segnale è acceso al 100% o spento al 100%, nessuna potenza viene sprecata su una resistenza in serie. Fondamentalmente, è come far lampeggiare il LED più velocemente di quanto l'occhio possa seguire. 50Hz sono in linea di principio sufficienti, ma può sembrare che sfarfalli ancora un po' e quando il LED o gli occhi si muovono, può risultare una fastidiosa "scia" non continua. Usando una prescala di 64 con un timer a 8 bit, otteniamo 16MHz/(64*256)=977Hz, che si adatta allo scopo. Selezioniamo timer2, in modo che timer1 rimanga disponibile per altre funzioni e non interferiamo con la funzione time() di Arduino, che utilizza timer0.
In questo esempio il duty cycle, e quindi l'intensità, è regolato da un potenziometro. Un secondo LED può essere regolato indipendentemente con lo stesso timer al pin 3.
Passaggio 5: convertitore digitale-analogico (DAC)
L'Arduino non ha una vera uscita analogica. Alcuni moduli accettano una tensione analogica per regolare un parametro (contrasto del display, soglia di rilevamento, ecc.). Con un solo condensatore e resistenza, il timer1 può essere utilizzato per creare una tensione analogica con una risoluzione di 5 mV o superiore.
Un filtro passa-basso può "mediare" il segnale PWM su una tensione analogica. Un condensatore è collegato tramite un resistore a un pin PWM. Le caratteristiche sono determinate dalla frequenza PWM e dai valori del resistore e del condensatore. La risoluzione dei timer a 8 bit sarebbe 5V/256=20mV, quindi optiamo per Timer1 per ottenere una risoluzione a 10 bit. Il circuito RC è un filtro passa-basso del primo ordine e avrà qualche ripple. La scala temporale del circuito RC dovrebbe essere molto più grande del periodo del segnale PWM per ridurre l'ondulazione. Il periodo che otteniamo per una precisione a 10 bit è 1024/16 MHz = 64 mus. Se usiamo un condensatore da 1muF e un resistore da 10kOhm, RC=10ms. L'ondulazione picco-picco è al massimo 5V*0,5*T/(RC)=16mV, che qui è considerata sufficiente.
Si noti che questo DAC ha un'impedenza di uscita molto elevata (10kOhm), quindi la tensione diminuirà in modo significativo se assorbe corrente. Per evitare ciò, può essere bufferizzato con un opamp o può essere scelta un'altra combinazione di R e C, ad esempio 1kOhm con 10muF.
Nell'esempio, l'uscita DAC è pilotata con un potenziometro. Un secondo canale DAC indipendente può essere eseguito con timer1 sul pin 10.
Passaggio 6: Metronomo
Un metronomo aiuta a tenere traccia del ritmo durante la riproduzione della musica. Per impulsi molto brevi, l'uscita del timer arduino può essere alimentata direttamente a un altoparlante, che produrrà clic chiaramente udibili. Con un potenziometro, la frequenza dei battiti può essere regolata da 40 a 208 battiti al minuto, in 39 passi. Timer1 è necessario per la precisione richiesta. Il valore di "TOP", che determina la frequenza, viene modificato all'interno della funzione loop() e ciò richiede attenzione! Vedete qui che la modalità WGM differisce dagli altri esempi che hanno frequenza fissa: questa modalità, con TOP impostato dal registro OCR1A, ha doppio buffering e protegge da TOP mancanti e da lunghi glitch. Tuttavia, questo significa che possiamo utilizzare solo 1 pin di uscita.
Passaggio 7: spettro sonoro
Gli esseri umani possono sentire oltre 3 ordini di grandezza di frequenze sonore, da 20Hz a 20kHz Questo esempio genera lo spettro completo con un potenziometro. Un condensatore da 10muF viene inserito tra l'altoparlante e l'Arduino per bloccare la corrente CC. Timer1 produce un'onda quadra. La modalità di generazione della forma d'onda qui è PWM a correzione di fase. In tale modalità, il contatore inizia a contare all'indietro quando raggiunge il massimo, il che si traduce in impulsi la cui media è fissa, anche quando il ciclo di lavoro varia. Tuttavia, si ottiene anche un periodo che è (quasi) doppio, e capita semplicemente che con la prescala 8, il timer1 copra l'intero spettro udibile, senza la necessità di modificare la prescala. Anche qui, poiché il valore di TOP viene modificato in movimento, l'utilizzo di OCR1A come top riduce i glitch.
Passaggio 8: Servomotori
Esistono potenti librerie di servo, ma se hai solo due servo da pilotare, potresti anche farlo direttamente con il timer1, e quindi ridurre la CPU, l'uso della memoria ed evitare gli interrupt. Il popolare servo SG90 prende un segnale a 50Hz e la lunghezza dell'impulso codifica la posizione. Ideale per timer1. La frequenza è fissa, quindi entrambe le uscite sul pin9 e sul pin 10 possono essere utilizzate per guidare i servi in modo indipendente.
Passaggio 9: Duplicatore di tensione e inverter
A volte il tuo progetto richiede una tensione superiore a 5V o una tensione negativa. Potrebbe essere l'esecuzione di un MOSFET, l'esecuzione di un elemento piezoelettrico, l'alimentazione di un opamp o il ripristino di una EEPROM. Se l'assorbimento di corrente è abbastanza piccolo, fino a ~5mA, una pompa di carica potrebbe essere la soluzione più semplice: solo 2 diodi e due condensatori collegati a un segnale pulsato da un timer consentono di raddoppiare l'arduino 5V a 10V. In pratica, ci sono 2 cadute di diodi, quindi sarà più simile a 8,6 V in pratica per il duplicatore o a -3,6 V per l'inverter.
La frequenza dell'onda quadra dovrebbe essere sufficiente per pompare una carica sufficiente attraverso i diodi. Un condensatore da 1muF sposta 5muC di variazione quando la tensione cambia tra 0 e 5V, quindi per una corrente di 10mA, la frequenza deve essere di almeno 2kHz. In pratica, una frequenza più alta è migliore, poiché riduce l'ondulazione. Con il timer2 che conta da 0 a 255 senza prescala, la frequenza è 62,5kHz, che funziona bene.
Passaggio 10: trasferimento di potenza wireless
Non è raro caricare uno smartwatch senza cavi, ma lo stesso può facilmente far parte di un progetto Arduino. Una bobina con un segnale ad alta frequenza può trasferire potenza a un'altra bobina vicina tramite induzione, senza contatto elettrico.
Per prima cosa preparate le bobine. Ho utilizzato un rotolo di carta di 8,5 cm di diametro e filo smaltato di 0,13 mm di diametro per realizzare 2 bobine: la primaria da 20 spire, la secondaria da 50 spire. L'autoinduttanza di questo tipo di bobina con N avvolgimenti e raggio R è ~5muH * N^2 * R. Quindi per N=20 e R=0,0425 si ottiene L=85muH, che è stato confermato con il tester del componente. Produciamo un segnale con una frequenza di 516kHz, risultando in un'impedenza di 2pi*f*L=275Ohm. Questo è abbastanza alto da non far andare in sovracorrente Arduino.
Per far funzionare la bobina nel modo più efficace, vorremmo utilizzare una vera fonte di corrente alternata. C'è un trucco che si può fare: le due uscite di un timer possono essere fatte funzionare in fase opposta, invertendo una delle uscite. Per renderlo ancora più simile a un'onda sinusoidale, utilizziamo il PWM con correzione di fase. In questo modo, tra pin 9 e 10, la tensione si alterna tra entrambi 0V, pin 9 +5V, entrambi 0V, pin 10 +5V. L'effetto è mostrato nell'immagine da una traccia dell'oscilloscopio (con una prescala 1024, questo mirino giocattolo non ha molta larghezza di banda).
Collegare la bobina primaria ai pin 9 e 10. Collegare un LED alla bobina secondaria. Quando la bobina del secondario viene avvicinata al primario, il LED si illumina intensamente.
Consigliato:
Un fantastico trucco per touchpad per laptop per progetti Arduino!: 18 passaggi (con immagini)
Un fantastico trucco per touchpad per laptop per progetti Arduino!: Tempo fa, quando stavo armeggiando con un touchpad PS/2 con un microcontrollore Arduino, ho scoperto che due delle sue connessioni integrate possono essere utilizzate come ingressi digitali. In questo Instructable, impariamo come possiamo utilizzare l'aggiunta di un touchpad PS/2
16x16 RGB LED Panel Progetti Arduino: 5 passaggi (con immagini)
Progetti Arduino per pannelli LED RGB 16x16: Ciao a tutti, sto pubblicando questo progetto perché vorrei che tutti avessero un posto semplice dove venire a giocare con uno di questi fantastici pannelli LED RGB 16x16. Ho preso idee da altri progetti e le ho modificate per questo progetto. Ti dà
Circuito dimmer LED - 555 progetti con timer: 5 passaggi
Circuito dimmer LED | 555 Timer Projects: trova la descrizione completa del progetto & Tutto il materiale utile incluso diagramma del circuito / hardware schematico / codici elenco componenti / foglio dati algoritmo / configurazione pin ecc. ►► https://circuits-diy.com/how-to-make-simple-led-d
10 progetti Arduino di base per principianti! Realizza almeno 15 progetti con un'unica scheda!: 6 passaggi
10 progetti Arduino di base per principianti! Realizza almeno 15 progetti con una singola scheda!: Arduino Project & Consiglio di esercitazione; Include 10 progetti Arduino di base. Tutti i codici sorgente, il file Gerber e altro. Niente SMD! Saldatura facile per tutti. Componenti facilmente rimovibili e sostituibili. Puoi realizzare almeno 15 progetti con un singolo bo
3 fantastici progetti di controllo BRAIN / MIND Luci LedStrip LED con Arduino e Neurosky: 6 passaggi (con immagini)
3 fantastici progetti di controllo BRAIN / MIND Luci LedStrip LED con Arduino e Neurosky: hai mai desiderato accendere o spegnere le luci solo pensandoci? Oppure vuoi sapere quanto sei stressato guardando il colore di un led RGB? Mentre ora puoi seguire questo Instructables! Per avere un'idea di cosa stiamo andando t