samedi 21 octobre 2017

Télémètre HC-SR04 et ATTiny85


Nous explorons aujourd'hui l'utilisation d'un télémètre à ultrasons HC-SR04 avec un ATTiny85.


Deux projets seront décrits: dans le premier projet, trois LEDs permettent d'indiquer si un obstacle se trouve ou non à une distance sécuritaire.   Dans le second projet, la distance en centimètres est affichée par un module TM1638.

Dans les deux cas, l'ATTiny85 est programmé au moyen d'une carte Arduino Uno (Arduino as ISP) et de l'IDE Arduino avec le core mis au point par David A. Mellis. La fréquence d'horloge est de 1 MHz.  Voir ce précédent billet pour plus d'informations à ce sujet.

Projet 1:  Détecteur d'obstacle muni de 3 LEDs indicatrices

Puisque le témètre HC SR-04 occupe déjà deux entrées/sorties de l'ATTiny, trois sorties de l'ATTiny peuvent servir à alimenter une LED:  une LED verte qui s'allume lorsque l'obstacle se trouve à plus d'une trentaine de centimètres du dispositif, une LED jaune qui s'allume lorsque l'obstacle se trouve à une distance située entre 10 cm et 20 cm, et une LED rouge qui s'allume lorsque l'obstacle se trouve à moins de 10 cm. 

La vidéo ci-dessous montre le dipositif en action.



Le sketch

Vous pouvez modifier la valeur numérique des constantes seuilMIN et seuilMAX afin de modifier la distance de l'obstacle qui entraînera le changement de LED allumée.


/*******************ULTRASONS HC-SR04*************************
Démonstration de l'utilisation du module à ultrasons HC-SR04
avec un ATTiny. 3 LEDs (rouge, jaune, verte) indiquent si
l'obstacle est loin ou proche.
Pour plus de détails:
http://electroniqueamateur.blogspot.com/2017/10/telemetre-hc-sr04-et-attiny85.html
**************************************************************/
// définition des connexions
const int trigPin = 0; // pin "trig" branchée à la broche 5 de l'ATTiny85
const int echoPin = 1; //pin "echo" branchée à la broche 6 de l'ATTiny85
const int LEDRouge = 2; // LED rouge branchée à la broche 7 de l'ATTiny85
const int LEDJaune = 3; // LED jaune branchée à la broche 2 de l'ATTiny85
const int LEDVerte = 4; // LED verte branchée à la broche 3 de l'ATTiny85
// distances en cm qui déclenchent un changement de LED
const int seuilMIN = 15; //frontière entre rouge et jaune
const int seuilMAX = 30; // frontière entre jaune et vert
void setup() {
// initialisation des entrées et sorties
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(LEDRouge, OUTPUT);
pinMode(LEDJaune, OUTPUT);
pinMode(LEDVerte, OUTPUT);
digitalWrite(trigPin, LOW);
}
void loop()
{
// les variables qui nous seront utiles
long temps, distance;
// Nous envoyons un signal haut d'une durée de 10 microsecondes, en sandwich
// entre deux signaux bas. Des ultrasons sont émis pendant que le signal est haut
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lors de la réception de l'écho, le module HC-SR04 émet
// un signal logique haut (5 v) dont la durée est égale au
// temps écoulé entre l'émission et la réception de l'ultrason.
pinMode(echoPin, INPUT);
temps = pulseIn(echoPin, HIGH);
distance = temps * 340/(2*10000);
if (distance < seuilMIN) { // trop proche: on allume la rouge
digitalWrite(LEDRouge, HIGH);
digitalWrite(LEDJaune, LOW);
digitalWrite(LEDVerte, LOW);
}
else {
digitalWrite(LEDRouge, LOW);
if (distance < seuilMAX) { // assez proche: on allume la jaune
digitalWrite(LEDJaune, HIGH);
digitalWrite(LEDVerte, LOW);
}
else { // très loin: on allume la verte
digitalWrite(LEDJaune, LOW);
digitalWrite(LEDVerte, HIGH);
}
}
delay(100);
}

Le circuit
  • La broche Trig du HC-SR04 est branchée à la broche 5 du ATTiny85
  • La broche Echo du HC-SR04 est branchée à la broche 6 du ATTiny85
  • La LED rouge et une résistance de protection est branchée à la broche 7 du ATTiny85
  • La LED jaune et une résistance de protection est branchée à la broche 2 du ATTiny85
  • La LED verte et une résistance de protection est branchée à la broche 3 du ATTiny85




Projet 2:  affichage de la distance mesurée sur un module TM1638

Les modules d'affichage de type "LED and KEY" comportant un circuit intégré TM1638 permettent d'afficher un nombre tout en n'occupant que 3 entrées/sorties de l'ATTiny85. Nous pouvons donc y afficher la distance mesurée par le télémètre ultrasonore.



Le sketch

Vous trouverez plus de détails sur l'utilisation du module TM1638 en lisant cet article.


/*******************ULTRASONS HC-SR04*************************
Démonstration de l'utilisation du module à ultrasons HC-SR04
avec un ATTiny. La distance s'affiche sur un module TM1638
Pour plus de détails:
http://electroniqueamateur.blogspot.com/2017/10/telemetre-hc-sr04-et-attiny85.html
**************************************************************/
#include <TM1638.h> // bibliothèque de rjbatista
// définition des connexions
const int trigPin = 3; // pin "trig" branchée à la broche 2 de l'ATTiny85
const int echoPin = 4; //pin "echo" branchée à la broche 3 de l'ATTiny85
// DIO 0, CLK 1 , STB 2:
TM1638 afficheur(0, 1, 2);
void setup() {
// initialisation des entrées et sorties
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
digitalWrite(trigPin, LOW);
}
void loop()
{
// les variables qui nous seront utiles
long temps, distance;
// Nous envoyons un signal haut d'une durée de 10 microsecondes, en sandwich
// entre deux signaux bas. Des ultrasons sont émis pendant que le signal est haut
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lors de la réception de l'écho, le module HC-SR04 émet
// un signal logique haut (5 v) dont la durée est égale au
// temps écoulé entre l'émission et la réception de l'ultrason.
pinMode(echoPin, INPUT);
temps = pulseIn(echoPin, HIGH);
distance = temps * 340/(2*10000);
afficheur.setDisplayToDecNumber(distance, 0 , false);
delay(100);
}

Le circuit


  • La broche Trig du HC-SR04 est branchée à la broche 2 du ATTiny85
  • La broche Echo du HC-SR04 est branchée à la broche 3 du ATTiny85
  • La broche STB du module TM1638 est branchée à la broche 7 du ATTiny85
  • La broche CLK du module TM1638 est branchée à la broche 6 du ATTiny85
  • La broche DIO du module TM1638 est branchée à la broche 5 du ATTiny85

À lire aussi:

Vous trouverez aussi sur ce blog des conseils pour utiliser le télémètre HC-SR04 avec un Arduino Uno, avec un Raspberry Piavec une carte STM32 Nucleo programmée avec mbedavec un microcontrôleur PIC et avec un micro:bit.

Yves Pelletier   (TwitterFacebook)

3 commentaires:

  1. Magnifique merci pour le partage

    RépondreSupprimer
  2. merci beaucoup.
    Super fonctionne a merveille
    j’utilise un digispark
    car j'ai des erreurs avec mon arduino pour les attiny 85
    avrdude yikes invalid device signature
    j'ai tout essayé
    mais avec le digispark cela fonctionne tres bien
    merci encore

    RépondreSupprimer
    Réponses
    1. C'est le contraire pour moi: il y a quelques années, je m'étais procuré un digispark (un clone, probablement) qui n'a jamais fonctionné.

      Supprimer