Probleme mit 9g servo

Kann mir hier vielleicht jemand helfen...Ich verstehe es einfach nicht mehr.

Ich versuche einen "suntracker" zu basteln. Die servos scheinen zu funktionieren,
die Widerstände scheinen zu funktionieren nur zusammen macht der servo irgendwas und zuckelt bzw steht still



#include <Arduino.h>
#include <Servo.h>

const int ldrLO = D1;
const int ldrRO = D2;
const int ldrLU = D3;
const int ldrRU = D4;
const int adcPin = A0; // Analoger Pin, um LDR-Werte zu lesen
const int servoPinLR = D6;
const int servoPinOU = D7;

int ldrvLO = 0;
int ldrvRO = 0;
int ldrvLU = 0;
int ldrvRU = 0;
const int first=50;
const int sec=50;
int LiRe = 20;
int ObUn = 20;

Servo servoOU,servoLR;

void setup() {
  pinMode(ldrLO, OUTPUT);
  pinMode(ldrRO, OUTPUT);
  pinMode(ldrvLU, OUTPUT);
  pinMode(ldrvRU, OUTPUT);
  servoOU.attach(servoPinOU);
  servoLR.attach(servoPinLR);
  
  digitalWrite(ldrLO, LOW);
  digitalWrite(ldrRO, LOW);
  digitalWrite(ldrvLU, LOW);
  digitalWrite(ldrvRU, LOW);
  Serial.print(ObUn); Serial.println(LiRe);
  servoOU . write(ObUn);
  servoLR . write(LiRe);
  delay(2000);
  
  Serial.begin(9600); // Für Debugging-Zwecke
  Serial.println("Meine Pos: ");
  Serial.print(servoOU . read());
  Serial.print(servoLR . read());
}

void loop() {
  digitalWrite(ldrLO, HIGH);
  delay(first); // Zeit zum Stabilisieren des Signals
  ldrvLO = analogRead(adcPin);
  digitalWrite(ldrLO, LOW);
  delay(500);

  digitalWrite(ldrRO, HIGH);
  delay(first); // Zeit zum Stabilisieren des Signals
  ldrvRO = analogRead(adcPin);
  digitalWrite(ldrRO, LOW);
  delay(sec);

  digitalWrite(ldrvLU, HIGH);
  delay(first); // Zeit zum Stabilisieren des Signals
  ldrvLU = analogRead(adcPin);
  digitalWrite(ldrvLU, LOW);
  delay(sec);

  digitalWrite(ldrvRU, HIGH);
  delay(first); // Zeit zum Stabilisieren des Signals
  ldrvRU = analogRead(adcPin);
  digitalWrite(ldrvRU, LOW);
  delay(sec);
  
  int ldrsumLR = (ldrvLO+ldrvLU) - (ldrvRO+ldrvRU);
  int ldrsumOU = (ldrvLO+ldrvRO) - (ldrvLU+ldrvRU);
/*  Serial.print("ldr1val: "); Serial.print(ldrvLO); // Debugging
  Serial.print(" ldr2val: "); Serial.print(ldrvRO); // Debugging
  Serial.print(" ldr3val: "); Serial.print(ldrvLU); // Debugging
  Serial.print(" ldr4val: "); Serial.print(ldrvRU); // Debugging
  Serial.println("");
  Serial.print(" ldrsum: "); Serial.print(ldrsumLR); // Debugging
  Serial.print(" ldrsum: "); Serial.println(ldrsumOU);*/
  if (ldrsumLR >= 100) 
  {
    LiRe += 3;
    Serial.print(" LR+"); // Debugging
  } else if (ldrsumLR <= -100) 
  {
    LiRe -= 3;
    Serial.print(" LR-"); // Debugging
  }

  if (ldrsumOU >= 100) 
  {
   Serial.print(" OU+"); // Debugging

    ObUn +=3;
  } else if (ldrsumOU <= -100) 
  {
    Serial.print(" OU-"); // Debugging

    ObUn -= 3;
  }

  if (LiRe < 10) 
  {
    LiRe = 10;
  } else if (LiRe > 180) {
    LiRe = 180;
  }
  if (ObUn <10) 
  {
    ObUn = 10;
  } else if (ObUn > 180) {
    ObUn = 180;
  }
 // servoOU . write(ObUn);
  delay(300);

  Serial.print(ObUn);  Serial.print("  ");Serial.println(LiRe);

  //servoLR . write(LiRe);
  delay(300);

  for (int i=0;i<180;i++)
  { 
  servoOU . write(i);
  servoLR . write(i);
  }
  for (int i=180;i>0;i--)
  { 
  servoOU . write(i);
  servoLR . write(i);
  }

  
  
}
wenn ich nur die for schleife laufen lasse, läuft alles wie erwartet wenn ich die als Kommentar setze und die Zeilen

