Servo mit Fotozelle ansteuern

Moin Community,
ich bin leider noch ein absoluter Beginner und wollte eigentlich eine simple Schaltung aufbauen. Ein Servo soll mittels einer Fotozelle angesteuert werden. Wenn licht an, dann Servo von Mittelstellung nach links, wenn Licht aus, dann Servo wieder in die Mittelstellung.

#include <Servo.h>

const int lichtSensorPin = A0;  // Lichtsensor an Analogpin A0
const int schwelle = 900;       // Schwellenwert für Licht an/aus (anpassen!)
const int servoPin = 3;        // Servo an Digitalpin 3

Servo meinServo;

void setup() {
    meinServo.attach(servoPin);
    meinServo.write(90); // Startposition (Mittelstellung)
    Serial.begin(9600);
}

void loop() {
    int lichtWert = analogRead(lichtSensorPin);
    Serial.println(lichtWert); // Debugging

    if (lichtWert > schwelle) {
        meinServo.write(0);  // Licht an -> Servo nach links
        delay(15); // Kurze Verzögerung, um die Bewegung zu stabilisieren
    } else {
        meinServo.write(90); // Licht aus -> Servo zurück zur Mittelstellung
        delay(15); // Kurze Verzögerung für die Rückbewegung
    }
    
    delay(100); // Kleine Verzögerung zur Stabilisierung
}

Leider brummt der Servo nur und es bewegt sich nichts. Ist das ein Fehler im Code? Ich als Laie erkenne hier leider keinen Fehler. Daher die Frage an Euch Experten. Vielleicht kann mir da jemand einen Tip geben.

Hallo laszlomirk

Herzlich Willkommen im besten Arduinoforum der Welt :slight_smile:

Der Arduino dient nicht als Stromversorgung für den Servo.

Nimm eine extra Versorgung dafür.

Ist unnötig und der Kommentar ist falsch

Wie @paulpaulson schon schreibt, liegt es wahrscheinlich an der Stromversorgung. Der Code funktioniert.

Hab jetzt die Werte angepasst... jetzt tut es genau was es soll... Danke Euch... ich Trottel :sweat:

#include <Servo.h>

const int lichtSensorPin = A0;  // Lichtsensor an Analogpin A0
const int schwelle = 260;       // Schwellenwert für Licht an/aus (anpassen!)
const int servoPin = 9;        // Servo an Digitalpin 3

Servo meinServo;

void setup() {
    meinServo.attach(servoPin);
    meinServo.write(90); // Startposition (Mittelstellung)
    Serial.begin(9600);
}

void loop() {
    int lichtWert = analogRead(lichtSensorPin);
    Serial.println(lichtWert); // Debugging

    if (lichtWert > schwelle) {
        meinServo.write(50);  // Licht an -> Servo nach links
        delay(15); // Kurze Verzögerung, um die Bewegung zu stabilisieren
    } else {
        meinServo.write(90); // Licht aus -> Servo zurück zur Mittelstellung

    }
    delay(100); // Kleine Verzögerung zur Stabilisierung
}

Hi,

hast du jetzt den Servo auch auf Pin9 umgehängt oder nur den Schwellenwert für den Sensor runter gedreht?

Gruß, Marcel

Hier zeigt sich mal wieder ein Problem mit den Kommentaren

Wozu ist das gut, wenn du

hast?

Warum nicht
Serial.begin(115200);
?

Warum int statt uint8_t?

1 Like

weil man dann auf dem Terminal auch 115200 einstellen muß?
9600 ist schon standartmäßig gesetzt. :wink: :wink:
Grüße Uwe

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.