Aller au contenu


Photo
- - - - -

Petit probleme avec module HC-SR04

HC-SR04

  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 520 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 27 mars 2017 - 09:19

Bonjour,

 

Voila je test un module HC-SR04 sur une arduino Uno avec une carte 4 relais.

 

Le but de ce montage, c'est d'allumer une lampe si le module détecte une personne a moins de 80cm par exemple.

Voici le code employé: 

/*
HC-SR04 
*/

#define trigPin 2
#define echoPin 3
#define Q1 4
#define Q2 5

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(Q1, OUTPUT);
  pinMode(Q2, OUTPUT);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 80) {  // Si distance inférieur a 80cm

    digitalWrite(Q1,LOW); // Activation relais 1
  digitalWrite(Q2,HIGH); // Relais 2 a zéro
}
  else {
    digitalWrite(Q1,HIGH); //Relais 1 à 0
    digitalWrite(Q2,LOW); //Relais 2 à 1
  }

  delay(1000);
}

Mais voila, y a un petit problème.

Le relais change d’état même si une forme se trouve dans la zone de détection.

Cela pourrait il venir que les ondes sont mal renvoyer?

J'ai tester aussi avec un module PIR et c'est pas mieux :( j'obtiens tout et n'importe quoi comme résultat. (c'est une autre histoire :) )

Voila j'attend vos commentaires.


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#2 mthibs

mthibs

    Membre

  • Membres
  • 72 messages
  • Gender:Male

Posté 27 mars 2017 - 10:24

Salut !

 

 

distance = (duration/2) / 29.1;

Je ne comprends pas trop le 29.1 ^^ j'aurais mis 0.34 qui est la vitesse du son en mm/µs (si u veux ta distance en mm).

Sinon tu peux essayer de mettre un TimeOut sur le signal de echoPin, pour voir si ça change quelquechose.

Peut être que le tutoriel sur le capteur ultrason pourrait t'aider ?  :)



#3 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 27 mars 2017 - 11:36

Si tu divises par la vitesse du son, tu n'obtiens pas une distance mais une grandeur homogène à l'inverse d'une distance (dans le code de ton tuto, tu multiplies). Il faut donc diviser par l'inverse, càd le temps par unité de distance. Voir l'exemple ci-dessous tiré du code pour le capteur Ping (https://www.arduino....n/tutorial/ping)

long microsecondsToCentimeters(long microseconds) {
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

Pour ce qui est de ton code, Melmet, je ne vois rien de choquant, j'aurais personnellement mis la lecture du capteur dans une fonction à part, et sorti les variables de durée et distance de la boucle (pas besoin de les déclarer à chaque tour). Tu as testé d'afficher les distances mesurées pour voir si elles sont cohérentes ?


R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#4 mthibs

mthibs

    Membre

  • Membres
  • 72 messages
  • Gender:Male

Posté 27 mars 2017 - 12:42

@R1D1 : Oups, tu as raison je n'ai pas fait attention quand j'ai écrit ^^

 

@Melmet : Trouvé ! (enfin je crois.. ^_^ )

En ajoutant un Timeout sur la lecture de la pin Echo la led s'allume correctement !

En affichant les distances dans le moniteur série, on remarque qu'il y en a qui ne sont pas cohérentes sans timeout :

Fichier joint  post-melmet.jpg   70,46 Ko   97 téléchargement(s)

 

Ces valeurs au-dessus de 3000 disparaissent une fois le timeout en place.

Sinon, à quoi sert Q2 ? Le premier relais active une lampe mais l'autre ?

 

Voila ma version du programme :

 

et une video du résultat

 

Dis moi si maintenant ça fonctionne  ;)



#5 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 520 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 27 mars 2017 - 07:50

Je vais tester cela demain.

Merci les amis :)

 

Le Q2 c’était un restant d'un autre programme et qui activait un second relais mais en inverse.

 

Demain, je vais tester d'autres choses en plus si ca marche pas. :) 


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#6 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 520 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 28 mars 2017 - 07:00

@R1D1 : Oups, tu as raison je n'ai pas fait attention quand j'ai écrit ^^

 

@Melmet : Trouvé ! (enfin je crois.. ^_^ )

En ajoutant un Timeout sur la lecture de la pin Echo la led s'allume correctement !

En affichant les distances dans le moniteur série, on remarque qu'il y en a qui ne sont pas cohérentes sans timeout :

attachicon.gifpost-melmet.jpg

 

Ces valeurs au-dessus de 3000 disparaissent une fois le timeout en place.

Sinon, à quoi sert Q2 ? Le premier relais active une lampe mais l'autre ?

 

Voila ma version du programme :

 

 

Dis moi si maintenant ça fonctionne  ;)

C'est fou, j'avais commencer par le programme du tuto et (j'ai du me planter quelque part) ca fonctionnait pas.

J'ai remis le programme et hop ca fonctionne enfin.

 

Merci de ton aide :)  :thank_you:


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:






Aussi étiqueté avec au moins un de ces mots-clés : HC-SR04

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

0 members, 0 guests, 0 anonymous users