- Matériaux nécessaires:
- Comment fonctionne un capteur à ultrasons?
- Programmation de votre microcontrôleur PIC:
Pour qu'un projet prenne vie, nous devons utiliser des capteurs. Les capteurs agissent comme les yeux et les oreilles pour toutes les applications embarquées, ils aident le microcontrôleur numérique à comprendre ce qui se passe réellement dans ce monde analogique réel. Dans ce tutoriel, nous allons apprendre à interfacer le capteur à ultrasons HC-SR04 avec le microcontrôleur PIC.
Le HC-SR04 est un capteur à ultrasons qui peut être utilisé pour mesurer la distance entre 2 cm et 450 cm (théoriquement). Ce capteur a fait ses preuves en s'intégrant dans de nombreux projets impliquant la détection d'obstacles, la mesure de distance, la cartographie de l'environnement, etc. À la fin de cet article, vous apprendrez comment ce capteur fonctionne et comment l'interfacer avec le microcontrôleur PIC16F877A pour mesurer la distance et l'affichage sur l'écran LCD. Cela semble intéressant à droite !! Alors, commençons…
Matériaux nécessaires:
- MCU PIC16F877A avec configuration de programmation
- Affichage LCD 16 * 2
- Capteur à ultrasons (HC-SR04)
- Fils de connexion
Comment fonctionne un capteur à ultrasons?
Avant d'aller plus loin, nous devons savoir comment fonctionne un capteur à ultrasons afin de mieux comprendre ce tutoriel. Le capteur à ultrasons utilisé dans ce projet est illustré ci-dessous.
Comme vous pouvez le voir, il a deux yeux circulaires comme des projections et quatre broches qui en sortent. Les deux projections semblables à des yeux sont l'émetteur et le récepteur d'onde ultrasonique (ci-après dénommée onde américaine). L'émetteur émet une onde américaine à une fréquence de 40 Hz, cette onde se déplace dans l'air et est réfléchie lorsqu'il détecte un objet. Les ondes de retour sont observées par le récepteur. Nous connaissons maintenant le temps nécessaire à cette onde pour se refléter et revenir et la vitesse de l'onde américaine est également universelle (3400cm / s). En utilisant ces informations et les formules de lycée ci-dessous, nous pouvons calculer la distance parcourue.
Distance = vitesse × temps
Maintenant que nous savons comment fonctionne un capteur américain, voyons comment il peut être interfacé avec n'importe quel MCU / CPU en utilisant les quatre broches. Ces quatre broches sont respectivement Vcc, Trigger, Echo et Ground. Le module fonctionne sur + 5V et par conséquent, la broche Vcc et de masse est utilisée pour alimenter le module. Les deux autres broches sont les broches d'E / S à l'aide desquelles nous communiquons avec notre MCU. La broche de déclenchement doit être déclarée comme une broche de sortie et rendue haute pour un 10uS, cela transmettra l'onde américaine dans l'air sous forme de rafale sonore à 8 cycles. Une fois que l'onde est observée, la broche Echo ira haut pendant l'intervalle de temps exact qui a été pris par l'onde américaine pour revenir au module de capteur. Par conséquent, cette broche Echo sera déclarée comme entréeet une minuterie sera utilisée pour mesurer combien de temps la broche était haute. Cela pourrait en outre être compris par le chronogramme ci-dessous.
J'espère que vous êtes arrivé à un moyen provisoire d'interfacer ce capteur avec PIC. Nous utiliserons le module Minuterie et le module LCD dans ce didacticiel et je suppose que vous êtes familier avec les deux, sinon veuillez vous reporter au didacticiel respectif ci-dessous car je sauterai la plupart des informations qui y sont liées.
- Interfaçage LCD avec microcontrôleur PIC
- Comprendre les minuteries dans le microcontrôleur PIC
Schéma:
Le schéma de circuit complet pour l' interfaçage du capteur à ultrasons avec PIC16F877A est illustré ci-dessous:
Comme indiqué, le circuit n'implique rien de plus qu'un écran LCD et le capteur à ultrasons lui-même. Le capteur américain peut être alimenté en + 5V et est donc directement alimenté par le régulateur de tension 7805. Le capteur a une broche de sortie (broche de déclenchement) qui est connectée à la broche 34 (RB1) et la broche d'entrée (broche d'écho) est connectée à la broche 35 (RB2). La connexion complète des broches est illustrée dans le tableau ci-dessous.
S.Non: |
Numéro de broche PIC |
Nom de la broche |
Connecté à |
1 |
21 |
RD2 |
RS de l'écran LCD |
2 |
22 |
RD3 |
E de l'écran LCD |
3 |
27 |
RD4 |
D4 de l'écran LCD |
4 |
28 |
RD5 |
D5 de l'écran LCD |
5 |
29 |
RD6 |
D6 de l'écran LCD |
6 |
30 |
RD7 |
D7 de l'écran LCD |
sept |
34 |
RB1 |
Déclenchement de nous |
8 |
35 |
RB2 |
Écho de nous |
Programmation de votre microcontrôleur PIC:
Le programme complet de ce didacticiel est donné à la fin de cette page, plus loin, j'ai expliqué le code en petits morceaux complets pour que vous puissiez le comprendre. Comme dit précédemment, le programme implique le concept d'interfaçage LCD et de minuterie qui ne seront pas expliqués en détail dans ce tutoriel puisque nous les avons déjà abordés dans les tutoriels précédents.
À l'intérieur, la fonction principale consiste à initialiser les broches IO et les autres registres comme d'habitude. Nous définissons les broches IO pour les capteurs LCD et US et initions également le registre Timer 1 en le réglant pour qu'il fonctionne sur 1: 4 pré-scalaire et pour utiliser l'horloge interne (Fosc / 4)
TRISD = 0x00; // PORTD déclaré comme sortie pour l'interface LCD TRISB0 = 1; // Définit la broche RB0 comme entrée à utiliser comme broche d'interruption TRISB1 = 0; // La broche de déclenchement du capteur US est envoyée comme broche de sortie TRISB2 = 1; // La broche d'écho du capteur US est définie comme broche d'entrée TRISB3 = 0; // RB3 est la broche de sortie pour la LED T1CON = 0x20; // 4 prés-scalaire et horloge interne
Le temporisateur 1 est un temporisateur 16 bits utilisé dans PIC16F877A, le registre T1CON contrôle les paramètres du module temporisateur et le résultat sera stocké dans TMR1H et TMR1L puisqu'il s'agit d'un résultat 16 bits les 8 premiers seront stockés dans TMR1H et le 8 suivants dans TMR1L. Cette minuterie peut être activée ou désactivée en utilisant respectivement TMR1ON = 0 et TMR1ON = 1.
Maintenant, la minuterie est prête à être utilisée, mais nous devons envoyer les ondes américaines hors du capteur, pour ce faire, nous devons garder la broche de déclenchement haute pendant 10uS, cela se fait par le code suivant.
Déclencheur = 1; __delay_us (10); Déclencheur = 0;
Comme le montre le diagramme de synchronisation ci-dessus, la broche Echo restera basse jusqu'au retour de l'onde, puis montera haut et restera haute pendant le temps exact nécessaire au retour des vagues. Ce temps doit être mesuré par le module Timer 1, ce qui peut être fait par la ligne ci-dessous
tandis que (Echo == 0); TMR1ON = 1; tandis que (Echo == 1); TMR1ON = 0;
Une fois le temps mesuré, la valeur résultante sera sauvegardée dans les registres TMR1H et TMR1L, ces registres doivent être matraqués pour se rassembler pour obtenir la valeur 16 bits. Cela se fait en utilisant la ligne ci-dessous
time_taken = (TMR1L - (TMR1H << 8));
Cette time_taken sera sous forme d'octets, pour obtenir la valeur de temps réelle, nous devons utiliser la formule ci-dessous.
Time = (valeur de registre 16 bits) * (1 / Internal Clock) * (Pre-scale) Internal Clock = Fosc / 4 Où dans notre cas, Fosc = 20000000Mhz et Pre-scale = 4 Par conséquent, la valeur de Internal Clock 5000000Mhz et la valeur de l'heure sera Time = (valeur de registre 16 bits) * (1/5000000) * (4) = (valeur de registre 16 bits) * (4/5000000) = (valeur de registre 16 bits) * 0,0000008 secondes (OU) Temps = (valeur de registre 16 bits) * 0,8 micro seconde
Dans notre programme, la valeur du registre 16 bits est stockée dans la variable time_taken et, par conséquent, la ligne ci-dessous est utilisée pour calculer le time_taken en micro secondes
time_taken = time_taken * 0.8;
Ensuite, nous devons trouver comment calculer la distance. Comme nous le savons, distance = vitesse * temps. Mais ici, le résultat doit être divisé par 2 car l'onde couvre à la fois la distance d'émission et la distance de réception. La vitesse de l'onde (son) nous est de 34000 cm / s.
Distance = (Vitesse * Temps) / 2 = (34000 * (valeur de registre 16 bits) * 0,0000008) / 2 Distance = (0,0272 * valeur de registre 16 bits) / 2
Ainsi, la distance peut être calculée en centimètres comme ci-dessous:
distance = (0,0272 * prise de temps) / 2;
Après avoir calculé la valeur de la distance et du temps pris, il suffit de les afficher sur l'écran LCD.
Mesure de la distance à l'aide du PIC et du capteur à ultrasons:
Après avoir établi les connexions et téléchargé le code, votre configuration expérimentale devrait ressembler à celle illustrée dans l'image ci-dessous.
La carte PIC Perf, illustrée sur cette image, a été conçue pour notre série de tutoriels PIC, dans laquelle nous avons appris à utiliser le microcontrôleur PIC. Vous voudrez peut-être revenir à ces didacticiels de microcontrôleur PIC utilisant MPLABX et XC8 si vous ne savez pas comment graver un programme à l'aide de Pickit 3, car je vais sauter toutes ces informations de base.
Placez maintenant un objet devant le capteur et il devrait afficher la distance entre l'objet et le capteur. Vous pouvez également remarquer le temps mis en micro secondes pour que l'onde transmette et revienne.
Vous pouvez déplacer l'objet à votre distance préférée et vérifier la valeur qui s'affiche sur l'écran LCD. J'ai pu mesurer une distance de 2 cm à 350 cm avec une précision de 0,5 cm. C'est un résultat assez satisfaisant! J'espère que vous avez apprécié le tutoriel et appris à créer quelque chose par vous-même. Si vous avez des doutes, déposez-les dans la section commentaires ci-dessous ou utilisez les forums.
Vérifiez également l'interfaçage du capteur à ultrasons avec d'autres microcontrôleurs:
- Mesure de distance basée sur Arduino et ultrasons
- Mesurer la distance à l'aide du Raspberry Pi et du capteur à ultrasons HCSR04
- Mesure de distance à l'aide du HC-SR04 et du microcontrôleur AVR