In offerta!

Modulo Sensore di Velocità Infrarossi Encoder Digitale

Il prezzo originale era: 4,85 €.Il prezzo attuale è: 2,39 €. Escluso IVA

Modulo Sensore di Velocità Infrarossi Encoder Digitale

Disponibile su ordinazione

COD: ARD0064 Categorie: ,

Descrizione


🔍 Descrizione del Modulo Sensore di Velocità Infrarossi Encoder Digitale

✅ Caratteristiche principali

Il Modulo Sensore di Velocità a Infrarossi (IR) con Encoder Digitale è un dispositivo comunemente utilizzato per il rilevamento della velocità di rotazione o del conteggio delle rotazioni di oggetti in movimento, come motori o ruote.

  • Tipo di sensore: Ottico a infrarossi
  • Uscita: Digitale (0 o 1 logico)
  • Principio di funzionamento: Interruzione di un fascio IR da parte di un disco codificato (encoder disk)
  • Tensione operativa: 3.3V – 5V
  • Tipo di uscita: Segnale digitale (HIGH/LOW)
  • Pin: VCC, GND, OUT
  • Frequenza supportata: Fino a ~1000 RPM (dipende dal disco encoder)

🧰 Applicazioni tipiche

  • Misurazione della velocità angolare di motori
  • Conta impulsi (tachimetri)
  • Robotica e automazione
  • Encoder ottici per ruote robotiche

⚙️ Componenti necessari per il progetto con Arduino

  • 1x Arduino UNO (o compatibile)
  • 1x Modulo Sensore di Velocità IR
  • 1x Disco Encoder (ruota codificata, forata)
  • Cavi Dupont
  • Motore DC (facoltativo)
  • Breadboard (opzionale)

🔌 Collegamenti elettrici

Modulo IR Encoder Arduino
VCC 5V
GND GND
OUT Pin digitale (es. 2)

🖥️ Codice di esempio per Arduino

1. Lettura degli impulsi

volatile int conta_impulsi = 0;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  attachInterrupt(digitalPinToInterrupt(2), contaImpulso, RISING);
}

void loop() {
  Serial.print("Impulsi contati: ");
  Serial.println(conta_impulsi);
  delay(1000);
}

void contaImpulso() {
  conta_impulsi++;
}

✅ Questo sketch usa l’interrupt su pin 2 (solo i pin 2 e 3 supportano interrupt su Arduino UNO) per contare le interruzioni generate dal disco encoder.


2. Calcolo della velocità angolare (RPM)

Supponiamo che il disco abbia 20 fori (20 impulsi per giro completo):

volatile int impulsi = 0;
unsigned long tempo_precedente = 0;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  attachInterrupt(digitalPinToInterrupt(2), contaImpulso, RISING);
}

void loop() {
  unsigned long tempo_attuale = millis();
  
  if (tempo_attuale - tempo_precedente >= 1000) {
    noInterrupts(); // disabilita gli interrupt per lettura sicura
    int rpm = (impulsi * 60) / 20; // 20 fori -> 20 impulsi per rotazione
    impulsi = 0;
    interrupts(); // riattiva gli interrupt

    Serial.print("RPM: ");
    Serial.println(rpm);
    tempo_precedente = tempo_attuale;
  }
}

void contaImpulso() {
  impulsi++;
}

📏 Guida alla taratura e test

  1. Installazione fisica: Monta il sensore vicino al disco forato sul motore. Assicurati che il raggio infrarosso attraversi i fori del disco encoder.
  2. Allineamento: Il fascio IR deve colpire esattamente l’intervallo tra i fori. Una cattiva allineazione riduce l’affidabilità della lettura.
  3. Verifica funzionamento: Utilizza il primo sketch per assicurarti che gli impulsi vengano letti correttamente.
  4. Misura RPM: Usa il secondo sketch per stimare la velocità di rotazione del disco.

💡 Suggerimenti pratici

  • Usa dischi encoder stampabili in 3D o acquistabili, con un numero noto di fori.
  • Per migliorare la stabilità, filtra elettricamente l’alimentazione del modulo (es. con un condensatore da 100nF tra VCC e GND).
  • Il modulo può essere utilizzato anche per rilevare oggetti che passano in una linea di produzione (conta pezzi).

📚 Risorse aggiuntive


Perfetto! Estendiamo ora la guida per includere:

  1. ✅ Controllo di un motore DC con encoder IR
  2. ✅ Implementazione di un controllo PID della velocità
  3. ✅ Codice completo e spiegazione
  4. ✅ Schema funzionale del sistema

🔁 Obiettivo del progetto

Realizzare un controllo di velocità a circuito chiuso per un motore DC, usando:

  • Un modulo encoder IR digitale per misurare la velocità
  • Un algoritmo PID per mantenere costante la velocità desiderata
  • Un motore DC pilotato da un modulo driver (es. L298N, L9110, L293D)

🔩 Componenti aggiuntivi necessari

  • 1x Motore DC
  • 1x Disco Encoder con fori
  • 1x Driver motore (es. L298N o L9110S)
  • 1x Alimentatore esterno (motore)
  • 1x Potenziometro (facoltativo, per impostare la velocità)
  • Arduino UNO o compatibile

🔌 Schema elettrico (con L298N)

Componente Collegamento Arduino
Modulo IR Encoder VCC → 5V, GND → GND, OUT → D2
L298N IN1 D8
L298N IN2 D9
L298N ENA (PWM) D10 (PWM)
Alimentazione Motore 12V esterna

🧠 Struttura del codice: PID + Encoder + PWM

Il PID regola il segnale PWM per mantenere costante la velocità misurata dal sensore encoder.

⚙️ 1. Dichiarazioni e libreria PID

Installa la libreria PID_v1 da Arduino IDE (via Library Manager).

#include <PID_v1.h>

// PID Variables
double setpointRPM = 100;     // Valore desiderato (impostabile)
double inputRPM = 0;          // Valore letto dal sensore
double outputPWM = 0;         // Output PID -> PWM

// PID tunings: Kp, Ki, Kd
PID myPID(&inputRPM, &outputPWM, &setpointRPM, 2.0, 5.0, 1.0, DIRECT);

📏 2. Impulsi dal sensore

volatile int impulsi = 0;

void contaImpulso() {
  impulsi++;
}

🔁 3. Setup

void setup() {
  Serial.begin(9600);

  // Encoder
  pinMode(2, INPUT);
  attachInterrupt(digitalPinToInterrupt(2), contaImpulso, RISING);

  // Motore
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);

  // Direzione motore fissa
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);

  // PID
  myPID.SetMode(AUTOMATIC);
  myPID.SetOutputLimits(0, 255); // PWM range
}

🔄 4. Loop: calcolo RPM e controllo PID

unsigned long tPrecedente = 0;
int foriDisco = 20;

void loop() {
  unsigned long tempo = millis();
  
  // Calcola RPM ogni 100 ms
  if (tempo - tPrecedente >= 100) {
    noInterrupts();
    int lettura = impulsi;
    impulsi = 0;
    interrupts();

    inputRPM = (lettura * 600.0) / foriDisco; // 600 = 60 sec/min * 100ms
    myPID.Compute(); // Calcola outputPWM

    analogWrite(10, (int)outputPWM); // Controlla motore

    // Debug seriale
    Serial.print("Setpoint: "); Serial.print(setpointRPM);
    Serial.print(" RPM -> Misurato: "); Serial.print(inputRPM);
    Serial.print(" PWM: "); Serial.println(outputPWM);

    tPrecedente = tempo;
  }
}

🎛️ (Facoltativo) Controllo della velocità via potenziometro

setpointRPM = map(analogRead(A0), 0, 1023, 0, 300);

Collega un potenziometro tra 5V – A0 – GND per regolare dinamicamente la velocità desiderata.


🧪 Taratura del PID

I valori iniziali di Kp, Ki, Kd devono essere adattati al tuo motore e carico:

PID myPID(&inputRPM, &outputPWM, &setpointRPM, 2.0, 5.0, 1.0, DIRECT);
  • Kp (Proporzionale): aumenta per risposta più veloce
  • Ki (Integrativo): corregge l’errore a lungo termine
  • Kd (Derivativo): attenua oscillazioni

Inizia con solo Kp, poi aggiungi Ki, infine Kd.


✅ Risultato atteso

  • Il motore mantiene una velocità costante anche se la tensione cambia o il carico varia
  • Puoi impostare la velocità desiderata modificando setpointRPM
  • Il sistema si autoregola con l’algoritmo PID

🧩 Estensioni possibili

  • 📈 Log dati su SD card o monitor seriale
  • 🧭 Controllo PID su 2 motori per robot differenziale
  • 🕹️ Controllo remoto della velocità via Bluetooth o Wi-Fi
  • 📊 Interfaccia grafica su Processing o Python

Tutorial: Come usare Modulo Sensore di Velocità Infrarossi Encoder Digitale

Il modulo sensore di velocità infrarossi encoder digitale è ideale per i maker che desiderano misurare la velocità rotativa di un motore o di qualsiasi altro dispositivo ruotante. È particolarmente utile in progetti come contatori di giri, robot e droni.

Cosa serve

  • Arduino
  • Motore a corrente continua
  • Connessione USB per alimentazione

Passi

  1. Collegare i connettori del modulo al pin D2 dell’Arduino (verifica sul datasheet per la configurazione esatta).
  2. Attaccare il motore alla ruota o all’asse su cui si desidera misurare la velocità.
  3. Avvicinare il sensore infrarosso al bordo della ruota in modo che catturi i segnali di passaggio.
  4. Scrivere uno sketch Arduino per leggere i dati dal sensore e calcolare la velocità rotativa (vedi codice sottostante).
  5. Compilare ed eseguire lo sketch sul proprio Arduino.
  6. Verificare che l’output del sensore sia conforme alle aspettative, regolando eventualmente il posizionamento o l’alimentazione.
  7. Connettere un display LCD (opzionale) per visualizzare i dati di velocità in tempo reale.
  8. Implementare la logica del progetto per utilizzare questi dati come necessario.

Codice di esempio

const int encoderPin = 2;

void setup() {
  pinMode(encoderPin, INPUT);
}

void loop() {
  if (digitalRead(encoderPin) == HIGH) {
    Serial.println("Impulso");
  }
}

Mini-progetto

Realizzare un contatore di giri per motore RC. Collegare il sensore all’asse del motore e misurare la velocità durante l’esecuzione.

Errori comuni

  • Il sensore non rileva i segnali: verifica che sia posizionato correttamente rispetto al bordo della ruota.
  • Lettura errata dei dati: assicurati di avere configurato il pin corretto e di aver scelto la logica giusta per leggere i segnali.
  • Velocità non conforme alle aspettative: controlla l’alimentazione del motore e il posizionamento del sensore.

Accessori consigliati

  • Display LCD
  • Motore a corrente continua
  • Ruota di test per motore RC
  • Connessioni variopinte

Domande frequenti

Il modulo può essere usato con altri microcontrollori?
Sì, il modulo è compatibile con qualsiasi microcontrollore che supporta l’input digitale.

Quali tipi di motore posso collegare al sensore?
Puoi utilizzare qualsiasi tipo di motore a passo o a corrente continua, ma assicurati che sia compatibile con il tuo circuito elettrico.

Come posso migliorare la precisione della misura?
Posiziona il sensore più vicino alla ruota e assicurati che non ci siano interferenze di luce ambientale.

Informazioni aggiuntive

Peso 21 g