Solar-Nachführung

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

Re: Solar-Nachführung

Beitrag von Max »

Hallo Franz,

nun habe ich doch einen zweiten Endschalter für einen Notstopp eingebaut,
falls der Reedkontakt beim Zurückfahren in die Morgenstellung überfahren werden sollte.
Der Endschalter unterbricht den Motorstrom.
Das mit der Softwarelösung scheint mir doch etwas zu kompliziert??
In der Vergangenheit ist es schon mal passiert, dass eine Anlage abends über den Endschalter gefahren
ist (C-Control-Programm) und die Kabel von den Panelen rausgerissen hat und der L298N abgeraucht ist :agt:
Damit das nicht mehr passiert habe ich einen zweiten Endschalter mit Stromabschaltung eingebaut.
Für mich ist wichtig, dass ich keinen solchen Schaden mehr habe,

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 »

Max hat geschrieben: Mi 26. Okt 2022, 15:06 Das mit der Softwarelösung scheint mir doch etwas zu kompliziert??
Nööö, eigentlich nicht. Aber ich müßte nur ganz genau wissen was wie laufen soll. Also da müßte man sich mal besprechen mit gleichzeitig mit der Nase im Programm. Weil du weißt natürlich was bei dir wie abläuft. Ich nicht.

Und ja, die Sicherheitsschalter in der Software einbauen, ist immer ein Problem, Weil das Programm sich schon mal komplett verlaufen kann, und wenn es im Wald steht, reagiert es auf nichts mehr. Wenn das letzte was es noch gemacht hat, Motor einschalten ist, ja dann ists scheiße, wenn das Programm danach auf nichts mehr reagiert. Ich habe mal bei einem Frästisch Begrenzungsschalter eingebaut, die den Arduino Reset betätigen. Und ich habe eine Taste drann, mit der ich den Reset unterbrechen kann, und den Frästisch wieder mit Handsteuerung aus dem Bereich rausfahren kann. Diese Art Endaus finde ich einigermassen sicher, weil der Schalter den Reset des Arduinos betätigt. Nachteil ist wie bei deinen Elektrischen Abschaltern, das dann eben auch mit der Hand eingegriffen werden muss, um das Geräte wieder frei zu fahren.

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

Re: Solar-Nachführung

Beitrag von Max »

Hallo Franz,

die beiden Panele fahren wieder gemeinsam Richtung Sonne.
Hoffentlich schießt Putin nicht, wie angedroht, westliche Sateliten ab :shock:
Das wäre das Ende meiner GPS-Daten gesteuerten Solarpanel-Nachführung.

Zur Not hätte ich noch die alten DCF77 Steuerungen. :lol:
deren Signal kommt aus Frankfurt.
Gruß
Max
Dateianhänge
P1100265.JPG
P1100265.JPG (332.15 KiB) 589 mal betrachtet
P1100264.JPG
P1100264.JPG (398.63 KiB) 589 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Admin »

Gefällt mir. Kann schon passieren, dass ich nächstes Jahr auch mal wirklich was baue, zum Strom erzeugen für die Garage, oder fürs Poolhaus. Das würde sich erst mal anbieten. Auch Strom für die Poolheizung wäre eine Möglichkeit. Aber ich fürchte da braucht man zuviel Strom, wenn man 40000 Liter aufheizen will :O:

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 »

Hallo Max.
Ich habe hier mal ein kleines Demo-Programm.
Beim Start des Programmes wird Pin.6 = Motor Links, eingeschalten. Wenn nichts weiter passiert, wird nach 60 Sekunden ausgeschalten.
Wenn der Endschalter reagiert, dann wird Pin.6 = Motor Links, ausgeschalten und Pin.5 = Motor Rechts, eingeschalten. Der wird nach 3 Sekunden wieder ausgeschalten. Und alles bleibt aus.

Code: Alles auswählen

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;
//-------------------------------Eingänge und Ausgänge Deklarieren-------------
const byte MotorRechts = 5;
const byte MotorLinks = 6;
const byte Endschalter = 4; //Endschalter schaltet einen Minus!!
//-----------------------------Merker Deklarieren------------------------------
byte MotorR = 0;
byte MotorL = 0;
byte Ende = 0;
byte MotorStart = 1;
//-----------------------------Baudrate fuer Serial Schnittstelle--------------
const int baudSerial = 9600;
//-----------------------------------------------------------------------------
void setup()
{
  pinMode(Endschalter, INPUT_PULLUP);
  pinMode(MotorRechts, OUTPUT);
  pinMode(MotorLinks, OUTPUT);
  // Serial Schnittstelle starten
  Serial.begin(baudSerial);
}
//-----------------------------------------------------------------------------
void loop() {
  //---------------------------Aktuelle Millis übergeben-----------------------
  aktuellezeit = millis(); // Aktuelle Zeit für alle Millis Aktionen übergeben
  //---------------------------------------------------------------------------
  //---------------------------Motor Links Starten-----------------------------
  if (MotorStart == 1)
  {
    digitalWrite (MotorLinks, HIGH);
    MotorL = 1;
    MotorStart = 0;
    pausestartzeit01 = aktuellezeit; // Eine Minute Abschaltung starten
  }
  //---------------------------------------------------------------------------
  //------------------------Endschalter Kontrolle------------------------------
  Ende = digitalRead(Endschalter); 
  if (Ende == 0)
  {
    digitalWrite (MotorLinks, LOW);
    MotorL = 0;
    digitalWrite (MotorRechts, HIGH);
    MotorR = 1;
    pausestartzeit02 = aktuellezeit; // Drei Sekunden Abschaltung starten
  }
  //------------------60000 Aktion---------------------------------------------
  if (aktuellezeit - pausestartzeit01 >= pausezeit01) // Eine Sekunde abgelaufen??
  {
    digitalWrite (MotorRechts, LOW);
    MotorR = 0;
    digitalWrite (MotorLinks, LOW);
    MotorL = 0;
  }
  //-----------------------------------------------------------------------------
  //------------------3000 Aktion----------------------------------------------
  if (aktuellezeit - pausestartzeit02 >= pausezeit02) // Zwei Sekunden abgelaufen??
  {
    digitalWrite (MotorRechts, LOW);
    MotorR = 0;
  }
  //-----------------------------------------------------------------------------
}
//---------------------------LOOP Ende-----------------------------------------
Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Solar-Nachführung

Beitrag von Max »

Hallo Franz,

das mit dem Demoprogramm funktioniert leider nicht wie es sollte.
Während der 60 sec Zeit spricht der Endschalter nicht an.
Leider habe ich es nach mehreren Versuchen nur "verschlimmbessert"
Das Programm ist aber im Moment nicht so wichtig.
Meine Solaranlagen funktionieren wie sie sollen und ich habe ja
einen Motor-Endabschalter eingebaut, falls es zu einem Überlauf kommt.
Ich wollte nur, daß ich das mit dem Programm schaffe.
Letztes Jahr hatte ich einen ähnlichen Fall. Im Treibhaus wollte ich beim
automatische Gießen einen Vorratsbehälter über ein Magnetventil befüllen
lassen und das mit einem Schwimmerschalter beenden.
Einmal hat der Schwimmerschalter nicht angegeben und das komplette Treibhaus
bewässert.
Da hätte ich wohl auch so ein ähnliches Programm gebräucht aber ohne Delays()
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 »

Hi Max.
Das habe ich mit nen Nano getestet und es hat funkioniert. Aber der Endschalter muss gegen Minus also GND geschalten sein.

Das erkennst du im "void setup()" an der Programm Zeile:
pinMode(Endschalter, INPUT_PULLUP);
und im "void loop()" an der Zustandsabfrage dess Pin´s:
Ende = digitalRead(Endschalter);
if (Ende == 0)
Da wird auf Ende ist "0" reagiert. Null heißt GND allso Minus!

"INPUT_PULLUP" das heißt, da ist im Ruhezustand Plus also VCC 5 Volt über 10Kohm am Pin.4 im Arduino intern dran. Und der Schalter wird erkannt wenn er GND also Minus an dem Pin.4 anlegt. Auf Plus 5 Volt regiert der Pin. nicht, weil das sein Ruhezustand ist!

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

Re: Solar-Nachführung

Beitrag von Max »

Danke,
endlich hat mir das mal einer richtig erklärt.
Wieder was dazugelernt.
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 »

Hi Max.
Ja, da sieht du ja auch, wie du die delay´s umgehen kannst. Bei dieser Art Programmaufbau dauert ein Loop Durchgang nur ein paar tausenstel Sekunden. Wenn du jetzt rechnest, dass ein Tastendruck zwischen 10 und 30 millisekunden dauert, ist klar dass man den so gut wie nie erwischt, wenn man delay´s im Programm hat. Sagen wir mal da ist nur ein Delay mit einer Sekunde. Dann passiert 1000ms NICHTS, dann läuft das Programm zur Tastenabfrage, da ist 1ms Zeit die Taste abzufragen, dann läuft das Programm wieder weiter, läuft wieder über dein delay() 1000ms nichts, dann wieder 1ms die Chance, den Tastendruck zu erwischen. So gehts dauernd weiter, 1ms Abfrage, 1000ms nichts,.......Wie soll das gehen, wenn der Tastendruck nur 10-30ms dauert? Da kannst du wärend der 1000ms Pause 10x die Taste drücken, ohne dass das Programm irgendwas davon mitbekommt. Oder mit deinem Endschalter, du hast eine seeeehr starke Mechanik. Die kommt an den Enschalter, aber deine Delay lassen das unbemerkt. Also fährt der Motorweiter, reißt deinen Endschalter ab, dann ist das Delay endlich zuende, aber leider der Enschalter schon KO, also dreht der Motor munter weiter, alle Hindernisse beseitigt. :???: Das kann nur schief gehen, das ist wie Lottospielen. Ein Sechser wenn du die Taste erwischt. Deshalb wirst du in funktionierenden Programmen keine delay´s finden. Aber so wie das Programm mit Millis() aufgebaut ist,fährt das in 10 Milliskunden 2-3x durch. Das heißt, auch der kürzeste Tastendruck wird locker immer sofort erwischt.

Ich mache zum Testen, wie lange ein Loop-Durchlauf dauert immer folgendes. Ich nehme am Anfang des Loop einmal die Millis in einen Merker, dann am Ende des Loop die Millis in einen zweiten Merker. dann rechne ich dort den Wert aus dem ersten Merker vom Wert aus dem zweiten Merker ab, dann bleiben die ms, die das Programm braucht, um von ersten Merker zum zweiten Merker zu kommen (also durch den kompletten Loop) übrig, und ich gebe den Wert in Serial.println(ergebnis) aus. Da haben meine Programme meistens nur ein paar wenige ms.

Schönen Tag
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 »

Wie sieht es bei deinem Programm für den Nano aus? Kann ich dich da unterstützen, oder ist das schon am laufen?

Schönes WE
Franz
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

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