Servo und IR-Sensor gleichzeitig verwenden

Guten Abend,

ich programmiere zur Zeit einen kleinen Roboter mit einigen Funktionen. Mittels einer Fernbedienung kann zwischen verschiedenen Programmen gewählt werden. Nun zu meinem Problem:

Der Infrarotsignale der Fernbedienung konnten bis ich die Servo-Library (#include <Servo.h>) eingebunden habe problemlos ausgelesen werden. Wenn ich IR-Sensor und Servo in meinen Sketch einbaue, dann passiert folgendes:

-im seriellen Monitor werden ständig verschiedene Nummern angezeigt, obwohl ich keine Knöpfe der Fernbedienung drücke

-der Servo zuckt hin und wieder
Test-Sketch: hier wurde meiner Ansicht nach nur alles “nötige” initialisiert. Im seriellen Monitor werden wie gesagt wirre Zahlen ausgegeben.

#include <IRremote.h> 
#include <Servo.h>
#define plus 0xFF18E7 
#define minus 0xFF4AB5  
int RECV_PIN = 10;     
Servo servo;


IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  servo.attach(39);     //servo pin
}

void loop() 
{
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
}
}

Weiß jemand wie ich IR-Sensor und Servo gleichzeitig betrieben kann?
Vielen Dank im Voraus für die Antworten :slight_smile:

LG
sontak_de

Wann genau kommen die unterschiedlichen Zahlen auf dem seriellen Monitor ?
Und zeig mal die gezeigten Zahlen.

Dies wird auf dem seriellen Monitor ausgegeben, ohne das ich was mache:

"
3BA573D8
CC32428E
21280353
25AE7EE3
FFFFFFFF
FEAC02E5
FFFFFFFF
8DDE337D
B522ED88
6FB84EC7
22AE7A2A
FCABFFBE
6DD552E3
FFFFFFFF
FFFFFFFF
"

Screenshot

Was für einen IR-Empfänger hast du dran ?
Das sieht nach Störungen aus, evtl. durch Leuchtstoffröhren.

Hallo,

kann es sein dass die beiden Bibliotheken für Servo und IRRemote denselben Timer1 verwenden und sich dadurch gegenseitig stören?

Viele Grüße,

Richard

tinyisland:
kann es sein dass die beiden Bibliotheken für Servo und IRRemote denselben Timer1 verwenden und sich dadurch gegenseitig stören?

Darauf würde ich auch tippen.
Grüße Uwe

uwefed:
Darauf würde ich auch tippen.

Das hat mir jetzt keine Ruhe gelassen. :wink: :wink:

Das Problem liegt nicht an den Libraries bzw. Timern.

Da muss was am Aufbau falsch sein.
Bei mir funktioniert das am Uno problemlos.

Oder der TO verwendet falsche bzw. andere Libs die wir nicht kennen.

Aber da er sich nicht mehr meldet, hat er seinen Fehler sicher entdeckt, nur mag er ihn hier nicht nennen.

Er will ja noch nicht mal schreiben, wellchen IR-Empfänger er verwendet.
Vermutlich nur eine IR-Diode.

Danke für die bisherigen Antworten :slight_smile: . Entschuldigung, dass ich nicht gemeldet habe... hatte viel zu tun. Mein Problem ist noch nicht behoben. Ich habe mehrere IR-Sensoren verwendet u.a. diesen hier: klick. Bei allen das selbe Spiel. Wenn ich den Servo aus dem 5V- Pin herrausziehe, geht alles problemlos.

Da der Roboter zwei Programme hat und IR-Sonsor und Servo praktisch unabhängig voneinander funktionieren sollen, habe ich versucht den Strom für den Servo über ein Digital-Pin zu steuern (Also diesen bei Gebrauch des Servo an und bei Nichtgebrauch auszuschalten, um die Störung zu eliminieren). Leider liefert der Pin anschienen nicht den nötigen Strom, denn der Servo bewegt sich kaum, man hört aber, dass er "will". Nun suche ich nach einer Möglichkeit, wie ich den Servo praktisch abstellen kann, wenn ich den IR-Sensor nutze. Hat da jemand eine Idee?

Wenn ich einmal "servo.attach(servopin)" im Code habe, ist er immer aktiviert und das Problem besteht.
Wäre schön, wenn jemand was weiß.

LG sontak_de

Dann schreibe uns doch mal, welche Libraries du verwendest.i
Den Hyperlink posten, wo du die runtergeladen hast.

Das Problem muss bei dir im Aufbau liegen, denn wie geschrieben, funktioniert es hier fehlerfrei.
Hast du in deinem Raum eine Leuchtstoffröhre ? Die erzeugt oft Störungen.

Das Abschalten des Servos ist keine Lösung, da bei dir ja auch Störungen sind, wenn nur die Library eingebunden ist.

Hallo Dieter.

Der jetzige Stand ist: Es werden keine Zahlen mehr "wirr" ausgegeben. Warum weiß ich nicht habe am Raum nichts verändert. Und hier sind auch keine Leuchtstoffröhren. Das Problem ist nicht behoben habe es aber jetzt "provisorisch" so gelöst:

Info: Der "Servopin", an dem der Servo tatsächlich hängt, ist der Pin 39.

Bei Programm1 wird der Roboter mit der Fernbedienung über IR gesteuert. Beim Programm2 bewegt der Servo einen Ultraschallsensor. Nun habe ich " servo.attach(pin)" jeweils in den void-Abschnitt vom jeweiligen Programm geschrieben. Nur bei Programm2, wo der Servo benötigt wird, habe "servo.attach(39)" eingegeben. Bei den anderen Programmen habe ich "servo.attach(12)" verwendet. Auf Pin 12 ist nichts angesteckt. Nun funktioniert alles einwandfrei. Ich bin mir bewusst, dass es nicht die "eleganteste" Lösung ist, aber es ist für den Einsatzzweck ausreichend und funktioniert..

Trotzdem hier die Librarys:
Servo
und
IR-Sensor

Warum das Problem besteht habe ich nach langem Rätseln nicht herausbekommen... Vielleicht ist ja was am Board...

LG sontak_de

Und was hat firmata mit IRRemote zu tun ?

sontak_de:
Da der Roboter zwei Programme hat und IR-Sonsor und Servo praktisch unabhängig voneinander funktionieren sollen, habe ich versucht den Strom für den Servo über ein Digital-Pin zu steuern (Also diesen bei Gebrauch des Servo an und bei Nichtgebrauch auszuschalten, um die Störung zu eliminieren). Leider liefert der Pin anschienen nicht den nötigen Strom, denn der Servo bewegt sich kaum, man hört aber, dass er "will".

Wie hast Du das Servo den angeschlossen? Du kannst den Strom für das Servo nicht aus einem Pin entnehmen. Die 5V für das Servo musst Du direkt aus einem Netzteil versorgen. Nur den Steueranschluß des Servo ( und natürlich Gnd ) darfst Du mit dem Arduino verbinden.