¡Oferta!

Módulo Sensor de Velocidad Infrarrojo Encoder Digital

El precio original era: 4,85 €.El precio actual es: 2,39 €. Excluido IVA

Módulo Sensor de Velocidad Infrarrojo Encoder Digital

Disponible para reserva

Domande su questo prodotto? Scrivi a Lana su WhatsApp

🎬 El producto en vídeo

Descripción


🔍 Descripción del Módulo Sensor de Velocidad Infrarrojo Encoder Digital

✅ Características principales

El Módulo Sensor de Velocidad Infrarrojo (IR) con Encoder Digital es un dispositivo comúnmente utilizado para la detección de la velocidad de rotación o el conteo de rotaciones de objetos en movimiento, como motores o ruedas.

  • Tipo de sensor: Óptico infrarrojo
  • Salida: Digital (0 o 1 lógico)
  • Principio de funcionamiento: Interrupción de un haz IR por parte de un disco codificado (encoder disk)
  • Tensión operativa: 3.3V – 5V
  • Tipo de salida: Señal digital (HIGH/LOW)
  • Pin: VCC, GND, OUT
  • Frecuencia soportada: Hasta ~1000 RPM (depende del disco encoder)

🧰 Aplicaciones típicas

  • Medición de velocidad angular de motores
  • Contar impulsos (tachómetros)
  • Robótica y automatización
  • Encoders ópticos para ruedas de robots

⚙️ Componentes necesarios para el proyecto con Arduino

  • 1x Arduino UNO (o compatible)
  • 1x Módulo Sensor de Velocidad IR
  • 1x Disco Encoder (rótula codificada, perforada)
  • Cables Dupont
  • Motores DC (opcional)
  • Protoboard (opcional)

🔌 Conexiones eléctricas

Módulo IR Encoder Arduino
VCC 5V
GND GND
FUERA Pin digital (ej. 2)

🖥️ Código de ejemplo para Arduino

1. Lectura de pulsos

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++;
}

✅ Este sketch usa la interrupción en el pin 2 (solo los pines 2 y 3 soportan interrupciones en Arduino UNO) para contar las interrupciones generadas por el disco codificador.


2. Cálculo de velocidad angular (RPM)

Supongamos que el disco tiene 20 ranuras (20 pulsos por 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++;
}

📏 Guía de calibración y prueba

  1. Instalación física: Monta el sensor cerca del disco perforado en el motor. Asegúrate de que el haz infrarrojo atraviese los orificios del disco codificador.
  2. Alineación: El haz IR debe impactar exactamente en el intervalo entre los orificios. Una mala alineación reduce la fiabilidad de la lectura.
  3. Verificar funcionamiento: Usa el primer sketch para asegurarte de que los pulsos se estén leyendo correctamente.
  4. Medir RPM: Usa el segundo sketch para estimar la velocidad de rotación del disco.

💡 Consejos prácticos

  • Usa discos codificador impresibles en 3D o adquiribles, con un número conocido de ranuras.
  • Para mejorar la estabilidad, filtra eléctricamente la alimentación del módulo (por ejemplo, con un condensador de 100nF entre VCC y GND).
  • El módulo también puede utilizarse para detectar objetos que pasan en una línea de producción (contar piezas).

📚 Recursos adicionales


¡Perfecto! Ampliemos ahora la guía para incluir:

  1. ✅ Control de un motor DC con codificador IR
  2. ✅ Implementación de un control PID de velocidad
  3. ✅ Código completo y explicación
  4. ✅ Esquema funcional del sistema

🔁 Objetivo del proyecto

Realizar un control de velocidad en bucle cerrado para un motor DC, utilizando:

  • Un módulo encoder IR digital para medir la velocidad
  • Un algoritmo PID para mantener constante la velocidad deseada
  • Un motor DC controlado por un módulo driver (ej. L298N, L9110, L293D)

🔩 Componentes adicionales necesarios

  • 1x Motor DC
  • 1x Disco Encoder con agujeros
  • 1x Driver motor (ej. L298N o L9110S)
  • 1x Alimentador externo (motor)
  • 1x Potenciómetro (opcional, para ajustar la velocidad)
  • Arduino UNO o compatible

🔌 Esquema eléctrico (con L298N)

Componente Conexión Arduino
Módulo IR Encoder VCC → 5V, GND → GND, OUT → D2
L298N IN1 D8
L298N IN2 D9
L298N ENA (PWM) D10 (PWM)
Alimentación Motores 12V externa

