- Composants requis
- Schéma de circuit et explication de fonctionnement
- Explication de la programmation
Dans ce tutoriel, nous allons discuter et concevoir un circuit pour mesurer la distance. Ce circuit est développé en interfaçant le capteur à ultrasons «HC-SR04» avec le microcontrôleur AVR. Ce capteur utilise une technique appelée «ECHO» qui est quelque chose que vous obtenez lorsque le son se reflète après avoir frappé avec une surface.
Nous savons que les vibrations sonores ne peuvent pas pénétrer à travers les solides. Ainsi, lorsqu'une source sonore génère des vibrations, elle se déplace dans l'air à une vitesse de 220 mètres par seconde. Ces vibrations lorsqu'elles rencontrent notre oreille, nous les décrivons comme des sons. Comme dit précédemment, ces vibrations ne peuvent pas traverser le solide, donc lorsqu'elles frappent avec une surface comme un mur, elles sont réfléchies à la même vitesse vers la source, ce que l'on appelle l'écho.
Le capteur à ultrasons «HC-SR04» fournit un signal de sortie proportionnel à la distance en fonction de l'écho. Le capteur génère ici une vibration sonore dans la gamme ultrasonique lors de la gâchette, après quoi il attend le retour de la vibration sonore. Maintenant basé sur les paramètres, la vitesse du son (220m / s) et le temps nécessaire à l'écho pour atteindre la source, il fournit une impulsion de sortie proportionnelle à la distance.
Comme le montre la figure, nous devons d'abord lancer le capteur pour mesurer la distance, c'est-à-dire un signal logique HAUT à la broche de déclenchement du capteur pendant plus de 10uS, après qu'une vibration sonore est envoyée par le capteur, après un écho, le capteur fournit un signal à la broche de sortie dont la largeur est proportionnelle à la distance entre la source et l'obstacle.
Cette distance est calculée comme suit: distance (en cm) = largeur de la sortie d'impulsion (en uS) / 58.
Ici, la largeur du signal doit être prise en multiple de uS (micro seconde ou 10 ^ -6).
Composants requis
Matériel: ATMEGA32, alimentation (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), condensateur 1000uF, résistance 10KΩ (2 pièces), capteur HC-SR04.
Logiciel: Atmel studio 6.1, progisp ou flash magic.
Schéma de circuit et explication de fonctionnement
Ici, nous utilisons PORTB pour nous connecter au port de données LCD (D0-D7). Quiconque ne souhaite pas travailler avec FUSE BITS d'ATMEGA32A ne peut pas utiliser PORTC, car PORTC contient un type spécial de communication qui ne peut être désactivé qu'en changeant FUSEBITS.
Dans le circuit, vous constatez que je n'ai pris que deux broches de contrôle, cela donne la souplesse d'une meilleure compréhension. Le bit de contraste et READ / WRITE ne sont pas souvent utilisés afin qu'ils puissent être court-circuités à la masse. Cela met l'écran LCD en mode de contraste et de lecture le plus élevé. Nous avons juste besoin de contrôler les broches ENABLE et RS pour envoyer des caractères et des données en conséquence.
Les connexions effectuées pour l'écran LCD sont indiquées ci-dessous:
PIN1 ou VSS à la terre
Alimentation PIN2 ou VDD ou VCC à + 5v
PIN3 ou VEE à la masse (donne le meilleur contraste pour un débutant)
PIN4 ou RS (sélection de registre) à PD6 de uC
PIN5 ou RW (lecture / écriture) à la terre (met l'écran LCD en mode lecture facilite la communication pour l'utilisateur)
PIN6 ou E (Activer) à PD5 de uC
PIN7 ou D0 à PB0 de uC
PIN8 ou D1 à PB1 de uC
PIN9 ou D2 à PB2 de uC
PIN10 ou D3 à PB3 de uC
PIN11 ou D4 à PB4 de uC
PIN12 ou D5 à PB5 de uC
PIN13 ou D6 à PB6 de uC
PIN14 ou D7 à PB7 de uC
Dans le circuit, vous pouvez voir que nous avons utilisé une communication 8 bits (D0-D7), mais ce n'est pas obligatoire et nous pouvons utiliser une communication 4 bits (D4-D7) mais avec un programme de communication 4 bits devient un peu complexe. Ainsi, comme indiqué dans le tableau ci-dessus, nous connectons 10 broches de l'écran LCD au contrôleur dans lequel 8 broches sont des broches de données et 2 broches pour le contrôle.
Le capteur à ultrasons est un appareil à quatre broches, PIN1-VCC ou + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- TERRE. La goupille de déclenchement est l'endroit où nous donnons la gâchette pour dire au capteur de mesurer la distance. L'écho est la broche de sortie où nous obtenons la distance sous forme de largeur d'impulsion. La broche d'écho est ici connectée au contrôleur en tant que source d'interruption externe. Ainsi, pour obtenir la largeur du signal de sortie, la broche d'écho du capteur est connectée à INT0 (interruption 0) ou PD2.
1. Déclenchement du capteur en tirant sur la goupille de déclenchement pour au moins 12uS.
2. Une fois que l'écho devient haut, nous obtenons une interruption externe et nous allons démarrer un compteur (activant un compteur) dans l'ISR (Interrupt Service Routine) qui est exécuté juste après le déclenchement d'une interruption.
3. Une fois que l'écho redevient bas, une interruption est générée, cette fois nous allons arrêter le compteur (désactivation du compteur).
4. Donc, pour une impulsion de haut en bas à la broche d'écho, nous avons démarré un compteur et l'avons arrêté. Ce compte est mis à jour en mémoire pour obtenir la distance, car nous avons maintenant la largeur de l'écho dans count.
5. Nous allons faire d'autres calculs en mémoire pour obtenir la distance en cm
6. La distance est affichée sur l'écran LCD 16x2.
Pour configurer les fonctionnalités ci-dessus, nous allons définir les registres suivants:
Les trois registres ci-dessus doivent être définis en conséquence pour que la configuration fonctionne et nous allons les discuter brièvement, BLEU (INT0): ce bit doit être mis à l'état haut pour activer l'interruption externe0, une fois que cette broche est définie, nous pouvons détecter les changements de logique sur la broche PIND2.
MARRON (ISC00, ISC01): ces deux bits sont ajustés pour le changement logique approprié à PD2, qui doit être considéré comme une interruption.
Donc, comme dit précédemment, nous avons besoin d'une interruption pour démarrer un décompte et pour l'arrêter. Nous définissons donc ISC00 comme un et nous obtenons une interruption lorsqu'il y a une logique LOW à HIGH à INT0; une autre interruption lorsqu'il y a une logique HAUT à BAS.
ROUGE (CS10): Ce bit sert simplement à activer et désactiver le compteur. Bien que cela fonctionne avec d'autres bits CS10, CS12. Nous n'effectuons aucune pré-mise à l'échelle ici, nous n'avons donc pas à nous en préoccuper.
Voici quelques points importants à retenir:
Nous utilisons une horloge interne d'ATMEGA32A qui est de 1 MHz. Pas de pré-échelle ici, nous ne faisons pas de routine de génération d'interruption de correspondance de comparaison, donc pas de paramètres de registre complexes.
La valeur de comptage après le comptage est stockée dans le registre TCNT1 16 bits.
Vérifiez également ce projet avec arduino: Mesure de distance avec Arduino
Explication de la programmation
Le fonctionnement du capteur de mesure de distance est expliqué étape par étape dans le programme C ci-dessous.
#include // en-tête pour activer le contrôle du flux de données sur les broches #define F_CPU 1000000 // indiquant la fréquence du cristal du contrôleur attaché #include