Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Smart Battery Charger Multiplexer mit Smart Display

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Arduino Proto Shield
× 1
Ultraschallsensor - HC-SR04 (Generic)
× 1
Adafruit MCP-3008 8-Kanal-10-Bit-Adc
× 1
5-V-Relais - 2-Kanal-Optokoppler
× 3
LM2596 Netzteilmodul DC / DC BUCK 3A einstellbar
× 1
Widerstand 1k Ohm
× 12
Klemmleiste mit 6 Positionen
Überprüfen Sie das Bild - fast jede Art von Verbindungssystem kann verwendet werden.
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Über dieses Projekt

Wenn Sie im Nordosten leben, wenn Sie ein älteres Auto oder ein Boot oder einen Rasenmäher oder ein anderes Fahrzeug haben, das mit einer Batterie startet, die Sie bei schlechtem Wetter nicht fahren oder verwenden (manche nennen es Winter), müssen Sie sich entscheiden, was zu tun ist mit den Batterien jede Saison. Wenn Sie ein oder zwei haben, ist es ziemlich einfach – Sie können ein Erhaltungsladegerät bekommen. Die billigen einfachen sind unter $15 – aber sie sind einfach – keine Batterierückmeldung oder Überwachung, sie legen nur etwas mehr als 13 Volt an die Batterie. Eine bessere Wahl wäre eines der intelligenten Ladegeräte – sie haben normalerweise eine regelmäßige höhere / schnellere Ladung und eine Schnee- oder Erhaltungsladung, die ihre Leistung je nach Batteriespannung und -zustand anpasst. Sie funktionieren sehr gut – Harbour Freight hat einen für 39 US-Dollar – natürlich 29 US-Dollar im Angebot, was fast immer der Fall ist.

Aufgehängt hatte ich meinen 1975er MGB (mit 3,5 Liter Oldsmobile V8), einen 1981er Toyota Pickup, ein Boot und einen Generator – alle mit 12 Volt Batterien. Und wenn wir im Winter wegfahren, lassen wir eines der Autos hier, damit es eine andere Batterie gibt. Nun, ich müsste 5 Batteriewächter besorgen – 150 US-Dollar, wenn ich mich für den HF-Kaufmann entscheide.

Während ich darüber nachdachte, dachte ich, ich bekomme eine für jede Batterie, setze sie auf, sie bringt die Batterien auf ein Niveau und überwacht sie dann einfach und hält sie für den Rest der Zeit. Da kommt mir die Idee – warum könnte ich das nicht ein paar Stunden am Tag an jede Batterie anschließen – geht das nicht? Wenn ich dann automatisch zwischen ihnen wechseln könnte?

Also ich kann. Ich nahm einen meiner Arduinos und schrieb ein Programm, das genau das tut – und dann ließ ich mich hinreißen und fügte ein paar zusätzliche Funktionen hinzu. Deshalb präsentiere ich hier die Details zu dem, was ich letztendlich erreicht habe. Diese Version ist für bis zu 6 Batterien mit automatischer Erkennung ausgelegt.

Es funktioniert mit 1 bis 6 Batterien. Die erste Batterie muss an die Nummer 1 angeschlossen werden – diese Verbindung ist mit dem Spannungsregler verbunden, der den Arduino und andere Elektronik mit Strom versorgt. Die 2. und höher können dann in beliebiger Reihenfolge angeschlossen werden. Wenn Sie eine Batterie anschließen, wird die Spannung in der Funktion Read_Show_Volts erfasst und diese Batterie wird dem Ladezyklus hinzugefügt.

Wie es funktioniert – Ich wollte 6 Batterien unterbringen. Bei einem Arduino UNO werden A4 und A5 für die 2-Draht-LCD-Steuerung analoge Eingänge benötigt und das verbleiben 4 analoge Eingänge, zu wenig. Also habe ich einen MCP-3008 8-Kanal-Analogeingänge angeschlossen. Ich verwende 2 1k-Widerstände als Spannungsteiler für jeden Eingang des MCP-3008.

