Calcul De Distance Avec Un Pic 16F877

Calcul de distance avec un PIC16F877

Calculez rapidement la distance mesurée par un capteur ultrason ou un signal temporel avec un microcontrôleur PIC16F877, en tenant compte de l’horloge, du préscaler, du nombre de ticks et de la température.

Formule utilisée : distance = vitesse du son × temps / 2 pour un aller-retour.
Saisissez vos paramètres puis cliquez sur Calculer la distance.

Guide expert du calcul de distance avec un PIC16F877

Le calcul de distance avec un PIC16F877 est une application classique de l’électronique embarquée. On la retrouve dans des robots mobiles, des systèmes anti-collision, des projets de télémétrie, des automatismes industriels simples et des démonstrateurs pédagogiques. Le principe le plus fréquent consiste à utiliser un capteur ultrasonique qui émet une impulsion sonore, attend le retour de l’écho et transmet au microcontrôleur un signal dont la largeur représente le temps de vol. Le PIC16F877 mesure ensuite cette durée avec l’un de ses timers, puis applique une relation physique simple pour convertir le temps en distance.

Le PIC16F877 reste populaire parce qu’il est bien documenté, robuste et parfaitement adapté aux travaux pratiques sur les microcontrôleurs 8 bits. Sa logique d’horloge, ses ports d’entrée-sortie et ses temporisateurs permettent de réaliser une chaîne de mesure fiable, à condition de bien comprendre comment la fréquence d’oscillateur, le préscaler et la vitesse de propagation de l’onde influencent le résultat final.

Idée clé : un capteur ultrason ne mesure pas directement des centimètres. Il mesure un temps. C’est le logiciel du PIC16F877 qui convertit ce temps en distance à partir de la vitesse du son dans l’air.

Principe physique de base

Quand un module ultrasonique émet une onde, celle-ci se déplace dans l’air, rebondit sur un obstacle puis revient au capteur. Si le temps mesuré est noté t et la vitesse du son v, alors la distance entre le capteur et l’objet vaut :

d = v × t / 2

Le facteur / 2 est indispensable dans un mode écho, parce que l’onde parcourt la distance deux fois : une première fois à l’aller et une seconde fois au retour. Si vous travaillez sur un dispositif à trajet simple, par exemple un système où l’émetteur et le récepteur sont séparés, vous ne divisez pas par 2.

Pourquoi le PIC16F877 convient à cette mesure

Le PIC16F877 intègre plusieurs ressources utiles pour la télémétrie :

  • des timers matériels pour mesurer des impulsions avec précision ;
  • une fréquence d’oscillateur externe couramment utilisée à 20 MHz ;
  • des ports numériques faciles à configurer pour le trigger et l’echo d’un capteur ;
  • un environnement idéal pour l’apprentissage de la relation entre temps processeur et temps réel.

Sur les PIC 8 bits classiques, la fréquence d’instruction vaut généralement Fosc / 4. Ainsi, avec un quartz de 20 MHz, le cycle d’instruction est de 5 MHz, soit une période de 0,2 microseconde avant l’effet du préscaler. Si l’on applique un préscaler de 1:8, chaque tick du timer vaut 1,6 microseconde. Ce paramètre change directement la résolution de votre mesure.

Méthode de calcul pas à pas

  1. Choisir la fréquence d’oscillateur du PIC, par exemple 20 MHz.
  2. Déterminer la fréquence d’instruction : Fosc / 4.
  3. Appliquer le préscaler du timer.
  4. Mesurer le nombre de ticks entre le départ et le retour de l’écho.
  5. Calculer le temps total mesuré.
  6. Calculer la vitesse du son, idéalement en tenant compte de la température.
  7. Transformer ce temps de vol en distance.

La vitesse du son dépend de l’air et notamment de la température. Une approximation très utilisée en électronique embarquée est :

v = 331,3 + 0,606 × T, avec T en °C et v en m/s.

À 20 °C, la vitesse du son vaut donc environ 343,4 m/s. Si le temps mesuré est de 4 millisecondes en mode aller-retour, la distance vaut :

d = 343,4 × 0,004 / 2 = 0,6868 m, soit environ 68,7 cm.

Exemple concret avec Timer1

Supposons un PIC16F877 avec un quartz de 20 MHz et un Timer1 configuré avec un préscaler de 1:8. Le tick du timer vaut :

  • Fréquence d’instruction = 20 MHz / 4 = 5 MHz
  • Période d’instruction = 1 / 5 000 000 = 0,2 µs
  • Tick timer avec préscaler 1:8 = 0,2 × 8 = 1,6 µs

Si vous lisez 3000 ticks, le temps total est :

3000 × 1,6 µs = 4800 µs = 4,8 ms

À 20 °C, la distance aller-retour correspond alors à :

d = 343,4 × 0,0048 / 2 = 0,82416 m, soit environ 82,4 cm.

Tableau de vitesse du son selon la température

Température (°C) Vitesse estimée du son (m/s) Erreur relative vs 20 °C Impact pratique
0 331,3 -3,52 % La distance calculée sera légèrement plus faible qu’à 20 °C
10 337,4 -1,75 % Bon compromis pour un local frais
20 343,4 0 % Référence de calcul courante
30 349,5 +1,78 % La distance estimée augmente légèrement
40 355,5 +3,52 % Important dans un boîtier chauffé ou en plein soleil

Ce tableau montre un point essentiel : si vous ignorez la température, vous introduisez une erreur systématique. Dans beaucoup de projets de loisir, cette erreur reste acceptable. En revanche, dans une application de positionnement plus sérieuse, il est recommandé de mesurer ou de compenser la température.

Caractéristiques utiles du PIC16F877 pour la mesure temporelle

Caractéristique Valeur courante Intérêt pour le calcul de distance
Architecture Microcontrôleur 8 bits Simple à programmer et très utilisé en enseignement
Fréquence d’oscillateur max 20 MHz Améliore la résolution temporelle
Cycle d’instruction Fosc / 4 Base de calcul des ticks du timer
Timers matériels Timer0, Timer1, Timer2 Mesure précise de largeur d’impulsion
Nombre de broches 40 broches Intégration facile avec capteurs, LCD et UART
ADC intégré 10 bits Utile si l’on ajoute une sonde de température analogique

Erreurs fréquentes à éviter

  • Oublier le facteur 2 pour un écho aller-retour.
  • Confondre Fosc et fréquence d’instruction. Sur le PIC16F877, le timer ne suit pas directement Fosc mais la logique issue de Fosc/4 selon la configuration retenue.
  • Ignorer le préscaler. Un préscaler 1:8 multiplie la durée du tick par 8.
  • Négliger la température alors qu’elle modifie la vitesse du son de plusieurs pourcents.
  • Utiliser des unités incohérentes, par exemple des microsecondes avec des mètres par seconde sans conversion.
  • Ne pas gérer le débordement du timer sur des distances plus longues.

Bonnes pratiques de programmation

Pour obtenir un résultat stable avec un PIC16F877, il est préférable d’implémenter une logique de mesure défensive. Déclenchez l’impulsion ultrasonique, attendez la montée du signal d’écho, démarrez le timer, attendez la descente, puis lisez la valeur. Si aucun retour n’arrive dans un temps limite, renvoyez un état de dépassement plutôt qu’un faux zéro. Pour lisser les mesures, effectuez plusieurs acquisitions et utilisez une moyenne ou une médiane.

  1. Initialiser les ports d’entrée-sortie.
  2. Configurer Timer1 ou Timer0 avec le bon préscaler.
  3. Envoyer l’impulsion de trigger au capteur.
  4. Capturer la durée du signal echo.
  5. Convertir les ticks en microsecondes.
  6. Appliquer la formule de distance.
  7. Afficher ou transmettre le résultat.

Résolution et précision réelle

La résolution théorique d’un système dépend de la durée d’un tick. Avec 20 MHz et 1:8, un tick vaut 1,6 µs. À 20 °C, cela représente une résolution spatiale approximative de :

343,4 m/s × 1,6 µs / 2 ≈ 0,275 mm

Cette valeur est séduisante, mais il faut distinguer résolution théorique et précision réelle. Dans la pratique, le capteur ultrasonique, le bruit, la forme de l’obstacle, l’angle d’incidence et la qualité de l’alimentation dégradent la précision. Beaucoup de montages réels obtiennent plutôt une précision de l’ordre de quelques millimètres à quelques centimètres selon la portée et l’environnement.

Quand faut-il corriger la température et l’humidité ?

Pour un robot d’intérieur ou un système éducatif, la température seule suffit généralement à améliorer nettement le calcul. Dans un environnement extérieur ou semi-industriel, l’humidité et les gradients thermiques peuvent aussi influencer la propagation. Cela ne veut pas dire qu’un PIC16F877 devient inadapté, mais simplement que le modèle de calcul doit rester cohérent avec le niveau de précision recherché.

Architecture typique d’un projet fiable

  • PIC16F877 avec quartz stable de 20 MHz
  • Capteur ultrasonique correctement alimenté
  • Timer1 pour la mesure de largeur d’impulsion
  • Afficheur LCD ou liaison série pour afficher la distance
  • Sonde thermique optionnelle pour compensation
  • Filtrage logiciel sur plusieurs mesures

Comment interpréter les résultats du calculateur ci-dessus

Le calculateur de cette page vous permet de saisir le nombre de ticks comptés par le timer, la fréquence d’oscillateur du PIC, le préscaler, la température de l’air et le type de trajet. Il calcule ensuite :

  • la durée d’un tick du timer ;
  • le temps total mesuré ;
  • la vitesse du son estimée ;
  • la distance finale dans l’unité choisie.

C’est particulièrement utile pour vérifier un programme embarqué ou valider une mesure prise sur banc. Si votre résultat ne correspond pas à la distance réelle, vérifiez d’abord la configuration du timer, l’horloge utilisée et la présence éventuelle d’un overflow. Ensuite, testez l’effet d’une température différente. Très souvent, l’erreur vient d’une confusion entre le nombre de ticks et la durée d’instruction.

Ressources officielles et universitaires recommandées

Conclusion

Le calcul de distance avec un PIC16F877 repose sur une idée simple mais exige une bonne rigueur de mise en œuvre. Le microcontrôleur mesure un temps, pas une longueur. Pour passer de ce temps à une distance fiable, il faut maîtriser la chaîne complète : fréquence d’oscillateur, division par 4 du cycle machine, préscaler du timer, gestion des unités et compensation thermique. Une fois ces éléments compris, le PIC16F877 devient une plateforme très efficace pour des systèmes de mesure robustes, pédagogiques et économiques.

En résumé, si vous connaissez précisément votre configuration matérielle et que vous appliquez la bonne formule, vous pouvez obtenir des mesures de distance cohérentes et exploitables. Le calculateur proposé sur cette page a justement pour but de rendre cette conversion immédiate, afin de gagner du temps pendant le développement, le test et l’étalonnage de vos projets embarqués.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top