Je me suis lancée il y a peu dans un projet perso qui consiste à incrémenter des angles de rotation à mon servo moteur en utilisant une télécommande. Les tests avec servo seuls sont concluant, je peux modifier l'angle sans problème, tout fonctionne. Le problème arrive avec l'IR. je ne parviens pas à récupérer le code exact des touches de la télécommande. Avec simulation sur tinkercad ok mais avec arduino non.
Voici déjà les données matériel :
Arduino uno R3
Servo DS2312MG
Récepteur IR Iduino
Télécommande Keyes (set IR)
Concernant le setup:
Branchement servo vérifié
Branchement récepteur vérifié (GND sur broche signe -, signal sur broche signe S, alim au centre)
Voici le code de ma recherche touche télécommande. Il fonctionne mais si j'active plusieurs fois le touche 1 par exemple, avec une pause, le code est à chaque fois différent.
#include <IRremote.hpp>
const int recv_pin = 2; // Pin de réception IR
void setup() {
Serial.begin(115200); // Démarrer la communication série à 115200 bauds
IrReceiver.begin(recv_pin, DISABLE_LED_FEEDBACK); // Démarrer la réception IR
}
void loop() {
if (IrReceiver.decode()) {
Serial.print("Code reçu : ");
Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); // Afficher le code reçu en hexadécimal
Serial.print(" (Protocole : ");
Serial.print(IrReceiver.decodedIRData.protocol, DEC); // Afficher le protocole
Serial.println(")");
IrReceiver.resume(); // Recevoir le prochain code
}
}
A noter que j'ai pu trouvé le code hex touche 1 en utilisant la version 2.6 de IrRemote.h mais ce code ne fonctionne pas avec la version 4.5.0.
J'ai testé ton code, sans le servo, et il fonctionne très bien, le décodage est régulier.
Essaies de déconnecter l'alimentation de ton servo.
Si ça améliore le décodage du récepteur, il faudra envisager d'alimenter ton servo séparément.
Merci jpbbricole, j'ai essayé tellement de choses différentes avant de poster ma question que j'ai zappé cette possibilité et effectivement, sans le servo, cela fonctionne parfaitement je reçois un code stable ! je vais donc alimenter séparément mon servo puisqu'au final ce sera de toute façon le cas et voir si le code qui combine le servo et son contrôle par iR fonctionne bien.
Certains servo génèrent beaucoup de "bruits électriques" et aussi consomment pas mal de courant, alors de l'alimenter "à travers" l'Arduino peut générer ce genre de problèmes.
Tu peux prendre un chargeur USB ainsi q'un câble USB que tu "éclates", le fil noir au GND du Servo et de l'Arduino et le rouge au + du servo et sur la pin 5V de l'Arduino. Ainsi ton montage est alimenté, sans utiliser le port USB de l'Arduino.
Autre solution sans "éclater" le câble USB, avec un module de ce tape:
Tu n'alimente pas séparément Arduino et Servo, tu les alimente avec la même source à la place du câble USB du PC (sauf que le 5V pour Servo ne passe plus par l'Arduino).
Donc si le Servo pollue l'alimentation 5V extérieur qui alimente aussi l'Arduino, il pollue aussi Arduino.
Selon moi
. Le GND de l'alimentation 5V extérieur relié aux GND Arduino et Servo
. Le +5V extérieur au +5V Servo
. L'Arduino alimenté comme avant (comme sur la photo) par le câble USB du PC
= Alimentation séparées de l'Arduino et du Servi, avec GND en commun.
Oui si tu utilises une carte UNO où le micro fonctionne sous 5V.
Les cartes avec des micro plus modernes qui fonctionnent sous 3,3 V ont, pour rester compatible avec une alimentation USB, un régulateur 3,3V.
Ce régulateur est un filtre.