Problem mit Sensoren

Hallo Ich heiße Stefan und habe ein Problem mit meinen Arduino Duemilanove Bord. Wie kann ich 4 Sensoren ansteuern um damit 2 Elektromotoren vor und zurück fahren zu lassen. Je 2 Sensoren für Links ( 1 Motor) und 2 Sensoren für Rechts ( 1 Motor). Ich habe schon mit Leds rumgespielt und das hat Super gut geklappt. Habe auch schon mit einen Sensor probiert das hat auch geklappt, aber mit 2 Sensoren nicht mehr. Die Sensoren sind Arduino Infrared Reflectance Sensor. Und dann habe ich noch ein Arduino Sensor Shield V4 digital analog gekauft. Der code den ich für einen Sensor habe sieht so aus. int ledPin = 13; // choose pin for the LED int inputPin = 2; // choose input pin (for Infrared sensor) int val = 0; // variable for reading the pin status

void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inputPin, INPUT); // declare Infrared sensor as input }

void loop() { val = digitalRead(inputPin); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin, LOW); // turn LED OFF } else { digitalWrite(ledPin, HIGH); // turn LED ON } Kann mir jemand Helfen Stefan

Ich hab keine Ahnung, was Du meinst… :slight_smile:

Kannst Du mal aufzeichnen, was Du hast?

Hallo Ich habe ein Board von Arduino http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=270580712009 und http://cgi.ebay.de/Arduino-Infrared-Reflectance-Sensor-for-Sensor-Shield-/150471710772?pt=LH_DefaultDomain_0 und http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=270591173829

Hilft das.

@stekle23

Wenn du deine Anwendung mit mehr als einem Sensor betreiben willst, muss du im Code die entsprechenden Erweiterungen machen.

Ich empfehle dir, basierend auf deinem Beispielprogramm, die Erweiterungen Schritt für Schritt zu machen. Wenn es mit 2 Sensoren funktioniert, ist der Schritt zur fertigen Lösung nicht mehr so weit.

Das Ansteuern und Einlesen des Infrarot-Sensors hat ja scheinbar funktioniert.

Alles zusammenbauen, also alle Sensoren und Motoren, und dann zu testen ist meist aufwändig, da zuviele Probleme auftauchen können. Besster Step für Step.

Kannst Du mal den Code mit den zwei Sensoren posten, der nicht mehr geht?

Hallo Joghurt Ich habe es nur mit 1 Sensor geschaft. Der Code lautet

int ledPin = 13; // choose pin for the LED int inputPin = 2; // choose input pin (for Infrared sensor) int val = 0; // variable for reading the pin status

void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inputPin, INPUT); // declare Infrared sensor as input }

void loop() { val = digitalRead(inputPin); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin, LOW); // turn LED OFF } else { digitalWrite(ledPin, HIGH); // turn LED ON }

Als ich es mit 2 Sensoren probiert habe hat es nicht mehr geklappt.

Hallo Joghurt Sorry das ist der richitge code

int ledPin1 = 12; // choose pin for the LED int ledPin2 = 11; // int inputPin1 = 2; // choose input pin (for Infrared sensor) int inputPin2 = 3; int val = 0; // variable for reading the pin status

void setup() { pinMode(ledPin1, OUTPUT); // declare LED as output pinMode(ledPin2, OUTPUT); pinMode(inputPin1, INPUT); // declare Infrared sensor as input pinMode(inputPin2, INPUT);

}

