Solartracker LDR Werte vergleichen

Hallöchen, ich baue gerade einen Solartracker und muss mithilfe von vier LDRs vier lichtwerte miteinander vergleichen können und den höchsten Rausfiltern, damit sich der Servo in die Richtung mit dem höchsten Lichtwert drehen kann. Wüsste dafür jemand einen simplen Code ? ;)

nö. Musst du selber schreiben.

  • die 4 Werte einlesen
  • den höchsten Wert der 4 ermitteln
  • Etwas mit der Information dann tun.

Für Vergleiche kannst du z.B. < oder > verwenden.

wenn du es als kurzen Code willst:

>

Schaue mal hier:

Dort sind LEDs als “Lichtsensoren” eingesetzt der Vorteil ist du musst dich nicht mit einem Vorwiderstand an dem LDR rumschlagen als Anfänger und die Berechnungen machen Querstrom etc.

Dort ist auch Code zum auslesen der LED.
Und dies dann zusammen mit den Schritten die noiasca geschrieben hat hasst du einen Licht/Solartracker.

Aber wenn du einen Tracker hast (bauen willst) brauchst du zwei Servos für zwei Achsen. Ansonsten wären es nur 2 LDRs die du brauchst.

Gruß

DerDani

Solar, Sonnentracker war schon oft beschrieben, diskutiert, Forum suche mall Beschäftigen.

Sehr lieb, danke !

// Forensketch
// https://forum.arduino.cc/

#include <Streaming.h>     // https://github.com/janelia-arduino/Streaming

struct LDR
{
  const uint8_t pin;
  uint16_t value;
};

LDR ldr[]
{
  {A0, 0,}, {A1, 0,}, {A2, 0,}, {A3, 0,},
};

void setup()
{
  Serial.begin(115200);
#if (defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2650)) // https://github.com/arduino/Arduino/issues/10764
  delay(300);
#endif
  Serial << (F("\r\nStart...\r\n")) << endl;
}

void loop()

{
  getValue();
  findMaxValue();
}

void getValue()
{
  for (LDR &l : ldr)
  { l.value = analogRead(l.pin); }
}

void findMaxValue()
{
  uint8_t maxPin = 255;
  uint16_t maxValue = 0;
  uint8_t minPin = 255;
  uint16_t minValue = 1024;

  for (LDR &l : ldr)
  {
    if (l.value < minValue)
    {
      minValue = l.value;
      minPin = l.pin;
    }

    if (l.value > maxValue)
    {
      maxValue = l.value;
      maxPin = l.pin;
    }
  }

  Serial << (F("MaxWert: ")) << maxValue << (F("an PIN: ")) << maxPin << endl;
  Serial << (F("MinWert: ")) << minValue << (F("an PIN: ")) << minPin << endl;
}

Da sind ein paar Kommas zu viel:

LDR ldr[] { {A0, 0}, {A1, 0},  {A2, 0}, {A3, 0} };

Sollte besser funktionieren.

Nein.

Doch…

Ohhhh.... :laughing: duck und weg

4 Likes

Was meinst Du mit dem Ohhh ?

Die Kommas hinter den 0 Werten in den geschweiften Klammern und das Komma am Ende der Zeile sind eindeutig falsch. Der Compiler wird das bestätigen :slightly_smiling_face: .

... wird Dich eines besseren belehren.

Ich finde es persönlich schade, aber wenn es so sein soll :man_shrugging:

Ok, ich habe es ausprobiert. Der Compiler meckert nicht. Dennoch sind die Kommas überflüssig.

Dem Autoformtierer auch nicht besonders zuträglich, es sei denn, man möchte möglichst viele Zeilen haben.

Ich schreibe das in eine Zeile drücke STRG-T und nix passiert.
Weder mit noch ohne Kommata.

Du hast recht und ich meine Ruhe.
Der Thread ist so kaputt und so auch.

Klingt nach Hausübung. Was hast bisher geschafft?

also wenn ich das richtig verstehe dann bilden zwei LDR und ein Servo je eine Einheit für eine Achse.

In deinem System hast du dann zwei Achsen - mit denen du der Sonne folgen willst.

Dann würde ich das auch einfach mal so als zwei separte Achsen hinschreiben.

// gelöscht wegen Aneignung von geistigen Eigentums durch die neuen Besitzer von Arduino

Sollte dir ( @suessenwtmaus ) etwas unklar sein - google danach. Wenns dann noch immer nicht klar ist, kannst du hier ja fragen.

2 Likes

hat niemand bestritten.

Dass die überflüssigen Kommas nichtmal Warnungen erzeugen, hätte man leicht ausprobieren können.

Kann praktisch sein kann, wenn das letzte Element nicht anders formatiert werden muss als die davor.

Noch besser,dass die Anzahl Elemente trotzdem stimmt.

Kann man ja unter

“wieder was gelernt, von dem ich vorher nicht gewusst habe, ob ich es wissen will”

abhaken.

1 Like
5 Likes

Ich hatte mit normalen LDR Sensoren und UV - Sensoren, bei der Messbereichs - Spanne keine Chance, an Sonnigen Tagen wirklich Helligkeitsunterschiede messen zu können. Die Sensoren hatten alle das selbe Problem. An sonnigen Tagen sind sie sehr schnell am Maximumwert. Egal ob der Sensor auf die Sonne ausgerichtet war, oder nur halbwegs Richtung Sonne zeigte, war immer schnell der selbe Maximum - Wert erreicht. Somit haben alle 4 den selben Wert gehabt und er gab keine brauchbaren Daten mehr, um die Beste Ausrichtung zu finden.

Ich habe dann für jede der 4 Richtungen, zwei Sensoren benutzt. Einer stark Abgedunkelt, einer offen. Die Messergebnisse der beiden haben ich dann zusammengerechnet. Damit hatte ich dann auf jeder der vier Richtungen, wirklich verschiedenen Werte, mit denen ich dann eine brauchbare Ausrichtung hinbekommen habe. Maximal Werte hatte ich dann gar nicht mehr erreicht. Auch bei voller Sonne, war ich mit meinen Messwerten, knapp unter Maximal Werten.

Hier habe ich mir ein Gerät mit diesen Sensoren gebaut. Da konnte ich die Abdunklung des zweiten Sensors gut testen.

Ich verwende das genannte Feature gerne.
Eigentlich immer, wenn sich die Möglichkeit bietet.
Auch dauernd hier im Forum.

Eben weil es sehr sinnvoll ist.
Und es wurde auch schon mal diskutiert.


Danke für die Gelegenheit, auch mal wieder was zu sagen.
Weiter machen!

Keine Sorge ich hab den Witz verstanden