Servo brummen bei IR Fernsteuerung

Hallo Leute,
ich bin neu in diesem Forum deshalb verzeiht mir eventuelle Fehler :smiley:
Mein Problem besteht darin das ich versuche einen Servo mit einer IR Fernbedienung zu steuern.
Sobald ich auf Taste 1 dr√ľcke soll er in Position 1 fahren, bei erneuter bet√§tigung in Position 2 und dann immer zwischen diesen wechseln (0¬į ‚Üí 180¬į). Das klappt auch soweit nur das er in beiden Positionen brummt bzw. summt. Andere Projekte funktionieren mit dem Servo ohne diesen Effekt, daher schlie√üe ich Spannungs bzw. Stromprobleme aus. Was meint ihr k√∂nnte das sein?
Danke schon mal f√ľr eure Hilfe :slight_smile:

#include <IRremote.h>
#include <Servo.h>

int RECV_PIN = 11; //InPut Pin vom IR Sensor
int taste1 = 0; //Variable zum Speichern des Zustands (I/0) Taste 1 Fernbedienung

IRrecv irrecv(RECV_PIN);
decode_results results;
Servo myservo;¬† //myservo Variable f√ľr Servo


void setup() {
  Serial.begin(9600);
  myservo.attach(9);  // Servo wird auf Pin 9 deklariert
  myservo.write(0);
  irrecv.enableIRIn();
}

void loop() {

  if (irrecv.decode(&results)) {

    Serial.println(results.value, DEC);

    if (results.value == 4146609271) //Taste 1 auf Tv Fernbedienung
    {

      if (taste1 == 0)
      {
        taste1 = 1;
        myservo.write(0);
        Serial.println(taste1);
        delay(1000);
      }
      else
      {
        taste1 = 0;
        myservo.write(180);
        Serial.println(taste1);
        delay(1000);
      }
    }
    irrecv.resume();
  }
}

Weil der Servo durch deinen Sketch bei Tastendruck immer schnell hin und her wandern will.

Deine Logig hat ja nach einer Sekunde schon den Weg in die "else" Bedingung geschafft und damit l√§uft er zur√ľck.

@HotSystems
Ich Verstehe so es so halb :smiley:
Könntest du mir eventuell eine Lösung vorschlagen wie ich das Problem behebe?

Vielen Dank im vorraus :slight_smile:

Du darfst den Status der Variablen "taste1" erst wechseln, wenn der IR-Code nicht mehr vorhanden ist.
Dann springt er beim nächsten Tastendruck in die "else"-Bedingung.

@HotSystems
Aber er d√ľrfte doch gar nicht in die else Bedingung springen weil er ja das if erf√ľllt oder habe ich einen Denkfehler?
Wie schaffe ich es das dies nicht mehr der Fall ist? Alles was ich Probiere bringt das gleiche Ergebnis :smiley:

L3gend22:
@HotSystems
Aber er d√ľrfte doch gar nicht in die else Bedingung springen weil er ja das if erf√ľllt oder habe ich einen Denkfehler?
Wie schaffe ich es das dies nicht mehr der Fall ist? Alles was ich Probiere bringt das gleiche Ergebnis :smiley:

Hier kommt es auch darauf an, wie lange du die Taste der IR-Fernbedienung dr√ľckst.
Da du den Status der Variablen gleich auf ‚Äú1‚ÄĚ setzt, ist damit die ‚Äúelse‚ÄĚ-Bedingung erf√ľllt.

Wie du es machen musst, steht in Post #3.

@HotSystems
Ok das macht Sinn, nur fehlt mir leider der Ansatz wie ich das lösen könnte ohne meine
gew√ľnschte Funktion zu verlieren. Beziehungsweise in welchem abschnitt ist denn der IR Code dann nicht mehr vorhanden um dann die Variable zu beschreiben?

L3gend22:
@HotSystems
Ok das macht Sinn, nur fehlt mir leider der Ansatz wie ich das lösen könnte ohne meine
gew√ľnschte Funktion zu verlieren. Beziehungsweise in welchem abschnitt ist denn der IR Code dann nicht mehr vorhanden um dann die Variable zu beschreiben?

Leider habe ich mit Servos noch keine große Erfahrung, daher kann ich nur einen kleinen Tipp geben.
Hier mal einen Sketch (ungetestet) der funktionieren könnte:

#include <IRremote.h>

#define led13Pin 13
#define RECV_PIN  11   //InPut Pin vom IR Sensor

uint8_t SwitchValue;

IRrecv irrecv(RECV_PIN);
decode_results results;


void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(led13Pin, OUTPUT);
  Serial.print("Start...");
}


void loop() {
  if (irrecv.decode(&results)) {
    Serial.print(results.value);
    if (results.value == 4146609271)
      SwitchValue = !SwitchValue;
      if (SwitchValue == 1) {
 ¬† ¬† ¬† ¬†// Hier deinen Code ausf√ľhren
        // Servo 0
        digitalWrite(led13Pin, HIGH); // zum testen
      }
      else {
 ¬† ¬† ¬† ¬†// Hier deinen Code ausf√ľhren
        // Servo 180
        digitalWrite(led13Pin, LOW);  // zum testen
      }
    delay (200);
    irrecv.resume();
  }
}

Kann es nur mit IR und Led 13 testen, das funktioniert.
Du musst noch deinen Servo-Code einbauen.

@HotSystems
Ich habe deinen Code genau so √ľbernommen und den Servo Code eingef√ľgt aber leider besteht das Problem weiterhin das er summt.

#include <IRremote.h>
#include <Servo.h>

#define led13Pin 13
#define RECV_PIN  11   //InPut Pin vom IR Sensor

Servo myservo;  // create servo object to control a servo
uint8_t SwitchValue;

IRrecv irrecv(RECV_PIN);
decode_results results;


void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(led13Pin, OUTPUT);
  Serial.println("Start...");
}


void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    if (results.value == 4146609271)
      SwitchValue = !SwitchValue;
      if (SwitchValue == 1) {
        myservo.write(0);
        delay(15);
        digitalWrite(led13Pin, HIGH); // zum testen
      }
      else {
        myservo.write(180);
        delay(15);
        digitalWrite(led13Pin, LOW);  // zum testen
      }
    delay (200);
    irrecv.resume();
  }
}

Wann genau und wie lange summen die Servos ?
Ich vermute jetzt ein Problem mit der Versorgungsspannung.
Leider fehlt mir die Erfahrung mit Servos.

@HotSystems
Eigentlich habe ich gedacht das ausschließen zu können, da der Servo in ähnlichen Schaltungen nicht Brummt.
Der Servo beginnt, sobald der Sketch hochgeladen ist mit dem Brummen. Er l√§sst sich auch zwischen 0-->180¬į drehen aber wie gesagt die ganze Zeit dieses nebenger√§usch was nicht normal ist.

Dann stimmt etwas mit deinem Aufbau nicht.
Schlechtes Netzteil.
Schlechter Kabelkontakt.

Oder oder oder.....

Wenn die gleich zu Anfang brummen ist dein Aufbau schlecht.

@HotSystems
Meinst du? Habe den kompletten Aufbau jetzt nochmal anders aufgebaut mit zusätzlicher Stromquelle und immer noch das gleiche. Habe auch mal 2 andere Servos probiert das gleiche...
Wie bereits gesagt, bei ähnlich - gleichem Aufbau funktionieren andere Schaltungen bereits wie der Beispiel Servo Sketch, nur in verbindung mit IR Fernbedienung anscheinend nicht :confused:

OK...
Ich habe mal meinen Servo rausgekramt und angeschlossen.
Ich verwende Pin D5, da gibt es klein Brummen.

Teste mal D5

Edit:
D9 brummt bei mir auch.

Edit2:
Wenn der Servo auf 180 fahren soll summt er leise, bei 170 ist er ruhig.

Ich vermute das ist auch Servo abhängig.

Man darf vermutlich den Servo nicht bis ans Ende fahren.

Bei 180 summt meiner und ist schon √ľber 180 Grad raus.
0 Grad ist er ruhig und bei 162 hat er 180 Grad und ist ruhig.

Ist halt ein "billig-Teil".

@HotSystems
Also bei 0 und 180 summt er bei mir egal bei welchem Pin.
Fahre ich aber nur bis auf 1 und wie du gesagt hast 162 ist er bei 1 ganz ruhig und bei 162 ganze leise noch am brummen.

L3gend22:
@HotSystems
Also bei 0 und 180 summt er bei mir egal bei welchem Pin.
Fahre ich aber nur bis auf 1 und wie du gesagt hast 162 ist er bei 1 ganz ruhig und bei 162 ganze leise noch am brummen.

Ok, das liegt sicher nicht am IR, sondern am Servo selbst, vermute ich.
Bei mir ist er bei 0 und 162 ganz ruhig.

Auf dieser Basis solltest du weiter experimentieren.
Oder User mit mehr "Servo-Erfahrung" fragen.
Ich kann da nicht weiter helfen, sorry.

P.S.
Habe deinen Anfangssketch mal getestet, der funktioniert so nicht.
Der dreht nur einmal in eine Richtung und bleibt da.

Trotzdem danke ich dir viel mals f√ľr deine Hilfe :slight_smile:
Du hast mir sehr weiter geholfen und viele denkanstöße gegeben :wink:
Ich werde weiter dran bleiben!

L3gend22:
Ich werde weiter dran bleiben!

Und bitte hier berichten.

Das Problem des Brummens liegt wohl am "billigen" Servo.
Ich habe mir heute einen "besseren" von einem Bekannten geliehen, der Brummt und Summt NICHT.

Egal welche Einstellung ich wähle.

Krass :o
Danke Euch beiden f√ľr den Bericht!
Ich hatte ein ähnliches Problem
bei eine Farbfilter Scheibe…
Hab es irgendwann in die Ecke gestellt.
Wird Zeit es mit nem anderen Servo erneut
zu probieren.
20170630_004436.jpg
(da ist noch ein Satz Zahnräder dazwischen 12:18)

Stefan