Etape 12 : Contrôle et problèmes du module HCSR-04
Brochage
GND - constant
Cette broche relie au sol nette du schéma
VCC - rail d’alimentation
Cette broche doit être liée à la ligne d’alimentation de notre circuit, qui - dans mon cas est fournie par le convertisseur buck de 5V.
TRIG - l’ergot
L’utilisateur doit fournir une microseconde longue impulse sur cette broche, puis d’attendre l’écho arriver sur la broche de l’écho. Notez que l’écho est élevé dans les premières dizaines de millisecondes, assurez-vous que vous attendez que lors de l’initialisation. Cette tige est affirmée, puis programme doit attendre un front montant et démarrer un minuteur, TMR1. Le WASTE_10_US() ; est une macro que j’ai écrit, il se compose d’instructions d’assemblage assez « NOP » de gaspiller un temps total de 10 microsecondes. Comptage est arrêté lorsque l’impulsion de l’écho va de nouveau faible. Depuis le numéro dans le registre de compteur, nous savons le temps nécessaire pour le son de se remettre d’un éventuel obstacle. Nous savons la vitesse du son : on peut calculer la distance !
ECHO - goupille de l’écho
Cette broche est utilisée pour détecter les ondes sonores réfléchies. J’ai branché sur une broche qui a interrupt, juste au cas où -, mais il est utilisé en mode d’entrée simple. Un front montant s’arrête le compteur mentionné précédemment et l’enregistre dans une variable, qui est traitée peu après.
Une petite astuce pour vous faciliter la vie de PIC-s
Le calendrier des impulsions est indiqué dans la fiche technique de ce module. Comme mentionné précédemment, vous devrez patienter dehors la premières ~ 100 ms, puis donner 10 microsecondes impulsions de gâchette sur la broche TRIG. Ce qui donne une telle impulsion se traduit par une rafale de 8 cycle venant de l’émetteur « speaker ». Ensuite, il faut attendre pour un écho à venir. L’écho est capturé par le récepteur et transformé en une impulsion de longueur variable sur l’axe de l’ECHO. La longueur de cette pulsion d’écho est directement proportionnelle à la distance de l’obstacle. La fiche technique donne une formule simple pour calculer ceci :
distance [cm] = t mesuré [microsecondes] / 58
Ceci renverra la distance en centimètres. J’ai seulement diviser par 5.8, donc la distance est retournée en millimètres. Étant donné que je n’avez pas besoin nécessairement une lecture extrêmement précise, je vais ajouter un petit tour ici. Je veux seulement éviter les obstacles, je n’aime pas dans quelle mesure ils sont, il n’y a pas d’utilisation de calcul de la distance dans les types de variable double . Ce genre de calculs prendre beaucoup de temps, qui dans ce cas est complètement inutile. Nous allons donc simplifier les calculs un peu. Nous savons que la longueur de l’impulsion reçue en microsecondes est nécessaire pour comprendre la distance. Cependant, notre base de temps n’est pas un one, 83,33 très rond [ns]. Ainsi, au lieu de prendre le comte TMR1, multipliant par la base pour obtenir la longueur (en microsecondes), puis en le divisant par 5,8 pour obtenir la distance en millimètres, de temps, nous allons faire quelque chose de plus simple et plus bête. Nous allons établir quel un moyen unique de comte TMR1 en millimètres :
1 count = 83.33 [ns] = 0.08333 [nous], qui, divisée par 5,8 résultats à 0,014 [mm] pour chaque TMR1 [count]
Cela dit, nous pouvons écrire ce qui suit :
1 [count] .......................... 0,014 [mm]
x [count]... y [mm]
et continuer à écrire la formule suivante :
y [mm] = (x * 0, 014) / 1 = x * 0,014 = x / 71,42
Donc, nous savons que nous pouvons obtenir la distance d’un obstacle en divisant TMR1 comte avec 71,42. Ceci, cependant, est toujours un calcul de précision qui prend beaucoup de temps, donc nous prenons un coup d’oeil et réalisez que ce n'est pas que loin de 64, un certain nombre de 'round' nice. Diviser avec les puissances de 2 dans le logiciel est très facile, peut se faire via déplacement droite six fois. Octet décalage est une instruction native du PIC, et c’est très très rapide par rapport à une double division. Donc, nous allons 71,42 rond à 64 et juste Maj TMR1 ont quitté 6 fois pour avoir une idée sur comment fermer un obstacle est !
Voyons la différence que ce truc donne à un nombre de 8000 (par exemple) :
origine : 8000 / 71,42 = 112 [mm]
Tricky : 8000 / 64 = (8000 >> 6) = 125 [mm]
Si l’erreur est d’environ 10 %, pas beaucoup par rapport à l’énorme quantité de temps qui que nous a sauvé !
Problèmes
Je n’ai pas frappé tous les problèmes tout en travaillant avec ce module, la seule chose qui est arrivé est que le fil entre le PIC et la broche de l’ECHO a été laissé débranché, et le PIC attendu sans cesse pour les bords sur cette broche. C’était facile à attraper, car la LED rouge qui bascule à chaque seconde, s’est arrêté. J’ai su immédiatement que le programme a gelé, et le seul endroit qu'il peut geler est cette attente routine de bord. Problème résolu après une minute !
Encore une chose : ces choses fonctionnent avec 5 [V], afin d’avoir juste 4.8 [V] à charge complète signifie que nous sommes trop loin l’étirant. Si la tension n’est pas suffisant pour attraper l’écho, le MCU se bloque, en attendant l’écho d’arriver !