Le module à ultrasons allant de HC-SR04 est un ajout fantastique à n’importe quel projet de robot. Ses un moyen très simple et pas cher de suivre une progression de robots (en supposant que nous avons des points de référence fixes) signalés allant de 2-400cm avec exactitudes de 3mm possible. C’est aussi une excellente façon d’ajouter l’évitement d’objet pour arrêter votre précieuse création s’écraser sur le paysage.
L’opération de modules est très simple. Lors du déclenchement avec une impulsion de 10us sur l’ergot, le module envoie huit pulsations ultrasoniques 40kHz. Le module puis prend la broche echo haute et il détient là jusqu'à ce qu’il reçoive un écho vers le module. La durée de que la broche de l’écho est élevée est directement proportionnelle à la distance d’un objet. En fait, ce temps est le temps qu’il faut les impulsions de voyager à l’objet et le dos et, parce que nous savons de la vitesse du son à 20° C dans l’air sec au niveau de la mer en 343,2 m/s, nous pouvons utiliser la formule suivante pour déterminer la distance entre le module et l’objet :
distance (m) = (temps (s) * Vitesse (m/s)) / 2
Comme nous allons mesurer le temps en microsecondes est facile pour nous de travailler dans quelle mesure son voyagent par microseconde et il suffit de multiplier notre temps chronométré par ce numéro.
343,2 m/s = 0.0343.2cm/us
Alors maintenant, nous pouvons dire :
distance (cm) = (time(us) * speed(cm/us)) / 2 = (temps * 0.0343.2)/2
Multiplication et division sont pas chers (en fonction du temps) sur un microcontrôleur Qu'on peut ainsi diviser notre constante de vitesse 2 maintenant et économisez répéter l’effort par la suite, donc :
distance (cm) = time(us) * 0.01716
Maintenant, nous allons mesurer un nombre (entier) entier de microsecondes et nous savons que flottante point mathématiques est moins efficace sur un microcontrôleur que l’entier équivalent. Alors, plutôt que multiplication notre durée mesurée par un flottement nous pourrions diviser par un nombre entier parce que 0.01716 équivaut à environ 1/58, donc de nombre à virgule :
distance (cm) = time(us) / 58(cm/us)
En utilisant la même méthode, nous pouvons déterminer que la distance d’un objet en pouces est comme suit :
distance (en) = time(us) / 148(in/us)
Alors, maintenant que nous savons comment le capteur fonctionne, comment l’utiliser et comment faire pour obtenir une valeur utile de sa sortie. Le dernier problème, pour moi en tout cas, est que l’attente pour l’axe de l’écho aller en bas bloquera notre exécution de programmes. Cela signifie qu’en attendant le module prendre une lecture nous ne pouvons pas faire autre chose. Compte tenu de la gamme de modules de 400cm nous pourrions attendre pour autant que de 23ms. Maintenant, cela peut ne pas sembler beaucoup, mais pour un robot qui dispose d’une boucle de contrôle itératif et a beaucoup d’autres choses à faire (contrôle moteurs, collecte d’autres données du capteur), c’est un retard significatif.
Heureusement, il y a un moyen que le microcontrôleur peut nous dire quand la broche écho change plutôt que de nous avoir à regarder et attendre. Ce mécanisme est appelé une « interruption » parce que le microcontrôleur littéralement interrompt l’exécution du programme, lorsqu’une condition d’interruption se produit et appeler une fonction de notre choix. Et c’est la méthode que j’ai utilisé pour cet exemple. Quand la broche echo va élevée au début de l’allant de notre interrupt service routine (ISR, fonction qui traite de l’interruption) est appelée et nous sauver à l’heure actuelle comme notre heure de départ. Quand la broche echo va faible à la fin de l’allant de notre rapport de recherche internationale est appelée à nouveau et nous sauver à l’heure actuelle comme notre heure de fin. La différence entre les heures de début et de fin est le temps pris par l’allant. Simple ! Il y a beaucoup de ressources là-bas qui décrivent comment les interruptions loin mieux que j’ai pu et j’ai déjà écrit beaucoup à beaucoup ici ! Aussi, j’ai enveloppé le code dans une petite bibliothèque, donc si vous voulez l’utiliser et ne soucient pas comment fonctionnent les interruptions, vous n’avez pas besoin de.