Objetivo y caso de uso
Qué construirás: Un monitor solar de batería basado en Arduino que lee el voltaje de una batería de 12 V mediante un divisor de voltaje, mide la corriente de carga o de consumo con un sensor ACS712 y muestra ambos valores en una pantalla LCD HD44780 de 16×2. El sistema ofrece lecturas locales casi en tiempo real con una actualización simple de alrededor de 2–5 veces/seg y una latencia de visualización típica inferior a 500 ms.
Por qué importa / Casos de uso
- Confirmar que un panel solar pequeño realmente está cargando al comprobar una corriente positiva, por ejemplo de +0.3 A a +1.8 A bajo sol directo en un cobertizo, una caja de camping o una configuración de demostración en aula.
- Reducir daños a la batería detectando voltaje bajo con anticipación, por ejemplo cuando una batería de plomo-ácido de 12 V cae hacia 11.8–12.0 V mientras alimenta luces LED, un respaldo para router o un pequeño ventilador DC.
- Medir la corriente real de consumo colocando el ACS712 en serie con una lámpara, bomba o convertidor USB y verificando el consumo esperado, como 0.15 A para LEDs o 0.8 A para una bomba pequeña.
- Usarlo como un monitor de banco reutilizable junto a un controlador de carga o caja de batería para comprobaciones rápidas de mantenimiento sin necesidad de una laptop, app o panel en la nube.
- Aprender medición embebida práctica, incluyendo sensado analógico, calibración, escalado ADC y manejo de ruido del sensor en un proyecto Arduino de bajo consumo.
Resultado esperado
- Una lectura funcional en LCD que muestre continuamente el voltaje y la corriente de la batería, por ejemplo “12.6 V” y “+0.42 A”.
- Lecturas de voltaje escaladas desde el divisor y lecturas de corriente interpretadas desde el ACS712 con calibración básica para valores más estables.
- Un monitor compacto adecuado para pequeños experimentos solares de 12 V, sin uso significativo de GPU ni dependencia de FPS más allá de la tasa de refresco del LCD.
- Una base práctica que puedes ampliar con alarmas, registro de datos, estimaciones de estado de carga o indicadores de dirección de carga/descarga.
Audiencia: Principiantes en Arduino, estudiantes, makers y aficionados que trabajan con pequeños proyectos solares o de baterías; Nivel: Principiante a intermedio
Arquitectura/flujo: Arduino lee el voltaje de la batería desde un divisor resistivo y la corriente desde la salida analógica del ACS712, convierte ambos valores ADC a unidades de ingeniería y luego actualiza la LCD HD44780 de 16×2 cada 200–500 ms con el estado en vivo de voltaje/corriente.
Nota educativa de validación
Antes de publicar este caso, el contenido pasó la puerta automática de validación de Prometeo con estado PASS. El validador comprobó los bloques de código, la estructura del artículo, los comandos copiables y la coherencia con el catálogo de dispositivos soportados.
Evidencia de validación publicada
- Resultado automático: PASS.
- Estructura parseada: 3 apartados, 4 tablas y 2 bloques de código detectados antes de publicar.
- Código comprobado: 1 Arduino/arduino-cli compile, 1 Bash/copy-paste checks.
- Catálogo soportado: el texto se contrastó contra los perfiles de dispositivo validables de Prometeo y los stacks no soportados bloquean la publicación.
- Hallazgos del informe: sin hallazgos bloqueantes.
Esta validación confirma compatibilidad sintáctica y de herramientas para el material publicado, pero no sustituye la prueba física sobre tu hardware, cableado y entorno exactos.
Nota educativa de seguridad
Este es un prototipo educativo de monitoreo de bajo voltaje, no un instrumento certificado para baterías.
Límites y precauciones importantes:
- Trabaja solo con montajes educativos de CC de bajo voltaje.
- No conectes el pin analógico de Arduino directamente a una batería; usa siempre el divisor de voltaje indicado.
- No uses este tutorial directamente en grandes arreglos solares, bancos de baterías de alta corriente, sistemas eléctricos de vehículos o equipos conectados a la red.
- La ruta de corriente y la capacidad nominal de terminales del módulo ACS712 deben coincidir con tu corriente real. No excedas la capacidad del módulo.
- Las baterías pueden entregar una alta corriente de falla incluso a bajo voltaje:
- evita cortocircuitos
- coloca un fusible en la línea de batería si es posible
- mantén aislados los conductores expuestos
- Si tu sistema solar incluye un controlador de carga, comprende el cableado del controlador antes de insertar el sensor de corriente en serie.
- No confíes solo en este prototipo para proteger una batería contra sobrecarga, descarga profunda, sobrecalentamiento o fallas de cableado.
- Durante la calibración al arranque, asegúrate de que no circule corriente por el ACS712, de lo contrario el punto cero será incorrecto y la lectura de corriente tendrá sesgo.
Prerrequisitos
Antes de empezar, deberías tener:
- Un ordenador con Arduino CLI instalado
- Un cable USB para el Arduino UNO R3
- Familiaridad básica con:
- cargar sketches
- leer etiquetas de pines
- usar un multímetro
- Un pequeño sistema solar-batería de bajo voltaje bajo prueba, como por ejemplo:
- una batería sellada de plomo-ácido de 12 V con un pequeño controlador de carga solar
- una configuración educativa LiFePO4 de 12 V con protección adecuada
- una fuente DC de banco actuando como simulador solar para pruebas
Para una primera construcción, se recomienda encarecidamente probar con una fuente de banco y una pequeña carga DC antes de conectarlo a un sistema solar exterior real.
Materiales
Usa exactamente este modelo de dispositivo como núcleo del proyecto:
Arduino UNO R3 (ATmega328P) + divisor de voltaje + sensor de corriente ACS712 + LCD HD44780 de 16×2
Lista de piezas recomendada:
| Elemento | Especificación sugerida | Notas |
|---|---|---|
| Placa Arduino | Arduino UNO R3 (ATmega328P) | Requerido |
| LCD | Compatible con HD44780 de 16×2, interfaz paralela | Requerido |
| Sensor de corriente | Módulo ACS712, preferiblemente versión de 5 A | La versión de 5 A ofrece mejor sensibilidad |
| Resistencia R1 del divisor de voltaje | 47 kOhm, 1/4 W | Resistencia superior desde el positivo de batería al pin analógico |
| Resistencia R2 del divisor de voltaje | 10 kOhm, 1/4 W | Resistencia inferior desde el pin analógico a GND |
| Potenciómetro de contraste LCD | Trimmer de 10 kOhm | Requerido para texto visible |
| Protoboard y cables jumper | Estándar | Requerido |
| Batería DC pequeña bajo prueba | Típicamente 12 V | Mantener dentro del rango de entrada del divisor |
| Carga DC pequeña para pruebas | Lámpara de 12 V o carga resistiva | Útil para validación |
| Multímetro | Digital | Muy recomendado |
¿Por qué estos valores de resistencia?
Con 47 kOhm y 10 kOhm, la entrada analógica ve:
V_A0 = V_battery x (10 / (47 + 10)) = V_battery x 0.1754
Eso mantiene la entrada analógica por debajo de unos 5 V hasta aproximadamente 28.5 V. Esto es cómodo para sistemas de 12 V y ofrece margen útil para voltajes de carga. Aun así, este tutorial está pensado para sistemas educativos de baterías de bajo voltaje, no para instalaciones grandes o de alta energía.
Configuración/Conexión
Concepto de medición
Este monitor usa dos canales analógicos:
- A0 lee el voltaje de la batería a través del divisor resistivo
- A1 lee la salida analógica del ACS712
La LCD muestra:
- voltaje de batería
- corriente
- potencia
- un mensaje simple de estado como
CHARGING,DISCHARGEoIDLE
Elección importante de la ruta de corriente
Elige una ruta de corriente para monitorear con el ACS712:
- Opción A: corriente de carga
- Coloca el ACS712 en serie entre la salida del controlador de carga y la ruta del positivo de batería, si tu configuración educativa de baja potencia lo permite.
- Opción B: corriente de carga/consumo
- Coloca el ACS712 en serie entre el positivo de batería y la carga DC.
Para una construcción de principiante, la Opción B suele ser más fácil y segura de entender:
– corriente cercana a cero cuando la carga está apagada
– la corriente aumenta cuando la carga está encendida
Conexiones de Arduino y LCD
Usa el cableado estándar de LiquidCrystal a continuación.
| Función | Pin LCD | Conectar a |
|---|---|---|
| VSS | 1 | Arduino GND |
| VDD | 2 | Arduino 5V |
| VO | 3 | Pin central del potenciómetro de 10 kOhm |
| RS | 4 | Arduino D7 |
| RW | 5 | Arduino GND |
| E | 6 | Arduino D8 |
| D4 | 11 | Arduino D9 |
| D5 | 12 | Arduino D10 |
| D6 | 13 | Arduino D11 |
| D7 | 14 | Arduino D12 |
| A (retroiluminación +) | 15 | 5V a través de la resistencia del módulo si es necesario |
| K (retroiluminación -) | 16 | GND |
Cableado del potenciómetro:
– un pin exterior -> 5V
– otro pin exterior -> GND
– pin central -> pin 3 del LCD (VO)
Conexiones de medición analógica
Divisor de voltaje
- Positivo de batería -> resistencia de 47 kOhm -> nodo -> A0
- Mismo nodo -> resistencia de 10 kOhm -> GND
- Negativo de batería -> Arduino GND
Esta masa común es esencial. Sin ella, la lectura del ADC no tendrá sentido.
ACS712
La mayoría de los módulos ACS712 tienen:
– VCC
– GND
– OUT
– dos terminales de tornillo para la ruta de corriente medida
Conecta:
– VCC -> Arduino 5V
– GND -> Arduino GND
– OUT -> Arduino A1
Para la ruta de corriente:
– conecta el cable positivo monitoreado de modo que la corriente fluya por los terminales del ACS712
– observa la flecha del módulo o la dirección impresa si está presente
– si el signo de la corriente parece invertido, intercambia los terminales de alta corriente o invierte el signo en software
Alimentación del Arduino durante la configuración
Para el desarrollo inicial:
– alimenta el Arduino por USB
– mantén conectados la medición de batería y el sensor de corriente con masa común
Después de las pruebas, más adelante puedes alimentar el Arduino desde una fuente regulada de 5 V estable, pero no alimentes el UNO directamente desde un panel solar no regulado.
Código validado
Sketch completo de Arduino: solar-battery-lcd-monitor.ino
Vista pública parcial del archivo validado. El código completo se muestra a miembros y en PDF/Print.
#include <LiquidCrystal.h>
// LCD pins: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Analog pins
const uint8_t PIN_BATTERY = A0;
const uint8_t PIN_CURRENT = A1;
// ADC reference
const float ADC_REF_VOLTAGE = 5.0;
const int ADC_MAX = 1023;
// Voltage divider values
const float R1 = 47000.0; // ohms, top resistor
const float R2 = 10000.0; // ohms, bottom resistor
// ACS712 settings
// Set according to your module:
// 5A module -> 185.0 mV/A
// 20A module -> 100.0 mV/A
// 30A module -> 66.0 mV/A
const float ACS712_MV_PER_AMP = 185.0;
// Calibration values
float currentZeroVoltage = 2.50; // Will be refined during startup calibration
float voltageCalibrationFactor = 1.000; // Adjust after comparing to multimeter if needed
float currentCalibrationFactor = 1.000; // Adjust after comparing to multimeter if needed
// Sampling
const int NUM_SAMPLES_VOLTAGE = 20;
const int NUM_SAMPLES_CURRENT = 100;
// Timing
unsigned long lastDisplayUpdate = 0;
const unsigned long DISPLAY_INTERVAL_MS = 500;
// Optional status thresholds
const float LOW_BATTERY_VOLTAGE = 11.8;
const float IDLE_CURRENT_THRESHOLD = 0.08;
float readAverageVoltageAtPin(uint8_t pin, int samples) {
long sum = 0;
for (int i = 0; i < samples; i++) {
sum += analogRead(pin);
delay(2);
}
float adc = sum / (float)samples;
return (adc * ADC_REF_VOLTAGE) / ADC_MAX;
}
float readBatteryVoltage() {
float dividedVoltage = readAverageVoltageAtPin(PIN_BATTERY, NUM_SAMPLES_VOLTAGE);
float batteryVoltage = dividedVoltage * ((R1 + R2) / R2);
batteryVoltage *= voltageCalibrationFactor;
return batteryVoltage;
}
float readCurrent() {
float sensorVoltage = readAverageVoltageAtPin(PIN_CURRENT, NUM_SAMPLES_CURRENT);
float deltaVoltage = sensorVoltage - currentZeroVoltage; // volts
float current = (deltaVoltage * 1000.0) / ACS712_MV_PER_AMP; // amps
current *= currentCalibrationFactor;
return current;
}
void calibrateCurrentZero() {
// Assumes no current is flowing through ACS712 during startup.
float total = 0.0;
const int rounds = 10;
for (int i = 0; i < rounds; i++) {
total += readAverageVoltageAtPin(PIN_CURRENT, 50);
delay(20);
}
currentZeroVoltage = total / rounds;
}
// ...#include <LiquidCrystal.h>
// LCD pins: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Analog pins
const uint8_t PIN_BATTERY = A0;
const uint8_t PIN_CURRENT = A1;
// ADC reference
const float ADC_REF_VOLTAGE = 5.0;
const int ADC_MAX = 1023;
// Voltage divider values
const float R1 = 47000.0; // ohms, top resistor
const float R2 = 10000.0; // ohms, bottom resistor
// ACS712 settings
// Set according to your module:
// 5A module -> 185.0 mV/A
// 20A module -> 100.0 mV/A
// 30A module -> 66.0 mV/A
const float ACS712_MV_PER_AMP = 185.0;
// Calibration values
float currentZeroVoltage = 2.50; // Will be refined during startup calibration
float voltageCalibrationFactor = 1.000; // Adjust after comparing to multimeter if needed
float currentCalibrationFactor = 1.000; // Adjust after comparing to multimeter if needed
// Sampling
const int NUM_SAMPLES_VOLTAGE = 20;
const int NUM_SAMPLES_CURRENT = 100;
// Timing
unsigned long lastDisplayUpdate = 0;
const unsigned long DISPLAY_INTERVAL_MS = 500;
// Optional status thresholds
const float LOW_BATTERY_VOLTAGE = 11.8;
const float IDLE_CURRENT_THRESHOLD = 0.08;
float readAverageVoltageAtPin(uint8_t pin, int samples) {
long sum = 0;
for (int i = 0; i < samples; i++) {
sum += analogRead(pin);
delay(2);
}
float adc = sum / (float)samples;
return (adc * ADC_REF_VOLTAGE) / ADC_MAX;
}
float readBatteryVoltage() {
float dividedVoltage = readAverageVoltageAtPin(PIN_BATTERY, NUM_SAMPLES_VOLTAGE);
float batteryVoltage = dividedVoltage * ((R1 + R2) / R2);
batteryVoltage *= voltageCalibrationFactor;
return batteryVoltage;
}
float readCurrent() {
float sensorVoltage = readAverageVoltageAtPin(PIN_CURRENT, NUM_SAMPLES_CURRENT);
float deltaVoltage = sensorVoltage - currentZeroVoltage; // volts
float current = (deltaVoltage * 1000.0) / ACS712_MV_PER_AMP; // amps
current *= currentCalibrationFactor;
return current;
}
void calibrateCurrentZero() {
// Assumes no current is flowing through ACS712 during startup.
float total = 0.0;
const int rounds = 10;
for (int i = 0; i < rounds; i++) {
total += readAverageVoltageAtPin(PIN_CURRENT, 50);
delay(20);
}
currentZeroVoltage = total / rounds;
}
const char* stateText(float current, float batteryVoltage) {
if (current > IDLE_CURRENT_THRESHOLD) {
return "CHARGING";
} else if (current < -IDLE_CURRENT_THRESHOLD) {
return "DISCHARGE";
} else if (batteryVoltage < LOW_BATTERY_VOLTAGE) {
return "LOW BAT";
} else {
return "IDLE";
}
}
void printPadded(String text, uint8_t width) {
if (text.length() >= width) {
lcd.print(text.substring(0, width));
} else {
lcd.print(text);
for (uint8_t i = text.length(); i < width; i++) {
lcd.print(' ');
}
}
}
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Solar Battery");
lcd.setCursor(0, 1);
lcd.print("Monitor Start");
delay(1200);
calibrateCurrentZero();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Zero I V=");
lcd.print(currentZeroVoltage, 3);
delay(1500);
Serial.println("solar-battery-lcd-monitor");
Serial.print("Current zero voltage = ");
Serial.println(currentZeroVoltage, 4);
}
void loop() {
if (millis() - lastDisplayUpdate >= DISPLAY_INTERVAL_MS) {
lastDisplayUpdate = millis();
float batteryVoltage = readBatteryVoltage();
float current = readCurrent();
float power = batteryVoltage * current;
const char* state = stateText(current, batteryVoltage);
// LCD line 1: Voltage and current
lcd.setCursor(0, 0);
String line1 = "V:";
line1 += String(batteryVoltage, 2);
line1 += " I:";
line1 += String(current, 2);
printPadded(line1, 16);
// LCD line 2: Power and state
lcd.setCursor(0, 1);
String line2 = "P:";
line2 += String(power, 1);
line2 += " ";
line2 += state;
printPadded(line2, 16);
// Serial output for validation
Serial.print("Battery_V=");
Serial.print(batteryVoltage, 3);
Serial.print(", Current_A=");
Serial.print(current, 3);
Serial.print(", Power_W=");
Serial.print(power, 3);
Serial.print(", State=");
Serial.println(state);
}
}
Notas sobre los valores de calibración
Puede que necesites pequeños ajustes después de comparar con un multímetro:
voltageCalibrationFactor- Ejemplo: si la LCD muestra 12.40 V pero el multímetro muestra 12.55 V, establece el factor cerca de
12.55 / 12.40 = 1.012 currentCalibrationFactor- Ejemplo: si la corriente conocida es 0.90 A pero la pantalla muestra 0.84 A, establece el factor cerca de
0.90 / 0.84 = 1.071
Para la primera carga, deja ambos en 1.000.
Comandos de compilación/carga/ejecución
Tabla de comandos
| Paso | Comando |
|---|---|
| Actualizar índice de placas | arduino-cli core update-index |
| Instalar núcleo AVR | arduino-cli core install arduino:avr |
| Compilar sketch | arduino-cli compile --fqbn arduino:avr:uno ~/arduino/solar-battery-lcd-monitor |
| Cargar sketch | arduino-cli upload --fqbn arduino:avr:uno --port <PORT> ~/arduino/solar-battery-lcd-monitor |
Flujo de trabajo
- Crea una carpeta de proyecto:
~/arduino/solar-battery-lcd-monitor/- Guarda el sketch como:
~/arduino/solar-battery-lcd-monitor/solar-battery-lcd-monitor.ino- Ejecuta los comandos siguientes en orden.
arduino-cli core update-index
arduino-cli core install arduino:avr
arduino-cli compile --fqbn arduino:avr:uno ~/arduino/solar-battery-lcd-monitor
arduino-cli upload --fqbn arduino:avr:uno --port <PORT> ~/arduino/solar-battery-lcd-monitor
Reemplaza <PORT> por el puerto de tu placa, por ejemplo:
– Linux: /dev/ttyACM0
– macOS: /dev/cu.usbmodem14101
– Windows: COM3
Comportamiento en ejecución
Después de la carga:
1. La LCD debería mostrar brevemente un mensaje de inicio.
2. El sketch calibra el voltaje de corriente cero del ACS712.
3. La LCD comienza a actualizarse cada 0.5 segundos.
4. Abre un monitor serie a 9600 baud si quieres registros de texto para validación.
Validación paso a paso
Usa un multímetro y una pequeña configuración de prueba de baja potencia. Realiza las comprobaciones en este orden.
1. Comprobación de LCD e inicio
Acción
– Alimenta el Arduino por USB.
– Deja abierta la ruta de corriente del ACS712 o sin corriente activa.
– Ajusta lentamente el potenciómetro de contraste de la LCD.
Observación esperada
– Aparece un mensaje de inicio legible.
– Después del inicio, el monitor muestra campos de voltaje/corriente en lugar de bloques aleatorios.
Condición de aprobación
– El texto es visible y estable en ambas líneas de la LCD.
2. Comprobación de calibración de corriente cero
Acción
– Asegúrate de que no circule corriente por el ACS712 durante el reinicio o encendido.
– Observa la salida serie o la LCD después del inicio.
Observación esperada
– La corriente debería estar cerca de 0.00 A, con pequeño ruido alrededor de cero.
– El estado normalmente debería ser IDLE, salvo que un voltaje bajo de batería dispare LOW BAT.
Condición de aprobación
– La corriente en reposo permanece pequeña y no deriva de forma exagerada, típicamente unas pocas centésimas de amperio alrededor de cero.
3. Validación de voltaje de batería
Acción
– Mide directamente el voltaje de la batería con un multímetro.
– Compáralo con la LCD y la salida serie.
Observación esperada
– El voltaje de batería mostrado es cercano a la lectura del multímetro.
– Pequeñas diferencias son normales antes de la calibración.
Condición de aprobación
– La lectura es lógicamente correcta y lo bastante cercana como para que un pequeño voltageCalibrationFactor pueda alinearla.
– Si el multímetro lee 12.6 V y la pantalla dice 6 V o 20 V, el divisor o la masa están mal.
4. Comprobación de dirección y magnitud de corriente
Acción
– Conecta una pequeña carga DC a través del ACS712.
– Enciende y apaga la carga.
– Si estás probando una ruta de carga, expón el panel a la luz o usa una fuente de banco a través de un controlador adecuado.
Observación esperada
– La corriente cambia de forma apreciable cuando cambia el estado de carga o consumo.
– El signo debe ser coherente con la dirección de cableado elegida.
– La potencia debe cambiar en la misma dirección que la corriente.
Condición de aprobación
– Encender la carga produce una lectura de corriente repetible.
– Si el signo es el contrario al que deseas, intercambia los terminales de corriente del ACS712 o invierte la convención de signo.
5. Comprobación del mensaje de estado
Acción
– Observa la segunda línea de la LCD mientras cambias las condiciones de funcionamiento:
– sin corriente
– carga activa
– corriente de carga activa
– voltaje bajo de batería si está disponible
Observación esperada
– CHARGING para corriente positiva
– DISCHARGE para corriente negativa
– IDLE cerca de corriente cero
– LOW BAT cuando el voltaje está por debajo del umbral y la corriente está cerca de cero
Condición de aprobación
– La etiqueta de estado sigue lógicamente la condición eléctrica medida.
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| Retroiluminación LCD encendida pero sin texto | Contraste no ajustado o cableado LCD incorrecto | Ajusta el potenciómetro; vuelve a comprobar los pines RS, E, D4-D7 |
| Caracteres aleatorios en LCD | Mapeo de pines incorrecto en el código o cables flojos | Haz coincidir exactamente los pines del código con las conexiones físicas |
| El voltaje de batería marca 0 V | Nodo del divisor no conectado a A0 o no hay masa común | Revisa el nodo A0 y el negativo de batería a Arduino GND |
| El voltaje de batería es demasiado alto o bajo | Valores de resistencias incorrectos o fórmula del divisor no coincide | Confirma la colocación de 47 kOhm y 10 kOhm; verifica las constantes del código |
| La corriente siempre está cerca de cero | Salida del ACS712 no conectada, no hay ruta de corriente o método de prueba incorrecto | Comprueba A1, VCC, GND y que la corriente de la carga realmente pase por los terminales del sensor |
| Valor de corriente inestable | Ruido del sensor, cableado deficiente o ruido de carga conmutada | Acorta cables, mejora la masa, promedia más muestras |
| Signo de corriente invertido | Sensor instalado en dirección opuesta | Intercambia terminales de corriente o multiplica la corriente por -1 en el código |
| Falla la carga del sketch | Puerto incorrecto o falta el núcleo AVR | Instala el núcleo arduino:avr y verifica <PORT> |
| La pantalla se reinicia cuando cambia la carga | Inestabilidad en la alimentación o fuente ruidosa compartida | Usa 5 V estables para Arduino y asegúrate de tener masa común |
Mejoras
- Mejor calidad de medición
- Añade un pequeño capacitor, por ejemplo de 100 nF, desde
A0a GND cerca del Arduino para reducir el ruido del divisor. - Aumenta el promedio de corriente si tu carga es estable.
Añade un modo de calibración por software que almacene factores en EEPROM.
Comportamiento de campo más útil
- Añade un zumbador o advertencia LED para batería baja.
- Añade una segunda página en la LCD que alterne entre:
- voltaje/corriente/potencia
- voltaje mínimo/máximo
- estimación acumulada de amperio-hora con el tiempo
Añade un pulsador para alternar entre etiquetas de monitoreo de corriente de carga y de consumo.
Empaquetado y despliegue
- Mueve el circuito de la protoboard a una placa perforada.
- Instala el monitor en una pequeña caja plástica cerca de una caja de batería de bajo voltaje.
- Usa terminales de tornillo para la entrada del divisor y la ruta de corriente del ACS712 para hacer reutilizable el prototipo.
Lista de comprobación final
- [ ] Usé Arduino UNO R3 (ATmega328P).
- [ ] Usé un divisor de voltaje de 47 kOhm / 10 kOhm para el voltaje de batería.
- [ ] Conecté juntos el negativo de batería, Arduino GND, LCD GND y ACS712 GND.
- [ ] Conecté el pin ACS712 OUT a A1.
- [ ] Conecté el nodo del divisor de voltaje a A0.
- [ ] Cableé la LCD HD44780 de 16×2 a los pines D7, D8, D9, D10, D11, D12 como se usa en el sketch.
- [ ] Ajusté el potenciómetro de contraste de la LCD hasta que el texto se hizo visible.
- [ ] Compilé con:
arduino-cli compile --fqbn arduino:avr:uno ~/arduino/solar-battery-lcd-monitor- [ ] Cargué con:
arduino-cli upload --fqbn arduino:avr:uno --port <PORT> ~/arduino/solar-battery-lcd-monitor- [ ] Encendí con sin corriente a través del ACS712 para la calibración de cero.
- [ ] Comparé el voltaje de batería con un multímetro.
- [ ] Probé la respuesta de corriente usando una pequeña carga DC o una condición de carga controlada.
- [ ] Actualicé los factores de calibración solo después de comparar mediciones.
- [ ] Entiendo que este es un monitor educativo básico, no un dispositivo de protección certificado.
Encuentra este producto y/o libros sobre este tema en Amazon
Como afiliado de Amazon, gano con las compras que cumplan los requisitos. Si compras a través de este enlace, ayudas a mantener este proyecto.




