PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Arduino - Batterietester



wendtdir
11.07.2015, 13:24
Hallo,

als Elektronikeinsteiger habe ich mir das Buch Arduino-Workshops gekauft. Bei Projekt 6 hänge ich aber, da ich noch nie vorher einen Schaltplan gelesen, aber versucht habe genau nach diesem, meine Steckplatine aufzubauen.

Hier ist der Schaltplan:

30447

Hier, wie ich es gesteckt habe:

30448

Und hier noch ein Bild meines Aufbaus:

30449

Der Aufbau dient dazu zum Beispiel eine 1,5V AAA Batterie zu prüfen, welche Spannung sie noch liefert. Bei einem Wer von 1,5V und darüber soll grüne LED leuchten, bei kleiner 1,5V aber höher als 1,4V soll gelb leuchten und darunter dann rot.

Momentan leuchten nacheinander die drei LEDs, obwohl ich die Batterie zum testen nicht ranhalte. Wenn ich sie prüfen will, passiert nichts, nur die LEDs leuchten weiter, was sie vorher nicht mal gemacht haben.

Anbei noch der Sketch:


//Projekt 6 Testgerät für Einzelbatterien

#define newLED 2
#define okLED 4
#define oldLED 6

int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;



void setup() {
// put your setup code here, to run once:

pinMode (newLED, OUTPUT);
pinMode (okLED, OUTPUT);
pinMode (oldLED, OUTPUT);

}

void loop() {
// put your main code here, to run repeatedly:
analogValue = analogRead(0);
voltage = 0.0048*analogValue;

if (voltage >=1.5)

{
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW);

}

else if (voltage < 1.5 && voltage > 1.4)

{
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW);
}

else if (voltage <=1.4)

{
digitalWrite(oldLED, HIGH);
delay(ledDelay);
digitalWrite(oldLED, LOW);
}

}

Habe ich etwas beim Aufbau übersehen? Warum werden die LEDs nicht bei Anschluss der Batterie angesteuert? Die Batterie hat laut Multimeter ca. 1,599V.

Mxt
11.07.2015, 18:38
Hallo,

ich sehe jetzt auf den ersten Blick keinen Fehler. Außer das der Schutzdiode am Analogeingang im Controller ordentlich auf die Füße getreten wird, wenn man mal die Batterie falsch rum dranhält.

Den Sketch habe ich gerade mal etwas besser eingerückt und auf einen Uno geladen. Statt LEDs habe ich eine zusätzliche Ausgabe über Serial eingebaut:


const int newLED = 2;
const int okLED = 4;
const int oldLED = 6;

int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;

void setup() {
// put your setup code here, to run once:

pinMode (newLED, OUTPUT);
pinMode (okLED, OUTPUT);
pinMode (oldLED, OUTPUT);

Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
analogValue = analogRead(0);
voltage = 0.0048*analogValue;

if (voltage >=1.5)
{
Serial.write("New\r\n");
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW);
}
else if (voltage < 1.5 && voltage > 1.4)
{
Serial.write("Ok\r\n");
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW);
}
else if (voltage <=1.4)
{
Serial.write("Old\r\n");
digitalWrite(oldLED, HIGH);
delay(ledDelay);
digitalWrite(oldLED, LOW);
}
}

Er gibt immer nur "New" aus, wenn nichts angeschlossen ist. Das hatte ich auch so erwartet. Dass die LEDs nacheinander angehen, kann ich mir dabei eigentlich nicht vorstellen.

Sisor
12.07.2015, 00:02
Ich hab mit dem Programm ein wenig experimentiert. Bei mir hat AnalogIn0 ein anderes Verhalten, als die anderen. Vielleicht defekt? Auf jeden Fall funktioniert der Code so, wie er soll. (Hier AnalogIn 4 benutzt). Ich messe sowohl mit Arduino als auch mit Multimeter 1,44V an meiner Testbatterie.


#define LED_NEW 2
#define LED_OK 4
#define LED_OLD 6
#define VOLTAGE_IN 4

#define DELAY_LED 2000
// mit Multimeter gemessen: 5,07V zwischen GND-Pin und 5V-Pin
// mit Arduino gemessen: 1015 als Analogwert (A0) am 5V-Pin
#define VOLTAGE_FACTOR 5.07/1015

void setup() {
pinMode (LED_NEW, OUTPUT);
pinMode (LED_OK, OUTPUT);
pinMode (LED_OLD, OUTPUT);
Serial.begin(9600);
}

void switchLED(byte ledPin) {
digitalWrite(ledPin, HIGH);
delay(DELAY_LED);
digitalWrite(ledPin, LOW);
}

void loop() {
float voltage = VOLTAGE_FACTOR * analogRead(VOLTAGE_IN);
Serial.println(voltage);
if (voltage >= 1.5)
switchLED(LED_NEW);
else if (voltage < 1.5 && voltage > 1.4)
switchLED(LED_OK);
else
switchLED(LED_OLD);
}

wendtdir
12.07.2015, 12:11
Danke für die Antworten. Ich bin froh, dass ich die Schaltung doch wohl richtig nachgebaut habe. Als Anfänger ist man da immer unsicher.

Da es bei euch soweit geklappt hat, dachte ich mir heute Morgen, ich tausche einfach mal das Steckbrett aus. Ich habe noch eines von einem kleinen Elektronikbaukasten von Conrad da gehabt. Ich würde sagen, mein normales Brett ist defekt, denn mit dem kleinen aus dem Kasten funktioniert es wie es sein soll.

Ich habe die 1,5V drangehangen und es leuchtete grün, ich habe eine ältere aus meinem Asuro drangehangen und sie ward gelb.

Danke für die Hilfe. Thema geschlossen :).