PROYECTOS DE TECNOLOGÍAS CON ARDUINO:
"Tacómetro para maqueta con elementos rotativos de bajas revoluciones"
Aprenderás a :
Medir las revoluciones por minuto de tus proyectos de Tecnologías que incluyan partes rotatorias. Como ejemplo de esta práctica se ha utilizado un aerogenerador pero el principio de funcionamiento hace que sea aplicable a cualquier otro proyecto similar como norias, tiovivos, etc…
Necesitarás:
- Placa Arduino.
- Placa protoboard.
- Imán ligero y de pequeño tamaño (similar a los que se adhieren en las neveras).
- Relé Reed.
- Resistencia 10 K. Cable rígido de conexión protoboard.
- Ordenador personal para monitorizar la salida.
- Proyecto de tecnologías ya montado y funcional (en nuestro caso la maqueta de un aerogenerador).
Mediante esta práctica se pretenden medir las revoluciones por minuto (RPM) del rotor de una maqueta que simula el movimiento de un aerogenerador. Se han utilizado dos modelos para realizar las pruebas. Uno es el modelo didáctico comercial de CEBEK y el otro aerogenerador corresponde a un modelo construido por alumnos de tercero de ESO con materiales del aula taller. Hay que tener en cuenta que la maqueta no realiza la función de generación de energía mediante la fuerza de viento, como corresponde a un aerogenerador, sino que simplemente provoca el movimiento del rotor para simular el efecto del viento. Para ello se suministra la corriente necesaria al motor eléctrico bien mediante una una placa solar o bien mediante una pila en cada caso. Para realizar la detección de cada vuelta se utiliza un imán adherido a una de las palas que gira solidario a ella y un detector magnético, en este caso un relé Reed. Cada vez que el imán se posiciona frente al relé, debido a su campo magnético, provoca el contacto de los terminales del relé poniendo en conexión un canal de lectura digital de la tarjeta Arduino con una tensión de 5 voltios. Esta acción provoca que la tarjeta reconozca un nivel lógico alto que, mediante la un sencillo programa, realizará un conteo de vueltas y la medida de las revoluciones por minuto del rotor.
Montaje:
Se ubica el relé Reed sobre la parte superior y el imán se pega a una de las palas del aerogenerador, de forma que cuando pase la pala por la parte superior del aerogenerador, imán y relé queden enfrentados. Así el campo magnético del imán permite cerrar los contactos del relé Reed.
Figura 1 (detalle cabeza aerogenerador relé -imán) |
Las conexiones eléctricas se realizarán con el apoyo de la placa protoboard según el esquema que se adjunta. Se conecta la resistencia en configuración “pull-down”, es decir, cuando el imán está enfrentado al relé éste se cierra (ON) y conecta la entrada digital a una tensión de +5 V. En ausencia de imán el relé permanece abierto (OFF) y la entrada digital quedará conectada a masa (GND) a través de la resistencia de 10K.
![]() |
Figura 2 (esquema eléctrico - www.circuitlab.com ) |
![]() |
Figura 3 (detalle
conexiones protoboard)
|
Programa:
Una vez configurados el pin 2 como entrada digital y la comunicación serie para poder monitorizar la salida, realiza de forma cíclica una lectura del puerto de entrada. Mediante una sentencia condicional comprueba si el estado ha cambiado. En el caso de que el cambio sea a un nivel alto (HIGH) incrementa en una unidad la variable que cuenta las vueltas. Con el apoyo de la instrucción millis() se puede calcular el tiempo que trascurre el rotor en dar una vuelta completa (tiempo_una_rev), por lo que mediante un sencillo cálculo podremos conocer la velocidad en revoluciones por minuto, como se indica en la siguiente línea del programa: rpm = 60000 / tiempo_una_rev;
A continuación se incluye el programa completo:
/*
Programa basado en http://arduino.cc/en/Tutorial/ButtonStateChange (Examples ->; Digital ->; StateChangeDetection).
Tildes omitidas.
Detecta la conexion de los terminales de un rele Reed.
Se aplica para contar las vueltas de una maqueta aerogenerador mediante un
iman ubicado en una de las palas.
Circuito:
+5 V
o
|
|
|
o
/
/ Reed Rele
|
|
|------> Pin 2 (Digital)
---
| |
| | R = 10 KOhmios
| |
---
|
|
|
GND
created 27 Sep 2005
modified 30 Aug 2011
by Tom Igoe
modificado por Jorge Muñoz 15 Mayo 2012
This example code is in the public domain.
http://arduino.cc/en/Tutorial/ButtonStateChange
*/
const int releReedPin = 2;
int vueltas = 0;
int estadoRele = 0;
int ultimoEstadoRele = 0;
long tiempo_anterior = 0;
long tiempo_una_rev = 0;
unsigned long tiempo_ahora;
long rpm;
void setup()
{
pinMode(releReedPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Lee el estado del rele
estadoRele = digitalRead(releReedPin);
// Compara el estado del rele con el estado previo
if (estadoRele != ultimoEstadoRele) {
// Si el estado ha cambiado incrementa el contador
if (estadoRele == HIGH)
{
vueltas++;
tiempo_ahora =millis();
tiempo_una_rev = tiempo_ahora - tiempo_anterior;
rpm = 60000 / tiempo_una_rev; // 1 minuto = 60000 ms
Serial.println("Rele ON");
Serial.print("vuelta ");
Serial.println(vueltas);
Serial.print("Tiempo por revolucion: ");
Serial.println(tiempo_una_rev);
Serial.print("Revoluciones por minuto: ");
Serial.println(rpm);
}
else {
// Si el estado actual es LOW pasa de ON a OFF
Serial.println("Rele OFF");
tiempo_anterior = tiempo_ahora;
}
}
// Guarda el estado actual como ultimo estado
ultimoEstadoRele = estadoRele;
}
Práctica en funcionamiento:
16 comentarios:
ya me gustaría a mí ser de la ESO...
Chulísimo Jorge, gracias por compartirlo.
Chulísimo Jorge, gracias por compartirlo.
Gracias Samuel
Seguro que a partir de ahora podrás hacer cosas mucho más interesantes. ¡Suerte!
Disculpa que programa usas para ver las rpm que va registrando el dispositivo ?
Lo hago por la consola serie del IDE de Arduino Herramientas -> Monitor Serial
Saludos
Sobre el asunto de la línea:
rpm = 60000 / tiempo_una_rev;
el 60000 se corresponde a 1 minuto en milisegundos.
1 min = 60 s = 60000 ms
Perfecto, ahora que leo con mas detalle el código lo entiendo. Estoy tratando de adaptar tu código a la lectura de un encoder capacitivo que tengo, pero este tiene 8 pulsos por vuelta, como hago para acumular los 8 pulsos y calcular las RPM?
Gracias.
Hola que tal, hice un aerogenerador pequeño, el cual genera 3v, pero ahora necesito hacer un tacómetro para detectar las rpm, por lo que tu proyecto me es de gran interés, me gustaría pudieras ayudarme para poner en práctica tu prototipo. Podrías decirme si esta programación tal cual puede ingresarse para una tarjeta arduino 2560? De antemano gracias. Saludos
Hola que tal, hice un aerogenerador pequeño, el cual genera 3v, pero ahora necesito hacer un tacómetro para detectar las rpm, por lo que tu proyecto me es de gran interés, me gustaría pudieras ayudarme para poner en práctica tu prototipo. Podrías decirme si esta programación tal cual puede ingresarse para una tarjeta arduino 2560? De antemano gracias. Saludos
Hola! Por algún motivo no se ven las imagenes ¿Podrían corregirlo? Gracias!
GRACIAS, ME ILUMINO PARA HACER UN TACOMETRO PERO CON PANTALLA LCD.
FELICIDADES, GRACIAS POR COMPARTIR
Hola amigo, he implementado tu código y efectivamente funciona. Mas cuando lo que estoy girando deja de girar, los rpm continuan mostrándose en la pantalla lcd, podrías ayudarme para que cuando este deje de girar, los rpm vuelva a cero. Gracias.
Hola, como estas? acomoda un refresco de pantalla, borrando el dato numerico antes de mostrar cada lectura, sucede que si el numero tiene por decir 4 digitos, y el siguiente solo 2, en algunas ocaciones queda las 2 cifras del primero, dando una lectura herrada, le aconsejo BORRE ANTES DE ESCRIBIR UN NUEVO DATO.
Buenas noches, necesitaria hacer algo similar a esto, necesito hacer una maqueta de un sistema automatico q frene al eje para evitar la rotura del generador en casos de grandes vientos o rafagas, es un proyecto para la universidad de automatizacion, los datos que entrega el sensor se pueden usar de entrada? este programa mide en rpm no?
Publicar un comentario