# Micro contrôleurs AVR/Travail pratique/Timer et module ultra-son HC-SR04

Nous allons proposer dans ce TP un certain nombre d'exercices utilisant un module ultra-son pour mesurer une distance. Ce problème est extrêmement facile à résoudre si l’on se donne la possibilité d’utiliser du code Arduino. Dans le cas contraire cela nécessite une bonne compréhension de la notion de temps.
Le prix de ce module HC-SR04 varie en fonction des distributeurs et du temps. Nous l'avons déjà acheté pour 1 €50.

## Utiliser un Arduino pour mesurer une distance

Il existe une librairie toute fait pour Arduino. Au bout de très peu de temps les étudiants l'utilisent sans difficulté.

### Installer la librairie

Téléchargez ICI le fichier .zip. En dézipant vous obtenez un répertoire "Ultrasonic-HC-SR04-master" dans lequel figure un autre répertoire "Ultrasonic". Si vous copiez "Ultrasonic" dans le répertoire "libraries" de votre répertoire de sketch, votre nouvelle librairie sera disponible dès que vous redémarrez votre environnement Arduino.
Notez que les nouvelles versions de l'IDE Arduino permettent d'installer directement le fichier .zip

### Exercice 1

Si votre librairie est correctement installée, cherchez un exemple associé, par exemple Serial. Essayez-le en réalisant la connexion entre l'Arduino et le module.

## Utiliser l'environnement Arduino sans librairie

La première ligne du programme de l'exercice 1 était un "#include" indiquant l’utilisation d'une librairie extérieure à la librairie standard de l'Arduino. Nous allons retirer maintenant cette librairie.

### Exercice 2

En retirant la librairie de l'exercice 1, on vous demande de faire fonctionner le programme en changeant le code correspondant. Vous avez la possibilité d’utiliser "pulsIn" de la librairie standard Arduino.
Tout ceci montre que la librairie qui a été installée pour l'exercice précédent n’est pas du tout nécessaire.

## Comment se passer de pulsIn ?
### Par simple boucle d'attente qui incrémente une variable

Le plus simple est donc de réaliser une boucle d'attente : il s'agit d'attendre que le signal "echo" repasse à 0 tout en incrémentant une variable. Une telle façon de procéder nécessitera un calibrage.

#### Exercice 3

Réaliser un programme complet sans plulsIn capable de mesurer le temps pendant lequel le signal echo reste à 1. Comme l'unité de mesure de ce temps est inconnu, il vous faudra calibrer la nouvelle conversion pour obtenir des centimètres.
Vous pouvez noter que l'ancienne formule de conversion a été remplacée par une autre formule. Nous divisons par 10 pour obtenir de centimètres maintenant. Ceci est assez approximatif et mérite d’être améliorer. La division par 58 était liée au fait que 58 us correspond à 1 cm. Maintenant que l'on n'utilise pas de timer, il nous faudrait connaître la durée d'une boucle pour trouver la valeur théorique de correspondance entre le nombre de boucles que l'on compte et sa durée. On a préféré faire des essais expérimentaux qui nous ont donné la valeur approximative de 10.

### Utilisation du timer 2

Nous allons mesurer la durée de l'impulsion à l'aide du timer 2. À partir de maintenant, nous allons travailler en C pur.
Comme nous ne chercherons pas à avoir une précision plus grande que le centimètre, nous allons régler le mode CTC du timer 2 pour qu'il déclenche une comparaison toutes les 58 us. Réaliser 58 us avec 16 MHz nécessite une division par 16 x 58 = 928 qui nécessiterait 9 bits. On peut donc réaliser une prédivision par 8, ce qui nous laisse une comparaison à 116.

## Et encore un Timer

Plutôt que d'afficher le résultat par la liaison série, nous allons maintenant utiliser un servomoteur pour cet affichage. Bien qu'il existe une librairie Arduino qui gère directement les servomoteurs, nous allons réaliser notre propre gestion à l'aide du Timer 1. Ce problème a déjà été abordé dans ce livre, dans le chapitre sur le timer 1. Ce que l'on cherche à faire maintenant est expliqué dans la vidéo :
* Vidéo Youtube expliquant ce que l'on cherche à faire
Il s'agit donc de coupler le module Ultrason avec un servomoteur.
| Sommaire | Utilisation d'un Accéléromètre MPU6050 |