void loop(){ val = digitalRead(inputPin1); // read input value val = digitalRead(inputPin2); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin1, LOW); // turn LED OFF digitalWrite(ledPin2, HIGH); // turn LED OFF } else { digitalWrite(ledPin1, HIGH); // turn LED ON digitalWrite(ledPin2, LOW); // turn LED ON } }

Naja mit

val = digitalRead(inputPin1); // read input value val = digitalRead(inputPin2); // read input value

überschreibst du den Wert des ersten Sensors mit dem des Zweiten. Du musst also noch eine weitere Variable (val2) für den Sensor 2 verwenden, und somit auch deinen Code entsprechend mit einer weiteren Bedingung für val2 ergänzen.

Vielleicht was in der Richtung:

void loop(){
 int val1 = digitalRead(inputPin1);  // read input value
 if (val1 == HIGH) {            // check if the input is HIGH
   digitalWrite(ledPin1, LOW);  // turn LED OFF
 } else {
   digitalWrite(ledPin1, HIGH); // turn LED ON
 }
 int val2 = digitalRead(inputPin2);  // read input value
 if (val2 == HIGH) {            // check if the input is HIGH
   digitalWrite(ledPin2, HIGH);  // turn LED OFF
 } else {
   digitalWrite(ledPin2, LOW); // turn LED ON
 }
}

Hallo Nochmal eine Frage Kann man ein Programm so machen das je Sensor 2 Digitale Pins belegt werden ( Vorwärts Rückwerts)

Klar, die Frage ist, wie Du die Logik dahinter haben willst...?

Hallo Joghurt Ich möchte an jeden Kanal 1 Relais hängen für vor und zurückfahren bzw ein Umpolrelais Kannst du mir da weiterhelfen

Naja, dann machst Du einfach digitalWrite([...], LOW) für den einen Pin, und digitalWrite([...], HIGH) für den anderen, bzw. andersrum. :)

Andererseits ist die Frage, ob Dein Fahrzeug immer fahren soll oder auch mal stehen soll oder wie Du es geplant hast...?

HALLO Habes es mal zu erweitern versucht klappt aber nicht ganz.

Warum

nt ledPin1 = 12; // choose pin for the LED int ledPin2 = 11; //choose pin for the LED int ledPin3 = 10; //choose pin for the LED int ledPin4 = 9; //choose pin for the LED int inputSensor1 = 2; // choose input pin (for Infrared sensor) int inputSensor2 = 3; // choose input pin (for Infrared sensor) int val_1= 0; // variable for reading the pin status int val_2= 1; // variable for reading the pin status

void setup() { pinMode(ledPin1, OUTPUT); // declare LED as output pinMode(ledPin2, OUTPUT); // declare LED as output pinMode(ledPin3, OUTPUT); // declare LED as output pinMode(ledPin4, OUTPUT); // declare LED as output pinMode(inputSensor1, INPUT); pinMode(inputSensor2, INPUT); }

void loop() { int val_1 = digitalRead(inputSensor1); // read input value int val_2 = digitalRead(inputSensor2); // read input value

if (val_1 == HIGH) // check if the input is HIGH if (val_2 == HIGH) // check if the input is HIGH { digitalWrite(ledPin1, LOW); // turn LED OFF digitalWrite(ledPin2, HIGH); // turn LED ON digitalWrite(ledPin3, LOW); // turn LED OFF digitalWrite(ledPin4, HIGH); // turn LED ON

} else { digitalWrite(ledPin1, HIGH); // turn LED ON digitalWrite(ledPin2, LOW); // turn LED OFF digitalWrite(ledPin3, HIGH); // turn LED OFF digitalWrite(ledPin4, LOW); // turn LED ON

} }

if (val_1 == HIGH) // check if the input is HIGH if (val_2 == HIGH) // check if the input is HIGH

Was genau bezweckst Du damit...?

Hallo Ich will einen Rasenmäherroboter bauen

Das wär auch was für mich, leider hab ich keinen Garten. :)

Hallo Yoghurt und einem (Garten) beim Nachbarn ausleihen?

;) 8-) Ist nicht ernst gemeint Grüße Uwe

Hallo Der Rasenmäherroboter hat 4 Motoren, und jeder Sensor soll einen Motor bedienen. Das mit den Pausen bzw Start Stop ist auch interesant. Ps :Der Rasenmäherroboter hat Kettenantrieb.

Moment, Du meinst, er hat vier Sensoren und zwei Motoren, oder?

Falls vier Motoren: Warum?

Wie willst Du den Rand des Gartens bestimmen? Wie die relative Position im Garten?