Le servomoteur misanthrope

De Wikidebrouillard.

Article incomplet en cours de rédaction
La vidéo "Le servomoteur misanthrope"


Sommaire

Présentation de l'expérience

Il était une fois un servomoteur très peureux : dès qu'on s'approchait de lui, il reculait. Pour voir les gens venir, il s'était lié d'amitié avec une carte arduino et un capteur de distance...

Matériel

  • 1 capteur de distance à ultrasons HC-SR04
  • 1 servomoteur
  • 1 arduino (uno ici)
  • des fils
  • 1 ordinateur avec le logiciel arduino
  • Un objet quelconque qu'on pourra fixer au bout du servomoteur

L'expérience

Le montage

On alimente en 5V le capteur et le servomoteur (fil rouge du servomoteur et Vcc du capteur). Le fils noir du servomoteur ainsi que le GND du capteur sont reliés au ground (GND) d'arduino. Le dernier fils du servomoteur sera relié à la broche 9 : c'est par là que les commandes arrivent au servomoteur. La broche Trig du capteur sera reliée à l'entrée 12 et echo à 11.

Le code

#include <Servo.h> 
 
Servo myservo;  // crée l'objet servomoteur pour contrôler le servomoteur
 
int pos = 0;    // variable pour sauvegarder la position du servomoteur
int etat = 0;   // variable permettant de connaître la position du servomoteur

//création des variables de gestion du capteur
int trig = 12;  
int echo = 11; 
long lecture_echo; 
long cm;

void setup() 
{ 
  pinMode(trig, OUTPUT);  //gestion du capteur
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  myservo.attach(9);  // On précise que le servomoteur utilise la broche 9
}

void loop() 
{ 
//récupération de la distance séparant un obstacle du capteur
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = lecture_echo / 58; 


  if((cm>25)&&!(etat==0)) {
  // si cette distance est plus grand que 25 cm et que le servomoteur n'est pas dans sa position 0
     myservo.write(0);
     etat = 0;
     delay(1000);
     //On le met à la position 0 degrés
  }
  else if((cm>20)&&(cm<=25)&&!(etat==45)) {
  //si la distance est entre 20 et 25 cm et que le servomoteur n'est pas en position 45 degrés
    etat = 45;
    for(pos = 0; pos < 45; pos += 1) {  
      myservo.write(pos); 
      delay(15);    
    }
   //on le met en position 45 degrés
   delay(1000); 
  }
  else if((cm>15)&&(cm<=20)&&!(etat==90)) {
  //si la distance est entre 15 et 20 cm et que le servomoteur n'est pas à 90 degrés
    etat = 90;
    for(pos = 45; pos < 90; pos += 1)     {  
      myservo.write(pos); 
      delay(15);    
    }
    //On le met à 90 degrés
    delay(1000);
  }
   else if((cm>10)&&(cm<=15)&&!(etat==135)) {
   //Si la distance est entre 10 et 15 cm et que le servomoteur n'est pas à 135 degrés
   etat = 135;
   for(pos = 90; pos < 135; pos += 1)     {  
     myservo.write(pos); 
     delay(15);    
    }
    //On le met à 135 degrés
    delay(1000);
  }
  else if((cm<=10)&&!(etat==180)) {
  //Si la distance est inférieur à 10 cm et que le servomoteur n'est pas 180 degrés
    etat = 180;
    for(pos = 135; pos < 180; pos += 1)     {  
      myservo.write(pos); 
      delay(15);    
    }
    //On le met à 180 degrés
    delay(1000);
  }
  delay(1000);
}

A noter : les lignes commençant par "//" sont des commentaires : ils sont effacés lorsque le programme est envoyé à l'arduino, ils n'influencent pas son application

Les états correspondent à la position en degrés du capteur : de 0 à 180 en allant de 45 en 45.

Que voit-on ?

On voit qu'au fur est à mesure qu'on approche la main, le servomoteur recule :

  • Si on met un obstacle (disons la main) à plus de 25 cm, le servomoteur ne réagit pas.
  • Si on approche la main et qu'elle est à 20/25 cm du capteur, le servomoteur se met à 45 degrés
  • Si on met la main à 15/20 cm, le capteur se met à 90 degrés
  • Si on met la main à 10/25 cm, le capteur se met à 135 degrés
  • Si on met la main à moins de 10 cm, le capteur se met à 180 degrés, soit la position la plus éloignée qu'il puisse faire
  • Si on retire totalement la main (plus de 25 cm de distance), le servomoteur se remet à 0 degrés

Explications

La distance est récupérée par le capteur par la lecture de l'écho : un ultrason est émis par l'entrée Trig et est lu par l'entrée echo. Le temps de réponse diffère selon la distance entre le capteur et l'obstacle. Ensuite on vient comparer la distance avec les distances incluses dans le programme. Selon l'intervalle où se trouve la distance, la carte arduino pilote le servomoteur.

Questions sans réponses

Cela permettrait-il de contrôler un servomoteur selon les mouvements d'une main devant un capteur de distance ?

Expériences sur Wikidébrouillard

Autres expériences

Autres expériences avec le même concept, recherche sur internet (indiquer les liens). 

Applications : liens avec le quotidien

Cela peut potentiellement permettre de contrôler un servomoteur à la main...

Lieux propices à sa réalisation

Plutôt dans une salle afin qu'on puisse utiliser un ordinateur. Attention au calibrage du capteur qui peut parfois être nécessaire.

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR
CO

Le servomoteur misanthrope

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique