Solar Panel mit Batterie anzeige

Hallo,
Infos zum Projekt:

Ich habe mir vor ein paar tagen einen Elegoo MEGA zugelegt und habe mir jetzt folgendes Projekt in den Kopf gesetzt:

Ich möchte mit einem Panel eine Batterie aufladen, aber sobald es dunkel ist soll das solar Panel praktisch vom der Batterie getrennt sein(Dies auch mit einer LED darstellen).

Akku Anzeige 6 LEDs (2 Grüne, 2 Orangen 2, Rote),
Solar Panel AN/AUS LED (Nur leuchten wenn Nacht ist),
2 LEDs die anzeigen ob eine Batterie eingelegt ist

Wie könnte man das Realisieren?

Dominik1313:
Wie könnte man das Realisieren?

Meinst du diese Frage ernst ?

Sketch schreiben und deine Schaltung zusammen bauen.
Sketch aufspielen und hoffen, dass er funktioniert.

Du könntest einen Solarladeregler mittels Modbus auslesen und dann die LEDs entsprechend schalten.

Woher kommt der Strom für die LEDs für
2 LEDs die anzeigen ob eine Batterie eingelegt ist

wenn keine Batterie angeschlossen ist?

ich denke du sollst deine Anforderungen noch einmal genau überdenken und besser beschreiben.

Du könntest deinen Eingangspost editieren mit Teilen aus diesem Text

Dominik:
Ich möchte das ein Solar Panel einen Akku Block mit 2 AAA Batterien aufläd und in der Nacht die 2 AKKUS einspringen z. B. für einen kleinen Motor oder eine LED...

Den Füllstand der beiden Akkus soll über eine 6 stellige LED anzeige (2 Rote 2 Orange, 2 Grüne) dargestellt werden. Es soll außerdem mit einer RGB LED angezeigt werden in was für einem Status das System ist "Rot ...."

Rot: wenn die Batterie nicht eingelegt ist
Orange ...

Wie könnte man das machen das wenn die Batterie nicht eingelegt ist das eben die und die Lampe leuchtet

... oder auf die aufgeworfenen Fragen (Wie soll das gehen ohne Batterien) antworten.

Batterie-Laderegler kann, z.B. bei LiPo - Akkus, relativ riskant sein.
Ich würde daher die Akkus über einen fertigen und zuverlässigen Laderegler laden, und höchstens zum Spaß zu Informationszwecken die Batteriespannung messen und in eine LED-Anzeige umwandeln, wenn der Laderegler das nicht zufriedenstellend kann.

weiters Problem ist das ich die Spannung garnicht erst messen kann.
Ich habe mein Batterie fach an pin A0 gesteckt und GND zu GND auf dem arduino.
//so habe ich die Volt umgerechnet
voltage = sensorValue * (5.0 / 1023.0)

wenn alle 2 batterien eingelgt ist stimmt die Volt komischer weise :smiley:

Folgende zahlen kommen raus wenn keine Batterie eingelegt ist:
3.36
1.67
0.97
3.24
2.40
0.78
2.98
2.83
0.66
2.35
3.07
0.80
1.60
3.25

Wenn ich den stecker von A0 Ziehe kommt das:
1.39
1.40
1.45
1.40
1.39
1.45
1.41
1.39
1.44
1.43
1.38
1.43
1.44

weiters Problem ist das ich die Spannung garnicht erst messen kann.

analogRead(A0); wird gern mal als Zufallszahlengenerator verwendet. Insbesondere, wenn man einen losen Draht anschließt. Man kann oft etwas mit 50 Hz Schwankendes erkennen und versuchen sich (in Alufolie gewickelt) vor Elektrosmog zu schützen.

Dann ist der Eingang offen und dein Kabel ist eine Antenne, die alles drumherum empfängt, u.a. sehr viele Störungen.
Da solltest du mit einem Spannungsteiler arbeiten.

Das habe ich schon gemerkt wenn ich mit meinem headset näher gekommen bin hat sich immer was verändert.
Kann mir einer sagen wie ich das machen mit dem Spannungsteiler?

Dominik1313:
Das habe ich schon gemerkt wenn ich mit meinem headset näher gekommen bin hat sich immer was verändert.
Kann mir einer sagen wie ich das machen mit dem Spannungsteiler?

Weißt du nicht, was ein Spannungsteiler ist ?

Und schön wäre es auch, wenn du unsere Fragen beantwortest, wir beantworten deine doch auch.

Doch weiß ich aber der Eingang kann doch problemlos 5V ab, und ich habe nur 3.12V anliegen.. Für was dann ein Spannungsteiler?

Dominik1313:
Doch weiß ich aber der Eingang kann doch problemlos 5V ab, und ich habe nur 3.12V anliegen.. Für was dann ein Spannungsteiler?

Dann ist ja gut.
Warum nimmst du dann nicht einen Widerstand ?
10k ist da ok.

Also bevor ich mit + in den eingang geh einen R1 = 10k und den dann auf GND?

Dominik1313:
Also bevor ich mit + in den eingang geh einen R1 = 10k und den dann auf GND?

Das mit "bevor" verstehe ich nicht.

Der Widerstand kommt parallel zum Eingangspin.
Also einen Anschluss des Widerstandes an den Pin und den anderen auf GND.

Ach und das mit den Fragen beantworten ignorierst du gewissenhaft.

Welche frage meinst du genau?

Ich jetzt den 10k eingebaut jetzt bekomm ich als ausgabe 0.00V wenn beide batterien angeschlossen sind?

Mein sketch:

