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

Multiplekser Pengisi Daya Baterai Cerdas dengan Layar Cerdas

Komponen dan persediaan

Arduino UNO
× 1
Arduino Proto Shield
× 1
Sensor Ultrasonik - HC-SR04 (Generik)
× 1
Adafruit MCP-3008 8 saluran 10-bit Adc
× 1
Relai 5V - optocoupler 2 saluran
× 3
Modul Catu Daya LM2596 DC / DC BUCK 3A dapat disesuaikan
× 1
Resistor 1k ohm
× 12
6 Posisi Jalur Terminal
Periksa gambar - hampir semua jenis sistem koneksi dapat digunakan.
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Tentang proyek ini

Tinggal di Timur Laut jika Anda memiliki mobil tua atau perahu, atau mesin pemotong rumput atau kendaraan lain yang dimulai dengan baterai yang tidak Anda kendarai atau gunakan dalam cuaca buruk (beberapa menyebutnya musim dingin), Anda harus memutuskan apa yang harus dilakukan dengan baterai setiap musim. Jika Anda memiliki satu atau dua, itu cukup mudah – Anda bisa mendapatkan pengisi daya tetesan. Yang sederhana dan murah harganya di bawah $15 – tetapi sederhana – tidak ada umpan balik atau pemantauan baterai, mereka hanya memasukkan lebih dari 13 volt ke baterai. Pilihan yang lebih baik adalah salah satu pengisi daya pintar – pengisi daya biasanya memiliki pengisian daya yang lebih tinggi/lebih cepat secara reguler dan muatan salju atau tetesan yang menyesuaikan outputnya berdasarkan tegangan dan kondisi baterai. Mereka bekerja dengan sangat baik – Harbour Freight memiliki satu seharga $39 – tentu saja $29 dijual yang hampir selalu.

Jika saya menutup telepon, apakah saya memiliki MGB 1975 (dengan Oldsmobile V8 3,5 liter), pikap Toyota 1981, perahu, dan generator – semuanya dengan baterai 12 volt. Dan kemudian jika kami pergi di musim dingin, kami meninggalkan salah satu mobil di sini sehingga ada baterai lain. Yah, saya harus membeli 5 pengatur baterai – $150 jika saya ingin membeli yang HF.

Sambil memikirkan hal ini saya pikir saya mendapatkan satu untuk setiap baterai, memakainya, itu membawa baterai ke tingkat dan kemudian hanya memantau dan meneteskan biaya untuk sisa waktu. Jadi ide muncul di benak saya – mengapa saya tidak dapat menghubungkannya ke setiap baterai beberapa jam sehari – tidakkah itu akan berhasil? Lalu apakah saya bisa membuatnya secara otomatis beralih di antara mereka?

Aku bisa. Saya mengambil salah satu Arduino saya dan menulis sebuah program yang melakukan hal itu – dan kemudian saya terbawa dan menambahkan beberapa fitur tambahan. Jadi di sini saya menyajikan detail tentang apa yang saya dapatkan. Versi ini disiapkan untuk hingga 6 baterai dengan penginderaan otomatis.

Ini akan bekerja dengan 1 hingga 6 baterai. Baterai pertama harus disambungkan ke tempat nomor 1 – sambungan itu diikat ke pengatur tegangan yang memberi daya pada Arduino dan elektronik lainnya. Yang ke-2 dan lebih tinggi kemudian dapat dihubungkan dalam urutan apa pun. Saat Anda menghubungkan baterai, tegangan akan terdeteksi dalam fungsi Read_Show_Volts dan baterai tersebut ditambahkan ke siklus pengisian daya.

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

Pada dasarnya ada 4 fungsi yang dipanggil dalam program.

  • Fungsi read_show_volts memeriksa setiap koneksi untuk melihat apakah ada baterai yang terhubung dengan menguji lebih dari 8 volt yang tersedia. Jika ada 8v atau lebih, koneksi tersebut akan ditambahkan ke loop pengisian daya.
  • Fungsi check_relays memeriksa penghitung waktu dan ketika mencapai maksimum, pengisi daya akan dipindahkan ke relai berikutnya.
  • Fungsi update_display melakukan hal itu – memperbarui tampilan. Pertama itu menunjukkan tegangan pada koneksi 1, 2 pada saluran 1 dan tegangan koneksi 3 dan 4 pada saluran 2. Kemudian ketika pengatur waktu memberi tahu itu berubah dan menampilkan tegangan koneksi 5 dan 6 pada saluran 1 dan karena saya punya dua input analog tambahan Saya menunjukkan tegangan sistem (semoga 5 volt) dan tegangan iref – 3,3 volt. Pembacaan itu tidak diperlukan tetapi ada baris kosong dan saya tidak tahu harus menunjukkan apa lagi – saya terbuka untuk ide.
  • Fungsi terakhir adalah read_distance_update . Yang ini menarik dan paling menyenangkan untuk dimainkan. Saya memasang unit pengukur jarak sonar ultrasonik HC-SR04. Saya ingin lcd untuk memantau voltase tetapi saya hampir tidak pernah berdiri di sana melihat lcd - sebagian besar waktu dapat dimatikan. Saya bisa saja menyalakan saklar – jalan keluar yang mudah – tetapi yang saya lakukan adalah memasang HC-SR04 dan setelah beberapa detik mematikan lcd. Kemudian ketika saya meletakkan tangan saya di atas HC-SR04, saya menyalakan kembali lcd selama x detik.

Ada variabel untuk hampir semua hal sehingga Anda dapat menyesuaikannya juga sesuai kebutuhan Anda. Saya telah mengatur timer pengisian ke 1 jam per baterai. Jadi jika ada dua baterai yang terhubung maka akan diisi 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 loop timer ke waktu yang lebih singkat – beberapa detik pada setiap baterai. Alasan saya melakukan ini adalah agar saya dapat melihat bahwa itu beralih di antara baterai OK dan saya tidak perlu menunggu satu jam untuk melihatnya beralih. Jika Anda memegang tangan Anda di atas HC-SR04 selama beberapa detik, lampu latar lcd akan menyala dan mati sehingga Anda tahu itu menyala. Anda kemudian akan mendengar relai beralih setiap beberapa detik. Pegang tangan Anda di atas HC-SR04 lagi dan itu akan beralih kembali.

Ini kode posnya:BatteryMultiplexer

Kode

  • Kode Arduino Multiplexer Baterai
Kode Arduino Multiplexer BateraiArduino
Saya menggunakan Arduino Uno.
#include #include  // Menggunakan versi 1.2.1#include #include auto timer =timer_create_default(); // buat pengatur waktu dengan pengaturan default// Konstruktor LCD - alamat yang ditampilkan adalah 0x27 - mungkin atau mungkin tidak benar untuk Anda// Juga berdasarkan YWRobot LCM1602 IIC V1LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIF);int zcnt =0;int acnt =0; // tujuan umum sekarang:chargeTime =(10 * 1000); // berapa banyak waktu yang dihabiskan untuk setiap bateraiint charge_time_counter =59; // berapa banyak waktu pengisian yang dilalui?int charge_time_max =60; // berapa banyak waktu pengisian yang dilalui?int relay1 =3; // setiap relay pada pinint relay2 =4;int relay3 =5;int relay4 =6;int current_relay =0; // relay mana yang sekarang?int max_relays =3; // bagaimana relay - berbasis 0. Mulailah mengharapkan ketiganya.float volts1; // berapa tegangan masing-masing bateraifloat volts2;float volts3;int min_volts =1; // berapa tegangan minimum yang harus diisi oleh tegangan baterai.int volts_update_count =5; // seberapa sering untuk memperbarui pembacaan tegangan dalam detikint volts_update_counter =0; // melacak hitungan detik yang berlalu int volts_update =(500);int read_distance_update =(500); // perbarui pembaca jarak setiap milisint time_on_counter =0; // counter untuk tampilan on/offint time_on_count =100; //detik menjadi onint heart_beat =0; // balikkan 0 ke 1 ke 0 untuk menunjukkan detak jantungUltraSonicDistanceSensor distanceSensor(11, 12); // Inisialisasi sensor yang menggunakan pin digital 13 dan 12.int distance;int relay[] ={ relay1, relay2, relay3 };int is_live[] ={ 0, 0, 0}; // 1 jika hidup, 0 jika tidak. Saya hanya punya 3int debug =5; // set ini ke level debug msgs untuk masuk ke serial printervoid all_change_to(int which) { // ubah semua relay ke HIGH atau LOW, beri tahu saya yang mana :) digitalWrite(relay1, which); digitalWrite(relay2, yang); digitalWrite(relay3, which);}void toggle_relays(int whichOne) { lcd.setCursor(0, 0); // tampilkan relay mana yang sedang aktif di lcd.print("Relay aktif:"); lcd.print(current_relay + 1); // current_relay berbasis nol all_change_to(HIGH); // matikan dulu digitalWrite(relays[current_relay], LOW); // dan atur yang seharusnya aktif di acnt++; // hanya penghitung untuk menunjukkan itu berfungsi lcd.print(" "); lcd.print(acnt);}void checkRelays() { // pindahkan current_relay ke relay berikutnya // jika kita mencapai maksimum, mulai dari 0 // saat Anda di sini, panggil toggle_relays untuk memastikan kita tidak mengisi satu kosong atau mati charge_time_counter++; if (penghitung_waktu_pengisian>=biaya_waktu_maks) { current_relay++; if (relai_saat ini>=relai_maks) { relai_saat ini =0; } toggle_relays(relay_saat ini); charge_time_counter =0; }}void read_distance() { // membaca jarak apapun dari HC-S204 // jika jaraknya 80cm maka hidupkan display dan reset display pada counter // jika counter tercapai maka tidak ada jarak 80cm jadi matikan tampilan jarak =distanceSensor.measureDistanceCm(); // batalkan komentar ini untuk melihat jarak sebenarnya yang diukur // Serial.print("Jarak dalam CM:"); // Serial.println(jarak); if (jarak <80) { // bisa apa saja di bawah 200 untuk sistem saya batalkan komentar di atas dan periksa milik Anda lcd.backlight(); // aktifkan tampilan pada time_on_counter =0; } else { // mungkin mati? time_on_counter++; if (time_on_counter> time_on_count) { time_on_counter =0; lcd.noBacklight(); } }}void read_show_volts() { // baca volt di setiap input baterai // lalu jika kurang dari min_volts, tidak ada yang layak diisi, lewati koneksi itu // ini dipanggil berulang-ulang jadi jika kabel putus atau // apa pun yang tidak akan ada di loop muatan volts1 =analogRead(0); volt1 =(volt1 * 0,016); lcd.setCursor(0, 1); lcd.print(""); // hapus baris lcd.setCursor(11, 0); lcd.print(volt1); volt2 =analogBaca(1); volt2 =(volt2 * 0,0164); lcd.setCursor(4, 1); lcd.print(volt2); volt3 =analogBaca(2); volt3 =(volt3 * 0,0166); lcd.setCursor(11, 1); lcd.print(volt3); // sekarang uji voltase. Jika kurang dari 10, maka mari kita asumsikan mati/rusak atau tidak ada baterai // jadi keluarkan dari rotasi // mulai dengan menghapus semua relai int temp_cnt =0; // setel semua array ke 0 - itu mati relay[0] =0; relai[1] =0; relai [2] =0; if (volt1> min_volts) { relai[temp_cnt] =relai1; // relai 1 bagus temp_cnt++; } if (volt2> min_volts) { relai[temp_cnt] =relai2; // relai 2 bagus temp_cnt++; } if (volt3> min_volts) { relai[temp_cnt] =relai3; // relai 3 bagus temp_cnt++; } max_relays =temp_cnt; // ini adalah taruhan hati pada lcd - tunjukkan saja lcd.setCursor(0, 1); if (detak jantung ==1) { lcd.print("<>"); detak_jantung =0; } else { lcd.print("><"); detak_jantung =1; } lcd.print(penghitung_waktu_pengisian); read_distance();}pengaturan batal(){ Serial.begin(19200); Serial.println("Mulai"); lcd.begin(16, 2); // enam belas karakter melintang - 2 baris lcd.backlight(); pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); semua_ubah_ke(TINGGI); // mengatur pengatur waktu. 3 timer - waktu untuk menyalakan pengisi daya pada setiap baterai, // seberapa sering menampilkan pembaruan tegangan // dan seberapa sering memeriksa jarak baca untuk menyalakan tampilan read_show_volts(); // lakukan pertama kali sehingga kita tidak perlu menunggu timer. checkRelay(); timer.every(chargeTime, checkRelays); timer.every(volts_update, read_show_volts);}void loop(){ timer.tick(); // centang pengatur waktu}

Skema

Skema untuk multiplexer

Proses manufaktur

  1. Smart Blinds
  2. Kontrol Penerima Koin dengan Arduino
  3. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  4. Arduino dengan Bluetooth untuk Mengontrol LED!
  5. Arduino Power
  6. Bermain Dengan Tampilan Berikutnya
  7. Voltmeter DIY dengan Arduino dan Tampilan Nokia 5110
  8. Platform Pelatihan Arduino
  9. Buat Aplikasi Fridgeye dengan Tampilan Berikutnya
  10. Mengukur Radiasi Matahari dengan Arduino