Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cargador inteligente de baterías avanzado con multiplexación y display digital

Componentes y suministros

Herramientas necesarias

Sobre el proyecto

Este cargador inteligente multiplexado permite mantener hasta 6 baterías de 12V (coches, barcos, generadores) usando un solo cargador inteligente. El Arduino conmuta el cargador entre baterías automáticamente, monitorizando voltajes y ciclos de carga.

Motivación: El autor tiene 5 vehículos/baterías y los cargadores inteligentes individuales cuestan ~$29 cada uno. La solución: un cargador compartido que rota entre baterías.

Funcionamiento

Funciones principales

  1. read_show_volts(): Lee voltajes (canales 0-2 del MCP3008), actualiza LCD, detecta baterías conectadas (>1V), actualiza array de relés activos.
  2. checkRelays(): Temporizador rota al siguiente relé activo al alcanzar charge_time_max.
  3. toggle_relays(): Apaga todos, enciende el actual, muestra número en LCD.
  4. read_distance(): HC-SR04 gestiona encendido/apagado LCD por proximidad.

Variables clave

Código

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // v1.2.1
#include <timer.h>
#include <HCSR04.h>

auto timer = timer_create_default();
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int chargeTime = (10 * 1000);
int charge_time_counter = 59;
int charge_time_max = 60;
int relay1 = 3, relay2 = 4, relay3 = 5;
int current_relay = 0;
int max_relays = 3;
float volts1, volts2, volts3;
int min_volts = 1;
int volts_update_count = 5;
int volts_update_counter = 0;
int volts_update = 500;
int read_distance_update = 500;
int time_on_counter = 0;
int time_on_count = 100;
int heart_beat = 0;
UltraSonicDistanceSensor distanceSensor(11, 12);
int distance;
int relays[] = { relay1, relay2, relay3 };
int is_live[] = { 0, 0, 0 };
int debug = 5;

void all_change_to(int which) {
  digitalWrite(relay1, which);
  digitalWrite(relay2, which);
  digitalWrite(relay3, which);
}

void toggle_relays(int whichOne) {
  lcd.setCursor(0, 0);
  lcd.print("Relay on:");
  lcd.print(current_relay + 1);
  all_change_to(HIGH);
  digitalWrite(relays[current_relay], LOW);
  acnt++;
  lcd.print(" ");
  lcd.print(acnt);
}

void checkRelays() {
  charge_time_counter++;
  if (charge_time_counter >= charge_time_max) {
    current_relay++;
    if (current_relay >= max_relays) current_relay = 0;
    toggle_relays(current_relay);
    charge_time_counter = 0;
  }
}

void read_distance() {
  distance = distanceSensor.measureDistanceCm();
  if (distance < 80) {
    lcd.backlight();
    time_on_counter = 0;
  } else {
    time_on_counter++;
    if (time_on_counter > time_on_count) {
      time_on_counter = 0;
      lcd.noBacklight();
    }
  }
}

void read_show_volts() {
  volts1 = analogRead(0) * 0.016;
  lcd.setCursor(11, 0);
  lcd.print(volts1);

  volts2 = analogRead(1) * 0.0164;
  lcd.setCursor(4, 1);
  lcd.print(volts2);

  volts3 = analogRead(2) * 0.0166;
  lcd.setCursor(11, 1);
  lcd.print(volts3);

  int temp_cnt = 0;
  relays[0] = relays[1] = relays[2] = 0;
  if (volts1 > min_volts) { relays[temp_cnt] = relay1; temp_cnt++; }
  if (volts2 > min_volts) { relays[temp_cnt] = relay2; temp_cnt++; }
  if (volts3 > min_volts) { relays[temp_cnt] = relay3; temp_cnt++; }
  max_relays = temp_cnt;

  lcd.setCursor(0, 1);
  lcd.print(heart_beat == 1 ? "<>" : "><");
  heart_beat = 1 - heart_beat;
  lcd.print(charge_time_counter);
  read_distance();
}

void setup() {
  Serial.begin(19200);
  Serial.println("Starting");
  lcd.begin(16, 2);
  lcd.backlight();
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  all_change_to(HIGH);
  read_show_volts();
  checkRelays();
  timer.every(chargeTime, checkRelays);
  timer.every(volts_update, read_show_volts);
}

void loop() {
  timer.tick();
}

Esquemático

Esquema del multiplexor disponible en el proyecto original. Incluye: Arduino UNO, MCP3008 (SPI), 3 relés, divisores de tensión, LCD I2C, HC-SR04, LM2596 para alimentación.

Proceso de manufactura

  1. Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
  2. Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
  3. Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
  4. Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
  5. Soluciones de Alimentación Optimizadas para Proyectos Arduino
  6. Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
  7. Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
  8. Kit de Entrenamiento Arduino Completo con Mega 2560, Sensores, Motores y PCB Personalizada
  9. Construye la App Fridgeye con una Pantalla Nextion: Guía Paso a Paso
  10. Medición Precisa de Radiación Solar con Arduino UNO y Shield Ethernet
  11. Guante Inteligente de Gestos a Texto para Lenguaje de Signos