Barrière IR et Récepteur télécommande

Bonjour à tous,

Mon projet arduino est de créer un portail coulissant motorisé. Le plus gros du travail est fait. Lorsque j’appuie sur ma télécommande, selon le bouton mon moteur se met a tourner de la manière que je le souhaite.

Mon objectif est de me rapprocher le plus possible d'un vrai portail motorisé cela comprenant sa mise en marche pour l'ouverture et la fermeture avec une télécommande et si quelqu'un passe devant alors qu'il se ferme il se stop soit via une barrière IR soit si j'appuis sur un bouton.

C'est la qu'arrive mon problème: Je souhaite mettre la détection du passage d'une personne sur une broche d'interruption, tout en gardant actif ma réception IR.

Pour ma télécommande, j'utilise une télécommande et un recepteur IR
Pour ma détection de passage j'utilise une Led IR et un recepteur IR

  1. Est t-il possible d'avoir 2 récepteurs IR et un émetteur IR actif en même temps sur le meme arduino.
  2. auriez vous un bout de code pour cela ?
  3. Qu'elles composants utiliser pour remplacer ceux que j'utilise pour ma détection de passage

Je pense que je pourrais utiliser 2 arduino mais cela me gêne de prendre un arduino juste pour ma barrière IR.

Voici mon code pour configurer mon portail, cependant je n'utilise pas mon moteur, j'allume une led pour valider les données provenant de la telecommande.

Les parties en commentaires du code correspondent au code pour la barrière IR.

Dans ce code lorsque je l’exécute sur mon montage, celle la barrière IR fonctionne et le traitement des infos de la télécommande ne fonctionne plus.

Je n'utilise pas encore l'interruption car cette partie de programme me permet de tester si mon récepteur pour ma barrière fonctionne correctement.

//Projet de portail coulissant motoriser et telecomander

//Ajout des bibliothèque
#include <IRremote.h>


//Définitions des broches:
//Recepteur IR
int pin_recept = 2; // On définit le pin 2
IRrecv ir_recept(pin_recept); 
decode_results ir_decode; // stockage données reçues

//Moteur
int motor1_enablePin = 11; //pwm
int motor1_in1Pin = 13;
int motor1_in2Pin = 12;
//bouton1
int inPin1 = 6; //interrupteur1 connecté a la broche 6
//bouton2
int inPin2 = 5; //interrupteur2 connecté a la broche 5

//#define CAPTEUR 4 //récepteur IR -> D4
//#define LED_STATUT 8 // LED -> D7
//IRsend irsend; // déclaration de l'objet émetteur (pin D3 obligatoire)

//int i=0;

void setup() 
{
  //initialise la réception
  Serial.begin(9600); 
  ir_recept.enableIRIn(); // Initialisation de la réception 
  //initialise le broche LED
  pinMode(7, OUTPUT); //initialise la broche 7 en sortie pour LED rouge
  pinMode(8, OUTPUT); //initialise la borche 8 en sortie pour led verte
  //initialise le moteur
  pinMode(motor1_in1Pin, OUTPUT);
  pinMode(motor1_in2Pin, OUTPUT);
  pinMode(motor1_enablePin, OUTPUT);
  //initialise la broche interrupteur1
  pinMode(inPin1, INPUT);
  //initialise la broche interrupteur2
  pinMode(inPin2, INPUT);
  //Barrière IR
  //pinMode(CAPTEUR, INPUT);
  //irsend.enableIROut(38); // crée une sortie modulée à 38KHz  
  
}

//Ensemble des fonctions:

//Fonction qui set le moteur1
void SetMotor1(int speed, boolean reverse)
{
  analogWrite(motor1_enablePin, speed);
  digitalWrite(motor1_in1Pin, ! reverse);
  digitalWrite(motor1_in2Pin, reverse);
}

//Programme principal:

void loop()
{
  //Barrière IR
  //while (i != 100)
   //{
     //irsend.mark(0); //envoi du signal pour une durée illimitée
      //boolean mesure1 = digitalRead(CAPTEUR); //première mesure
      //delay(5);                               //delai
      //boolean mesure2 = digitalRead(CAPTEUR); //seconde mesure
      //boolean etat = mesure1 * mesure2;       //comparaison
      //Serial.println(etat);

      //if (etat == HIGH) // si les deux lectures voient une coupure
      //    {
      //      digitalWrite(LED_STATUT, HIGH);
      //      Serial.println("Coupure !");
      //    }
      //    else              // sinon
      //        {
       //         digitalWrite(LED_STATUT, LOW);
      //          Serial.println("----------OK----------");
       //         }
     // delay(5);
     // i++;
    //}
  //reception message telecommande
  if (ir_recept.decode(&ir_decode)) 
  { 
    Serial.println(ir_decode.value, HEX); // On affiche le code en hexadecimal
    ir_recept.resume(); 
  } 

  //Ouverture du portail
  if (ir_decode.value == 0xFF5AA5)
    {
      while (digitalRead(inPin1) != 1)
        {
          digitalWrite(7, HIGH);
          delay(1000);              //delay de 1000millisecondes soit 1s
          digitalWrite(7, LOW);
          SetMotor1(0, true);
        }
    }

  //Fermeture du portail
  if (ir_decode.value == 0xFF10EF)
    {
      while (digitalRead(inPin2) != 1)
        {
          digitalWrite(7, HIGH);
          delay(1000);              //delay de 1000millisecondes soit 1s
          digitalWrite(7, LOW);
          SetMotor1(0, false);
        }  
    }
 
}

En espérant que vous aurez quelques idée :wink:

A bientot, Maxeyli

D' apres ce que j' ai vu la librairie IRemote standard ne gere pas plusieurs récepteurs en meme temps, il parait que la librairie modifiée ici:

permet de le faire, mais je n'ai pas encore testé ;

Au pire pour la détection de passage tu pourrait utiliser autre chose comme un capteur de mouvement ou catpteur de distance ultrason par exemple