Cours:Télémètre : Différence entre versions
m (→{{Bleu|Caratéristiques :}}) |
(→{{Rouge|Composants utilisés}}) |
||
(68 révisions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 33 : | Ligne 33 : | ||
=={{Bleu|Caratéristiques :}}== | =={{Bleu|Caratéristiques :}}== | ||
− | *Commande de la mesure par bouton poussoir<br /> | + | *Commande de la mesure par appui sur bouton poussoir<br /> |
− | *affichage du résultat sur | + | *affichage du résultat sur un écran LCD<br /> |
− | *alimentation | + | *alimentation autonôme<br /> |
*distance mesurée : de 1cm à 1 m<br /> | *distance mesurée : de 1cm à 1 m<br /> | ||
*précision : +/- 1 mm<br /> | *précision : +/- 1 mm<br /> | ||
− | =={{Bleu| | + | =={{Bleu|Principe de la mesure par ultrason :}}== |
[[Fichier:Telemetre N1.jpg|600px]] | [[Fichier:Telemetre N1.jpg|600px]] | ||
Ligne 49 : | Ligne 49 : | ||
|- | |- | ||
− | |style="vertical-align:top;"|{{Vert|EMETTRE une onde US :}}|| | + | |style="vertical-align:top;"|{{Vert|EMETTRE une onde US :}}|| |
|- | |- | ||
− | |style="vertical-align:top;"|{{Vert|RECEVOIR une onde US :}}|| | + | |style="vertical-align:top;"|{{Vert|RECEVOIR une onde US :}}|| |
|- | |- | ||
− | |style="vertical-align:top;"|{{Vert|DETECTER le premier écho :}}|| cette fonction | + | |style="vertical-align:top;"|{{Vert|DETECTER le premier écho :}}|| cette fonction assure l'élimination des échos suivants et/ou des parasites. |
− | Le signal issu du récepteur | + | Le signal issu du récepteur est ensuite amplifié plusieurs dizaines de fois. |
− | |||
− | |||
|- | |- | ||
− | |style="width:15em;vertical-align:top;"|{{Vert|MESURER le temps :}}|| entre le signal émis et la réception de sa réverbération. | + | |style="width:15em;vertical-align:top;"|{{Vert|MESURER le temps :}}|| mesure le temps entre le signal émis et la réception de sa réverbération. |
|- | |- | ||
− | |style="vertical-align:top;"|{{Vert|CONVERTIR en mètres :}}|| | + | |style="vertical-align:top;"|{{Vert|CONVERTIR en mètres :}}|| |
|- | |- | ||
− | |style="vertical-align:top;"|{{Vert|AFFICHER le résultat :}}|| | + | |style="vertical-align:top;"|{{Vert|AFFICHER le résultat :}}|| affiche la mesure sur un afficheur 4 digits. |
|} | |} | ||
=={{Bleu|Structure du télémètre}}== | =={{Bleu|Structure du télémètre}}== | ||
− | Le télémètre sera conçu autour d'une carte | + | Le télémètre sera conçu autour d'une carte à micro-contrôleur ATtiny 261A et d'un module Emetteur/Récepteur à ultrason de type HC SR04. L'affichage de la mesure s'effectuera grâce à un afficheur 7 segments 4 digits CC04-41SURKWA. |
+ | |||
+ | [[Fichier:Hc-sr04.jpg|250px|left|module E/R ultrason]] | ||
+ | |||
+ | [[Fichier:Afficheur CC04-41.JPG||250px|afficheur 4 digits]] | ||
=={{Bleu|Description des fonctions secondaires}}== | =={{Bleu|Description des fonctions secondaires}}== | ||
− | [[Fichier: | + | [[Fichier:Principe avec module US.jpg|900px|]] |
+ | |||
+ | [[Fichier:Working-of-HC-SR04-Ultrasonic-Sensor.jpg|vignette|600px|center|fonctionnement de l'émetteur/récepteur ultrason HC-SR04]] | ||
+ | |||
+ | <br /><br /><br /> | ||
+ | |||
+ | ={{Rouge|Travail attendu}}= | ||
+ | |||
+ | =={{Bleu|Objectif}}== | ||
+ | |||
+ | L'objectif sera bien évidemment de terminer le projet de sorte qu'il réponde au cahier des charges décrit précédemment. | ||
+ | |||
+ | Pour ce faire, il conviendra de : | ||
+ | *'''dimensionner''' les composants utilisés | ||
+ | *'''tester''' les différents blocs fonctionnels | ||
+ | *'''fabriquer''' la carte électronique | ||
+ | *'''programmer''' les composants | ||
+ | *'''valider''' le fonctionnement | ||
+ | |||
− | + | Vous serez évalué sur la fabrication de la carte électronique, ainsi que sur un dossier qui devra : | |
+ | *détailler les différentes '''fonctions''' | ||
+ | *expliquer les '''choix''' effectués (structure,composants ....) | ||
+ | *utilisera des '''courbes ou mesures''' pour appuyer les explications | ||
+ | *donnera une estimation (hors temps de conception) du '''coût''' de la carte électronique | ||
− | {|class="wikitable" | + | =={{Bleu|Organisation du travail}}== |
+ | |||
+ | Le travail s'effectuera en binôme sur 7 semaines suivant le calendrier ci-dessous :<br /><br /> | ||
+ | |||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! n° de séance !! !! Détail de l'attendu | ||
+ | |- | ||
+ | | align="center" | 1 || ''' ''' || Étude théorique des fonctions | ||
|- | |- | ||
− | | | + | | align="center" | 2 || ''' ''' || Étude des fonctions/programmes (tests) |
|- | |- | ||
− | | | + | | align="center" | 3 || '''Saisie''' || Étude (validation) et saisie du schéma |
|- | |- | ||
− | | | + | | align="center" | 4 || '''Routage''' || Validation du schéma et routage de la carte électronique |
|- | |- | ||
− | | | + | | align="center" | 5 || '''Fabrication''' || Brasage des composants |
|- | |- | ||
− | | | + | | align="center" | 6 || '''Vérification''' || Tests et dépannage de la carte |
|- | |- | ||
− | | | + | | align="center" | 7 || '''Programmation''' || Mesure des performances de la carte réalisée |
|- | |- | ||
− | | | + | | align="center" | 8 || '''Programmation (suite)''' || Amélioration et finition du programme et rendu de rapport écrit |
+ | |} | ||
+ | |||
+ | |||
+ | '''Quelques conseils :''' | ||
+ | |||
+ | Répartissez le travail au sein du groupe dès le début du projet et testez les différentes fonctions programmées à l'aide d'une carte Arduino parallèlement à la fabrication (ne pas attendre que la carte soit terminée pour aborder la partie programmation).<br /> | ||
+ | |||
+ | Inspirez-vous des structures étudiées au premier semestre en électronique, en séances de TP ou en ER et testez les structures au fur et à mesure. <br /> | ||
+ | |||
+ | ={{Rouge|Étude du projet}}= | ||
+ | |||
+ | =={{Bleu|Préambule}}== | ||
+ | |||
+ | Le point le plus important à comprendre dans ce projet est '''l'organisation''' des différents composants '''autour''' d'un '''microcontrôleur'''. | ||
+ | |||
+ | Nous allons en quelque sorte '''greffer''' autour les '''composants''' nécessaires à la réalisation des différentes fonctions, telles que listées dans l'étude fonctionnelle. | ||
+ | |||
+ | Le microcontrôleur retenu est un '''attiny261A'''. | ||
+ | |||
+ | {{Question|On vous demande de chercher les informations suivantes sur le microcontrôleur :}} | ||
+ | *Nombre d'entrées/sorties disponibles | ||
+ | *Nombre et position d'entrées analogiques | ||
+ | |||
+ | {{Todo|Gardez sous le coude la datasheet de ce composant dont vous aurez besoin par la suite et attaquez la rédaction de votre rapport avec les informations demandées.}} | ||
+ | |||
+ | =={{Bleu|Module HC-SR04}}== | ||
+ | |||
+ | =={{Bleu|Affichage des informations}}== | ||
+ | |||
+ | Nous allons utiliser un afficheur 7 segments 4 digits qui sera relié au microcontrôleur. | ||
+ | |||
+ | Après avoir lu la page [http://www.sonelec-musique.com/electronique_bases_affichage_multiplexage.html du site '''www.sonelec-musique.com'''] et en '''sachant''' qu'il convient de conserver '''3 entrées analogiques''' sur le µcontrôleur, proposer un schéma de principe permettant de piloter les afficheurs. | ||
+ | |||
+ | {{Todo|Il convient désormais}} | ||
+ | *'''d'adapter''' ce schéma à l'afficheur sélectionné | ||
+ | *'''de calculer''' la valeur des résistances nécessaires. | ||
+ | |||
+ | |||
+ | '''Remarque :''' On rappelle ici que la seule alimentation disponible provient de l'USB donc {{Rouge|5V}}. | ||
+ | |||
+ | |||
+ | |||
+ | {{Todo|Une fois le schéma choisit ainsi que la valeur des résistances calculées, vérifiez le fonctionnement à l'aide d'une carte arduino}} | ||
+ | |||
+ | Vous essaierez simplement de piloter individuellement les afficheurs afin de vérifier que vous pouvez : | ||
+ | *'''afficher''' et '''éteindre''' chaque segment | ||
+ | *'''piloter''' individuellement '''chaque''' digit | ||
+ | *'''multiplexer''' suffisamment '''rapidement''' pour avoir une impression visuelle d'affichage simultané | ||
+ | |||
+ | =={{Bleu|Fabrication de la carte}}== | ||
+ | |||
+ | ==={{Vert|Saisie du schéma}}=== | ||
+ | |||
+ | La relative simplicité de l'étude doit vous amener à approfondir votre réflexion sur le schéma de votre carte et notamment sur les points suivants : | ||
+ | *comment allez-vous '''programmer''' le µcontrôleur ? | ||
+ | *comment choisir les '''meilleurs pattes''' du µcontrôleur | ||
+ | *où '''placer''' la résistance de shunt | ||
+ | |||
− | + | '''Quelques éléments de réponse :''' | |
+ | {| class="wikitable" | ||
|- | |- | ||
+ | | ISP || In System Programming : la plupart des µcontrôleurs modernes dont celui-ci sont programmables directement sur la carte (in situ). | ||
+ | |||
+ | Il faut donc prévoir le connecteur de programmation et le relier au composant en respectant l'ordre de câblage. | ||
+ | |||
+ | Vous utiliserez, comme Atmel le préconise, le connecteur ISP à 6 broches. | ||
+ | || | ||
+ | [[Fichier:Avr isp.jpg|vignette]] | ||
− | |||
|- | |- | ||
+ | | choix des pattes || L'avantage d'utiliser un composant programmable est de pouvoir placer (dans une certaine mesure) les entrées et sorties où bon nous semble. | ||
− | | | + | Attention cependant, il faut garder à l'esprit que le programme sera plus complexe à écrire s'il n'y a pas un minimum de réflexion. |
+ | |||
+ | || Il est avantageux de placer les commandes de tous les segments [a,b,...,g] sur le même port. La commande du segment associé au point de l'afficheur pourra être sur un port différent. | ||
|- | |- | ||
− | | | + | | Pins réservées || La patte {{Rouge|RESET}} principalement, ne peut servir qu'à cet usage !! |
− | + | ||
− | + | || Dans le cas contraire, vous ne pourrez plus reprogrammer le microcontrôleur. | |
− | |||
− | |||
− | |||
− | |||
− | | | ||
|} | |} | ||
− | <br | + | ==={{Vert|Routage}}=== |
+ | |||
+ | Voici quelques contraintes de routage que vous devez respecter :<br> | ||
+ | |||
+ | - pistes : 0,4 mm mini <br> | ||
+ | - écartement entre les pistes : 0,4 mm mini <br> | ||
+ | - Via : 0.8 pour les trous et 1,25 pour le diamètre externe<br> | ||
− | + | '''ATTENTION : Si vous faites un circuit double face, n'oubliez pas que les pastilles qui doivent permettre le brasage des composants traversants ne doivent se trouver sur la même face que le composant (sinon vous ne pourrez pas le souder !)'''<br><br> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ' | + | - placer un condensateur de 100nF au plus près du microcontrôleur entre les bornes +Vcc et GND <br> |
− | + | - placer un condensateur de 150µF entre les bornes +Vcc et GND de l'alimentation<br> | |
+ | - n'oubliez pas les connecteurs pour l'alimentation de la carte : douille (alimentation) ou con-wago-500 dans le tableau des composants <br><br> | ||
− | ''' | + | '''ATTENTION : la masse analogique AGND doit être raccordée à la masse GND du microcontrôleur '''<br><br> |
− | |||
− | ' | + | - prévoyez un repère visuel côté composant sur le typon à côté de la borne 1 du connecteur ISP pour éviter les erreurs lors du raccordement car il n'y a pas de détrompeur sur ce connecteur<br> |
− | + | - faites apparaître les informations (NOM , PROJET , ANNEE) sur chaque face comportant des pistes afin de pouvoir identifier facilement le côté cuivre lors du tirage du PCB.<br> | |
− | |||
− | + | ==={{Vert|Rappels pour préparation des calques}}=== | |
− | |||
− | ''' | + | |
− | + | Exports sous forme d'images : | |
+ | #fond en blanc : Options -> user interface -> layout | ||
+ | #lancer ulp -> drill-aid vous propose Drill center diameter 0,3mm et c'est OK. Le remplissage se fait en couche 116 mais avec des hachures. | ||
+ | #Choisir cette couche 116 puis change -> Fillstyle en plein | ||
+ | #Choisir les couches Bottom (bleu) Pads vias et la 116 | ||
+ | #File -> export -> Image donner un nom et choisir 1200 DPI et monochrome | ||
+ | #Idem pour Top (rouge) avec pads et vias (et éventuellement la 116) | ||
+ | |||
+ | ={{Rouge| Quelques conseils concernant la programmation de l'afficheur}}= | ||
+ | ==1er test== | ||
+ | |||
+ | Vérification de la communication avec le µcontroleur : | ||
+ | *dans un terminal lancer la commande | ||
+ | * avrdude -c avrisp2 -P usb -p t261 | ||
+ | * éventuellement, si le routage de la carte est mal réalisé : | ||
+ | **avrdude -c avrisp2 -P usb -p t261 -B 100 | ||
+ | |||
+ | =={{Vert|Compilation}}== | ||
+ | |||
+ | Vous utiliserez un éditeur de texte quelconque (gedit par ex) pour créer votre programme (fichier test.c par ex). L'étape de compilation s'effectuera en "ligne de commande" de la façon suivante : | ||
+ | |||
+ | <source lang=bash> | ||
+ | avr-gcc -Wall -g -Os -mmcu=attiny261 -o test.o test.c | ||
+ | avr-objcopy -j .text -j .data -O ihex test.o test.hex | ||
+ | avrdude -c avrisp2 -P usb -p t261 -U flash:w:"test.hex" | ||
+ | </source> | ||
+ | |||
+ | =={{Vert|Premier test}}== | ||
+ | |||
+ | L'objectif est ici de faire clignoter au moins un segment. Ceci permettra de vérifier au minimum : | ||
+ | *que vous arrivez à programmer le µcontrôleur | ||
+ | *qu'il est possible de commander un segment | ||
+ | *que vous avez configuré la bonne fréquence d'horloge | ||
+ | |||
+ | Le programme ressemblera sans doute au suivant : | ||
+ | |||
+ | <source lang=c> | ||
+ | #define F_CPU xxxxxxxxxxUL | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | //déclaration des constantes et variables globales | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | // déclaration des variables locales | ||
+ | |||
+ | // phase de configuration du µcontrôleur (e/s, ... ) | ||
+ | |||
+ | // boucle infinie | ||
+ | while(1) | ||
+ | { | ||
+ | // il y aura sans doute une attente quelque part ! | ||
+ | _delay_ms(xxx); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | =={{Vert|Afficheur 7 segments}}== | ||
+ | |||
+ | La première phase est réalisée, passons à des choses plus sérieuses ! Il faudrait maintenant exploiter les afficheurs et y afficher les différents symboles nécessaires (les chiffres en somme !). | ||
+ | |||
+ | Il va falloir écrire un tableau de transcodage comme vous l'avez déjà réalisé en informatique S1 ou en logique S1. | ||
+ | |||
+ | {{Todo|Commencer par faire un compteur sur seulement 1 digit (donc de 0 à 9 !)}} | ||
+ | |||
+ | <source lang=c> | ||
+ | #define F_CPU xxxxxxxxxxUL | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | //déclaration des constantes et variables globales | ||
+ | |||
+ | const unsigned char aff7[10]={...}; /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segements | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | // déclaration des variables locales | ||
+ | int i=0; | ||
+ | |||
+ | // phase de configuration du µcontrôleur (e/s, ... ) | ||
+ | |||
+ | // on sélectionne l'un des digits | ||
+ | PORTx = ... ; | ||
+ | |||
+ | // boucle infinie | ||
+ | while(1) | ||
+ | { | ||
+ | // il y aura sans doute une attente quelque part ! | ||
+ | _delay_ms(xxx); | ||
+ | if (i==9) i=0; else i++; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | {{Todo|Encore un peu de travail et vous avez un compteur de 0 à 9999 : il faut penser à afficher alternativement unité, dizaine, centaine, millier !}} | ||
+ | |||
+ | <source lang=c> | ||
+ | #define F_CPU xxxxxxxxxxUL | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | //déclaration des constantes et variables globales | ||
+ | |||
+ | const unsigned char aff7[10]={...}; /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segements | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | // déclaration des variables locales | ||
+ | int i=0; | ||
+ | |||
+ | // phase de configuration du µcontrôleur (e/s, ... ) | ||
+ | |||
+ | // boucle infinie | ||
+ | while(1) | ||
+ | { | ||
+ | for (j=0;j<5;j++) // donne la vitesse de comptage | ||
+ | { | ||
+ | // sélection unité et valeur à afficher | ||
+ | PORTx = ... ; | ||
+ | PORTy = aff7[i]; | ||
+ | _delay_ms(xxx); | ||
+ | // sélection dizaine et valeur à afficher | ||
+ | PORTx = ... ; | ||
+ | PORTy = aff7[i]; | ||
+ | _delay_ms(xxx); | ||
+ | .... | ||
+ | } | ||
+ | if (i==9) i=0; else i++; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | {{Todo|Et enfin, on déclare une fonction affiche() qui permettra de rendre le programme plus lisible}} | ||
+ | |||
+ | <source lang=c> | ||
+ | #define F_CPU xxxxxxxxxxUL | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | //déclaration des constantes et variables globales | ||
+ | |||
+ | const unsigned char aff7[10]={...}; /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segments | ||
+ | |||
+ | static void affiche(unsigned int n) | ||
+ | { | ||
+ | // fonction d'affichage d'un nombre sur l'afficheur | ||
+ | // il affichera successivement les unité puis dizaine, centaine et enfin millier | ||
+ | |||
+ | } | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | // déclaration des variables locales | ||
+ | int i=0,j; | ||
+ | |||
+ | // phase de configuration du µcontrôleur (e/s, ... ) | ||
+ | |||
+ | // boucle infinie | ||
+ | while(1) | ||
+ | { | ||
+ | for (j=0;j<5;j++) // donne la vitesse de comptage | ||
+ | { | ||
+ | affiche(i); | ||
+ | } | ||
+ | if (i==9999) i=0; else i++; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ={{Rouge|Composants utilisés}}= | ||
+ | |||
+ | {| class="wikitable sortable" | ||
+ | |- | ||
+ | ! Nom !! Type !! Boîtier !! Librairie Eagle !! Référence eagle !! Documentation !! Fournisseur !! Référence | ||
+ | |- | ||
+ | | ATTINY261A || µcontrôleur || WSOIC20 || [[media:AtmelIUT.lbr|atmelIUT]] || ATTINY261A || [http://www.atmel.com/Images/doc8197.pdf attiny261A.pdf] || Farnell || [http://fr.farnell.com/jsp/search/productdetail.jsp?sku=2443187 2443187] | ||
+ | |- | ||
+ | | ISP || barrette mâle sécable|| traversant || con-lstb || MA03-2 || || || | ||
+ | |- | ||
+ | | Connecteur || support femelle pour HC-SR04|| traversant || con-lstb || MA04-1 || || || | ||
+ | |- | ||
+ | | bp || bouton poussoir || CMS || [[media:Troyesgeii.lbr|Troyesgeii]] || SWITCH_6X6.5 || || || | ||
+ | |- | ||
+ | | HDSP-B09G || afficheur 7 sgts 4 digits || traversant || [[media:HDSP-B09G.lbr]] || *HDSP-B09G* || [http://www.farnell.com/datasheets/2095874.pdf af7sgt4dgts.pdf] || Farnell || [http://www.farnell.com/datasheets/2095874.pdf 2095874] | ||
+ | |- | ||
+ | | CC04-41SURKWA || afficheur 7 sgts 4 digits || traversant || [[media:AtmelIUT.lbr|atmelIUT]] || CC04-41SURKWA || [http://www.farnell.com/datasheets/1821242.pdf af7sgt4dgts.pdf] || Farnell || [http://fr.farnell.com/jsp/search/productdetail.jsp?sku=2426180 2426180] | ||
+ | |||
+ | |- | ||
+ | | Rx|| Résistances || CMS ||rcl ||R1206 || || Farnell || | ||
+ | |||
+ | |- | ||
+ | | Cx|| Condensateurs || CMS ||rcl ||C1206 || || Farnell || | ||
+ | |||
+ | |- | ||
+ | | CPOL|| Condensateurs 150µF 6.3V || CMS ||rcl ||SMC_D || || Farnell || | ||
+ | |||
+ | |- | ||
+ | | Xn|| Connecteur 2 bornes à vis || ||con-wago-500 ||W237-102 || || Farnell || | ||
+ | |||
+ | |- | ||
+ | | bornier(alimentation) || bornier pour 2 fils || traversant || con-wago-500 || W237-102 || || || | ||
+ | |||
+ | |} |
Version actuelle datée du 19 février 2021 à 18:11
Sommaire
Présentation du projet
Objectif
Ce projet consiste à réaliser un télémètre à ultrasons.
Notions de base
Un télémètre est un instrument qui permet de mesurer la distance séparant un observateur d'un point éloigné par des procédés optiques , acoustiques ou radioélectriques et qui est employé par exemple par les photographes, géomètres et géographes ainsi que dans l'armée et l'aviation.
L'ultrason (US) est une onde mécanique et élastique, diffusée par les gaz, les liquides, les tissus mous (chair, organes) ou les solides. La gamme de fréquences des ultrasons se situe entre 16 000 et 10 000 000 Hertz donc trop élevées pour être perçues par l'oreille humaine.
La mesure par ultrasons utilise un ensemble composé de deux transducteurs (un émetteur et un récepteur), parfois dans le même élément, associé à une électronique de contrôle.
Principe du télémètre
Le télémètre à ultrason émet un signal à une fréquence en ultra-sonique et attend le retour d'un écho provoqué par la réflexion de l'onde émise. La distance est mesurée à partir de la vitesse de propagation de l'onde et du temps qui sépare la génération du signal et la réception de l'écho. La vitesse du son dans l'air est de 342 m/s à 20°C ( 331 m/s à 0° C).
Autres applications des ultrasons
Les ultrasons sont utilisés pour mesurer les distances, mais aussi dans le domaine médical pour les échographies et industriel pour la recherche de défauts ( crack sur le dessin ) dans des pièces métalliques
Principe de mesure
Il est basé sur la mesure du temps écoulé entre l’émission et le retour de l’écho. Lors de la commande de mesure, le télémètre met le chronomètre à zéro puis commence l’émission d'une salve ultrasonique. L’onde ultrasonore se propage à la vitesse du son dans l’air environnant, soit 342m/sec. Dès qu’un obstacle est rencontré, l'écho revient vers le transducteur qui stoppe le chronomètre dès réception du signal. Le résultat sortant du chronomètre est proportionnel à la distance parcourue par l'onde. Il suffit donc de le convertir en mètres pour connaître la mesure, puis de l'afficher.
Cahier des charges technique :
Caratéristiques :
- Commande de la mesure par appui sur bouton poussoir
- affichage du résultat sur un écran LCD
- alimentation autonôme
- distance mesurée : de 1cm à 1 m
- précision : +/- 1 mm
Principe de la mesure par ultrason :
PRODUIRE une SALVE : | la salve sera produite par un appui sur un bouton poussoir.
Ses caractéristiques ( fréquence et amplitude )dépendront de celles du transducteur. |
EMETTRE une onde US : | |
RECEVOIR une onde US : | |
DETECTER le premier écho : | cette fonction assure l'élimination des échos suivants et/ou des parasites.
Le signal issu du récepteur est ensuite amplifié plusieurs dizaines de fois. |
MESURER le temps : | mesure le temps entre le signal émis et la réception de sa réverbération. |
CONVERTIR en mètres : | |
AFFICHER le résultat : | affiche la mesure sur un afficheur 4 digits. |
Structure du télémètre
Le télémètre sera conçu autour d'une carte à micro-contrôleur ATtiny 261A et d'un module Emetteur/Récepteur à ultrason de type HC SR04. L'affichage de la mesure s'effectuera grâce à un afficheur 7 segments 4 digits CC04-41SURKWA.
Description des fonctions secondaires
Travail attendu
Objectif
L'objectif sera bien évidemment de terminer le projet de sorte qu'il réponde au cahier des charges décrit précédemment.
Pour ce faire, il conviendra de :
- dimensionner les composants utilisés
- tester les différents blocs fonctionnels
- fabriquer la carte électronique
- programmer les composants
- valider le fonctionnement
Vous serez évalué sur la fabrication de la carte électronique, ainsi que sur un dossier qui devra :
- détailler les différentes fonctions
- expliquer les choix effectués (structure,composants ....)
- utilisera des courbes ou mesures pour appuyer les explications
- donnera une estimation (hors temps de conception) du coût de la carte électronique
Organisation du travail
Le travail s'effectuera en binôme sur 7 semaines suivant le calendrier ci-dessous :
n° de séance | Détail de l'attendu | |
---|---|---|
1 | Étude théorique des fonctions | |
2 | Étude des fonctions/programmes (tests) | |
3 | Saisie | Étude (validation) et saisie du schéma |
4 | Routage | Validation du schéma et routage de la carte électronique |
5 | Fabrication | Brasage des composants |
6 | Vérification | Tests et dépannage de la carte |
7 | Programmation | Mesure des performances de la carte réalisée |
8 | Programmation (suite) | Amélioration et finition du programme et rendu de rapport écrit |
Quelques conseils :
Répartissez le travail au sein du groupe dès le début du projet et testez les différentes fonctions programmées à l'aide d'une carte Arduino parallèlement à la fabrication (ne pas attendre que la carte soit terminée pour aborder la partie programmation).
Inspirez-vous des structures étudiées au premier semestre en électronique, en séances de TP ou en ER et testez les structures au fur et à mesure.
Étude du projet
Préambule
Le point le plus important à comprendre dans ce projet est l'organisation des différents composants autour d'un microcontrôleur.
Nous allons en quelque sorte greffer autour les composants nécessaires à la réalisation des différentes fonctions, telles que listées dans l'étude fonctionnelle.
Le microcontrôleur retenu est un attiny261A.
On vous demande de chercher les informations suivantes sur le microcontrôleur :
- Nombre d'entrées/sorties disponibles
- Nombre et position d'entrées analogiques
Gardez sous le coude la datasheet de ce composant dont vous aurez besoin par la suite et attaquez la rédaction de votre rapport avec les informations demandées.
Module HC-SR04
Affichage des informations
Nous allons utiliser un afficheur 7 segments 4 digits qui sera relié au microcontrôleur.
Après avoir lu la page du site www.sonelec-musique.com et en sachant qu'il convient de conserver 3 entrées analogiques sur le µcontrôleur, proposer un schéma de principe permettant de piloter les afficheurs.
- d'adapter ce schéma à l'afficheur sélectionné
- de calculer la valeur des résistances nécessaires.
Remarque : On rappelle ici que la seule alimentation disponible provient de l'USB donc 5V.
Une fois le schéma choisit ainsi que la valeur des résistances calculées, vérifiez le fonctionnement à l'aide d'une carte arduino
Vous essaierez simplement de piloter individuellement les afficheurs afin de vérifier que vous pouvez :
- afficher et éteindre chaque segment
- piloter individuellement chaque digit
- multiplexer suffisamment rapidement pour avoir une impression visuelle d'affichage simultané
Fabrication de la carte
Saisie du schéma
La relative simplicité de l'étude doit vous amener à approfondir votre réflexion sur le schéma de votre carte et notamment sur les points suivants :
- comment allez-vous programmer le µcontrôleur ?
- comment choisir les meilleurs pattes du µcontrôleur
- où placer la résistance de shunt
Quelques éléments de réponse :
ISP | In System Programming : la plupart des µcontrôleurs modernes dont celui-ci sont programmables directement sur la carte (in situ).
Il faut donc prévoir le connecteur de programmation et le relier au composant en respectant l'ordre de câblage. Vous utiliserez, comme Atmel le préconise, le connecteur ISP à 6 broches. |
|
choix des pattes | L'avantage d'utiliser un composant programmable est de pouvoir placer (dans une certaine mesure) les entrées et sorties où bon nous semble.
Attention cependant, il faut garder à l'esprit que le programme sera plus complexe à écrire s'il n'y a pas un minimum de réflexion. |
Il est avantageux de placer les commandes de tous les segments [a,b,...,g] sur le même port. La commande du segment associé au point de l'afficheur pourra être sur un port différent. |
Pins réservées | La patte RESET principalement, ne peut servir qu'à cet usage !! | Dans le cas contraire, vous ne pourrez plus reprogrammer le microcontrôleur. |
Routage
Voici quelques contraintes de routage que vous devez respecter :
- pistes : 0,4 mm mini
- écartement entre les pistes : 0,4 mm mini
- Via : 0.8 pour les trous et 1,25 pour le diamètre externe
ATTENTION : Si vous faites un circuit double face, n'oubliez pas que les pastilles qui doivent permettre le brasage des composants traversants ne doivent se trouver sur la même face que le composant (sinon vous ne pourrez pas le souder !)
- placer un condensateur de 100nF au plus près du microcontrôleur entre les bornes +Vcc et GND
- placer un condensateur de 150µF entre les bornes +Vcc et GND de l'alimentation
- n'oubliez pas les connecteurs pour l'alimentation de la carte : douille (alimentation) ou con-wago-500 dans le tableau des composants
ATTENTION : la masse analogique AGND doit être raccordée à la masse GND du microcontrôleur
- prévoyez un repère visuel côté composant sur le typon à côté de la borne 1 du connecteur ISP pour éviter les erreurs lors du raccordement car il n'y a pas de détrompeur sur ce connecteur
- faites apparaître les informations (NOM , PROJET , ANNEE) sur chaque face comportant des pistes afin de pouvoir identifier facilement le côté cuivre lors du tirage du PCB.
Rappels pour préparation des calques
Exports sous forme d'images :
- fond en blanc : Options -> user interface -> layout
- lancer ulp -> drill-aid vous propose Drill center diameter 0,3mm et c'est OK. Le remplissage se fait en couche 116 mais avec des hachures.
- Choisir cette couche 116 puis change -> Fillstyle en plein
- Choisir les couches Bottom (bleu) Pads vias et la 116
- File -> export -> Image donner un nom et choisir 1200 DPI et monochrome
- Idem pour Top (rouge) avec pads et vias (et éventuellement la 116)
Quelques conseils concernant la programmation de l'afficheur
1er test
Vérification de la communication avec le µcontroleur :
- dans un terminal lancer la commande
- avrdude -c avrisp2 -P usb -p t261
- éventuellement, si le routage de la carte est mal réalisé :
- avrdude -c avrisp2 -P usb -p t261 -B 100
Compilation
Vous utiliserez un éditeur de texte quelconque (gedit par ex) pour créer votre programme (fichier test.c par ex). L'étape de compilation s'effectuera en "ligne de commande" de la façon suivante :
avr-gcc -Wall -g -Os -mmcu=attiny261 -o test.o test.c
avr-objcopy -j .text -j .data -O ihex test.o test.hex
avrdude -c avrisp2 -P usb -p t261 -U flash:w:"test.hex"
Premier test
L'objectif est ici de faire clignoter au moins un segment. Ceci permettra de vérifier au minimum :
- que vous arrivez à programmer le µcontrôleur
- qu'il est possible de commander un segment
- que vous avez configuré la bonne fréquence d'horloge
Le programme ressemblera sans doute au suivant :
#define F_CPU xxxxxxxxxxUL
#include <avr/io.h>
#include <util/delay.h>
//déclaration des constantes et variables globales
int main(void)
{
// déclaration des variables locales
// phase de configuration du µcontrôleur (e/s, ... )
// boucle infinie
while(1)
{
// il y aura sans doute une attente quelque part !
_delay_ms(xxx);
}
}
Afficheur 7 segments
La première phase est réalisée, passons à des choses plus sérieuses ! Il faudrait maintenant exploiter les afficheurs et y afficher les différents symboles nécessaires (les chiffres en somme !).
Il va falloir écrire un tableau de transcodage comme vous l'avez déjà réalisé en informatique S1 ou en logique S1.
Commencer par faire un compteur sur seulement 1 digit (donc de 0 à 9 !)
#define F_CPU xxxxxxxxxxUL
#include <avr/io.h>
#include <util/delay.h>
//déclaration des constantes et variables globales
const unsigned char aff7[10]={...}; /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segements
int main(void)
{
// déclaration des variables locales
int i=0;
// phase de configuration du µcontrôleur (e/s, ... )
// on sélectionne l'un des digits
PORTx = ... ;
// boucle infinie
while(1)
{
// il y aura sans doute une attente quelque part !
_delay_ms(xxx);
if (i==9) i=0; else i++;
}
}
Encore un peu de travail et vous avez un compteur de 0 à 9999 : il faut penser à afficher alternativement unité, dizaine, centaine, millier !
#define F_CPU xxxxxxxxxxUL
#include <avr/io.h>
#include <util/delay.h>
//déclaration des constantes et variables globales
const unsigned char aff7[10]={...}; /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segements
int main(void)
{
// déclaration des variables locales
int i=0;
// phase de configuration du µcontrôleur (e/s, ... )
// boucle infinie
while(1)
{
for (j=0;j<5;j++) // donne la vitesse de comptage
{
// sélection unité et valeur à afficher
PORTx = ... ;
PORTy = aff7[i];
_delay_ms(xxx);
// sélection dizaine et valeur à afficher
PORTx = ... ;
PORTy = aff7[i];
_delay_ms(xxx);
....
}
if (i==9) i=0; else i++;
}
}
Et enfin, on déclare une fonction affiche() qui permettra de rendre le programme plus lisible
#define F_CPU xxxxxxxxxxUL
#include <avr/io.h>
#include <util/delay.h>
//déclaration des constantes et variables globales
const unsigned char aff7[10]={...}; /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segments
static void affiche(unsigned int n)
{
// fonction d'affichage d'un nombre sur l'afficheur
// il affichera successivement les unité puis dizaine, centaine et enfin millier
}
int main(void)
{
// déclaration des variables locales
int i=0,j;
// phase de configuration du µcontrôleur (e/s, ... )
// boucle infinie
while(1)
{
for (j=0;j<5;j++) // donne la vitesse de comptage
{
affiche(i);
}
if (i==9999) i=0; else i++;
}
}
Composants utilisés
Nom | Type | Boîtier | Librairie Eagle | Référence eagle | Documentation | Fournisseur | Référence |
---|---|---|---|---|---|---|---|
ATTINY261A | µcontrôleur | WSOIC20 | atmelIUT | ATTINY261A | attiny261A.pdf | Farnell | 2443187 |
ISP | barrette mâle sécable | traversant | con-lstb | MA03-2 | |||
Connecteur | support femelle pour HC-SR04 | traversant | con-lstb | MA04-1 | |||
bp | bouton poussoir | CMS | Troyesgeii | SWITCH_6X6.5 | |||
HDSP-B09G | afficheur 7 sgts 4 digits | traversant | media:HDSP-B09G.lbr | *HDSP-B09G* | af7sgt4dgts.pdf | Farnell | 2095874 |
CC04-41SURKWA | afficheur 7 sgts 4 digits | traversant | atmelIUT | CC04-41SURKWA | af7sgt4dgts.pdf | Farnell | 2426180 |
Rx | Résistances | CMS | rcl | R1206 | Farnell | ||
Cx | Condensateurs | CMS | rcl | C1206 | Farnell | ||
CPOL | Condensateurs 150µF 6.3V | CMS | rcl | SMC_D | Farnell | ||
Xn | Connecteur 2 bornes à vis | con-wago-500 | W237-102 | Farnell | |||
bornier(alimentation) | bornier pour 2 fils | traversant | con-wago-500 | W237-102 |