Nota

Ciao, benvenuto nella Community di appassionati di Raspberry Pi, Arduino e ESP32 di SunFounder su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato ai nuovi annunci di prodotti e alle anteprime.

  • Sconti speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e giveaway: Partecipa a concorsi e promozioni durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

2.1.6 Modulo Encoder Rotativo

Introduzione

In questo progetto, imparerai a conoscere l’encoder rotativo. Un encoder rotativo è un interruttore elettronico che genera una serie di impulsi regolari in una sequenza temporale precisa. Quando utilizzato con un IC, può consentire operazioni di incremento, decremento, cambiamento di pagina e altre operazioni come lo scorrimento del mouse, la selezione del menu, e così via.

Componenti necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/Part_two_25.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

OGGETTI IN QUESTO KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Modulo Encoder Rotativo

ACQUISTA

Schema elettrico

../_images/image349.png

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/2.1.6_fritzing.png

In questo esempio, possiamo collegare direttamente i pin dell’encoder rotativo al Raspberry Pi utilizzando una breadboard e un cavo a 40 pin. Collega il GND dell’encoder rotativo al GND, 「+」 a 5V, SW al GPIO digitale 27, DT al GPIO digitale 18 e CLK al GPIO digitale 17.

Passo 2: Vai alla cartella del codice.

cd ~/raphael-kit/nodejs/

Passo 3: Esegui il codice.

sudo node rotary_encoder_module.js

Vedrai il conteggio nel terminale. Quando ruoti l’encoder rotativo in senso orario, il conteggio aumenta; quando lo ruoti in senso antiorario, il conteggio diminuisce. Se premi l’interruttore sull’encoder rotativo, il conteggio verrà resettato a zero.

Codice

const Gpio = require('pigpio').Gpio;

const clkPin = new Gpio(17, {
  mode: Gpio.INPUT,
  pullUpDown: Gpio.PUD_DOWN,
  edge: Gpio.RISING_EDGE
});
const dtPin = new Gpio(18, {
  mode: Gpio.INPUT,
  pullUpDown: Gpio.PUD_DOWN,
});
const swPin = new Gpio(27, {
  mode: Gpio.INPUT,
  pullUpDown: Gpio.PUD_UP,
  edge: Gpio.FALLING_EDGE
});

var globalCounter = 0;

clkPin.on('interrupt',()=>{
  if(dtPin.digitalRead()==1){
      globalCounter--;
  }
  else{
      globalCounter++;
  }
  console.log(`globalCounter = ${globalCounter}`);
});

swPin.on('interrupt', () => {
  globalCounter = 0;
  console.log(`globalCounter = ${globalCounter}`);
});

Spiegazione del Codice

var globalCounter = 0;

clkPin.on('interrupt',()=>{
  if(dtPin.digitalRead()==1){
      globalCounter--;
  }
  else{
      globalCounter++;
  }
  console.log(`globalCounter = ${globalCounter}`);
});

Quando dtPin passa da basso ad alto, se clkPin è alto, il conteggio diminuisce, altrimenti il conteggio aumenta.

swPin.on('interrupt', () => {
  globalCounter = 0;
  console.log(`globalCounter = ${globalCounter}`);
});

Quando swPin rileva una pressione, emetterà un livello basso. In quel momento, il conteggio globale verrà resettato a zero.

Immagine del fenomeno

../_images/2.1.6rotary_ecoder.JPG