mercoledì 13 gennaio 2021

Collegare un Encoder rotativo con switch a Raspberry Pi

 Alla ricerca di una soluzione valida per la costruzione della Radio Web, ma soprattutto per sperimentare nel senso piu' ampio del termine, mi sono imbattuto su questa libreria che gestisce tutte le fuinzionalita' del' encoder compreso lo switch a pulsante. Fa al caso mio!


L'Encoder consente di associare alla rotazione del suo asse a funzioni gestite da un programma, la funzione piu' comune e' quella di alzare o abbassare il volume, ma puo' essere anche utilizzato per spostarsi in un menu', per guidare un robot, per gestire lo spostamento della frequenza di un VFO di una radio, ecc..

La libreria che ho trovato consente di fare tutte queste cose con estrema facilita'.

La prima cosa che ho fatto e' cablare il mio Encoder con la Raspberry deputata al sacrificio di queste ultime prove.


Ho collegato  il segnale di CLOCK al PIN 18,il DATA al PIN 17 ed infine il PIN SWITCH al PIN 27, ma la disposizione dei PIN e' completamente arbitraria.

Le resistenze di pull-up che si vedono indicate nello schema qui accanto (se avete un encoder di questo tipo, sono gia' inserite nel circuito) invece non lo ho collegate, ma ho utilizzato la funzione di pull-up interna sui PIN della mia Raspberry Pi, per rendere ancora piu' semplice il circuito.



Nella foto qui accanto ho segnato i PIN che ho utilizzato nel mio circuito ed il positivo a 3,3 volts, non ho segnato il GND che e' presente in abbondanza sui PIN di Raspberry Pi.
A questo punto installiamo la libreria come indicato sulla documentazione:

Installation

  • Install the pigpio library (check pigpio documentation for alternative installation method)
  • sudo apt-get update
  • sudo apt-get install pigpio python-pigpio python3-pigpio
  • Install the pigpio_encoder library
  • pip install pigpio_encoder (consider add --user option)
  • start pigpio daemon
  • sudo pigpiod

Con l'uso della libreria bastano solo poche righe di codice per ottenere un programma funzionante che rileva attraverso gli interrupt di sistem, il movimento dell'asse dell'Encoder o la pressione dello stesso che attivera' lo switch. Viene anche tenuto conte del tempo di pressione del tasto per consentire di associare due funzioni differenti alla pressione dell'asse dell'Encoder, come vedremo con le funzioni: sw_short() e sw_long()

Questo un semplice programma di test che se fatto girare consente di assicurarsi che tutto sia montato correttamente.

from pigpio_encoder import pigpio_encoder

def rotary_callback(counter):
    print("Counter value: ", counter)

def sw_short():
    print("Switch short press")

def sw_long():
    print("Switch long press")

my_rotary = pigpio_encoder.Rotary(clk=18, dt=17, sw=27)
my_rotary.setup_rotary(min=10, max=300, scale=5, debounce=200, rotary_callback=rotary_callback)
my_rotary.setup_switch(debounce=200, long_press=True, sw_short_callback=sw_short, sw_long_callback=sw_long)

my_rotary.watch()

Qui a fianco il montaggio su una basetta di legno

Buon divertimento

TecnoGeppetto


Nessun commento: