Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pengacara Baterai Cerdas Lanjutan dengan Multiplexing & Tampilan Digital

Komponen dan Perlengkapan

Alat dan Mesin yang Diperlukan

Tentang Proyek Ini

Bertinggal di Utara Timur jika Anda memiliki mobil tua atau perahu, atau mesin potong rumput atau kendaraan lain yang memulai dengan baterai yang tidak Anda berkendara atau gunakan pada cuaca buruk (beberapa menyebutnya musim dingin) Anda harus memutuskan apa yang akan dilakukan dengan baterai setiap musim. Jika Anda memiliki satu atau dua ini cukup mudah – Anda bisa mendapatkan charger transi. Yang murah sederhana di bawah $15 – tetapi mereka sederhana – tidak ada umpan balik baterai atau pemantauan, mereka hanya menempatkan sedikit lebih dari 13 volt ke baterai. Pilihan yang lebih baik akan menjadi salah satu charger cerdas – mereka biasanya memiliki charge teratur lebih tinggi/cepat dan charge salju atau transi yang menyesuaikan outputnya berdasarkan tegangan dan kondisi baterai. Mereka bekerja sangat baik – Harbor Freight memiliki satu untuk $39 – tentu saja $29 saat penjualan yang hampir selalu.

Di tempat saya kerepotan adalah saya memiliki MGB 1975 saya (dengan mesin V8 Oldsmobile 3.5 liter), pickup Toyota 1981, perahu dan generator – semuanya dengan baterai 12 volt. Dan jika kita pergi musim dingin kita meninggalkan salah satu mobil di sini jadi ada baterai lagi. Nah saya harus mendapatkan 5 pengawas baterai – $150 jika saya pergi untuk yang HF saat penjualan.

Saat memikirkan ini saya pikir saya mendapat satu untuk setiap baterai, pasang, membawa baterai ke tingkat dan kemudian hanya memantau dan charge transi untuk waktu yang tersisa. Jadi ide muncul kepada saya – mengapa tidak saya hubungkan ke setiap baterai beberapa jam sehari – apakah itu tidak akan bekerja? Kemudian jika saya dapat membuatnya secara otomatis beralih di antara mereka?

Nah saya bisa. Saya mengambil salah satu Arduino saya dan menulis program yang melakukan tepat itu – dan kemudian saya tergiur dan menambahkan beberapa fitur tambahan. Jadi inilah detail apa yang saya hasilkan. Versi ini disiapkan untuk hingga 6 baterai dengan sensing otomatis.

Ini akan bekerja dengan 1 hingga 6 baterai. Baterai pertama harus terhubung ke posisi nomor 1 – koneksi tersebut terikat ke pengatur tegangan yang memberi daya pada Arduino dan elektronika lainnya. Baterai ke-2 dan seterusnya kemudian dapat terhubung dalam urutan apa pun. Saat Anda menghubungkan baterai tegangan dihasilkan di fungsi Read_Show_Volts dan baterai itu ditambahkan ke siklus charge.

Cara kerjanya – saya ingin menampung 6 baterai. Dengan Arduino UNO A4 dan A5 analog input diperlukan untuk kontrol LCD 2 kabel dan itu menyisakan 4 analog input, terlalu sedikit. Jadi saya menghubungkan MCP-3008 8 channel analog inputs. Saya menggunakan 2 resistor 1k sebagai pembagi tegangan untuk setiap input ke MCP-3008.

Pada dasarnya ada 4 fungsi yang dipanggil dalam program.

Ada variabel untuk sebagian besar segalanya sehingga Anda dapat menyesuaikannya untuk kebutuhan Anda. Saya telah mengatur timer charge ke 1 jam per baterai. Jadi jika ada dua baterai yang terhubung itu akan charge masing-masing selama 1 jam setiap kali 12 kali sehari. Dengan 4 baterai itu akan menjadi 1 jam 6 kali sehari, dan seterusnya.

Selama saya memiliki HC-SR04 saya menambahkan rutinitas yang mengubah timer loop menjadi waktu yang lebih singkat – beberapa detik pada setiap baterai. Alasan saya melakukan ini adalah sehingga saya dapat melihat bahwa itu beralih di antara baterai dengan baik dan saya tidak perlu menunggu satu jam untuk melihatnya beralih. Jika Anda memegang tanganku di atas HC-SR04 selama beberapa detik itu memflash backlight lcd nyala dan mati sehingga Anda tahu itu beralih. Anda kemudian akan mendengar relay beralih setiap beberapa detik. Pegang tanganku di atas HC-SR04 lagi dan itu akan beralih kembali.

Berikut adalah zip dari kode: BatteryMultiplexer

Kode

Battery Multiplexer Arduino CodeArduino
Saya menggunakan Arduino Uno.
#include <Wire.h> #include <LiquidCrystal_I2C.h> // Using version 1.2.1 #include <timer.h> #include <HCSR04.h> auto timer = timer_create_default(); // create a timer with default settings // The LCD constructor - address shown is 0x27 - may or may not be correct for yours // Also based on YWRobot LCM1602 IIC V1 LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); int zcnt = 0; int acnt = 0; // general purpuse right now int chargeTime = (10 * 1000); // how much time to spend on each battery int charge_time_counter = 59; // how many chargetimes were passed? int charge_time_max = 60; // how many chargetimes were passed? int relay1 = 3; // each relay on it's own pin int relay2 = 4; int relay3 = 5; int relay4 = 6; int current_relay = 0; // which relay is the one on now? int max_relays = 3; // how may relays - 0 based. Start expecting all three. float volts1; // what's the voltage of each battery float volts2; float volts3; int min_volts = 1; // what is the minimum voltage a batter voltage should be to be charged. int volts_update_count = 5; // how often to update the voltage reading in seconds int volts_update_counter = 0; // track the count of seconds gone by int volts_update = (500); int read_distance_update = (500); // update the distance reader every millis int time_on_counter = 0; // counter for the display on/off int time_on_count = 100; //seconds to be on int heart_beat = 0; // flip this 0 to 1 to 0 to show the heart beat UltraSonicDistanceSensor distanceSensor(11, 12); // Initialize sensor that uses digital pins 13 and 12. int distance; int relays[] = { relay1, relay2, relay3 }; int is_live[] = { 0, 0, 0}; // 1 if live, 0 if not. I have only 3 int debug = 5; // set this to the level of debug msgs to go to the serial printer void all_change_to(int which) { // change all relays to HIGH or LOW, you tell me which:) digitalWrite(relay1, which); digitalWrite(relay2, which); digitalWrite(relay3, which); } void toggle_relays(int whichOne) { lcd.setCursor(0, 0); // show which relay is the current one on lcd.print("Relay on:"); lcd.print(current_relay + 1); // current_relay is zero based all_change_to(HIGH); // turn all off first digitalWrite(relays[current_relay], LOW); // and set the one that should be on on acnt++; // just a counter to show me it's working lcd.print(" "); lcd.print(acnt); } void checkRelays() { // move the current_relay to the next relay // if we hit the max, start at 0 // while you're here, call toggle_relays to make sure we're not charge a blank or dead one 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() { // reaad the distance of anything from the HC-S204 // if it's something within 80cm then turn the display on and reset the display on counter // if the counter is reached then nothing is within 80cm so turn the display off distance = distanceSensor.measureDistanceCm(); // uncomment these to see the actual distance measured // Serial.print("Distance in CM: "); // Serial.println(distance); if (distance < 80) { // can be anything under 200 for my system uncomment above and check yours lcd.backlight(); // turn display on time_on_counter = 0; } else { // maybe going off? time_on_counter++; if (time_on_counter > time_on_count) { time_on_counter = 0; lcd.noBacklight(); } } } void read_show_volts() { // read the volts at each battery input // then if less then min_volts, there is nothing there worth charging, skip that connection // this gets called over and over so if a wire gets knocked off or // whatever it won't be in the charge loop volts1 = analogRead(0); volts1 = (volts1 * 0.016); lcd.setCursor(0, 1); lcd.print(" "); // clear the line 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); // now test the voltages. If less than 10, then let's assume dead/bad or no battery // so take it out of rotation // start by clearing all relays out int temp_cnt = 0; // set all arrays to 0 - that's off relays[0] = 0; relays[1] = 0; relays[2] = 0; if (volts1 > min_volts) { relays[temp_cnt] = relay1; // relay 1 is good temp_cnt++; } if (volts2 > min_volts) { relays[temp_cnt] = relay2; // relay 2 is good temp_cnt++; } if (volts3 > min_volts) { relays[temp_cnt] = relay3; // relay 3 is good temp_cnt++; } max_relays = temp_cnt; // this is a heart bet on the lcd - just shows me it's running 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("Starting"); lcd.begin(16, 2); // sixteen characters across - 2 lines lcd.backlight(); pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); all_change_to(HIGH); // setup timers. 3 timers - the time to turn the charger on each battery, // how often to show the voltage update // and how often to check for distance read to turn on the display read_show_volts(); // do the first time so we don't have to wait for the timer. checkRelays(); timer.every(chargeTime, checkRelays); timer.every(volts_update, read_show_volts); } void loop() { timer.tick(); // tick the timer } 

Skematik

Skematik untuk multiplexerPengacara Baterai Cerdas Lanjutan dengan Multiplexing & Tampilan Digital


Proses manufaktur

  1. Smart Blinds: Kontrol Cahaya Otomatis dengan Arduino & Energi Surya
  2. Bangun Tabung Pintar: Kendalikan Penerima Koin dengan Arduino Nano
  3. Arduino Pemantau Suhu & Jam Real-Time dengan Layar TFT 3.2”
  4. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  5. Solusi Daya Teroptimasi untuk Proyek Arduino
  6. Proyek HMI Nextion Interaktif Menggunakan Arduino Mega dan Sensor
  7. Buat Voltmeter DIY dengan Arduino dan Layar Nokia 5110 – Panduan Langkah demi Langkah
  8. Kit Pelatihan Arduino Komprehensif dengan Mega 2560, Sensor, Motor, dan PCB Kustom
  9. Panduan Membangun Aplikasi Fridgeye dengan Tampilan Nextion: Langkah demi Langkah
  10. Pengukuran Radiasi Matahari Akurat dengan Arduino UNO dan Ethernet Shield