/*
Code สำหรับจับเวลาให้การชาร์จแบตเตอร์ สำหรับโซล่าเซล กรณีที่มีแบตหลายลูก แต่มีแผงโซล่า 1 แผง
ซึ่งถ้าเราต่อชาร์จแบตแบบ ขนานหลายลูกพร้อมกันจะทำให้ใช้เวลาในการชาร์จ นานขึ่น จึงจะเต็ม ดังนั้นเราจึงเลือกชาร์จครั้งละ 1 ลูก
ทำให้ใช้เวลาชาร์จน้อยลง แล้วหมุนเวียนไปชาร์จลูกอื่นต่อไป ถ้าไฟ control ดับ จะเริ่มจับเวลาใหม่ ในbatt ลูกเดิม โดยใช้ <EEPROM.h> เก็บสถานะเดิม
สามารถเพิ่มจำนวน batt ชาร์จได้สูงสุดเท่าที่ขาของ arduino มี
*/
#include <EEPROM.h>
int address = 1;
byte value;
unsigned long timer; // the timer
unsigned long INTERVAL_6 = 60000*1;// กำหนดเวลาที่จะให้ ON 1 นาที ของแต่ละช่อง
unsigned long INTERVAL_7 = 60000*1;// กำหนดเวลาที่จะให้ ON 1 นาที ของแต่ละช่อง
unsigned long INTERVAL_8 = 60000*1;// กำหนดเวลาที่จะให้ ON 1 นาที ของแต่ละช่อง
unsigned long INTERVAL_9 = 60000*1;// กำหนดเวลาที่จะให้ ON 1 นาที ของแต่ละช่อง
int Batt_Grid_pin6 = 6;//batt1
int Batt_Grid_pin7 = 7;//batt2
int Batt_Grid_pin8 = 8;//batt3
int Batt_Grid_pin9 = 9;//batt4
void setup()
{
Serial.begin(9600);
pinMode( Batt_Grid_pin6, OUTPUT);
pinMode( Batt_Grid_pin7, OUTPUT);
pinMode( Batt_Grid_pin8, OUTPUT);
pinMode( Batt_Grid_pin9, OUTPUT);
// EEPROM.write(address, 6);// ตั้งค่าจะให้เริ่มต้นที่ batt ลูกไหนก่อน
value = EEPROM.read(address);
}
void loop()
{
Batt_changer();
delay(500);
}
void Batt_changer()
{
value = EEPROM.read(address);
Serial.println(" -------- Batt_ON "+String(value));
value = EEPROM.read(address);
switch (value) {
case 6:
Serial.println(" ------- ***** Batt_ON = 6");
digitalWrite(Batt_Grid_pin6, 1);
if( (millis() - timer) > INTERVAL_6 )
{
Serial.println(" ------- ***** Batt_OFF => 6");
Serial.println(" ------- ***** Batt_ON 7");
EEPROM.write(address, 7);
digitalWrite(Batt_Grid_pin6, 0);
timer = millis(); // สั่งให้ start timer
}
break;
case 7:
Serial.println(" ------- ***** Batt_ON = 7");
if( (millis() - timer) > INTERVAL_7 )
{
Serial.println(" ------- ***** Batt_OFF = >7");
Serial.println(" ------- ***** Batt_ON 8");
EEPROM.write(address, 8);
timer = millis(); // สั่งให้ start timer
}
break;
case 8:
Serial.println(" ------- ***** Batt_ON = 8");
if( (millis() - timer) > INTERVAL_8 )
{
Serial.println(" ------- ***** Batt_OFF => 8");
Serial.println(" ------- ***** Batt_ON 9");
EEPROM.write(address, 9);
timer = millis(); // สั่งให้ start timer
}
break;
case 9:
Serial.println(" ------- ***** Batt_ON = 9");
if( (millis() - timer) > INTERVAL_9 )
{
Serial.println(" ------- ***** Batt_OFF = >9");
Serial.println(" ------- ***** Batt_ON 6");
EEPROM.write(address, 6);
timer = millis(); // สั่งให้ start timer
}
break;
}//switch (value) {
}//void Batt()
//อาจจะเพิ่มในส่วนของการเช็คว่า volt เต็มยัง ถ้าเต็มก็ช้ามไปชาร์จลูกต่อไปได้
เพิ่มวงจรวัดโวลต์ให้
http://arduinotronics.blogspot.com/2011/03/monitoring-voltage-of-dc-battery-supply.html
http://electronics.stackexchange.com/questions/93416/relevance-of-amperage-in-a-voltage-divider-circuit
ขอบคุณครับ