Oops... forgot the code :![]()
Here it is
//Battery monitoring V1 Basic edition
// Copyleft KAS November 2009
#define VMIN 700 // Battery protection Vmin > WMIN
#define WMAX 2000 // Transistor protection Wmax < WMAX
#define LOOP 2000 // loop time (ms)
#define Vpin 0 // battery voltage pin
#define Apin 1 // Amp reading pin
#define RELAY 3 // relay pin
long loopTime = LOOP;
long loopUsedTime = LOOP;
long loopStart = 0;
float mVolt = 0;
float mAmp = 0;
float mW = 0;
float mAmpH = 0;
long loopCount = 0;
boolean testOn = false;
void setup() {
Serial.begin(19200);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY,HIGH); // Close relay
testOn = true;
delay(100);
}
void loop() {
loopStart = millis();
mVolt = getmVolts();
mAmp = getmAmps();
mW = (mAmp * mVolt) /1000;
mAmpH += mAmp * loopTime / 3600 /1000;
if(testOn) display();
else while(1); // Loops forever
testStop(VMIN, WMAX);
loopCount++;
loopUsedTime = millis()-loopStart;
if(loopUsedTime < LOOP) delay(LOOP - loopUsedTime);
loopTime = millis() - loopStart;
}
int getmVolts() {
return int(analogRead(Vpin)*4.8828125); // read the battery voltage
}
int getmAmps() {
return int(analogRead(Apin)*4.8828125/0.47); // read the Amps
}
void display() {
Serial.print(loopCount/(60000/LOOP)); Serial.print(":");
if(((loopCount%(60000/LOOP))*LOOP/1000)<10) Serial.print("0");
Serial.print((loopCount%(60000/LOOP))*LOOP/1000); Serial.print(" ");
Serial.print((int)mVolt); Serial.print(" mV ");
Serial.print((int)mAmp); Serial.print(" mA ");
Serial.print((int)mW); Serial.print(" mW ");
Serial.print((int)mAmpH); Serial.println(" mAh");
}
void testStop(float Vmin, float Wmax) {
if((mVolt < Vmin)||(mW > Wmax))
{ digitalWrite(RELAY,LOW); // disconnect tested battery
testOn = false;
Serial.println("Stop");
}
}