Sistemas de Medición de Velocidad y Distancia con Arduino: Sensores y Código

Velocímetro

El velocímetro es un instrumento de medición de la velocidad. Su función principal es medir la rapidez a medida que la llanta de un objeto rueda por una superficie.

Función

La velocidad se mide mediante una rueda dentada, un sensor y un imán. Estos componentes envían la información a la placa de control, donde el velocímetro procesa y consigue el dato final.

Tipos de Velocímetros

  • Magnético: Utiliza un captor de pulsos simple para realizar la medición.
  • Eléctrico: Emite un pulso capaz de percibir la acción de un imán, convirtiéndolo posteriormente en pulsos eléctricos.

Clasificación y Componentes

  • 5) Velocímetro: Instrumento de medición parcial que calcula la distancia recorrida y se reinicia según el objeto.
  • D) Odómetro digital: Dispositivo encargado de medir el recorrido total.
  • C) Velocímetro electrónico: Está formado por una serie de programas que dan seguimiento a la información, mostrando los resultados mediante números en la cuenta.
  • B) Velocímetro mecánico: Dispositivo que se ajusta manualmente a la cuenta de la distancia recorrida.
  • E) Odómetro mecánico: Cuenta con una rueda precortada y un sensor que transmite la información del movimiento.
  • F) Tamaño de la rueda: La medición se realiza con un potenciómetro. Para interpretar la lectura, se utiliza un software especializado y una pantalla.
  • G) Odómetro: En ciertas configuraciones, no lleva la cuenta de la distancia total, sino solo parcial.
  • H) El uso de los 100 y 1000: Se refiere al movimiento de la rueda considerado para la medición a través de un cable. El velocímetro convierte esta información física en un dato digital.
  • 3) Medición de velocidad: Registra la velocidad que presenta un objeto en movimiento en un instante dado.
  • 7) Sensor: Posee un sensor capaz de recibir la relación de giro de la rueda para que la computadora (compiladora) la convierta en información legible.

Partes del Módulo Bluetooth

  • VCC: Alimentación positiva, con un rango de 3.3V a 5V.
  • GND: Alimentación negativa o tierra.
  • TX: Pin de transmisión de datos. Se conecta al pin RX de la placa.
  • RX: Pin de recepción de datos. Se conecta al pin TX de la placa.
  • Componentes adicionales: El módulo cuenta con una antena integrada y un LED indicador de estado.

Programación: Conteo Tradicional

int contador;

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

void loop() {
  for (contador = 0; contador <= 100; contador++) {
    Serial.println(contador);
    delay(300);
    if (contador == 100) {
      Serial.println("Fin del conteo");
      delay(100);
    }
  }
}

Programación: Detección de Objetos

int encoder = 10;
int var;

void setup() {
  pinMode(encoder, INPUT);
  Serial.begin(9600);
}

void loop() {
  var = digitalRead(encoder);
  delay(50);
  if (var == HIGH) {
    Serial.println("Objeto detectado");
    delay(300);
  } else {
    Serial.println("No detectado");
    delay(300);
  }
}

Odómetro

  • Función: Mide y determina el funcionamiento del vehículo mediante la construcción de un sistema para recorrer medianas y largas distancias.
  • Construcción: Se programa específicamente para realizar el conteo de distancias.
  • ¿Qué es un odómetro? Es un instrumento de medición que calcula la distancia parcial o total recorrida por un objeto. Existen dos tipos principales:
    • Mecánico
    • Digital
  • Odómetro Mecánico: Formado por engranajes que dan movimiento a tambores numerados (base de la cuenta de distancia). No requiere fuente de alimentación externa.
  • Odómetro Digital: Cuenta con una rueda precortada y un potenciómetro para leer la medición, apoyándose en un software y una pantalla.
  • Ejemplos de uso: Automóviles, aparatos de gimnasio (caminadoras) y bicicletas.

Encoder

Un encoder es un generador de pulsos. Se define como un dispositivo electromecánico que convierte la posición angular o el movimiento lineal de un objeto en una serie de pulsos eléctricos digitales.

  • Función: Se conecta a la placa Arduino. Sus componentes leen la posición angular y, ante cualquier movimiento, el encoder convierte dicha información física en datos.
  • Salida: La placa analiza la señal recibida y envía una instrucción al dispositivo para que ejecute el movimiento correspondiente.

Encoder Óptico

  • Realiza la medición del movimiento mediante un haz de luz infrarroja que se interrumpe por un disco ranurado.
  • Utilidad: Medir la cantidad de pulsos para obtener una mayor precisión en el dispositivo.
  • Componentes: LED (Diodo emisor de luz), Disco y Fototransistor.

Encoder Infrarrojo

  • Utiliza una muesca de infrarrojo; un extremo contiene un diodo emisor y el otro un fototransistor que recibe la señal.
  • Ambos componentes están colocados frente a frente, separados por una distancia de 5 mm.
  • Pines:
    1. AO: Señal analógica.
    2. DO: Señal digital.
    3. GND: Alimentación negativa.
    4. VCC: Alimentación positiva (de 3.3V a 12V).

Programación: Conteo mediante Encoder

volatile int encoder = 3;
int contador = 0;

void setup() {
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(encoder), interrupcion, RISING);
}

void loop() {
  Serial.println("Contador...");
  Serial.println(contador);
  contador = contador + 1;
  delay(500);
  Serial.println();
}

void interrupcion() {
  Serial.print("\t interrupción");
}

Programación: Conteo de Interrupciones y Antirrebote

volatile int encoder = 3;
int contador = 0;
int contar = 1;
static volatile unsigned long rebote = 0;

void setup() {
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(encoder), interrupcion, RISING);
}

void loop() {
  Serial.println("Contador");
  Serial.println(contador);
  contador = contador + 1;
  delay(500);
  Serial.println();
}

void interrupcion() {
  if (digitalRead(encoder) == HIGH && (micros() - rebote > 500)) {
    rebote = micros();
    Serial.println("\t interrupción");
    contar = contar + 1;
    Serial.println(contador);
  }
}

Programación Avanzada con Funciones Personalizadas

volatile int encoder = 3;
int contador = 0;
int contar = 1;
volatile unsigned long rebote = 0;

void setup() {
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(encoder), interrupcion, RISING);
}

void loop() {
  funcion_contador();
  valor_contador();
  debemos_hacer_caso();
  No_pelear_con_Isaac();
  debo_quejarme_menos();
  contador = contador + 1;
  Serial.println("");
}

void interrupcion() {
  if (digitalRead(encoder) == HIGH && (micros() - rebote > 500)) {
    rebote = micros();
    funcion_contar();
    male_piso_popo();
    guacala();
    contar = contar + 1;
  }
}

void funcion_contador() {
  Serial.print("contador");
}

void valor_contador() {
  Serial.println(contador);
}

void debemos_hacer_caso() {
  Serial.println("debemos hacer caso");
}

void No_pelear_con_Isaac() {
  // Lógica personalizada
}

void debo_quejarme_menos() {
  // Lógica personalizada
}

void funcion_contar() {
  // Lógica personalizada
}

void male_piso_popo() {
  Serial.println("malé piso popó");
}

void guacala() {
  Serial.println("guácala");
}

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.