🧠 Estructura del código: PID + Encoder + PWM

El PID regula la señal PWM para mantener constante la velocidad medida por el sensor encoder.

⚙️ 1. Declaraciones y biblioteca PID

Instala la biblioteca PID_v1 desde Arduino IDE (a través de 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. Impulsos del sensor

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: cálculo RPM y control 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;
  }
}

🎛️ (Opcional) Control de velocidad mediante potenciómetro

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

Conecta un potenciómetro entre 5V – A0 – GND para ajustar dinámicamente la velocidad deseada.


🧪 Ajuste del PID

Los valores iniciales de Kp, Ki, Kd deben adaptarse a tu motor y carga:

PID myPID(&inputRPM, &outputPWM, &setpointRPM, 2.0, 5.0, 1.0, DIRECT);
  • Kp (Proporcional): aumenta para una respuesta más rápida
  • Ki (Integral): corrige el error a largo plazo
  • Kd (Derivativo): atenúa las oscilaciones

Comienza solo con Kp, luego agrega Ki, finalmente Kd.


✅ Resultado esperado

  • El motor mantiene una velocidad constante aunque la tensión cambie o la carga varíe
  • Puedes establecer la velocidad deseada modificando setpointRPM
  • El sistema se autoregula con el algoritmo PID

🧩 Extensiones posibles

  • 📈 Registra datos en tarjeta SD o monitor serial
  • 🧭 Control PID en 2 motores para robot diferencial
  • 🕹️ Control remoto de la velocidad por Bluetooth o Wi-Fi
  • 📊 Interfaz gráfica en Processing o Python

Tutorial: Cómo usar Módulo Sensor de Velocidad Infrarrojo Encoder Digital

El módulo sensor de velocidad infrarrojo encoder digital es ideal para makers que desean medir la velocidad rotativa de un motor o de cualquier otro dispositivo giratorio. Es particularmente útil en proyectos como contadores de revoluciones, robots y drones.

Qué necesitas

  • Arduino
  • Motores de corriente continua
  • Conexión USB para alimentación

Pasos

  1. Conectar los conectores del módulo al pin D2 del Arduino (verifica en el datasheet para la configuración exacta).
  2. Conecta el motor a la rueda o al eje en el que deseas medir la velocidad.
  3. Acercar el sensor infrarrojo al borde de la rueda de manera que capte las señales de paso.
  4. Escribir un sketch Arduino para leer los datos del sensor y calcular la velocidad rotativa (ver código a continuación).
  5. Compilar y ejecutar el sketch en tu Arduino.
  6. Verificar que la salida del sensor cumpla con las expectativas, ajustando la posición o la alimentación si es necesario.
  7. Conectar un display LCD (opcional) para visualizar los datos de velocidad en tiempo real.
  8. Implementar la lógica del proyecto para utilizar estos datos según sea necesario.

Código de ejemplo

const int encoderPin = 2;

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

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

Miniproyecto

Realizar un contador de revoluciones para motores RC. Conectar el sensor al eje del motor y medir la velocidad durante la ejecución.

Errores comunes

  • El sensor no detecta las señales: verifica que esté correctamente posicionado respecto al borde de la rueda.
  • Lectura incorrecta de datos: asegúrate de haber configurado el pin correcto y de haber elegido la lógica adecuada para leer las señales.
  • Velocidad no conforme a las expectativas: verifica la alimentación del motor y la posición del sensor.

Accesorios recomendados

  • Display LCD
  • Motores de corriente continua
  • Rueda de prueba para motor RC
  • Conexiones variadas

Preguntas frecuentes

¿El módulo puede usarse con otros microcontroladores?
Sí, el módulo es compatible con cualquier microcontrolador que soporte la entrada digital.

¿Qué tipos de motor puedo conectar al sensor?
Puedes utilizar cualquier tipo de motor paso a paso o de corriente continua, pero asegúrate de que sea compatible con tu circuito eléctrico.

¿Cómo puedo mejorar la precisión de la medición?
Coloca el sensor más cerca de la rueda y asegúrate de que no haya interferencias de luz ambiental.

Valoraciones

No hay valoraciones aún.

Sé el primero en valorar “Módulo Sensor de Velocidad Infrarrojo Encoder Digital”

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *