INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino solar tracker
18.07.2018, 13:25 (Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2018 13:27 von rene34.)
Beitrag #1
Arduino solar tracker
Hallo ich habe hier einen Code der auch super funktioniert:
Ich möchte aber gerne,das ein dämmerungsschalter(Code )integriert wird der mir ein Relay schaltet das die Eingänge des Motortreibers(L298)trennt und umschaltet so das das panel in die Osttellung fährt bis auf den Endschalter:Das ganze habe ich schon bei einem anderen Panel analog gemacht möchte ich aber nicht mehr.
Hier der Code der stammt natürlich nicht von mir.


// Special thanks to Geo Bruce on instructables.com for his version of the code.
// Enable A and Enable B pins on dual motors h-bridge must be connected to two pwm (pulse width modulation) pins on arduino uno/micro/pro mini: 3,5,6,9,10,11.
int enA = 3; int in1 = 4; int in2 = 5; // motor azimuth adjustment
int enB = 9; int in3 = 7; int in4 = 8; // motor elevation adjustment

void setup()
{
Serial.begin(9600); // initialize the serial port
pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(enB, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // set all the motor control pins to outputs
}
void loop()
{
// LIGHT SENSOR (in this case a Light Dependent Resistor) pin connections and analog pin on respective arduino board
int br = analogRead(0); // BOTTOM RIGHT
int tr = analogRead(1); // TOP RIGHT
int tl = analogRead(2); // TOP LEFT
int bl = analogRead(3); // BOTTOM LEFT
int delaytime = analogRead(A6)*2; // control delay time in milliseconds of LIGHT SENSOR readings
int tolerance = analogRead(A7)/4; // set range of tolerance between LIGHT SENSOR readings

//print LIGHT SENSOR values to serial monitor for debugging
Serial.println(tl); Serial.println(bl); Serial.println(tr); Serial.println(br); Serial.println(delaytime); Serial.println("ms"); Serial.println(tolerance); Serial.println("photoresistor difference"); Serial.println();

int count = 0; //start millisecond count of LIGHT SENSOR readings
count++; //incremental count increase, continues to show LIGHT SENSOR results

int avt = (tr + tl) / 2; // average value top
int avd = (bl + br) / 2; // average value down
int avl = (tl + bl) / 2; // average value left
int avr = (tr + br) / 2; // average value right

int dv = avt - avd; // average difference of top and bottom LIGHT SENSORS
int dh = avl - avr;// average difference of left and right LIGHT SENSORS

if (-1*tolerance > dv || dv > tolerance) // check if the difference in top/bottom LIGHT SENSORS is greater than tolerance
{
if (avt > avd) // if average LIGHT SENSOR values on top side are greater than on bottom side then elevation motor rotates CLOCKWISE
{
digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, 254); // set speed out of possible range 0~255
Serial.println("ELEVATION MOTOR MOVES CLOCKWISE");
Serial.println(" ");
}
else // if average LIGHT SENSOR values on bottom side are greater than on top side then elevation motor rotates COUNTERCLOCKWISE
{
digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, 254);
Serial.println("ELEVATION MOTOR MOVES COUNTERCLOCKWISE");
Serial.println(" ");
}
}
else if (-1*tolerance < dv || dv < tolerance) // if difference is smaller than tolerance, STOP elevation motor
{
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
Serial.println("ELEVATION MOTOR STOPS");
Serial.println(" ");
}

if (-1*tolerance > dh || dh > tolerance) // check if the difference in left and right LIGHT SENSORS is within tolerance range
{
if (avl > avr) // if average LIGHT SENSOR values on left side are greater than right side, azimuth motor rotates CLOCKWISE
{
digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 254);
Serial.println("AZIMUTH MOTOR MOVES CLOCKWISE");
Serial.println(" ");
}
else // if average LIGHT SENSOR values on right side are greater than on left side, azimuth motor rotates COUNTERCLOCKWISE
{
digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, 254);
Serial.println("AZIMUTH MOTOR MOVES COUNTERCLOCKWISE");
}
}
else if (-1*tolerance < dh || dh < tolerance) //if difference is smaller than tolerance, STOP azimuth motor
{
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
Serial.println("AZIMUTH MOTOR STOPS");
Serial.println(" ");
}
delay(delaytime);
}



Vieleicht kann jemand für mich die paar zeilen einfügen.
ich würde gerne den noch freien Analog Eingang A4 A5(Photowiederstand) des pro mini benutzen und irgend einen digital Pin auser den schon benutzten.Vielleicht kann mir ein erfahrener Benutzer hier weiterhelfen im Programieren bin ich leider nicht so fit und ich möchte das Projekt so schnell wie möglich beenden.

Hier hab ich noch aus dem Forum einen Code für einen Dämmerungsschalter gefunden weis aber nicht wie ich das verschachteln kann.

const int relais = 3;
const int LightDetector = 2;


void setup(){
pinMode (relais,OUTPUT);
pinMode (LightDetector,INPUT);
}


void loop() {
static int LightDetectorState = 0; //Das Keyword 'static' wird benutzt, um einer Funktion eine Variable zu geben,
//die nur dort sichtbar ist und zusätzlich auch zwischen Funktionsaufrufen ihren Wert beibehält.
//Diese Variable hat auch nur eine feste Adresse welche bei jedem Funktionsaufruf gleich bleibt.
// Im Vergleich dazu werden normale lokale Variablen jedes Mal erzeugt, wenn die Funktion aufgerufen wird und am Ende auch wieder gelöscht.
//Static Variablen werden zum ersten und einzigen Mal erzeugt, wenn die Funktion zum ersten Mal aufgerufen wird.
static unsigned long LastChangeTime = 0; // Behält die letzte Zeit in der sich am Lichtsensor etwas geändert hat!

unsigned long now = millis(); //Gibt die Anzahl an Millisekunden zurück,
//die vergangen sind seit dem das Arduino Board das aktuelle Programm ausführt!
int NewLightDetectorState = digitalRead(LightDetector); // newLightdetectorState fragt den Status des lightdetector ab.

if(NewLightDetectorState != LightDetectorState) { // Status geändert ? Ja oder Nein ? (!= bedeutet ungleich)
LastChangeTime = now; // Sobald ein ungleicher Wert festgestellt wird übernimmt "LastChangeTime" den Wert von "now" also die Zeit die nach dem Start des Sketch vergangen ist.
LightDetectorState = NewLightDetectorState; // "LightDetectorState" nimmt nun den Wert des "NewLightDetectorState" an.
}else //
if(now - LastChangeTime >= 10000) { // Bleibt NewLightDetectorState und LightDetectorState 10 sek ungleich so wird…..
digitalWrite(relais,LightDetectorState); // LightDetectorState je nach Zustand des LightDetector an bzw. aus geschaltet.



};
}

Dämmerungsschalter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 13:35
Beitrag #2
RE: Arduino solar tracker
Setze Deine Sketche bitte in Codetags. Wie das geht, steht hier.
Wenn Du ihn vorher noch ordentlich formatierst (<Strg>+T in der IDE) ist er viel besser lesbar.

Wir helfen Dir gern bei der Fehlersuche aber programmieren musst Du schon selbst.
Hast Du den Sketch mit dem Photowiderstand schon ausprobiert?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 13:53 (Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2018 13:57 von rene34.)
Beitrag #3
RE: Arduino solar tracker
Nein das habe ich noch nicht,da hier ein fertigmodul benutzt wird ich will ja nur einen Photowiederstand benuzten.Alles kompliziert mit den Codetags und Programieren ich bin ja auch nicht mehr der jüngste und wenn ich mich da durchkämpfen müste würd es für mich die nächsten Monatte dauern,die Anlage steht mechanisch es hapert nur an dem Dämmerungsschalter für die ostfunktion Mit dem Programieren ist es so eine Sache,da ich einfach nicht so fit bin wenn alle stricke reissen werd ich wohl wieder das Analog machen müssen wäre aber schade da der Arduino ja noch zwei Analogeingänge hat,deswegen frage ich ja hier nach,für einen profi eine Sache von 10 minuten denke ich:

Code:
// Special thanks to Geo Bruce on instructables.com for his version of the code.
// Enable A and Enable B pins on  dual motors h-bridge must be connected to two pwm (pulse width modulation) pins on arduino uno/micro/pro mini: 3,5,6,9,10,11.
int enA = 3; int in1 = 4; int in2 = 5; // motor azimuth adjustment
int enB = 9; int in3 = 7; int in4 = 8; // motor elevation adjustment

void setup()
{
Serial.begin(9600); // initialize the serial port
pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(enB, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // set all the motor control pins to outputs
}
void loop()
{
// LIGHT SENSOR (in this case a Light Dependent Resistor) pin connections and analog pin on respective arduino board
int br = analogRead(0); // BOTTOM RIGHT
int tr = analogRead(1); // TOP RIGHT
int tl = analogRead(2); // TOP LEFT
int bl = analogRead(3); // BOTTOM LEFT
int delaytime = analogRead(A4)*2; // control delay time in milliseconds of LIGHT SENSOR readings
int tolerance = analogRead(A5)/4; // set range of tolerance between LIGHT SENSOR readings

//print LIGHT SENSOR values to serial monitor for debugging
Serial.println(tl); Serial.println(bl); Serial.println(tr); Serial.println(br); Serial.println(delaytime); Serial.println("ms"); Serial.println(tolerance); Serial.println("photoresistor difference"); Serial.println();

  int count = 0; //start millisecond count of LIGHT SENSOR readings
  count++; //incremental count increase, continues to show LIGHT SENSOR results

  int avt = (tr + tl) / 2; // average value top
  int avd = (bl + br) / 2; // average value down
  int avl = (tl + bl) / 2; // average value left
  int avr = (tr + br) / 2; // average value right
  
  int dv = avt - avd; // average difference of top and bottom LIGHT SENSORS
  int dh = avl - avr;// average difference of left and right LIGHT SENSORS

if (-1*tolerance > dv || dv > tolerance) // check if the difference in top/bottom LIGHT SENSORS is greater than tolerance
{
  if (avt > avd) // if average LIGHT SENSOR values on top side are greater than on bottom side then elevation motor rotates CLOCKWISE
  {
  digitalWrite(in3, LOW);  digitalWrite(in4, HIGH); analogWrite(enB, 254); // set speed out of possible range 0~255
  Serial.println("ELEVATION MOTOR MOVES CLOCKWISE");
  Serial.println("   ");
  }
  else // if average LIGHT SENSOR values on bottom side are greater than on top side then elevation motor rotates COUNTERCLOCKWISE
  {
  digitalWrite(in3, HIGH);  digitalWrite(in4, LOW); analogWrite(enB, 254);
  Serial.println("ELEVATION MOTOR MOVES COUNTERCLOCKWISE");
  Serial.println("   ");
  }
}
  else if (-1*tolerance < dv || dv < tolerance) // if difference is smaller than tolerance, STOP elevation motor
  {
  digitalWrite(in3, LOW); digitalWrite(in4, LOW);
  Serial.println("ELEVATION MOTOR STOPS");
  Serial.println("   ");
  }

if (-1*tolerance > dh || dh > tolerance) // check if the difference in left and right LIGHT SENSORS is within tolerance range
{
  if (avl > avr) // if average LIGHT SENSOR values on left side are greater than right side, azimuth motor rotates CLOCKWISE
  {
  digitalWrite(in1, HIGH);  digitalWrite(in2, LOW); analogWrite(enA, 254);
  Serial.println("AZIMUTH MOTOR MOVES CLOCKWISE");
  Serial.println("   ");
  }
  else // if average LIGHT SENSOR values on right side are greater than on left side, azimuth motor rotates COUNTERCLOCKWISE
  {
  digitalWrite(in1, LOW);  digitalWrite(in2, HIGH); analogWrite(enA, 254);
  Serial.println("AZIMUTH MOTOR MOVES COUNTERCLOCKWISE");
  }
}
  else if (-1*tolerance < dh || dh < tolerance) //if difference is smaller than tolerance, STOP azimuth motor
  {
  digitalWrite(in1, LOW);  digitalWrite(in2, LOW);
  Serial.println("AZIMUTH MOTOR STOPS");
  Serial.println("   ");
  }
  delay(delaytime);
}

so jetzt habe ich die codetags benutzt
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 13:58
Beitrag #4
RE: Arduino solar tracker
Es gibt auch genug Beispiele von Arduino mit Photowiderstand. Einfach mal Google nutzen.
Wenn Du nicht bereit bist, Dich einzuarbeiten, wird das wohl nichts werden.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 14:05 (Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2018 14:09 von rene34.)
Beitrag #5
RE: Arduino solar tracker
Code:
int eingang= A0; //Das Wort „eingang“ steht jetzt für den Wert „A0“ (Bezeichnung vom Analogport 0)
int LED = 10; //Das Wort „LED“ steht jetzt für den Wert 10
int sensorWert = 0; //Variable für den Sensorwert mit 0 als Startwert

void setup()//Hier beginnt das Setup.
{
Serial.begin(9600); //Die Kommunikation mit dem seriellen Port wird gestartet. Das benötigt man, um sich den tatsächlich ausgelesenen Wert später im serial monitor anzeigen zu lassen.
pinMode (LED, OUTPUT); //Der Pin mit der LED (Pin 10) ist jetzt ein Ausgang
//Der analoge Pin muss nicht definiert werden.
}

void loop()
{//Mit dieser Klammer wird der Loop-Teil geöffnet.
sensorWert =analogRead(eingang); //Die Spannung an dem Fotowiderstand auslesen und unter der Variable „sensorWert“ abspeichern.
Serial.print("Sensorwert = " ); //Ausgabe am Serial-Monitor: Das Wort „Sensorwert: „
Serial.println(sensorWert); //Ausgabe am Serial-Monitor. Mit dem Befehl Serial.print wird der Sensorwert des Fotowiderstandes in Form einer Zahl zwischen 0 und 1023 an den serial monitor gesendet.

if (sensorWert > 512 ) //Wenn der Sensorwert über 512 beträgt….
{
digitalWrite(LED, HIGH); //…soll die LED leuchten…
}

else //andernfalls…
{
digitalWrite(LED, LOW); //….soll sie nicht leuchten.
}

delay (50);//Eine kurze Pause, in der die LED an oder aus ist

}//Mit dieser letzten Klammer wird der Loop-Teil geschlossen.

//Wenn nun der Sensorwert bei normaler Helligkeit bspw. nur den Wert 100 hat
//(Der Wert ist abhängig von den verwendeten Widerständen, von der
//Helligkeit und von der Stromrichtung), dann nimmt man anstelle des Wertes
//512 einen wesentlich kleineren Wert, bei dem die LED zu leuchten beginnen
//soll. Bspw. nimmt man dann den Wert 90. Den aktuellen Sensorwert kann
//man sich nun mit Hilfe des „Serial monitor“ anzeigen lassen. Dazu klickt man
//oben auf „Tools“ und anschließend auf „serial monitor“.

Noch ein Code für einen Dämmerungsschalter,ich weiss nur nicht wo und wie ich die Zeilen in den Solartracker Code einfügen muss.

Für das Einarbeiten fehlt mir einfach die Zeit,ich hatte das ganze ja schon mit einem analogen Dämmerungsschalter gelöst,was auch super funktioniert der Aufbau würde mich 30 minuten kosten das Einarbeiten eine Ewigkeit,deswegen frage ich hier die jüngeren Profis ob mir jemand helfen kann.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 14:16
Beitrag #6
RE: Arduino solar tracker
Schaue mal in die Codereferenz hier im Forum in Literatur und Tutorials.
Ein Arduinosketch hat 3 Bestandteile
Code:
#include und globale Variablen

void setup() {
  alles was zur initialisierung gehört
}

void loop() {
  alles, was immer wieder gemacht werden soll
}

Und genau so sind Deine beiden Beispiele aufgebaut. Du musst halt die beiden Teile zusammen fassen und dabei aufpassen, dass es keine doppelten Bezeichnungen gibt. Dann musst Du einen umbenennen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 14:41
Beitrag #7
RE: Arduino solar tracker
(18.07.2018 13:25)rene34 schrieb:  ...
Ich möchte aber gerne,das ein dämmerungsschalter(Code )integriert wird der mir ein Relay schaltet das die Eingänge des Motortreibers(L298)trennt und umschaltet so das das panel in die Osttellung fährt bis auf den Endschalter
...

Hallo,
wenn ich das richtig sehe brauchst du weder einen zusätzlichen Fotowiderstand noch ein Relais um den Tracker bei Dunkelheit in Osttellung zu bringen.
Der Arduino hat bereits vier Fotowiderstände die er für die Nachführung nutzt, warum also nicht diese verwenden sondern noch einen zusätzlichen dazu bauen?
Und warum den Motortreiber mit einem Relais vom Arduino trennen? Der Arduino kann dir auch den Tracker bei Dämmerung nach Osten fahren.

Mit etwas zusätzlichem Programmcode wäre dein Wunsch ohne Änderung an der Hardware zu lösen.

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2018, 15:10
Beitrag #8
RE: Arduino solar tracker
Richtig man brauch das alles nicht nur habe ich davon keine Ahnung ich habe es jetz gerade geschaft mein letzten geposteten Code des Dämmerungsschalters einzufügen und den sensorwert anzupassen es funktioniert aber da hört mein verständniss auf die 4 photowiederstände zunutzen um nach osten zufahren das überfordert mich jetzt mit dem Code.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Sun tracker. Nachbau. Maschinenbauer 12 977 13.10.2018 09:29
Letzter Beitrag: Maschinenbauer
  Lichtschrankensensor / Line Tracker Sensor Hitikatus 5 1.334 13.07.2017 15:21
Letzter Beitrag: RCudino
  Firmata (Daten senden an den Arduino und empfangen vom Arduino) comfan 6 3.014 29.04.2017 14:29
Letzter Beitrag: hotsystems
  Laderegler Solar malsehen 4 2.017 13.07.2016 21:02
Letzter Beitrag: malsehen
  Tracker programmieren? MachwerkTV 1 2.100 02.07.2015 16:41
Letzter Beitrag: MachwerkTV
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 2.831 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 8.189 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf
  GPS-Tracker mit Adafruit Ultimate GPS breakout und 128x54 OLED Chingstar 1 3.371 29.05.2014 20:29
Letzter Beitrag: Mark

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste