Nota
Ciao, benvenuto nella Comunità di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché unirsi?
Supporto esperto: Risolvi problemi post-vendita e difficoltà tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Condividi suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Accedi in anteprima ai nuovi annunci di prodotto e a contenuti esclusivi.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e giveaway: Partecipa a promozioni stagionali e concorsi a premi.
👉 Pronto a esplorare e creare con noi? Clicca [qui] e unisciti subito!
Lezione 17: Modulo Encoder Rotativo
In questa lezione imparerai a utilizzare il Raspberry Pi Pico W per controllare un encoder rotativo. Questo dispositivo avanzato converte la rotazione della manopola in un segnale di uscita, indicando sia la quantità che la direzione della rotazione. Il progetto offre esperienza pratica con dispositivi di input digitali, migliorando la tua capacità di lavorare con sensori più complessi. Configurerai l’encoder utilizzando specifici pin GPIO, leggerai il segnale per determinare direzione e quantità di rotazione, e utilizzerai un pulsante per attivare eventi.
Componenti necessari
Per questo progetto sono richiesti i seguenti componenti.
È sicuramente comodo acquistare un kit completo. Ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
---|---|---|
Kit Sensori Universali per Maker |
94 |
Puoi anche acquistare i componenti separatamente dai link seguenti.
Introduzione ai Componenti |
Link per l’acquisto |
---|---|
Raspberry Pi Pico W |
|
- |
|
Collegamenti

Codice
Nota
Apri il file
17_rotary_encoder_module.py
nella cartellauniversal-maker-sensor-kit-main/pico/Lesson_17_Rotary_Encoder_Module
oppure copia questo codice in Thonny, poi clicca su «Run Current Script» o premi F5 per eseguirlo. Per istruzioni dettagliate, consulta Apri ed Esegui Codice Direttamente.Assicurati che il file
rotary_irq_rp2.py
sia stato caricato sul Pico W. Per dettagli su come farlo, consulta Caricare le Librerie su Pico.Ricorda di selezionare l’interprete «MicroPython (Raspberry Pi Pico)» nell’angolo in basso a destra.
from rotary_irq_rp2 import RotaryIRQ
import time
from machine import Pin
# Imposta GPIO 20 come pin di input per leggere lo stato del pulsante (sw)
button_pin = Pin(20, Pin.IN, Pin.PULL_UP)
# Inizializza l'encoder rotativo con i pin GPIO e le impostazioni specificate
rotary_encoder = RotaryIRQ(
pin_num_clk=18,
pin_num_dt=19,
min_val=0,
max_val=14,
reverse=False,
range_mode=RotaryIRQ.RANGE_WRAP,
)
# Memorizza il valore iniziale dell'encoder e lo stato del pulsante
last_rotary_value = rotary_encoder.value()
last_button_state = button_pin.value()
# Ciclo principale
while True:
# Legge il valore attuale dell'encoder e lo stato del pulsante
current_rotary_value = rotary_encoder.value()
current_button_state = button_pin.value()
# Controlla se il valore dell'encoder è cambiato
if last_rotary_value != current_rotary_value:
last_rotary_value = current_rotary_value
print("result =", current_rotary_value)
# Controlla se lo stato del pulsante è cambiato da non premuto a premuto
if last_button_state and not current_button_state:
print("Button pressed!")
# Aggiorna lo stato precedente del pulsante per l'iterazione successiva
last_button_state = current_button_state
# Breve ritardo per evitare problemi di rimbalzo
time.sleep_ms(50)
Analisi del Codice
Importazione delle Librerie
Vengono importate le librerie necessarie:
rotary_irq_rp2
per la gestione dell’encoder,time
per i ritardi, emachine
per il controllo hardware.Per maggiori dettagli sulla libreria
rotary_irq_rp2
, visita MikeTeachman/micropython-rotary.from rotary_irq_rp2 import RotaryIRQ import time from machine import Pin
Configurazione del Pin del Pulsante
Il pin GPIO collegato al pin SW è configurato come input con resistenza di pull-up, garantendo un segnale HIGH stabile quando il pulsante non è premuto.
button_pin = Pin(20, Pin.IN, Pin.PULL_UP)
Inizializzazione dell’Encoder Rotativo
L’encoder viene configurato specificando i pin CLK e DT.
min_val
emax_val
definiscono l’intervallo di valori, mentrerange_mode
stabilisce il comportamento ai limiti (in questo caso ciclico).rotary_encoder = RotaryIRQ( pin_num_clk=18, pin_num_dt=19, min_val=0, max_val=14, reverse=False, range_mode=RotaryIRQ.RANGE_WRAP, )
Memorizzazione dei Valori Iniziali
I valori iniziali dell’encoder e del pulsante vengono salvati per rilevare i cambiamenti successivi.
last_rotary_value = rotary_encoder.value() last_button_state = button_pin.value()
Ciclo Principale
Il ciclo controlla continuamente eventuali cambiamenti nel valore dell’encoder e nello stato del pulsante. Se il valore cambia, stampa il nuovo risultato. Se il pulsante viene premuto, stampa «Button pressed!».
while True: current_rotary_value = rotary_encoder.value() current_button_state = button_pin.value() if last_rotary_value != current_rotary_value: last_rotary_value = current_rotary_value print("result =", current_rotary_value) if last_button_state and not current_button_state: print("Button pressed!") last_button_state = current_button_state time.sleep_ms(50)
Il
time.sleep_ms(50)
alla fine del ciclo serve per ridurre i problemi di rimbalzo del segnale (debouncing).