Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Multiplexeur de chargeur de batterie intelligent avec écran intelligent

Composants et fournitures

Arduino UNO
× 1
Arduino Proto Shield
× 1
Capteur à ultrasons - HC-SR04 (Générique)
× 1
Adafruit MCP-3008 8 canaux 10 bits Adc
× 1
Relais 5V - optocoupleur 2 canaux
× 3
Module d'alimentation LM2596 DC / DC BUCK 3A réglable
× 1
Résistance 1k ohm
× 12
Bornier à 6 positions
Vérifiez l'image - la plupart des systèmes de connexion peuvent être utilisés.
× 1

Outils et machines nécessaires

Fer à souder (générique)

À propos de ce projet

Vivre dans le nord-est si vous avez une vieille voiture ou un bateau, ou une tondeuse à gazon ou un autre véhicule qui démarre avec une batterie que vous ne conduisez pas ou n'utilisez pas par mauvais temps (certains l'appellent hiver), vous devez décider quoi faire avec les batteries chaque saison. Si vous en avez un ou deux, c'est assez facile - vous pouvez vous procurer un chargeur d'entretien. Les plus simples et bon marché coûtent moins de 15 $ - mais ils sont simples - pas de retour ni de surveillance de la batterie, ils mettent juste un peu plus de 13 volts dans la batterie. Un meilleur choix serait l'un des chargeurs intelligents - ils ont généralement une charge régulière plus élevée/plus rapide et une charge de neige ou d'entretien qui ajuste sa sortie en fonction de la tension et de l'état de la batterie. Ils fonctionnent très bien - Harbour Freight en a un pour 39 $ - bien sûr 29 $ en vente, ce qui est presque toujours.

Si j'avais raccroché, j'avais ma MGB de 1975 (avec un Oldsmobile V8) de 3,5 litres, un pick-up Toyota de 1981, un bateau et un générateur, le tout avec des batteries de 12 volts. Et puis si on part en hiver on laisse une des voitures ici donc il y a une autre batterie. Eh bien, il me faudrait 5 gardiens de batterie - 150 $ si je choisis celui HF en vente.

En pensant à cela, j'ai pensé en obtenir un pour chaque batterie, le mettre en marche, cela amène les batteries à un niveau, puis il surveille et charge le reste du temps. Alors l'idée me vient - pourquoi ne pourrais-je pas le brancher à chaque batterie quelques heures par jour - cela ne fonctionnerait-il pas ? Alors si je pouvais le faire basculer automatiquement entre eux ?

Bon, je peux. J'ai pris l'un de mes Arduinos et j'ai écrit un programme qui fait exactement cela – puis je me suis emporté et j'ai ajouté quelques fonctionnalités supplémentaires. Je vous présente donc ici les détails de ce que j'ai obtenu. Cette version est configurée pour un maximum de 6 batteries avec détection automatique.

Il fonctionnera avec 1 à 6 piles. La première batterie doit être connectée au point numéro 1 - cette connexion est liée au régulateur de tension qui alimente l'Arduino et d'autres appareils électroniques. Le 2ème et plus peuvent alors être connectés dans n'importe quel ordre. Lorsque vous connectez une batterie, la tension est détectée dans la fonction Read_Show_Volts et cette batterie est ajoutée au cycle de charge.

Comment ça marche - Je voulais accueillir 6 batteries. Avec un Arduino UNO, des entrées analogiques A4 et A5 sont nécessaires pour le contrôle LCD à 2 fils et cela laisse 4 entrées analogiques, trop peu. J'ai donc connecté un MCP-3008 à 8 entrées analogiques. J'utilise 2 résistances de 1k comme diviseur de tension pour chaque entrée du MCP-3008.

Il y a essentiellement 4 fonctions appelées dans le programme.

  • La fonction read_show_volts vérifie chaque connexion pour voir s'il y a une batterie connectée en testant plus de 8 volts disponibles. S'il y a 8 v ou plus, cette connexion est ajoutée à la boucle de charge.
  • Fonction check_relays vérifie le compteur de la minuterie et lorsqu'il atteint le maximum, il déplace le chargeur vers le relais suivant en ligne.
  • Fonction update_display fait exactement cela - met à jour l'affichage. D'abord, il affiche la tension aux connexions 1, 2 sur la ligne 1 et la tension des connexions 3 et 4 sur la ligne 2. Ensuite, lorsque la minuterie le dit, elle change et affiche la tension des connexions 5 et 6 sur la ligne 1 et parce que j'en ai eu deux entrées analogiques supplémentaires Je montre la tension du système (espérons 5 volts) et la tension iref - 3,3 volts. Ces lectures ne sont pas nécessaires, mais il y avait une ligne blanche et je ne savais pas quoi montrer d'autre. Je suis ouvert aux idées.
  • La dernière fonction est read_distance_update . Celui-ci est intéressant et le plus amusant avec lequel jouer. J'ai branché une unité de mesure de distance sonar à ultrasons HC-SR04. Je voulais que l'écran LCD surveille les tensions, mais je ne suis presque jamais là à regarder l'écran LCD - la plupart du temps, il pouvait être éteint. J'aurais pu mettre un interrupteur – solution de facilité – mais ce que j'ai fait, c'est mettre le HC-SR04 et après tant de secondes, éteindre l'écran LCD. Ensuite, lorsque je passe ma main de près sur le HC-SR04, je rallume l'écran LCD pendant x secondes.

Il existe des variables pour presque tout, vous pouvez donc l'adapter à vos besoins. J'ai réglé la minuterie de charge sur 1 heure par batterie. Donc, s'il y a deux batteries connectées, elles se chargeront chacune pendant 1 heure à chaque fois 12 fois par jour. Avec 4 piles, cela ferait 1 heure 6 fois par jour, et ainsi de suite.

Tant que j'avais le HC-SR04, j'ai ajouté une routine qui change la boucle de la minuterie en une durée plus courte - quelques secondes sur chaque batterie. La raison pour laquelle j'ai fait cela était que je pouvais voir qu'il changeait correctement entre les batteries et je n'ai pas eu à attendre une heure pour le voir basculer. Si vous maintenez votre main au-dessus du HC-SR04 pendant quelques secondes, le rétroéclairage de l'écran LCD s'allume et s'éteint afin que vous sachiez qu'il a basculé. Vous entendrez alors les relais basculer toutes les quelques secondes. Tenez à nouveau votre main sur le HC-SR04 et il reviendra.

Voici un zip du code :BatteryMultiplexer

Code

  • Code Arduino du multiplexeur de batterie
Code Arduino du multiplexeur de batterieArduino
J'ai utilisé un Arduino Uno.
#include #include  // Utilisation de la version 1.2.1#include #include auto timer =timer_create_default(); // créer une minuterie avec les paramètres par défaut// Le constructeur LCD - l'adresse indiquée est 0x27 - peut ou non être correcte pour la vôtre// Également basé sur YWRobot LCM1602 IIC V1LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIF);int zcnt =0;int acnt =0; // usage général en ce momentint chargeTime =(10 * 1000); // combien de temps passer sur chaque batterieint charge_time_counter =59; // combien de temps de charge ont été passés?int charge_time_max =60; // combien de temps de charge ont été passés?int relay1 =3; // chaque relais sur son propre pinint relay2 =4;int relay3 =5;int relay4 =6;int current_relay =0; // sur quel relais est celui actuellement?int max_relays =3; // comment les relais peuvent-ils être basés sur 0. Commencez à attendre les trois.float volts1; // quelle est la tension de chaque batteriefloat volts2;float volts3;int min_volts =1; // quelle est la tension minimale qu'une tension de batterie doit être chargée.int volts_update_count =5; // à quelle fréquence mettre à jour la lecture de tension en secondesint volts_update_counter =0; // suivre le nombre de secondes écoulées parint volts_update =(500);int read_distance_update =(500); // met à jour le lecteur de distance chaque millisint time_on_counter =0; // compteur pour l'affichage on/offint time_on_count =100; //secondes pour être onint heart_beat =0; // retournez ce 0 à 1 à 0 pour afficher le battement cardiaqueUltraSonicDistanceSensor distanceSensor(11, 12); // Initialiser le capteur qui utilise les broches numériques 13 et 12.int distance;int relays[] ={ relay1, relay2, relay3 };int is_live[] ={ 0, 0, 0}; // 1 si en direct, 0 sinon. J'ai seulement 3int debug =5; // définissez ceci au niveau des messages de débogage pour accéder à l'imprimante série void all_change_to(int which) { // changez tous les relais en HIGH ou LOW, vous me dites lequel :) digitalWrite(relay1, which); digitalWrite(relay2, lequel); digitalWrite(relay3, which);}void toggle_relays(int whichOne) { lcd.setCursor(0, 0); // montre quel relais est le relais actuel sur lcd.print("Relay on:"); lcd.print(current_relay + 1); // current_relay est basé sur zéro all_change_to (HIGH); // éteint tout d'abord digitalWrite(relays[current_relay], LOW); // et définissez celui qui doit être activé sur acnt++ ; // juste un compteur pour me montrer que ça marche lcd.print(" "); lcd.print(acnt);}void checkRelays() { // déplace le current_relay vers le relais suivant // si nous atteignons le maximum, commencez à 0 // pendant que vous êtes ici, appelez toggle_relays pour vous assurer que nous ne le sommes pas charger un blanc ou mort 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() { // lire la distance de quoi que ce soit du HC-S204 // si c'est quelque chose à moins de 80 cm alors allumez l'affichage et réinitialisez l'affichage sur le compteur // si le compteur est atteint alors rien n'est à moins de 80 cm donc éteindre l'affichage distance =distanceSensor.measureDistanceCm(); // Décommentez-les pour voir la distance réelle mesurée // Serial.print("Distance en CM:"); // Serial.println(distance); if (distance <80) { // peut être inférieur à 200 pour mon système, décommentez ci-dessus et vérifiez le vôtre lcd.backlight(); // activer l'affichage time_on_counter =0; } else { // peut-être qu'il se déclenche ? time_on_counter++ ; if (time_on_counter> time_on_count) { time_on_counter =0; lcd.noBacklight(); } }} void read_show_volts() { // lire les volts à chaque entrée de batterie // alors si moins de min_volts, il n'y a rien qui vaut la peine d'être chargé, ignorez cette connexion // cela est appelé encore et encore si un fil est cassé ou // tout ce qui ne sera pas dans la boucle de charge volts1 =analogRead(0); volts1 =(volts1 * 0,016); lcd.setCursor(0, 1); lcd.print(" "); // efface la ligne lcd.setCursor(11, 0); lcd.print(volts1) ; volts2 =analogRead(1) ; volts2 =(volts2 * 0,0164); lcd.setCursor(4, 1); lcd.print(volts2) ; volts3 =analogRead(2) ; volts3 =(volts3 * 0,0166); lcd.setCursor(11, 1); lcd.print(volts3) ; // maintenant tester les tensions. S'il est inférieur à 10, supposons que la batterie est morte/mauvaise ou pas de batterie // donc retirez-la de la rotation // commencez par effacer tous les relais int temp_cnt =0; // met tous les tableaux à 0 - c'est off relays[0] =0; relais[1] =0 ; relais[2] =0; if (volts1> min_volts) { relays[temp_cnt] =relay1; // le relais 1 est bon temp_cnt++; } if (volts2> min_volts) { relays[temp_cnt] =relay2; // le relais 2 est bon temp_cnt++; } if (volts3> min_volts) { relays[temp_cnt] =relay3; // le relais 3 est bon temp_cnt++; } max_relays =temp_cnt; // c'est un pari de cœur sur l'écran lcd - me montre juste qu'il exécute lcd.setCursor(0, 1); if (heart_beat ==1) { lcd.print("<>"); heart_beat =0; } else { lcd.print("><"); heart_beat =1; } lcd.print(charge_time_counter); read_distance();}void setup(){ Serial.begin(19200); Serial.println("Démarrage"); lcd.begin (16, 2); // seize caractères sur 2 lignes lcd.backlight(); pinMode(relais1, SORTIE); pinMode(relais2, SORTIE); pinMode (relais3, SORTIE); all_change_to (HIGH); // configurer les minuteurs. 3 minuteries - le temps d'allumer le chargeur sur chaque batterie, // à quelle fréquence afficher la mise à jour de la tension // et à quelle fréquence vérifier la distance lue pour allumer l'affichage read_show_volts(); // fait la première fois pour ne pas avoir à attendre le timer. checkRelais(); timer.every(chargeTime, checkRelays); timer.every(volts_update, read_show_volts);}boucle void(){ timer.tick(); // cocher la minuterie}

Schémas

Schéma du multiplexeur

Processus de fabrication

  1. Stores intelligents
  2. Contrôler l'accepteur de pièces avec Arduino
  3. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  4. Arduino avec Bluetooth pour contrôler une LED !
  5. Puissance Arduino
  6. Jouer avec Nextion Display
  7. Voltmètre DIY avec Arduino et un écran Nokia 5110
  8. Plateforme de formation Arduino
  9. Créer l'application Fridgeye avec un écran Nextion