servoOU . write(ObUn);
delay(300);

servoLR . write(LiRe);
delay(300);

wieder aktiv setze machen die Servos irgendwas. Die Werte die ich bekomme sind aber ok. Diese Werte sehe ich auf dem seriell Monitor, Nur fährt er die nicht an

 OU+26  20
 OU+29  20
 OU+32  20
 OU+35  20
 
 OU+74  17
 OU+77  17
 OU+80  17
 OU+83  17
 OU+86  17
 OU+89  17
 OU+92  17
 OU+95  17
 OU+98  17
 OU+101  17
 OU+104  17
 LR+ OU+107  20
 LR+ OU+110  23
 LR+ OU+113  26
 LR+ OU+116  29
 LR+ OU+119  32
 LR+ OU+122  35
 LR+ OU+125  38
 LR+ OU+128  41
 LR+ OU+131  44
 LR+ OU+134  47
 LR+ OU+137  50
 LR+ OU+140  53
 LR+ OU+143  56
 LR+ OU+146  59
 LR+ OU+149  62
 LR+ OU+152  65
 LR+ OU+155  68
 LR+ OU+158  71
 LR+ OU+161  74
 LR+ OU+164  77
 LR+ OU+167  80
 LR+ OU+170  83
 LR+ OU+173  86
 LR+ OU+176  89
 LR+ OU+179  92
 LR+ OU+180  95
 LR+ OU+180  98
 LR+ OU+180  101
 LR+ OU+180  104
 LR+ OU+180  107
 LR+ OU+180  110

 LR+ OU+180  137
 LR+ OU+180  140
 LR+ OU+180  143
 LR+ OU+180  146
 LR+ OU+180  149
 LR+ OU+180  152
 LR+ OU+180  155
 LR+ OU+180  158
 LR+ OU+180  161
 LR+ OU+180  164
 LR+ OU+180  167
 LR+ OU+180  170
 LR+ OU+180  173
 
Meine Pos: 
2020 LR+ OU-17  23
 LR+ OU+20  26
 LR+ OU+23  29
 LR+ OU+26  32
 LR+ OU+29  35
 LR+ OU+32  38
 LR+ OU+35  41
Meine Pos: 
2020 LR+20  23
 LR+ OU+23  26
 LR+ OU+26  29
 LR+ OU+29  32
 LR+ OU+32  35
 LR+ OU+35  38
 LR+ OU+38  41
 LR+ OU+41  44
 LR+ OU+44  47
 LR+ OU+47  50
 OU+50  50
 LR+ OU+53  53
 LR+ OU+56  56

ich verwende ein Nodemcu Lua Lolin V3 ESP8266-Entwicklungsboard
Auch ein Serotauch brachte nichts.
Kann mir jemand helfen?

Du hast die Pins der LDRs (ldrLO, ldrRO, ldrLU, ldrRU) als OUTPUT deklariert, aber sie sollten INPUT sein, da du von ihnen Daten lesen möchtest. Dies könnte zu Problemen führen. Ändere die pinMode()-Anweisungen zu:

pinMode(ldrLO, INPUT);
pinMode(ldrRO, INPUT);
pinMode(ldrLU, INPUT);
pinMode(ldrRU, INPUT);

Möglicherweise mach ich etwas falsch, aber wenn ich das ändere kommen keine Werte mehr. Trotzdem Danke

Wie hast du den LDR angeschlossen?

Wie werden die Servo versorgt?
Das Thema Sonnenachfoger war schon öfters.
Wen du wirklich LDR nutzten willst müssen die an Analoge Pins, Rheienwiderstand nicht vergessen.
Für alles gibt's beispiele in der IDE.
Was für Board nutzt du?

