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

Multiplexor de cargador de batería inteligente con pantalla inteligente

Componentes y suministros

Arduino UNO
× 1
Arduino Proto Shield
× 1
Sensor ultrasónico - HC-SR04 (genérico)
× 1
Adafruit MCP-3008 Adc de 10 bits de 8 canales
× 1
Relé de 5V - optoacoplador de 2 canales
× 3
Módulo de fuente de alimentación LM2596 DC / DC BUCK 3A ajustable
× 1
Resistencia 1k ohm
× 12
Regleta de terminales de 6 posiciones
Compruebe la imagen:se puede utilizar casi cualquier tipo de sistema de conexión.
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Acerca de este proyecto

Si vive en el noreste, si tiene un automóvil o un bote más viejo, o una cortadora de césped u otro vehículo que comienza con una batería que no conduce o usa cuando hace mal tiempo (algunos lo llaman invierno), debe decidir qué hacer con las pilas cada temporada. Si tiene uno o dos, es bastante fácil:puede obtener un cargador lento. Los baratos y simples cuestan menos de $ 15, pero son simples, sin retroalimentación de batería ni monitoreo, solo ponen un poco más de 13 voltios en la batería. Una mejor opción sería uno de los cargadores inteligentes:por lo general, tienen una carga más alta / más rápida y una carga de nieve o goteo que ajusta la salida según el voltaje y la condición de la batería. Funcionan muy bien - Harbor Freight tiene uno por $ 39 - por supuesto $ 29 en oferta, que es casi siempre.

Lo que me colgó fue mi MGB de 1975 (con un Oldsmobile V8 de 3.5 litros), una camioneta Toyota de 1981, un bote y un generador, todo con baterías de 12 voltios. Y luego, si nos vamos en invierno, dejamos uno de los coches aquí para que haya otra batería. Bueno, tendría que conseguir 5 vigilantes de batería - $ 150 si elijo el HF en oferta.

Mientras pensaba en esto, pensé en conseguir una para cada batería, ponerla, lleva las baterías a un nivel y luego simplemente monitorea y carga lentamente por el resto del tiempo. Entonces se me ocurre la idea:¿por qué no podría conectarlo a cada batería unas horas al día? ¿No funcionaría? Entonces, ¿si pudiera hacer que cambiara automáticamente entre ellos?

Bueno, yo puedo. Tomé uno de mis Arduinos y escribí un programa que hace precisamente eso, y luego me dejé llevar y agregué algunas características adicionales. Así que aquí les presento los detalles de lo que terminé. Esta versión está configurada para hasta 6 baterías con detección automática.

Funcionará con 1 a 6 baterías. La primera batería debe estar conectada al punto número 1:esa conexión está vinculada al regulador de voltaje que alimenta el Arduino y otros componentes electrónicos. El segundo y superior se pueden conectar en cualquier orden. Cuando conecta una batería, el voltaje se detecta en la función Read_Show_Volts y esa batería se agrega al ciclo de carga.

Cómo funciona:quería acomodar 6 baterías. Con un Arduino UNO, se necesitan entradas analógicas A4 y A5 para el control LCD de 2 cables y eso deja 4 entradas analógicas, muy pocas. Así que conecté un MCP-3008 de entradas analógicas de 8 canales. Utilizo 2 resistencias de 1k como divisor de voltaje para cada entrada del MCP-3008.

Básicamente, hay 4 funciones llamadas en el programa.

  • La función read_show_volts comprueba cada conexión para ver si hay una batería conectada mediante la prueba de más de 8 voltios disponibles. Si hay 8v o más, agrega esa conexión al bucle de carga.
  • Función check_relays comprueba el contador del temporizador y cuando alcanza el máximo, mueve el cargador al siguiente relé de la línea.
  • Función update_display hace precisamente eso:actualiza la pantalla. Primero muestra el voltaje en las conexiones 1, 2 en la línea 1 y el voltaje de las conexiones 3 y 4 en la línea 2. Luego, cuando el temporizador lo indica, cambia y muestra el voltaje de las conexiones 5 y 6 en la línea 1 y porque tenía dos Entradas analógicas adicionales Muestro el voltaje del sistema (con suerte 5 voltios) y el voltaje iref - 3.3 voltios. Esas lecturas no son necesarias, pero había una línea en blanco y no sabía qué más mostrar. Estoy abierto a ideas.
  • La función final es read_distance_update . Este es interesante y el más divertido para jugar. Conecté una unidad de medición de distancia de sonda ultrasónica HC-SR04. Quería que el lcd monitoreara los voltajes, pero casi nunca estoy parado allí mirando el lcd, la mayoría de las veces se puede apagar. Podría haber puesto un interruptor, una salida fácil, pero lo que hice fue poner el HC-SR04 y después de tantos segundos apagar la pantalla lcd. Luego, cuando paso mi mano sobre el HC-SR04, enciendo la pantalla lcd durante x segundos.

Hay variables para casi todo, por lo que puede adaptarlo a sus necesidades. He configurado el temporizador de carga en 1 hora por batería. Entonces, si hay dos baterías conectadas, se cargarán cada una durante 1 hora cada vez 12 veces al día. Con 4 baterías sería 1 hora 6 veces al día, y así sucesivamente.

Mientras tuviera el HC-SR04, agregué una rutina que cambia el ciclo del temporizador a un tiempo más corto:unos segundos en cada batería. La razón por la que hice esto fue para poder ver que estaba cambiando entre las baterías y no tuve que esperar una hora para verlo cambiar. Si coloca su mano sobre el HC-SR04 durante unos segundos, la luz de fondo de la pantalla LCD se enciende y apaga para que sepa que está encendido. A continuación, oirá que los relés cambian cada pocos segundos. Vuelva a colocar la mano sobre el HC-SR04 y volverá a cambiar.

Aquí hay un zip del código:BatteryMultiplexer

Código

  • Código Arduino del multiplexor de batería
Código Arduino del multiplexor de batería Arduino
Usé un Arduino Uno.
 #include  #include  // Usando la versión 1.2.1 # include  #include  auto timer =timer_create_default (); // cree un temporizador con la configuración predeterminada // El constructor de LCD - la dirección que se muestra es 0x27 - puede o no ser la correcta para la suya // También se basa en YWRobot LCM1602 IIC V1LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVO); int zcnt =0; int acnt =0; // propósito general ahora mismoint chargeTime =(10 * 1000); // cuánto tiempo dedicar a cada bateríaint charge_time_counter =59; // ¿cuántos tiempos de carga se pasaron? int charge_time_max =60; // ¿cuántos tiempos de carga se pasaron? int relay1 =3; // cada relé en su propio pinint relay2 =4; int relay3 =5; int relay4 =6; int current_relay =0; // ¿Qué relé está encendido ahora? int max_relays =3; // cómo pueden los relés - basado en 0. Empiece a esperar los tres voltios flotantes1; // cuál es el voltaje de cada batería flotador voltios2; flotador voltios3; int min_volts =1; // ¿Cuál es el voltaje mínimo que debe tener un voltaje de batería para cargarlo? int volts_update_count =5; // con qué frecuencia actualizar la lectura de voltaje en segundosint volts_update_counter =0; // rastrea la cuenta de los segundos pasadosint volts_update =(500); int read_distance_update =(500); // actualiza el lector de distancia cada milisint time_on_counter =0; // contador para la visualización on / offint time_on_count =100; // segundos para estar encendidoint heart_beat =0; // cambia este 0 a 1 a 0 para mostrar el latido del corazónUltraSonicDistanceSensor distanceSensor (11, 12); // Inicializar el sensor que usa los pines digitales 13 y 12.int distancia; int relés [] ={relé1, relé2, relé3}; int is_live [] ={0, 0, 0}; // 1 si está vivo, 0 si no. Solo tengo 3int debug =5; // establece esto en el nivel de debug msgs para ir a la impresora serialvoid all_change_to (int which) {// cambia todos los relés a HIGH o LOW, tú dime cuál :) digitalWrite (relay1, which); digitalWrite (relé2, cuál); digitalWrite (relé3, que);} void toggle_relays (int whichOne) {lcd.setCursor (0, 0); // muestra qué relé es el actual en lcd.print ("Relé activado:"); lcd.print (current_relay + 1); // current_relay está basado en cero all_change_to (HIGH); // apagar todo primero digitalWrite (relés [current_relay], LOW); // y establece el que debería estar encendido en acnt ++; // solo un contador para mostrarme que está funcionando lcd.print (""); lcd.print (acnt);} void checkRelays () {// mueve el current_relay al siguiente relé // si alcanzamos el máximo, comienza en 0 // mientras estás aquí, llama a toggle_relays para asegurarte de que no estamos cargar un vacío o muerto 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 () {// lea la distancia de cualquier cosa desde el HC-S204 // si hay algo dentro de los 80 cm, encienda la pantalla y reinicie la pantalla en el contador // si se alcanza el contador, entonces no hay nada dentro de los 80 cm, así que apaga la pantalla distance =distanceSensor.measureDistanceCm (); // Descomentarlos para ver la distancia real medida // Serial.print ("Distancia en CM:"); // Serial.println (distancia); if (distancia <80) {// puede ser cualquier cosa por debajo de 200 para mi sistema, descomente arriba y verifique el suyo lcd.backlight (); // activa la visualización en time_on_counter =0; } else {// ¿tal vez se está apagando? time_on_counter ++; if (tiempo_en_contador> tiempo_en_contador) {tiempo_en_contador =0; lcd.noBacklight (); }}} void read_show_volts () {// lee los voltios en cada entrada de la batería // entonces, si es menor que min_volts, no hay nada que valga la pena cargar, omita esa conexión // esto se llama una y otra vez, así que si un cable se cae o // lo que sea que no esté en el ciclo de carga volts1 =analogRead (0); voltios1 =(voltios1 * 0.016); lcd.setCursor (0, 1); lcd.print (""); // limpia la línea lcd.setCursor (11, 0); lcd.print (voltios1); voltios2 =analogRead (1); voltios2 =(voltios2 * 0.0164); lcd.setCursor (4, 1); lcd.print (voltios2); voltios3 =analogRead (2); voltios3 =(voltios3 * 0.0166); lcd.setCursor (11, 1); lcd.print (voltios3); // ahora prueba los voltajes. Si es menos de 10, entonces supongamos que la batería está muerta / mala o sin batería // así que sáquelo de rotación // comience limpiando todos los relés int temp_cnt =0; // establece todas las matrices en 0 - eso es relés desactivados [0] =0; relés [1] =0; relés [2] =0; if (voltios1> min_voltios) {relés [temp_cnt] =relé1; // el relé 1 es bueno temp_cnt ++; } if (voltios2> min_voltios) {relés [temp_cnt] =relé2; // el relé 2 es bueno temp_cnt ++; } if (voltios3> min_voltios) {relés [temp_cnt] =relé3; // el relé 3 es bueno temp_cnt ++; } max_relays =temp_cnt; // esta es una apuesta de corazón en la pantalla lcd, solo me muestra que está ejecutando lcd.setCursor (0, 1); if (latido_del_corazón ==1) {lcd.print ("<>"); latido_del_corazón =0; } else {lcd.print ("> <"); latido_del_corazón =1; } lcd.print (charge_time_counter); read_distance ();} configuración vacía () {Serial.begin (19200); Serial.println ("Iniciando"); lcd. comienzo (16, 2); // dieciséis caracteres a lo largo - 2 líneas lcd.backlight (); pinMode (relé1, SALIDA); pinMode (relé2, SALIDA); pinMode (relé3, SALIDA); all_change_to (ALTO); // configurar temporizadores. 3 temporizadores:el tiempo para encender el cargador en cada batería, // con qué frecuencia mostrar la actualización de voltaje // y con qué frecuencia verificar la distancia leída para encender la pantalla read_show_volts (); // hazlo la primera vez para no tener que esperar el temporizador. checkRelays (); timer.every (chargeTime, checkRelays); timer.every (actualización_voltios, read_show_volts);} bucle vacío () {timer.tick (); // marca el temporizador} 

Esquemas

Esquema para multiplexor

Proceso de manufactura

  1. Persianas inteligentes
  2. Controlar el aceptador de monedas con Arduino
  3. Arduino Temp. Monitor y reloj en tiempo real con pantalla 3.2
  4. ¡Arduino con Bluetooth para controlar un LED!
  5. Arduino Power
  6. Jugando con Nextion Display
  7. Voltímetro de bricolaje con Arduino y una pantalla Nokia 5110
  8. Plataforma de entrenamiento Arduino
  9. Cree la aplicación Fridgeye con una pantalla Nextion
  10. Medición de la radiación solar con Arduino
  11. Guante de mano inteligente