Motorensteuerung mit LDR

Hallo zusammen,

mein aktuelles Projekt dreht sich um ein kleines Modellauto das ich mit meinem arduino UNO steuern möchte. Dabei soll es erkennen, ob es eine Wand vor sich hat oder nicht. Ich habe zwar alles angeschlossen und das Programm geschrieben, aber es funktioniert nicht so wie gedacht.
Zu Testzwecken habe ich dass Programm so geschrieben, dass der arduino je nach Widerstandswert des LDR den Motor ein- bzw. ausschaltet. Aber immer wenn der Motor ausgeschaltet wird verändert sich der Wert des LDR so, dass er wieder über der Schwelle liegt und der Motor wird eingeschaltet. Dann geht der Wert wieder unter die Schwelle und der Motor wird wieder ausgeschaltet; etc.

Hier ist mein Programm, der Aufbau der Schaltung + alle Datenblätter befinden sich im Anhang:

const int motorPin = 6;
const int ldr1Pin = A1;
const int ledPin = 13;
int ldr1value = 0;
const int wallValue = 60;

void setup() {
pinMode(motorPin, OUTPUT);
pinMode(ldr1Pin, INPUT);
pinMode(ledPin, OUTPUT);

Serial.begin(9600);
Serial.println("Setup...");

digitalWrite(motorPin, LOW);

for(int i = 0; i < 3; i++) {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}

}

void loop() {
getInputs();
digitalWrite(motorPin, HIGH);
while(ldr1value >= wallValue) {
getInputs();
digitalWrite(motorPin, LOW);
}
}

void getInputs() {
ldr1value = map(getSensorValue(ldr1Pin), 0, 40, 0, 255);
Serial.println(ldr1value);
delay(250);
}

int getSensorValue(int targetPin) {
return analogRead(targetPin);
}

Was mache ich falsch?

Gruß, Cronoxyd

S8050_datasheet.pdf (71.9 KB)

A906009_datasheet.pdf (175 KB)

Was mache ich falsch?

Was soll der sketch denn sonst machen?

Ändert sich ldr1Value auch, wenn kein Motor angeschlossen ist ?

Der Arduino selbst hängt hoffentlich nicht an der 6V Batterie ...

Hi michael_x,

Was soll der sketch denn sonst machen?

-> Der Sketch soll den Widerstandswert des LDR ermitteln und dann den Motor abschalten, wenn der Wert über der Schwelle wallValue liegt.
Das Problem dabei ist nur, dass der Wert unter die Schwelle rutscht, wenn der Motor vom arduino abgeschaltet wird. Dadurch wird der Motor wieder eingeschaltet und der Wert schießt über die Schwelle hinaus, wodurch der Motor wieder abgeschaltet wird, usw.

Ändert sich ldr1Value auch, wenn kein Motor angeschlossen ist ?

-> Der Wert verändert sich auch, wenn der Motor nicht angeschlossen ist. Kein Licht -> großer Wert; Licht -> kleiner Wert

Der Arduino selbst hängt hoffentlich nicht an der 6V Batterie ...

-> Nein, er hängt am USB.

Gruß, Cronoxyd

Da sind 2 gravierende Schaltungsfehler:
Der LDR muß mit einem 10 kOhm in Reihe zwischen +5V und Masse geschaltet werden und der analoge Eingang mit dem Verbindungspunkt des LDR und 10kOhm Widerstand verbunden werden.
Nur so ist die Messung unabhängig von Spannungseinbrüchen auf der Versorgungsspannung.

Arduino kann den PNP-Transistor nicht sperren da er keine genügend hohe Spannung ausgeben kann damit die Spannung an der Basis des Transistors größer als 6-0,7V (=5,3V) wird. Nimm einen NPN Transistor zur Motoransteuerung.

Ein prinzipielles Problem ist eine Wand mit einem LDR zu detektieren. Da bieten sich IR-Entfernungssensoren oder Ultraschallsensoren an.

Grüße Uwe

Hi uwefed,

danke für deine Verbesserungsvorschläge. Alles funktioniert jetzt so wie es soll... Naja, beim Feldtest ist das Auto trotzdem gegen die Wand gefahren, aber das liegt am LDR. Ich werde mir wohl einen Abstandsmesser kaufen müssen.

Gruß, Cronoxyd