LDR ist analog :wink:

Hat er doch geschrieben.

Mich würde eher der Schaltplan interessieren. Wobei sich 2 Fragen stellen.
Welche Servos (Genauer Typ) und woher bekommen die ihren Strom.

Gruß

Pucki

Ich hatte den gesamten Code nicht gelesen. :innocent:
Einige LDR-Module haben einen Alles-oder-nichts-Ausgang mit einstellbarem Schwellenwert.

Danke für eure Zeit.
Versorgt werden Sie mit extra 6V (4x1.5)
Die Servos sind aus China
Die Lieferbezeichnung ist "Dorhea Mini-Servo SG90 9g"
Schaltplan... naja...
Ich habe alle Enden der LDR auf A0 gehängt, alle anderen Enden bekamen 10k Widerstand (Jeder einen) und zu GND, und vor den Widerständen hängen die Datenleitung zu D1-D4
EDIT: Im Prinzip habe ich es so verdrahtet wie im Video von Joe Scott. https://www.youtube.com/watch?v=_6QIutZfsFs&t=289s

Ich habe nur die Fotozelle
sowas:
D

nicht mal ansatzweise das was Scott macht. Der liest jeden LDR einzeln analog aus:

Entschuldigung! Das stimmt natürlich. Ich hab schon so viel geändert, dass ich nicht mehr genau weiß woher ich das Prinzip habe. Bei dem Video habe ich angefangen.. Es war irgendein Video mit nur 2 Fotozellen und einem ESP

Ich würde das Projekt TESTWEISE splitten.

Dazu einfach EIN Servo mit den Arduino via Steckboard verbinden. Bei dir mit der Externen Stromversorgung.

Dann würde ich den Servo "spazieren fahren", also auf von mir gewünschte Positionen fahren. Mit ein Delay dazwischen damit der Fahren kann und ich sehe wo der Landet.

Nun würde ich EIN Fotosensor nehmen und seine Werte analysieren. Ebenfalls im Test alleine auf einen Board.

Wenn ich beides sauber am laufen habe, brauche ich es nur noch verbinden. Die Werte des Fotosensor auswerten und den Servo via Selbst-Entwickelter Formel ansteuern.

Kleiner Tipp.
Werte die Fotosensoren einzeln aus, (jeweils 10 Abfragen) berechne ein Durchschnittswert pro Sensor. Dann weise jeder Position des Fotosensor eine Servo-Stellung zu. Schaue welcher Sensor de höchsten Wert hat, und fahre dann den Servo auf die zugewiesene Stelle.

SO würde ich das Problem angehen und auch lösen.

Geschätzt ca. 100 bis max. 150 Zeilen Code :wink:

Nebenbei. Fotosensoren liefern ein Analog-Wert. Ergo brauchst du Pro Sensor auf ein Analog-Pin bzw. ein Extra-Chip.

Gruß

Pucki

Nachtrag:

Sollte ich mehr als 1 Servo haben, würde ich alles Servos NACHEINANDER mit den Testaufbau verbinden.

Grund Siehe Bewertungen Amazone.

Dieser Testaufbau würde dann Problem des Servos erkennen.

Gruß

Pucki

Danke sehe das erstes mall :wink:

Tja habe anderen wahrscheinlich Amazon in den Bewertungen steht nix drüber, wenn man separate ausreichende Versorgung hat sollten je nach PRG alle "Gleichzeitig" funktionieren, jedoch wen man schrott erwischt hat dan natürlich haben die Aussetzer.

Schau mall hier kannst wo möglich für dich anpassen.

Ist das das folgende Schaltbild (die LDRs sind an A0, A1, A2 und A3 angeschlossen)?

Leider nicht mein Node Mcu hat nur ein A0. Ich bin gerade auf der Suche nach einem Programm um Schaltpläne zu erstellen um es besser erklären zu können

Besten Dank für die vielen Tipps! ich werde wie vorgeschlagen, das ganze nochmal zerlegen und einzeln aufbauen. Ausserdem, versuche ich noch einen Schaltplan zu erstellen um bessere Fragen stellen zu können