Control moteur avec télécommande IR

Bonjour à tous,

Je débute en Arduino,
J'ai créé un code pour contrôler 2 moteur à distance avec une télécommande IR
Un bouton pullup pour le marche et arrêt avec une LED verte comme témoin
bouton 2 de la télécommande IR pour faire tourner les moteur dans le sens des aiguilles avec une LED bleue comme témoin
bouton 8 de la télécommande IR pour faire tourner les moteur dans le sens inverse avec une LED orange comme témoin

le bouton marche/arrêt fonctionne, ensuite plus rien, est ce que vous pouvez m'aider SVP

voici le code

#include <IRremote.h>

int ledPin = 5;
int buttonPin = 9;
int ledState = LOW; // État de la LED (LOW au départ)
int buttonState = HIGH; // État du bouton (HIGH au départ)
int lastButtonState = HIGH; // État précédent du bouton (HIGH au départ)
unsigned long lastDebounceTime = 0;  // Temps du dernier changement d'état du bouton
unsigned long debounceDelay = 50;    // Délai anti-rebond (50 millisecondes)

int motorPin1 = 3; // Broche pour le moteur 1
int motorPin2 = 4; // Broche pour le moteur 2
int ledBluePin = 6; // Broche pour la LED bleue
int ledOrangePin = 7; // Broche pour la LED orange

int receiverPin = 2; // Broche de réception infrarouge
IRrecv irrecv(receiverPin); // Créer un objet IRrecv pour la réception infrarouge
decode_results results;

void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(ledBluePin, OUTPUT);
  pinMode(ledOrangePin, OUTPUT);

  // Activer la réception infrarouge
  irrecv.enableIRIn();
}

void loop() 
{
  int reading = digitalRead(buttonPin);

  // Gestion du bouton pour allumer/éteindre la LED verte
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;

      if (buttonState == LOW) {
        ledState = !ledState;
        digitalWrite(ledPin, ledState);
      }
    }
  }

  lastButtonState = reading;

  // Gestion de la télécommande infrarouge si la LED verte est allumée
  if (ledState == HIGH) {
    if (irrecv.decode()) {
      switch (results.value) {
        case 0xFF18E7: // Code de la commande 2 (avancer)
          digitalWrite(motorPin1, HIGH);
          digitalWrite(motorPin2, HIGH);
          digitalWrite(ledBluePin, HIGH); // Allumer la LED bleue
          digitalWrite(ledOrangePin, LOW); // Éteindre la LED orange
          break;
        case 0xFF4AB5: // Code de la commande 8 (reculer)
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, LOW);
          digitalWrite(ledBluePin, LOW); // Éteindre la LED bleue
          digitalWrite(ledOrangePin, HIGH); // Allumer la LED orange
          break;
        // Ajoutez d'autres cas pour les commandes de votre télécommande ici
        
        default:
          // Rien à faire pour d'autres commandes
          break;
      }

      irrecv.resume(); // Réception suivante
    }
  } else {
    // Si la LED verte est éteinte, assurez-vous que les moteurs sont arrêtés
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(ledBluePin, LOW);
    digitalWrite(ledOrangePin, LOW);
  }
}

Voici le schéma de câblage


Salut et bienvenue parmi nous, @shayanshaterian :grin:
Je ne suis pas sur de pouvoir t'aider pour ton problème, mais je vois quelques petites choses qui peuvent être améliorées.
En Hardware :

  • Sur ton schéma, tu alimentes tes deux moteur en 5V depuis l'Arduino. Ce n'est pas une bonne idée car les moteurs CC consomment beaucoup de courant, et ta UNO ne délivre que 40mA par pin digitale (voir datasheet). Tu risque de la faire cramer. Pour utiliser tes moteurs, tu peux prendre deux transistors.
  • Tu dis vouloir faire tourner tes moteurs dans deux sens. S'ils sont connectés a une pin de la UNO d'un côté, au GND de l'autre, tu n'as aucun moyen de faire changer de sens le courant, et donc le sens de rotation du moteur. Si tu veux avoir deux sens de rotation, utilises un pont en H (module L298N)

Un bon tuto pour utiliser des moteurs CC avec Arduino - Avec transistor et avec pont en H - sur Arduino france site :
https://arduino-france.site/moteur-cc/
Côté Software :

  • Déclares tes pins en const byte. Const car du ne change pas de pin en cour de programme, et byte car tes pins ne vont pas jusqu’à 255, et ne sont pas négatives.
  • Pour gérer le bouton, tu peux utiliser la bibliothèque OneButton, mais ce n'est pas obligé, c'est seulement pour simplifier ton programme :wink:
  • Je crois que je ne peux pas ajouter grand chose, je laisse la place aux experts de ce forum pour te répondre efficacement :slight_smile:

Évites de poster tes programmes en capture d'écran, le code entre balise code étant suffisant pour t'aider.

Bon courage et bonne bidouille

Amitiés
Pandaroux007

tout à fait !

@shayanshaterian s'il vous plaît ne publiez plus jamais d'images de texte... Non seulement elles ne sont ni lisibles ni utilisables directement pour le copier-coller, mais elles consomment beaucoup de stockage et de bande passante Internet, ce qui contribue à polluer la planète.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

--

sinon effectivement il faudrait comprendre comment fonctionne l'alimentation "en vrai"

Bonjour @J-M-L

C'est a dire ? Vous voulez dire comprendre comment les deux moteur CC sont alimentés ?

Bonne journée, ici c'est gris (enfin !:slightly_smiling_face:)

Cordialement
Pandaroux007

Oui - est-ce que le branchement est celui du simulateur ou c’est dans la vraie vie

(Wokwi par exemple ne traite par la problématique de courant)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.