Réaliser un Télémètre à Ultrasons
avec une platine Arduino

 

Aujourd'hui, une communauté active existe autour des cartes Arduino, laquelle met à disposition des exemples de codes, de nombreuses librairies permettant de programmer facilement sans se soucier de coder des pilotes pour les différents composants utilisés, le tout en "open-source".

Qui plus est, l'IDE (Environnement de Développement), est fourni gratuitement!

On reproche à ces platines leur prix qui peut être assez élevé si on achète les versions "officielles", mais ces platines étant "open-hardware", on peut trouver des copies "made in china" sur Ebay pour pas très cher.

Vous disposez d'une carte Arduino Mega, d'un écran LCD+Keypad Sainsmart (s'enquille directement sur la carte Arduino Mega), d'un E/R Ultrasons SR04 et d'une résistance de 4,7 k, vous pouvez construire un Télémètre!

Principe:

C'est un peu le principe du radar mais avec des ultrasons!

Un transducteur émet une onde sonore à une fréquence de 40KHz, cette onde se réfléchit s'il y a un obstacle et un autre transducteur est chargé de recevoir l'onde réfléchie en l'amplifiant un peu, car le signal reçu est assez faible.

En général, la portée d'un tel dispositif n'est que de 4 à 5 mètres maximum.

La récupération de l'information "distance" se fait assez simplement:

Amélioration de la précision de la mesure:

La vitesse de propagation du son dans l'air peut varier suivant sa densité, donc sa température.

Sur Wikipedia, un tableau montre que la vitesse de propagation peut varier de 325.4 m/s à -10°C à 349.2 m/s à +30C.

En fait, la variation est linéaire et l'équation donnant la variation de vitesse de propagation en fonction de la température est la suivante: V = 0.6 x T + 331.5. (voir site)

On utilisera un capteur DHT22, lequel est précis à +/- 0.5°C sur une plage de température allant de -40 à +80°C.

 

Composants nécessaires:

 

Ensemble Câblé:

Commentaires:

La carte LCD s'enquille directement sur la platine Arduino Mega (pas de câbles superflus)

Les cartes SR04 et DHT22 sont alimentées par l'Arduino Mega

Partie Programmation:

Comme je l'ai dit au tout début, pratiquement toutes les librairies sont "données", il ne reste donc plus qu'à s'atteler à la programmation pure et dure!

Organigramme du système:

Avant de se lancer dans la programmation, il est important de savoir "où" on va!
Je propose de décrire le fonctionnement désiré de la "bête" par un organigramme:

Bibliothèques utilisées:


N.B.: si elles ne sont pas installées, il suffit de cliquer sur "Croquis -> Inclure une Bibliothèque -> Gérer les Bibliothèques" et taper le nom de la bibliothèque pour vérifier si cette dernière est installée.

Si elle ne l'est pas, cliquer sur "installer".

Initialisation du Module LCD: (voir site)

Le Module utilisé est prévu pour fonctionner sur une carte "compatible Arduino".

Il est composé d'un module LCD 16x2 et de 5 boutons reliés à un réseau de résistances formant un pont diviseur, dont la valeur lue dépend de la touche sur laquelle on appuie.

La valeur est lue sur l'entrée A0 de la platine Arduino.

Le réglage de luminosité est réglable en appliquant un signal PWM sur la sortie "Digital 10" de la platine Arduino. (pas utilisé ici)

 

Allocation des Pins:

Pin Function
Analog 0 Button (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable
Digital 10 Backlit Control

Code:

Initialisation du DHT22:

Initialisation du Télémètre SR-04:

Code définitif (enfin tout est perfectible!):

Commentaires:

Dans la partie "recalcul", j'ai ajouté la lecture de l'information "Hygrométrie", çà ne mange pas de pain...

 

Dans la formule de calcul de la distance, il y a un décalage de "+0.065 m", pourquoi?

Explication:

On pourrait augmenter la portée du SR04 en augmentant le gain de l'amplificateur de réception (nécessite un petit rétro-engineering de la carte) => risque d'erreur de mesure dû à l'amplification de signaux parasites...

 

Conclusion:

Le code n'est qu'un exemple, il peut être modifié à volonté!

Pour une mesure précise, l'idéal est de pointer le télémètre vers une surface plane sans armoire ou autre obstacle susceptible de perturber la mesure.

On peut aussi ajouter une fonction de calcul de d'aire ou de volume d'une pièce, çà existe sur d'autres appareils.

Il est possible de concevoir et d'imprimer un boîtier en plastique pour protéger le montage et lui donner un aspect "fini" 😉