Aller au contenu


Photo

Emetteur récepteur radio [testé par mthibs]

émétteur radio test

  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 mthibs

mthibs

    Nouveau membre

  • Membres
  • 71 messages
  • Gender:Male

Posté 16 mars 2017 - 04:39

Bonjour bonjour !

Le test suivant est à propos de l'émetteur-récepteur radio que l'on peut voir sur le shop !

 

Cet émetteur radio se présente sous la forme d'une petite télécommande de 55x30 mm avec deux boutons A et B dessus.

emetteur-radio.jpg

 

La télécommande est équipée d'un cache bouton qui la protège d'appuis non voulus et d'un petit mousqueton qui permet de l'accrocher pour ne pas la perdre (à son porte clé par exemple ^_^ ).

 

Le récepteur est un pavé de 40x20x10 mm avec une petite antenne flexible en spirale. La petite taille du récepteur permet de le mettre partout sur un robot sans l'encombrer.

recepteur-radio.jpg

 

Le récepteur a 2 entrées : une alimentation 5V (fil rouge), la masse (fil noir) et 2 sorties : le signal des boutons (fil blanc) et une alimentation 5V (fil vert).

Avant de l'utiliser, j'ai d'abord souder des connecteurs mâles sur les fils du récepteurs pour pouvoir les relier plus facilement à une carte arduino uno.

soudage-recepteur-radio-4.jpg

 

 

Avant de construire un programme pour piloter un moteur à l'aide de ce module radio, j'ai analysé les signaux du récepteur avec un oscilloscope :

signal-recepteur-bouton-a.jpg

 

Ci-dessus, le signal du récepteur lorsque le bouton A est enfoncé : on voit que la courbe jaune est à 0V.

Maintenant, le signal quand le bouton B de la télécommande est enfoncé :

signal-recepteur-bouton-b.jpg

 

La courbe jaune passe à 600mV environ.

La courbe bleue ne change pas d'état quelque soit le bouton activé, elle reste toujours à 5V.

 

Je m'attendais à avoir un signal pour chacun des boutons mais je me suis aperçu qu'un fil de sortie (le vert) était une alimentation  :o .

Il y a donc un signal de sortie pour deux boutons.

Le programme à faire est un peu différent que s'il y avait un signal par bouton mais finalement le résultat est le même  ;) .

 

Une petite précision, si vous branchez le récepteur à une carte arduino, le signal de sortie ne peut être lu que par des entrées analogiques car la tension du signal est trop faible pour les autres entrées de la carte.

 

En parlant du programme, le voilà :

// Contrôle PWM simple
#define A 3 // Contrôle vitesse moteur 1
#define B 4 //controle direction moteur 1
#define bouton A2  //pin du signal du récepteur radio

int compteur; 
int compteur2;
int sens_rotation;  //variable qui indique le sens de rotation
                    //que le moteur doit adopter
int front;   //variable de détection de front montant

void stop() //Stop
{
digitalWrite(A,LOW);
digitalWrite(B,LOW);
}

void advance(char a) // En avant
{
analogWrite (A,a); // Contrôle de vitesse en PWM
digitalWrite(B,HIGH);
}

void back_off (char a) // En arrière
{
analogWrite (A,a);
digitalWrite(B,LOW);
}

void setup()
{
compteur=0;
compteur2=compteur;
front=0;
sens_rotation=1;  //initialisation en marche avant
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(bouton,INPUT);
Serial.begin(9600); // Définit vitesse de transmission série
}

void loop()
{
front=analogRead(bouton); //lecture du signal du récepteur
if(front>0){  //détection de l'appui du bouton B
  compteur=1;
}
if(front==0){
  compteur=0;
}
if(compteur==1 && compteur2==0){  //incrémentation seulement sur un
  sens_rotation+=1;               //front montant
}
compteur2=compteur;

  if(analogRead(bouton)>0){  //si le bouton B est enfoncé
    if (sens_rotation%2==0){ // si le résultat est pair
      if(sens_rotation==2){
        stop();
      }
      else{
        advance(255-128);  // le driver fonctionne à l'état bas en marche avant
      }
    }
    if (sens_rotation%2==1){  // si le résultat est impair
      back_off(128);   // le driver fonctionne à l'état haut en marche arrière
    }
  }

  if(analogRead(bouton)==0){  //si le bouton A est enfoncé
    stop();
  }
}

Le but de ce programme est de faire fonctionner ce moteur à courant continu dans un sens puis dans l'autre grâce au récepteur radio et au driver l9110 dont le test est ici  ;) .

 

Le principe est le suivant : on fait varier le sens de rotation du moteur à chaque fois qu'il s'arrête et redémarre (donc on appui sur le bouton A puis B) en incrémentant une variable à chaque front montant du signal du bouton B.

Pour détecter les fronts montants, un compteur prend la valeur 0 si le signal du bouton B est nul et prend la valeur 1 si une tension est détectée. Un compteur2 mémorise la valeur précédente du premier compteur et l'incrémentation se fait uniquement pour compteur =1 et compteur2=0.

Ensuite, il suffit de distinguer les cas en faisant une division par 2 avec reste pour déterminer quand le résultat est pair ou impair.

 

Bref, avec le programme présenté, voila le résultat :

 

 

Avec ça, vous pouvez par exemple ouvrir ou fermer une porte de garage !

Si vous voulez un autre exemple d'utilisation, il y  a ce post sur une pince robotique  ^_^ .







0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users