Arduino sant batteri kapacitet testare (Li-Li-Ion/NiMH/NiCD/Pb) (9 / 11 steg)
Steg 9: Min SW (gratis för alla att använda)
inkludera bibliotek-koden:#include
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); / / starta biblioteket med numrerar av gränssnittet stiften
int sensorPin = 0; Välj input PIN-koden för potentiometer (PIN-kod 23)
int sensor2Pin = 2; Välj input PIN-koden för potentiometer (PIN-kod 23)
int ledPin = 13. Välj den PIN-kod för LED
int SPKPin = 6;
int sensorValue = 0; variabel för att lagra värdet kommer från sensorn
int sensor2Value = 0; variabel för att lagra värdet kommer från sensorn
flyta LiMinThreshold = 2700; Litium Minimal spänning för borttagning av belastning
flyta LiMaxThreshold = 4200; Litium Max Voltage för borttagning av belastning
flyta NmhMinThreshold = 950; NMH Minimal spänning för borttagning av belastning
flyta NmhMaxThreshold = 1600; NMH Max Voltage för borttagning av belastning
flyta SelectedMinThreshold = 5000;
int i;
int BatVoltage = 5000;
int FetVoltage = 5000;
lång TotalCurrent = 0;
boolean = false;
osignerade långa PrevMillis;
osignerade långa MillisPassed;
void CL2() {
lcd.setCursor (0, 1); / / andra line första röding
LCD.Print("");
lcd.setCursor (0, 1); / / andra line första röding
}
void setup() {
Serial.BEGIN(9600); / / start seriell port för att skicka data under körning till PC
pinMode (ledPin, produktionen); //activation ledde och möjliggöra för FET
pinMode (SPKPin, OUTPUT); //activation ledde och aktivera för FET
LCD.BEGIN (24, 2); / / Ställ in den LCD antal rader och kolumner:
LCD.Print ("Bat PWR Tester[Active]"); Skriv ut ett meddelande till LCD-skärmen.
lcd.setCursor (0, 1); / / andra line första röding
LCD.Print ("upptäcka Bat typ..."); skriva ut spänning värde
Delay(2000);
lcd.setCursor (0, 1); / / andra line första röding
LCD.Print("");
lcd.setCursor (0, 1); / / andra line första röding
digitalWrite (ledPin, hög); ställa in lysdioden på
sensorValue = analogRead(sensorPin); Läs värdet från sensorn:
digitalWrite (ledPin, låg); iväg för LED
Upptäcka batterityp
BatVoltage = sensorValue * 4.887;
om (BatVoltage > 4500) {
LCD.Print ("varning high-V!");
= sant;}
annars om (BatVoltage > LiMinThreshold) {
LCD.Print ("typ: Li-Ion Bat");
SelectedMinThreshold = LiMinThreshold;}
annars om (BatVoltage > NmhMinThreshold) {
LCD.Print ("typ: NiMH/Cd Bat");
SelectedMinThreshold = NmhMinThreshold;}
annat {
LCD.Print ("okänd Bat V < 1");
= sant;}
LCD.Print("V=");
LCD.Print(sensorValue*4.887); skriva ut spänning värde
Serial.Print("DT[MS]");
Serial.Print("\t");
Serial.Print("bat[MV]");
Serial.Print("\t");
Serial.Print("fet[MV]");
Serial.println("");
Delay(3000);
CL2();
PrevMillis = millis();
}
void loop() {
om (BatVoltage > SelectedMinThreshold & &! gjort) {
digitalWrite (ledPin, hög); ställa in lysdioden på
sensorValue = analogRead(sensorPin); Läs värdet från sensorn:
sensor2Value = analogRead(sensor2Pin); läsa värdet från FET:
FetVoltage = (sensor2Value * 4.887);
BatVoltage = (sensorValue * 4.887);
CL2();
LCD.Print("V=");
LCD.Print(BatVoltage); skriva ut spänning värde
LCD.Print("MV");
LCD.Print(FetVoltage); skriva ut spänning värde
TotalCurrent = TotalCurrent + MillisPassed/1000 *(BatVoltage-FetVoltage)/2,2/3.6;
LCD.Print ("jag =");
LCD.Print(TotalCurrent/1000);
LCD.Print ("mAH");
Delay(1000);
MillisPassed = millis()-PrevMillis;
PrevMillis = millis();
Serial.Print(int(MillisPassed));
Serial.Print("\t"); skriver ut en flik
Serial.Print(BatVoltage);
Serial.Print("\t"); skriver ut en flik
Serial.Print(FetVoltage);
Serial.println(""); skriver ut en flik
CL2();
}
annat
{
= sant;
digitalWrite (ledPin, låg); iväg för LED - stoppa lastning
lcd.setCursor (0, 0); / / första linje första röding
LCD.Print ("Bat Power testare [klar]"); Skriv ut ett meddelande till LCD-skärmen.
(CL2); //clear linje 2
sensorValue = analogRead(sensorPin); Läs värdet från sensorn:
BatVoltage = (sensorValue * 4.887);
lcd.setCursor (0, 1); / / andra line första röding
LCD.Print("V=");
LCD.Print(BatVoltage); skriva ut spänning värde
LCD.Print ("mV jag =");
LCD.Print(TotalCurrent/1000);
LCD.Print ("mAH");
för (int jag = 0; jag < 100; i ++) {
digitalWrite (SPKPin, hög);
Delay(1);
digitalWrite (SPKPin, låg);
Delay(1);
}
Delay(1000);
}
}