Gleich vorweg: Die hier präsentierten Informationen beruhen weitestgehend auf folgenden instructables-Beitrag: https://www.instructables.com/Controlling-servo-motor-using-IR-remote-control/
Mit dem Arduino lassen sich sehr einfach gewünschte Aktionen (z.B. Schalten eines Relais) mit einer Infrarot-Fernbedienung auslösen. Auf Amazon gibt es ein passendes Fernbedienung-Empfänger-Kit um nur 5 Euro zu kaufen.
In meinem Fall wollte ich mit der Fernbedienung einen Servomotor ansteuern. Drücke ich auf die rechte Pfeiltaste, so soll sich der Servo nach rechts drehen, drücke ich die linke Pfeiltaste entsprechend nach links. Der Schaltplan ist sehr überschaubar:
Damit der Arduino die zum Einsatz kommenden Tasten überhaupt lesen kann, müssen die betätigten Tasten zuerst gelesen/decodiert werden. Dazu lädt man sich die zunächst die IR-Fernbedienungs-library herunter und kopiert sie ins library-Unterverzeichnis vom Arduino-Programm: https://drive.google.com/drive/folders/0B77d7bcO_gwvfnU3ejV1eEYxRW5Td1FqV2ttOFlFWXFJQ1Y1MmZEeGVpcFI4bzZzenQxbkE
Über das Arduino-Menü „Examples“ ⇒ „IRremote“ ⇒ öffnet man dann das Programm „IRrecvDemo„.
Betätigt man nun die später zum Einsatz kommenden Tasten, so erscheint ihr HEX-Code im seriellen Monitor. Bei mir waren dies 449E79F beim betätigen der rechten Pfeiltaste bzw. 8C22657B bei der linken Pfeiltaste:
Dieses Hilfsprogramm wird dann nicht mehr benötigt. Die wichtigen HEX-Codes notiert man sich und trägt diese dann im eigentlichen Arduino-sketch gleich zu Beginn ein:
Hat man alles richtig gemacht, so reagiert nun der Arduino auf die gewünschten Tasten der Fernbedienung. In meinem Fall drehte sich der Servo wie erhofft nach rechts bzw. links…
Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
// Written by: Mohamed Soliman // This code is for controlling servo motor with IR remote control // When clicking at any of two buttons the motor is toggling between the rotation and stop #include <IRremote.h> //must copy IRremote library to arduino libraries #include <Servo.h> #define right 0x449E79F //clockwise rotation button #define left 0x8C22657B //counter clockwise rotation button int RECV_PIN = 2; //IR receiver pin Servo servo; int val; //rotation angle bool cwRotation, ccwRotation; //the states of rotation IRrecv irrecv(RECV_PIN); decode_results results; // ================ // === SETUP === // ================ void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver servo.attach(9); //servo pin } // =============== // === LOOP === // =============== void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value if (results.value == right) { cwRotation = !cwRotation; //toggle the rotation value ccwRotation = false; //no rotation in this direction } if (results.value == left) { ccwRotation = !ccwRotation; //toggle the rotation value cwRotation = false; //no rotation in this direction } } //Serial.print("cwRotation = "); //Serial.println(cwRotation); if (cwRotation && (val != 1)) { val--; //for colockwise button servo.write(val); delay(20); //General speed } if (ccwRotation && (val != 170)) { val++; //for counter colockwise button servo.write(val); delay(20); //General speed } } |