Construir una rueda medidora DIY precisa con Arduino Nano y encoder rotativo
Componentes y suministros
| Componente | Cantidad |
|---|---|
| Arduino Nano R3 | 1 |
| LCD estándar 16x2 Blanco sobre Azul | 1 |
| Encoder rotativo con pulsador | 1 |
| Potenciómetro de una vuelta - 10k Ω | 1 |
| Resistencia 220 Ω | 1 |
Herramientas necesarias
- Soldador
Aplicaciones y servicios online
- Arduino IDE
Sobre este proyecto
Una rueda medidora es una herramienta de medición para construcción. La rueda gira y, usando cinemática rotacional básica (s = rθ), puedes determinar la distancia entre dos puntos.
El video muestra un modelo funcional reducido de dicho dispositivo hecho con varios componentes:
- Arduino Nano
- Encoder rotativo
- Pantalla LCD 16x2
- Potenciómetro 10k
- Resistencia 220 Ω
Principio de funcionamiento
El encoder rotativo mide el número de rotaciones, pero debemos convertir la rotación en distancia recorrida. La distancia recorrida depende del diámetro de la rueda. El encoder da N pasos en una rotación completa (360°). Los pasos por rotación dependen del encoder y pueden variar de 8 a 48. Supongamos que N son los pasos por rotación y R es el radio de la rueda.
Distancia recorrida en una rotación = 2 × π × R
Distancia recorrida en un paso = (2 × π × R) / N
Escribí un código muy simple para este propósito y la distancia recorrida se muestra en la pantalla LCD en centímetros. Dependiendo de los componentes usados, en el código cambiamos los valores de "N" y "R".
En mi caso, la rueda está impresa en 3D y todo el conjunto está montado en una varilla de aluminio, como se ve en el video.
Código
/* Rueda Medidora
* por Mirko Pavleski
* https://www.youtube.com/channel/UCHLzc76TZel_vCTy0Znvqyw
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
int pin1 = 2; // Pin A del encoder
int pin2 = 3; // Pin B del encoder
int Pos = 0; // Contador de posición
int State;
int LastState;
const float pi = 3.14;
const float R = 3.25; // Radio de la rueda en cm
const int N = 40; // Pasos por vuelta del encoder
float distance = 0;
void setup() {
pinMode(pin1, INPUT_PULLUP);
pinMode(pin2, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print("RUEDA MEDIDORA");
LastState = digitalRead(pin1);
}
void loop() {
State = digitalRead(pin1);
if (State != LastState) {
if (digitalRead(pin2) != State) {
Pos++; // Sentido horario
} else {
Pos--; // Sentido antihorario
}
}
distance = ((2 * pi * R) / N) * Pos;
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.setCursor(5, 1);
lcd.print("cm ");
LastState = State;
}
Esquemáticos
Conexiones: Encoder pines A/B → D2/D3 (con pull-up interno), LCD RS/E/D4-D7 → D5-D10, potenciómetro 10k para contraste LCD (pin Vo), resistencia 220Ω para backlight LCD.
Proceso de manufactura
- Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
- MobBob: Robot Arduino Impreso en 3D, Controlado por Smartphone Android
- Crear un medidor IoT web con Arduino, Yaler e IFTTT
- Medidor de Frecuencia DIY con Arduino Nano – Hasta 6.5 MHz
- Construye un monitor de calidad del aire preciso con el sensor Sharp GP2Y1010AU0F
- Contador Geiger Portátil con Arduino Nano: Construye tu Detector de Radiación
- Medición Precisa de Radiación Solar con Arduino UNO y Shield Ethernet
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO