Hy,Leute.
Hab mal wieder ne Frage,wo ich irgendwie nicht weiterkomme.
Ok,vlt bin ich auch etwas zu faul zum rumtüfteln...ich gebs zu.
Also..es geht mal wieder um die Sonnennachführung.
Diese läuft bestens und absolut störungsfrei,jedoch arbeitet der Tracker ständig.
Das heisst,wenn sich wegen einer Wolke der Himmel verdunkelt,sucht sich der Tracker den neuen "hellsten Punkt".
So rudert das gute Teil Tagsüber oftmals hin und her.
Die Hysterese grösser einzustellen bringt nichts,da er dann an bewölkten Tagen nicht nachfährt.
Mein Plan:
Ich lasse dem Arduino sein Programm nur alle 10 Minuten oder so durchlaufen.
Es sollte also eine Pausezeit zwischen den "Messungen" geben.
Nun hab ich schon delayzeiten an allen möglichen Stellen probiert.
Gleich nach void loop,dann nach den analog read Befehlen und auch mal nur ganz am Ende des Sketches... usw..
Irgendwie komm ich aber nicht auf das gewünschte Ergebnis.
Hat vlt mal Jemand Rat?
Hier der sketch,so wie er jetzt super funktioniert:
// Sonnennachführung eine Achse //
// pin 2 = Relais Motor nach West drehen //
// pin 4 = Relais Motor nach Ost drehen //
// Endschalter am Getriebe schalten die Masse der Relais ab //
// Analog 0 = Mittelabgriff Spannungsteiler aus 2 LDRs....2 Stück 3,3 k und Poti 1 k dazwischen //
// Analog 1 = Mittelabgriff Spannungsteiler LDR + Poti 12K = zurück nach Ost //
int west = 2; // Relais West //
int ost = 4; // Relais Ost//
int pin = A0; // Analogeingang A 0 //
int abend = A1; // Analogeingang A 1 Abends zurück nach Osten wenn LDR dunkel//
int value;
void setup ()
{
pinMode (west, OUTPUT); // definiert west als Ausgang //
pinMode (ost, OUTPUT); // definiert ost als Ausgang //
}
void loop ()
{
value = analogRead (abend); // liest A1 ein //
if (value < 260) { // je höher der Wert,umso früher gehts zurück nach Ost //
digitalWrite ( west, LOW );
digitalWrite ( ost, HIGH ); // fährt zurück nach ost //
}
else {
value = analogRead (pin); // liest A0 ein //
if (value > 518 ){ // wenn Wert höher als... Motor Richtung west//
digitalWrite ( west, HIGH );
digitalWrite ( ost, LOW );
}
value = analogRead (pin); // wenn Wert kleiner als 512 Motor stop //
if (value < 512 ){
digitalWrite ( west, LOW );
}
value = analogRead (pin); // liest A0 ein //
if (value < 506 ){ // wenn Wert kleiner als ... Motor Richtung ost //
digitalWrite ( ost, HIGH );
digitalWrite ( west, LOW );
}
value = analogRead (pin); // wenn Wert grösser als 512 Motor stop //
if (value > 512 ){
digitalWrite (ost, LOW );
}
}
}