Encoder rotativi ottici e magnetici: differenze, funzionamento ed esempi con KY-040 e AS5600

  • Gli encoder rotativi possono essere ottici (come il KY-040) o magnetici (come l'AS5600), ognuno con le sue particolarità e vantaggi a seconda dell'utilizzo.
  • Il KY-040 si distingue per la sua semplicità, il prezzo contenuto e l'utilità delle interfacce utente, mentre l'AS5600 offre una precisione assoluta ed è ideale per il controllo motori e la robotica.
  • La scelta tra l'uno o l'altro dipende dalle esigenze di precisione, robustezza nell'ambiente e facilità di integrazione in Arduino o progetti simili.

encoder rotativi

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

encoder

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.

codificatore rotativo
Articolo correlato:
Encoder rotativi: cosa sono e principali tipologie

Inizia la conversazione

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.