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. :slight_smile:

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. :slight_smile:

Hallo Yoghurt
und einem (Garten) beim Nachbarn ausleihen?

:wink: :sunglasses:
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?