Solar-Nachführung

Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Max »

Servus Franz,

das Panel ist unterwegs. :(iii):
Die DS3231 habe ich bestellt, die sind ja kompatibel
zum RTC1303.
Ich glaube, dass ich damit besser fahre als mit GPS.

Gruß
Max
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

OK, dann warte ich noch bis das bei dir läuft und mache dann meinen Programmteil mit dem Rücklauf zum Morgenstart und dem Endschalter, noch rein. Mit der Uhr ohne GPS kann ich das ja dann das Programm komplett testen. Da habe ich einen Nano mit RTC DS3231 als Testkonsole am laufen.

Servus
Franz
Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Max »

Hallo Franz,

die RTC DS3231 habe ich eingebaut und siehe da, es funzt.
Das ist das momentan verwendete Programm.

Code: Alles auswählen

// Programm zur Solarsteuerung mit DS 3231 Modul

#include "RTClib.h"
RTC_DS3231 rtc;
 int mot1 = 5;
 int mot2 = 6;
 int schalter = 4; 
 int pwm = 9; 
 int buttonState = 0; 
 
void setup () {
  Serial.begin(9600);
    pinMode (mot1, OUTPUT);
  pinMode (mot2, OUTPUT);
  pinMode(schalter, INPUT_PULLUP);
   digitalWrite(pwm,HIGH); //
  buttonState = digitalRead(schalter);
#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }
    Serial.println("Setting the time...");
     rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
void stopp(){
   if (digitalRead(schalter) == 0){
    digitalWrite(mot2, LOW);
    Serial.println("Endschalter");
  } 
}
void loop () {
    DateTime now = rtc.now();
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
//    Serial.print(rtc.getTemperature());
//    Serial.println(" C");
    Serial.println();
    Serial.println();
    
if (now.hour()== 8 && now.minute()== 0 && now.second()==0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 8 && now.minute()== 0 && now.second()== 14) {digitalWrite(mot1, LOW);} // Stopp
 
if (now.hour()== 9 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 9 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp 

if (now.hour()== 10 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 10 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 11 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 11 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 12 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 12 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 13 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 13 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 14 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 14 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 15 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 15 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 16 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 16 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 17 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 17 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 18 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot1, HIGH);} // zustellen 
if (now.hour()== 18 && now.minute()== 0 && now.second()== 7) {digitalWrite(mot1, LOW);} // Stopp

if (now.hour()== 19 && now.minute()== 0 && now.second()== 0) {digitalWrite(mot2, HIGH);} // Zurueck
  stopp();
}
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

OK, dann stricke ich da mal was rein. :)

Danke dir für´s Panel, das ist heute schon angekommen. Ich dachte du wirst das irgendwann mal im Keller ausgraben, habe also noch lange nicht damit gerechnet. Dabei ist das schon da. :(oo):

Servus
Franz
Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Max »

Servus Franz,

betrachte es als Weihnachtsgeschenk,
Für meine Testzwecke habe ich ja noch ein solches Panel
im Keller.
Gruß
Max
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

Hey danke dir. :(oo):
Das Ding hat 20 Volt bei nicht mal ganz Wolckenfreier Sonne. Ich mache ein Gerät, mit dem ich so ein Panel mit dem fürs Panel zugelassenen Strom belasten kann, um dann zu sehen, wo die Spannung noch ist, bei der Last mit den 10 Watt. Also man stellt die Leistung (Watt) ein, die das Panel verträgt, stellt es in die volle Sonne, und schaut dann was es dann an Spannung und Leistung schafft. Dann zeichnet das Gerät minüntlich auf, welchen Lichtwert ich mit meinen Lichtmessgerät noch habe, welche Spannung das Panel noch hat, und wieviel Leistung das Panel bei der Lichtstärke noch hat. Dann kann ich die Aufzeichnung später überprüfen, und sehe genau, bei welchen Lichtwert das Panel nicht mehr genug Leistung bringt, um eine Batterie noch sinnvoll zu laden. Und schon habe ich einen Lichtwert, bei dem ich meinem Sonnenverfolger sagen kann, dass er in die "Nachtruhe" gehen kann. Und den Wert kann ich dann auch wieder verwenden, um das Gerät wieder starten zu lassen, wo es wieder seinen Job macht bis zum nächten Abend.

Und ich mache mich morgen mal über dein Programm her.

Servus
Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

So, alles klar. Ich habe das Programm wieder reingenommen und bei mir am Nano mit RTC getestet. Macht alles wie es soll. Der Motor läuft um 19:00:00 eine Minute zurück und wenn der Enschalter betätigt wird, stoppt der Rücklauf, der Motor geht noch 3 Sekunden vorwärts und alles läuft wieder wie es soll.

Hier das aktuelle Programm:

Code: Alles auswählen

// Programm zur Solarsteuerung mit DS 3231 Modul
#include "RTClib.h"
RTC_DS3231 rtc;
int mot1 = 5;        // Motor Rechts
int mot2 = 6;        // Motor Links
int schalter = 4;    // Endschater
int pwm = 9;
unsigned long aktuellezeit = 0;
// ------millis Deklaration 01 -----------------------
unsigned long pausestartzeit01 = 0; // Eine Minute
const unsigned long pausezeit01 = 60000;
// ------millis Deklaration 02 -----------------------
unsigned long pausestartzeit02 = 0; // Drei Sekunden
const unsigned long pausezeit02 = 3000;
//-----------------------------Merker Deklarieren-----
byte MotorR = 0;
byte MotorL = 0;
byte Ende = 0;
byte MotorStart = 0;
//----------------------------------------------------
void setup () {
  Serial.begin(9600);
  pinMode (mot1, OUTPUT);
  pinMode (mot2, OUTPUT);
  pinMode(schalter, INPUT_PULLUP);
  digitalWrite(pwm, HIGH);
#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
  if (! rtc.begin()) {
    Serial.println("Konnte RTC nicht finden");
    Serial.flush();
    abort();
  }
  Serial.println("Setting the time...");
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop () {
  DateTime now = rtc.now();
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  //    Serial.print(rtc.getTemperature());
  //    Serial.println(" C");
  Serial.println();
  Serial.println();

  if (now.hour() == 8 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 8 && now.minute() == 0 && now.second() == 14) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 9 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 9 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 10 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 10 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 11 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 11 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 12 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 12 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 13 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 13 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 14 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 14 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 15 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 15 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 16 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 16 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 17 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 17 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }

  if (now.hour() == 18 && now.minute() == 0 && now.second() == 0) {
    digitalWrite(mot1, HIGH); // zustellen
  }
  if (now.hour() == 18 && now.minute() == 0 && now.second() == 7) {
    digitalWrite(mot1, LOW); // Stopp
  }
// Morgenstellung um 19 Uhr
  if (now.hour() == 19 && now.minute() == 0 && now.second() == 0) {
    if (MotorStart == 0)
    {
      MotorStart = 1;
    }
  }
  //---------------------------Aktuelle Millis übergeben-----------------------
  aktuellezeit = millis(); // Aktuelle Zeit für alle Millis Aktionen übergeben
  //---------------------------------------------------------------------------
  //---------------------------Motor Links Starten-----------------------------
  if (MotorStart == 1)
  {
    digitalWrite (mot2, HIGH);
    MotorL = 1;
    MotorStart = 2;
    pausestartzeit01 = aktuellezeit; // Eine Minute Abschaltung starten
  }
  //---------------------------------------------------------------------------
  //------------------------Endschalter Kontrolle------------------------------
  Ende = digitalRead(schalter);
  if (Ende == 0)
  {
    digitalWrite (mot2, LOW);
    MotorL = 0;
    digitalWrite (mot1, HIGH);
    MotorR = 1;
    pausestartzeit02 = aktuellezeit; // Drei Sekunden Abschaltung starten
  }
  //------------------60000 Aktion---------------------------------------------
  if (aktuellezeit - pausestartzeit01 >= pausezeit01) // Eine Minute abgelaufen??
  {
    digitalWrite (mot1, LOW);
    MotorR = 0;
    digitalWrite (mot2, LOW);
    MotorL = 0;
    MotorStart = 0; // Eine Minute abgelaufen, startbereit für nächsten Rücklauf
  }
  //-----------------------------------------------------------------------------
  //------------------3000 Aktion----------------------------------------------
  if (aktuellezeit - pausestartzeit02 >= pausezeit02) // Drei Sekunden abgelaufen??
  {
    digitalWrite (mot1, LOW);
    MotorR = 0;
    MotorStart = 0; // 3 Sekunden abgelaufen, startbereit für nächsten Rücklauf
  }
  //-----------------------------------------------------------------------------
}
DIe Serial.print(); würde ich rausschmeißen, wenn die Kiste läuft, weil da ja der Serial Speicher vollgeschrieben wird, wenn keine PC dran ist, der die Daten abfragt. Ich weiß nicht wie sich das auswirkt.
Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Max »

Danke Franz,

werde mich mal ans Testen machen.
Gruß
Max
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

OK, alles klar.

Gruß
Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

Hey Max.
Zu früh gefreut. Das Panel macht zwar 20 Volt, aber nur 0,11 Watt. Wenn ich nur einen DC/DC Wandler ohne jede Last dran hänge, bricht die Spannung schon auf 3,5 Volt zusammen. Habe auch einen 50 Ohm Widerstand dran gebaut, der also dann mit 0,4 Ampere, 8 Watt belastet, aber da geht die Spannung auf Null runter. Aber macht nichts, jetzt habe ich mir eines bestellt, weil jetzt will ich auch weiter machen mit der Solar-Technik. Ein 65 Watt Panel, bekomme ich Mitte der Woche. Dann mache ich das Licht-Messgerät weiter. Habe auch noch Lastwiderstände dazu bestellt, mit passenden Werten für kleine Lasten.

Schöne Weihnachten, feier nicht zuviel, Servus
Franz
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste