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.
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*******************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
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*******************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
Vous trouverez aussi sur ce blog des conseils pour utiliser le télémètre HC-SR04 avec un Arduino Uno, avec un Raspberry Pi, avec une carte STM32 Nucleo programmée avec mbed, avec un microcontrôleur PIC et avec un micro:bit.
Yves Pelletier (Twitter, Facebook)
Magnifique merci pour le partage
RépondreSupprimermerci beaucoup.
RépondreSupprimerSuper 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
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