Es gibt grundsätzlich 4 Funktionen, die im Programm aufgerufen werden.

  • Die Funktion read_show_volts überprüft jede Verbindung, um zu sehen, ob eine Batterie angeschlossen ist, indem auf mehr als 8 Volt getestet wird. Wenn 8 V oder mehr vorhanden sind, wird diese Verbindung zur Ladeschleife hinzugefügt.
  • Funktion check_relays überprüft den Timer-Zähler und wenn er das Maximum erreicht, schaltet es das Ladegerät zum nächsten Relais in der Reihe.
  • Funktion update_display tut genau das – aktualisiert die Anzeige. Zuerst zeigt es die Spannung an den Anschlüssen 1, 2 auf Leitung 1 und die Spannung der Anschlüsse 3 und 4 auf Leitung 2. Wenn der Timer es dann mitteilt, ändert er sich und zeigt die Spannung der Anschlüsse 5 und 6 auf Leitung 1 an und weil ich zwei hatte zusätzliche analoge Eingänge Ich zeige die Systemspannung (hoffentlich 5 Volt) und die Iref-Spannung – 3,3 Volt. Diese Lesungen sind nicht erforderlich, aber es gab eine Leerzeile und ich wusste nicht, was ich sonst zeigen sollte – ich bin offen für Ideen.
  • Die letzte Funktion ist read_distance_update . Dieser ist interessant und macht am meisten Spaß, damit zu spielen. Ich habe ein Ultraschall-Sonar-Distanzmessgerät HC-SR04 angeschlossen. Ich wollte, dass das LCD die Spannungen überwacht, aber ich stehe kaum da und schaue auf das LCD – die meiste Zeit könnte es ausgeschaltet werden. Ich hätte einen Schalter umlegen können – einfacher Ausweg – aber ich habe den HC-SR04 eingesteckt und nach so vielen Sekunden das LCD ausgeschaltet. Wenn ich dann meine Hand dicht über den HC-SR04 streiche, schalte ich das LCD für x Sekunden wieder ein.

Es gibt Variablen für fast alles, sodass Sie es Ihren Bedürfnissen anpassen können. Ich habe den Ladetimer auf 1 Stunde pro Akku eingestellt. Wenn also zwei Akkus angeschlossen sind, lädt er jeweils 12 Mal am Tag jeweils 1 Stunde lang. Mit 4 Batterien wäre es 6 Mal am Tag 1 Stunde und so weiter.

Solange ich den HC-SR04 hatte, habe ich eine Routine hinzugefügt, die die Timer-Schleife auf eine kürzere Zeit ändert – ein paar Sekunden pro Batterie. Der Grund, warum ich dies tat, war, dass ich sehen konnte, dass zwischen den Batterien in Ordnung gewechselt wurde und ich keine Stunde warten musste, um zu sehen, wie es wechselte. Wenn Sie Ihre Hand einige Sekunden lang über den HC-SR04 halten, blinkt die LCD-Hintergrundbeleuchtung, damit Sie wissen, dass sie eingeschaltet ist. Sie hören dann, wie die Relais alle paar Sekunden schalten. Halten Sie Ihre Hand wieder über den HC-SR04 und er schaltet zurück.

Hier ist eine Postleitzahl des Codes:BatteryMultiplexer

Code

  • Batterie-Multiplexer Arduino-Code
Batterie-Multiplexer Arduino CodeArduino
Ich habe ein Arduino Uno verwendet.
#include #include  // Verwenden von Version 1.2.1#include #include auto timer =timer_create_default(); // Erstellen Sie einen Timer mit Standardeinstellungen // Der LCD-Konstruktor - die angezeigte Adresse ist 0x27 - kann für Ihre korrekt sein oder nicht // Auch basierend auf YWRobot LCM1602 IIC V1LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIV);int zcnt =0;int acnt =0; // Allgemeiner Zweck im Momentint chargeTime =(10 * 1000); // wie viel Zeit Sie für jeden Akku aufwenden müssen charge_time_counter =59; // wie viele Ladezeiten wurden übergeben?int charge_time_max =60; // wie viele Ladezeiten wurden verstrichen?int relay1 =3; // jedes Relais auf seinem eigenen Pinint Relay2 =4;int Relay3 =5;int Relay4 =6;int current_relay =0; // welches Relais ist jetzt eingeschaltet?int max_relays =3; // wie können Relais - 0 basiert. Beginnen Sie damit, alle drei zu erwarten.float volts1; // Wie hoch ist die Spannung jeder BatterieFloat Volts2; Float Volts3;int min_volts =1; // Was ist die minimale Spannung, die eine Batteriespannung haben sollte, um aufgeladen zu werden.int volts_update_count =5; // wie oft der Spannungswert in Sekunden aktualisiert werden sollint volts_update_counter =0; // Verfolgen Sie die Anzahl der Sekunden, die durchint volts_update =(500);int read_distance_update =(500); // Aktualisieren Sie den Distanzleser jeden Millisint time_on_counter =0; // Zähler für die Anzeige on/offint time_on_count =100; // Sekunden, um onint zu sein heart_beat =0; // drehe dies von 0 auf 1 auf 0, um den Herzschlag anzuzeigenUltraSonicDistanceSensor DistanceSensor (11, 12); // Sensor initialisieren, der die digitalen Pins 13 und 12.int Distance verwendet;int Relays[] ={Relay1, Relay2, Relay3};int is_live[] ={0, 0, 0}; // 1 wenn live, 0 wenn nicht. Ich habe nur 3int debug =5; // setze dies auf die Ebene der Debug-Nachrichten, um zum seriellen Drucker zu gelangen. all_change_to (int which) { // ändere alle Relais auf HIGH oder LOW, du sagst mir was:) digitalWrite (relay1, welches); digitalWrite (Relais2, welches); digitalWrite (relay3, das);}void toggle_relays (int whichOne) { lcd.setCursor (0, 0); // Zeigen Sie an, welches Relais das aktuelle auf lcd.print ist ("Relay on:"); lcd.print (current_relay + 1); // current_relay ist nullbasiert all_change_to(HIGH); // zuerst alles ausschalten digitalWrite (relays [current_relay], LOW); // und setze diejenige, die auf acnt++ eingeschaltet sein soll; // nur ein Zähler, der mir zeigt, dass er funktioniert lcd.print(" "); lcd.print(acnt);}void checkRelays() { // Verschiebe das current_relay zum nächsten Relais // wenn wir das Maximum erreichen, beginne bei 0 // während du hier bist, rufe toggle_relays auf, um sicherzustellen, dass wir es nicht sind einen leeren oder einen leeren laden charge_time_counter++; if (charge_time_counter>=charge_time_max) { current_relay++; if (current_relay>=max_relays) { current_relay =0; } toggle_relays (aktuelles_relais); charge_time_counter =0; aufrechtzuerhalten schalte das Display aus Distance =distanceSensor.measureDistanceCm(); // Entkommentieren Sie diese, um die tatsächlich gemessene Distanz zu sehen // Serial.print ( "Distanz in CM:"); // Serial.println (Abstand); if (distanz <80) {// kann alles unter 200 sein für mein System oben auskommentieren und deine lcd.backlight() überprüfen; // Anzeige einschalten time_on_counter =0; } else { // vielleicht geht es los? time_on_counter++; if (time_on_counter> time_on_count) { time_on_counter =0; lcd.noBacklight(); aufrechtzuerhalten oder // was auch immer es nicht in der Ladeschleife sein wird Volt1 =analogRead (0); Volt1 =(Volt1 * 0,016); lcd.setCursor(0, 1); lcd.print(" "); // lösche die Zeile lcd.setCursor(11, 0); lcd.print (Volt1); Volt2 =analogRead(1); Volt2 =(Volt2 * 0,0164); lcd.setCursor(4, 1); lcd.print (Volt2); Volt3 =analogRead(2); Volt3 =(Volt3 * 0,0166); lcd.setCursor(11, 1); lcd.print (Volt3); // Jetzt die Spannungen testen. Wenn weniger als 10, dann nehmen wir an, dass die Batterie leer/schlecht ist oder keine Batterie // also aus der Rotation nehmen // Beginnen Sie mit dem Löschen aller Relais int temp_cnt =0; // setze alle Arrays auf 0 - das ist off relays[0] =0; Relais[1] =0; Relais [2] =0; if (volts1> min_volts) { relays[temp_cnt] =relay1; // Relais 1 ist gut temp_cnt++; aufrechtzuerhalten. Wenn (Volt2> Min_Volt) {Relais [temp_cnt] =Relais2; // Relais 2 ist gut temp_cnt++; aufrechtzuerhalten. Wenn (Volt3> Min_Volt) {Relais [temp_cnt] =Relay3; // Relais 3 ist gut temp_cnt++; } max_relays =temp_cnt; // Dies ist eine Herzwette auf dem LCD - zeigt mir nur, dass es läuft lcd.setCursor(0, 1); if (heart_beat ==1) {lcd.print("<>"); Herzschlag =0; } sonst { lcd.print("><"); Herzschlag =1; } lcd.print (charge_time_counter); read_distance ();}void setup () { Serial.begin (19200); Serial.println("Starten"); lcd.begin(16, 2); // sechzehn Zeichen über - 2 Zeilen lcd.backlight (); pinMode (Relais1, AUSGANG); PinMode (Relais2, AUSGANG); PinMode (Relais3, AUSGANG); all_change_to(HIGH); // Timer einrichten. 3 Timer - die Zeit zum Einschalten des Ladegeräts an jeder Batterie, // wie oft die Spannungsaktualisierung angezeigt wird // und wie oft auf die Entfernung überprüft wird, um das Display einzuschalten read_show_volts (); // Beim ersten Mal machen, damit wir nicht auf den Timer warten müssen. checkRelays(); timer.every(chargeTime, checkRelays); timer.every(volts_update, read_show_volts);}void loop(){ timer.tick(); // den Timer ankreuzen}

Schaltpläne

Schaltplan für Multiplexer

Herstellungsprozess

  1. Smart Blinds
  2. Münzprüfer mit Arduino steuern
  3. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  4. Arduino mit Bluetooth zur Steuerung einer LED!
  5. Arduino-Power
  6. Mit Nextion Display spielen
  7. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  8. Arduino-Schulungsplattform
  9. Erstellen Sie die Fridgeye-App mit einem Nextion-Display
  10. Messung der Sonneneinstrahlung mit Arduino