Du solltest immer alles in deinen Threads durchlesen.
Und so ist es, wenn man 2 Threads eröffnet.

Wenn er mit Batterien nur 0 anzeigt, hast du etwas falsch gemacht.

Und poste deinen Sketch hier im Forum in Code-Tags, damit nichts verloren geht und jeder den Sketch lesen kann.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.

int statusledok = 12; //Grüne status LED wenn battery eingelegt ist
int statusledfail = 8; //Rote status LED wenn keine battery eingelegt ist
int batterylowVoltageled = 9;
int batterymidVoltageled = 10; 
int batteryfullVoltageled = 11; 
int sensorValue = A0;
//int batteryValue = 0;


//1,4 - 1,6 V keine battery
void setup(){

  Serial.begin(9600);
  pinMode(statusledok, OUTPUT);
  pinMode(statusledfail, OUTPUT);
  pinMode(batterylowVoltageled, OUTPUT);
  pinMode(batterymidVoltageled, OUTPUT);
  pinMode(batteryfullVoltageled, OUTPUT);
  pinMode(sensorValue, INPUT);
  
}
void loop(){

  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);

  if(voltage >= 0.00 && voltage <= 0.30) {
    digitalWrite(statusledok, LOW);
      digitalWrite(batterylowVoltageled, LOW);
       digitalWrite(batterymidVoltageled, LOW);
        digitalWrite(batteryfullVoltageled, LOW);
    blinkfailbattery();
    
  }

  if(voltage >= 0.40 && voltage <= 0.90){
    digitalWrite(statusledok, HIGH);
     digitalWrite(statusledfail, LOW);
    //digitalWrite(batterylowVoltageled, LOW);
       digitalWrite(batterymidVoltageled, LOW);
        digitalWrite(batteryfullVoltageled, LOW);
    blinklowVolatage();
  }
  
  if(voltage >= 1.00 && voltage <= 1.80){
    digitalWrite(statusledok, HIGH);
     digitalWrite(statusledfail, LOW);
      digitalWrite(batterylowVoltageled, LOW);
       digitalWrite(batterymidVoltageled, LOW);
        digitalWrite(batteryfullVoltageled, LOW);
  }
  if(voltage >= 2.00 && voltage <= 2.5) {
    digitalWrite(statusledok, HIGH);
     digitalWrite(statusledfail, LOW);
      digitalWrite(batterylowVoltageled, LOW);
       digitalWrite(batterymidVoltageled, HIGH);
        digitalWrite(batteryfullVoltageled, LOW);
  }

  if(voltage >= 2.6 && voltage  <= 5.00){
        digitalWrite(statusledok, HIGH);
     digitalWrite(statusledfail, LOW);
      digitalWrite(batterylowVoltageled, LOW);
       digitalWrite(batterymidVoltageled, LOW);
        digitalWrite(batteryfullVoltageled, HIGH);
  }
}



void blinklowVolatage(){
  digitalWrite(batterylowVoltageled, HIGH);
  delay(300);
  digitalWrite(batterylowVoltageled, LOW);
  delay(300);
  
  
}
void blinkfailbattery(){
  digitalWrite(statusledfail, HIGH);
  delay(300);
  digitalWrite(statusledfail, LOW);
  delay(300);
}

Du meintest vorhin das ich fragen nicht beantworte.. Was hast du damit gemeint?

Dominik1313:
Du meintest vorhin das ich fragen nicht beantworte.. Was hast du damit gemeint?

Meine Frage im ersten Thread.
Aber jetzt wird es spannend, 3 Threads zum selben Thema.....super.

Hi

Was könnte damit gemeint sein, daß Du nicht alle Fragen beantwortet hast?
Wahrscheinlich, daß in einem der 16 Post's über Deinem eine Frage zu Deinem Problem steht, Die noch auf Antwort wartet ... ok, Das habe ich mir nun nur aus den Fingern gezogen, möchte aber wetten, daß Das genau so passt.

So, zu Deinem Sketch.
Was mir aufgefallen ist - Du fragst die Spannung, unter Anderem, mit if >=0.00 ab ... was soll Das bringen?
Welche Werte erwartest Du, wenn Du mit einem ADC-Wert (0...1023) eine positive Zahl multiplizierst?
Ich wurde irgendwas größer-gleich Null erwarten - somit ist die IF zumindest verbesserungswürdig (da immer true unnötig).

Was passiert zwischen 0.30 und 0.40??
Laut Seinem Sketch ... Nichts!

Die delay() in Deinem Blink-Funktionen stören akut nicht sonderlich - trotzdem solltest Du Dir überlegen, ob man Das nicht auch anders hinbekommen kann.
Auch, da beide Funktionen nahezu das Gleiche machen, könnte man Diese zusammen fassen und mit einem Parameter entscheiden, welche LED nun blinken soll (oder wie schnell).
... wobei Das bei 2 digital.Write + delay nicht unbedingt kürzeren Code bedeuten muß ...

Deine Probleme sind:

  • Verhindern, daß am A0 'Müll' anliegt - geht per externem Pull-Down
  • die Lücken in den Anzeigen schließen (>=0 <X, >=X <Y, >=Y <Z ...)
  • delay raus (noch kein Muss)
  • Mache Dir Gedanken, ob Du überall 'int' benötigst oder ob es 'bessere' Datentypen gibt
  • was const ist, mache auch const - LED-Pins werden sich zur Laufzeit wohl nicht ändern
  • drücke STRG+T in der IDE - Das rückt den Sketch entsprechend der Klammer-Ebenen ein

MfG

PS: Drei Threads?? ... dann werde ich wohl gleich noch Einen finden ...