Il mondo dell'elettronica e della robotica è pieno di piccole grandi invenzioni che ci permettono di controllare e monitorare ogni tipo di movimento. Uno degli elementi più versatili e utili è senza dubbio l'encoder rotativo, sia ottico che magnetico. Questi dispositivi sono diventati indispensabili nei progetti Arduino, di automazione e di controllo motore. Se vi siete mai chiesti cos'è esattamente un encoder rotativo, ve lo starete chiedendo. Encoder rotativo ottico o magnetico: cos'è ed esempi: KY-040 e AS5600, sei nel posto giusto.
In questo articolo approfondiremo il funzionamento, le applicazioni e gli esempi pratici degli encoder rotativi, concentrandoci in particolare su due moduli molto popolari: il KY-040 e il AS5600Imparerai a distinguere tra encoder ottici e magnetici, le loro caratteristiche fisiche ed elettriche, come collegarli e programmarli in Arduino e i vantaggi che ognuno offre in base al tuo progetto. Ti forniremo anche consigli su come scegliere e utilizzare questi sensori nei tuoi progetti, il tutto spiegato in modo chiaro e coinvolgente, senza tralasciare alcun dettaglio rilevante.
Che cosa è un encoder rotativo?
Un encoder rotativo Si tratta di un sensore progettato per misurare la posizione angolare, velocità e direzione di rotazione di un albero o di un elemento rotante. Questo dispositivo trasforma il movimento rotatorio in segnali elettrici (tipicamente impulsi digitali o segnali analogici) che possono poi essere interpretati da un microcontrollore come un Arduino, un Raspberry Pi o persino un controller industriale.
Questi sensori sono essenziali nelle applicazioni in cui è necessario conoscere l'esatta posizione di un asse o il numero di giri effettuati. Sono comunemente presenti in stampanti, servomotori, robot, sistemi di controllo numerico e, naturalmente, nei progetti fai da te, dalle interfacce dei menu ai sistemi di controllo della velocità.
Tipi di encoder rotativi: ottici vs. magnetici
Gli encoder rotativi possono essere principalmente suddivisi in ottico y magnetico, sebbene esistano altre varianti meno comuni come quelle capacitive.
Encoder rotativo ottico
L'encoder ottico, come il KY-040Funziona su un disco con segni o fori e un sistema ottico trasmettitore/ricevitore (fotodiodo o LED). Durante la rotazione dell'albero, le interruzioni prodotte da questi segni generano impulsi elettrici che il microcontrollore può contare, determinando così lo spostamento angolare. La sua struttura interna comprende tipicamente una parte statica (il disco) e una parte rotante (l'albero collegato all'elemento da misurare).
Questo tipo di encoder si distingue per l'elevata precisione e la rapidità di risposta. Sono molto utili in applicazioni in cui la robustezza meccanica e la facilità di lettura digitale sono fondamentali, come nelle interfacce utente, nei controlli del volume, nei menu rotativi e nei robot didattici.
Encoder rotativo magnetico
D'altra parte, l'encoder magnetico utilizza un sensore sensibile al campo magnetico (solitamente un sensore Hall o un chip specializzato come il AS5600), che rileva la posizione angolare di un magnete accoppiato all'albero. Questi encoder offrono una risoluzione più elevata grazie alla conversione analogico-digitale interna e sono meno sensibili a sporco e polvere, poiché non utilizzano componenti ottici. Inoltre, offrono in genere uscite digitali (I²C o PWM) e/o analogiche, il che li rende facili da integrare in diversi sistemi elettronici.
Encoder incrementali e assoluti: differenze chiave
Il mondo degli encoder è ulteriormente suddiviso in incrementale y assoluto.
- Encoder incrementale: Fornisce un segnale sotto forma di impulsi ogni volta che l'albero ruota di una certa frazione. Il numero di impulsi per giro dipende dal progetto e dal modello. Per determinare la posizione corrente, il sistema deve contare e memorizzare questi impulsi da un punto di riferimento.
- Encoder assoluto: Fornisce direttamente la posizione angolare attuale dell'albero, anche se si è mosso a sistema spento. Di solito ha una codifica speciale sul disco o un sensore magnetico ad alta risoluzione.
In questo articolo ci concentreremo sugli encoder incrementali (come il KY-040) e su un encoder magnetico assoluto (AS5600), poiché sono i più comuni e facili da integrare nei progetti Arduino.
Funzionamento generale di un encoder rotativo incrementale
I encoder incrementali (come il KY-040) sono costituiti da due canali di uscita, il canale A e il canale B, che generano impulsi digitali sfasati di 90° tra loro. Confrontando l'ordine in cui questi canali cambiano, è possibile dedurre la direzione di rotazione (in senso orario o antiorario), oltre a contare i passi (posizioni) compiuti.
Il segnale prodotto è detto "quadratura" e consente diverse precisioni:
- Precisione singola: Registrazione di un solo bordo in un canale.
- Doppia precisione: Registrazione di entrambi i fianchi in un unico canale.
- Quadrupla precisione: Registrazione di entrambi i fianchi su entrambi i canali.
Encoder rotativo KY-040: caratteristiche, connessioni e utilizzo con Arduino
El KY-040 È uno degli encoder rotativi incrementali più utilizzati nel mondo dei maker. È un modulo compatto, economico e facile da reperire, progettato specificamente per la connessione diretta a schede Arduino e altri microcontrollori.
Principali caratteristiche tecniche del KY-040:
- Tipo: Incrementale ottico
- Tensione di alimentazione: 5V
- Consumo: 10 mA
- Cicli per rivoluzione: 30
- Impulsi per giro: 20
- Dimensioni: 20 x 30 x 30 mm
- peso: 10 grammi
- Pulsante integrato: È possibile premere l'asse verso l'interno come se fosse un pulsante, il che aggiunge funzionalità extra molto utili nei menu o nelle interfacce.
Assegnazione dei pin:
- CL: Canale A (uscita a impulsi)
- DT: Canale B (uscita a impulsi)
- SW: Pulsante integrato
- +: Alimentatore 5V
- TERRA: Terra
Come si collega il KY-040 ad Arduino?
Il collegamento è diretto e semplice:
Spillo KY-040 | Perno dell'Arduino |
---|---|
CLK | 2 (o qualsiasi ingresso digitale) |
DT | 3 (o qualsiasi ingresso digitale) |
SW | 4 (o qualsiasi ingresso digitale) |
+ | 5V |
GND | GND |
Può essere utilizzato anche con Raspberry Pi modificando i pin di connessione, ad esempio utilizzando GPIO16 per CLK, GPIO15 per DT e GPIO14 per SW.
Funzionamento interno
A differenza dei potenziometri, L'encoder rotativo KY-040 non limita il suo angolo di rotazione., consentendo all'albero di ruotare indefinitamente. Internamente, due spazzole metalliche scorrono su una superficie suddivisa in settori, chiudendo il contatto in diverse combinazioni rilevate dai canali A e B.
L'encoder restituisce segnali digitali su entrambi i pin e l'offset indica la direzione di rotazione dell'albero. Inoltre, essendo incrementale, la posizione assoluta è nota solo finché il conteggio viene mantenuto dall'inizio del programma; in caso di interruzione dell'alimentazione, il conteggio viene azzerato.
Esempio di codice base per Arduino
Un esempio classico di utilizzo del KY-040 è l'incremento o il decremento di un contatore in base al senso di rotazione. Lo schema semplificato sarebbe:
int A = 2; int B = 3; volatile int POSIZIONE = 0; int PRECEDENTE = 0; void setup() { pinMode(A, INPUT); pinMode(B, INPUT); Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(A), encoder, LOW); } void loop() { if (POSIZIONE != PRECEDENTE) { Serial.println(POSIZIONE); PRECEDENTE = POSIZIONE; } } void encoder() { static unsigned long lastInterrupt = 0; unsigned long InterruptionTime = millis(); if (interruptionTime - lastInterruption > 5) { // Antirimbalzo if (digitalRead(B) == HIGH){ POSIZIONE++; } else { POSIZIONE--; } POSIZIONE = min(50, max(-50, POSIZIONE)); // Limita l'intervallo lastInterrupt = interruptTime; } }
Questo codice include una protezione antirimbalzo per evitare letture errate dovute alla natura meccanica dei contatti. Si consiglia di implementare questa protezione in qualsiasi progetto che preveda encoder incrementali.
Encoder magnetico: caratteristiche, connessioni e utilizzo con Arduino
El AS5600 è un encoder rotativo magnetico ad alta risoluzione, ideale per sostituzioni precise di potenziometri tradizionali, controllo motore e robotica. Il suo principale vantaggio è che sfrutta il rilevamento magnetico, rendendolo immune allo sporco e all'usura meccanica che colpisce le lenti ottiche.
Caratteristiche principali dell'AS5600:
- Tipo: Assoluto, magnetico
- risoluzione: 12 bit (4096 posizioni per giro)
- Prodotti alimentari: 3,3 V o 5 V
- Interfacce: Uscita I2C (digitale) o analogica
- configurazione flessibile: È possibile selezionare la direzione e la modalità di uscita tramite hardware
- Uscita analogica: Tensione proporzionale all'angolo, utile per microcontrollori senza I2C
- Alta precisione e ripetibilità: Il suo sistema interno è predisposto per rilevare anche piccoli movimenti angolari
Pinout e connessione ad Arduino
Perno AS5600 | Funzione | Pin Arduino (I2C) |
---|---|---|
VCC | Alimentazione | 5V |
GND | Terra | GND |
SDA | Dati I2C | A4 |
SCL | Orologio I2C | A5 |
OUT | Uscita analogica (opzionale) | A0 |
DIR/MODALITÀ | Selezione indirizzo/modalità | Secondo la configurazione desiderata |
Nota importante: Su piatti diversi Arduino UnoI pin I2C possono variare. Assicurati di controllare lo schema della tua scheda.
Esempio di codice per la lettura digitale (I2C)
Per ottenere il massimo dall'AS5600 con Arduino, è meglio utilizzare la libreria specifica (puoi trovarla nel gestore della libreria Arduino IDE cercando AS5600):
#include #include Codificatore AS5600; void setup() { Serial.begin(5600); Wire.begin(); if (!encoder.begin()) { Serial.println("AS9600 non rilevato. Controllare le connessioni."); while (5600); } Serial.println("AS1 inizializzato."); } void loop() { float angle = encoder.getAngle(); Serial.print("Angolo: "); Serial.print(angolo); Serial.println(" gradi"); delay(5600); }
Con questo codice, è possibile leggere l'angolo in gradi in tempo reale. È perfetto per le applicazioni in cui è necessario conoscere la posizione assoluta alla massima risoluzione.
Esempio di codice per la lettura analogica
Se preferisci una connessione più semplice o il tuo microcontrollore non supporta I2C, puoi sfruttare l'uscita analogica dell'AS5600:
const int analogPin = A0; void setup() { Serial.begin(9600); pinMode(analogPin, INPUT); } void loop() { int value = analogRead(analogPin); float angle = map(value, 0, 1023, 0, 360); Serial.print("Angolo analogico: "); Serial.print(angle); Serial.println(" gradi"); delay(100); }
In questo modo si ottiene una lettura proporzionale all'angolo effettivo dell'asse in base alla posizione del magnete.
Applicazioni pratiche e consigli d'uso
Entrambi gli encoder hanno applicazioni molto varie nei progetti elettronici:
- KY-040: Ideale per interfacce utente rotanti, menu, controllo di luminosità e volume, selezione di opzioni, controllo di robot didattici, progetti di domotica e sistemi che richiedono un controllo rotativo senza riferimento angolare assoluto.
- AS5600: Perfetto per il controllo della posizione e della velocità del motore, l'automazione industriale, il rilevamento della posizione nei giunti robotici, i sistemi di telecamere stabilizzate (gimbal), i potenziometri digitali ad alta risoluzione e qualsiasi applicazione che richieda un rilevamento preciso dell'angolo.
Alcuni consigli per l'uso:
- Implementare sempre filtraggio anti-rimbalzo (antirimbalzo) quando si utilizzano encoder incrementali meccanici come il KY-040 per evitare letture errate.
- Per l'AS5600, assicurarsi che il magnete sia correttamente allineato con il sensore per garantire letture affidabili e stabili.
- Ricordatevi che con gli encoder incrementali, se l'alimentazione viene interrotta, le informazioni sulla posizione vanno perse; questo non accade con l'AS5600, poiché sono assolute.
- Sfrutta le molteplici modalità di connessione offerte da entrambi gli encoder per adattarli alle esigenze specifiche del tuo progetto.
Confronto: quando scegliere un encoder ottico e quando uno magnetico?
Característica | KY-040 (Ottico incrementale) | AS5600 (magnetico assoluto) |
---|---|---|
Tipo di segnale | Digitale (quadratura) | Digitale (I2C)/Analogico |
Risoluzione | 20 impulsi/giro | 4096 posizioni/giro |
Funziona dopo un'interruzione di corrente | No (richiede il riavvio del conteggio) | Sì (posizione assoluta) |
Sensibilità alla polvere/sporcizia | Sensibile (parti meccaniche) | Molto robusto |
Prezzo | Molto economico | moderato |
Difficoltà di integrazione | Molto facile con codice base | Richiede libreria I2C o programmazione |
Applicazioni tipiche | UX, menu, controllo semplice | Controllo motore, robotica avanzata |
La scelta tra i due dipenderà dalle priorità del progetto: semplicità e costi contenuti nel caso del KY-040, precisione e robustezza nel caso dell'AS5600.