Nota
Ciao e benvenuto nella Community Facebook degli appassionati di SunFounder Raspberry Pi, Arduino ed ESP32! Approfondisci le tue competenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri maker come te.
Perché unirsi?
Supporto Esperto: Risolvi problemi post-vendita e affronta sfide tecniche con l’aiuto del nostro team e della community.
Impara e Condividi: Scambia consigli e tutorial per migliorare le tue abilità.
Anteprime Esclusive: Accedi in anteprima a nuovi annunci di prodotto e contenuti esclusivi.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a concorsi e iniziative promozionali durante le festività.
👉 Pronto a scoprire e creare con noi? Clicca su [qui] ed entra oggi stesso!
Lezione 17: Modulo Encoder Rotativo
In questa lezione imparerai a monitorare e controllare un encoder rotativo con un Arduino Uno. Vedremo come rilevare la direzione di rotazione (in senso orario o antiorario), contare i giri effettuati e rilevare la pressione del pulsante integrato nel modulo encoder. Questo progetto è ideale per chi vuole approfondire la conoscenza degli encoder rotativi e delle operazioni di input/output su Arduino, offrendo un’esperienza pratica sui sistemi di controllo fisico.
Componenti Necessari
Per questo progetto sono richiesti i seguenti componenti.
È sicuramente comodo acquistare un kit completo. Ecco il link:
Nome |
CONTENUTO DEL KIT |
LINK |
---|---|---|
Universal Maker Sensor Kit |
94 |
Puoi anche acquistare i componenti separatamente dai link seguenti.
Descrizione del Componente |
Link per l’acquisto |
---|---|
Arduino UNO R3 o R4 |
|
- |
Arduino UNO R3 o R4
Collegamenti

Codice
Analisi del Codice
Configurazione e Inizializzazione
void setup() { pinMode(CLK, INPUT); pinMode(DT, INPUT); pinMode(SW, INPUT_PULLUP); Serial.begin(9600); lastStateCLK = digitalRead(CLK); }
Nella funzione di setup, i pin digitali collegati ai segnali CLK e DT dell’encoder vengono impostati come ingressi. Il pin SW, collegato al pulsante, è configurato come ingresso con resistenza di pull-up interna, evitando così l’uso di una resistenza esterna. La comunicazione seriale viene avviata a 9600 baud per consentire la visualizzazione dei dati sul Monitor Seriale. Lo stato iniziale del pin CLK viene letto e memorizzato.
Ciclo Principale: Lettura dell’Encoder e dello Stato del Pulsante
void loop() { currentStateCLK = digitalRead(CLK); if (currentStateCLK != lastStateCLK && currentStateCLK == 1) { if (digitalRead(DT) != currentStateCLK) { counter--; currentDir = "CCW"; } else { counter++; currentDir = "CW"; } Serial.print("Direction: "); Serial.print(currentDir); Serial.print(" | Counter: "); Serial.println(counter); } lastStateCLK = currentStateCLK; int btnState = digitalRead(SW); if (btnState == LOW) { if (millis() - lastButtonPress > 50) { Serial.println("Button pressed!"); } lastButtonPress = millis(); } delay(1); }
Nel ciclo principale, il programma legge costantemente lo stato del pin CLK. Un cambiamento di stato indica che è avvenuta una rotazione. La direzione viene determinata confrontando gli stati dei pin CLK e DT: se sono diversi, la rotazione è in senso antiorario (CCW); se coincidono, è in senso orario (CW). Il contatore viene aggiornato di conseguenza e le informazioni vengono inviate al Monitor Seriale.
Lo stato del pulsante viene rilevato tramite il pin SW. Se risulta LOW (pulsante premuto), viene applicato un meccanismo di debounce verificando che siano passati almeno 50 millisecondi dall’ultima pressione. Se la condizione è soddisfatta, viene stampato un messaggio sul Monitor Seriale. Il delay(1) finale aiuta nella stabilizzazione del segnale del pulsante.