Cours:Télémètre : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Rouge|Composants utilisés}})
 
(65 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 l'écran du PC<br />
+
*affichage du résultat sur un écran LCD<br />
*alimentation par le port USB du PC<br />
+
*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|Description des fonctions principales :}}==
+
=={{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 :}}|| l'émetteur est un MA40S4S du fabricant MURATA
+
|style="vertical-align:top;"|{{Vert|EMETTRE une onde US :}}||  
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|RECEVOIR une onde US :}}|| Le récepteur est un MA40S4R du fabricant MURATA
+
|style="vertical-align:top;"|{{Vert|RECEVOIR une onde US :}}||  
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|DETECTER le premier écho :}}|| cette fonction devra assurer l'élimination des échos suivants et/ou des parasites.
+
|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 sera amplifié entre 10 et 200 fois.
+
Le signal issu du récepteur est ensuite amplifié plusieurs dizaines de fois.
 
 
On détectera son enveloppe qu'on comparera à une rampe de référence destinée à éliminer les échos et les parasites afin ne de détecter que le signal utile ( voir dessin ).  
 
 
|-
 
|-
|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 :}}||  la mesure devra être précise à +/-1mm
+
|style="vertical-align:top;"|{{Vert|CONVERTIR en mètres :}}||   
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|AFFICHER le résultat :}}|| l'affichage sur 4 digits se fera par l'intermédiaire du moniteur accessible par le biais de l'outil de développement Arduino.
+
|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 Arduino UNO et d'un shield qui supportera les capteurs et le reste de l'électronique nécessaire au fonctionnement du télémètre. L'affichage de la mesure s'effectuera grâce au moniteur accessible par le biais du programme Arduino
+
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:Telemetre D2.jpg]]
+
[[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
 +
 
 +
=={{Bleu|Organisation du travail}}==
 +
 
 +
Le travail s'effectuera en binôme sur 7  semaines suivant le calendrier ci-dessous :<br /><br />
  
[[Fichier:telemetre signaux.jpg|vignette|300px|left|signaux du télémètre]]
 
  
{|class="wikitable"
+
{| class="wikitable"
 +
|-
 +
! n° de séance !!  !! Détail de l'attendu
 +
|-
 +
| align="center" | 1 || '''  ''' || Étude théorique des fonctions
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|GENERATEUR de SALVE :}}|| produit une salve de à .... Hz à chaque appui sur un bouton poussoir.
+
| align="center" | 2 || '''  ''' || Étude des fonctions/programmes (tests)
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|AMPLIFICATEUR émission :}}|| assure le doublement de la tension grâce à un pont en H à transistors bipolaires
+
| align="center" | 3 || '''Saisie''' || Étude (validation) et saisie du schéma
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|EMETTEUR US :}}|| émetteur MA40S4S du fabricant MURATA
+
| align="center" | 4 || '''Routage''' || Validation du schéma et routage de la carte électronique
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|RECEPTEUR US :}}|| récepteur MA40S4R du fabricant MURATA
+
| align="center" | 5 || '''Fabrication''' || Brasage des composants
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|AMPLIFICATEUR réception :}}|| amplifie le signal issu du récepteur entre 10 et 200 fois ( réglable )
+
| align="center" | 6 || '''Vérification''' || Tests et dépannage de la carte
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|DETECTEUR d'enveloppe :}}|| restitue l'enveloppe du signal reçu
+
| align="center" | 7 || '''Programmation''' || Mesure des performances de la carte réalisée
 
|-
 
|-
|style="vertical-align:top;"|{{Vert|GENERATEUR de RAMPE :}}|| génère une rampe négative représentant le gabarit minimum du signal à percevoir afin d'éliminer les parasites et ne détecter que le signal utile ( voir dessin ).<br />
+
| 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
  
La rampe est réinitialisée à chaque commande.
+
 
 +
'''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]]
  
|style="width:15em;vertical-align:top;"|{{Vert|COMPARATEUR :}}|| compare l'enveloppe du signal détecté à la rampe afin de détecter le signal reçu.
 
 
|-
 
|-
 +
| 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.
  
|style="width:15em;vertical-align:top;"|{{Vert|BASE de temps :}}|| produit un signal périodique représentatif du temps
+
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.
 
|-
 
|-
|style="width:15em;vertical-align:top;"|{{Vert|COMPTEUR :}}|| détermine le temps entre la commande de mesure et le retour du signal ( ce temps est caratéristique de la distance parcourue ) .<br/>
+
| Pins réservées || La patte {{Rouge|RESET}} principalement, ne peut servir qu'à cet usage !!
Le comptage démarre lors de la commande et s'arrête lors de la réception du signal.<br/>
+
 
|-
+
|| Dans le cas contraire, vous ne pourrez plus reprogrammer le microcontrôleur.
|style="vertical-align:top;"|{{Vert|CONVERTISSEUR :}}|| convertit le temps en distance
 
|-
 
|style="vertical-align:top;"|{{Vert|TRANSMISSION :}}|| permet la transmission du résultat au moniteur sur l'écran du PC
 
|-
 
|style="vertical-align:top;"|{{Vert|AFFICHEUR le résultat :}}|| affichage le résultat sur 4 digits sur l'écran de l'ordinateur.
 
 
|}
 
|}
  
<br /><br /><br /><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;
  
={{Rouge|Organisation du travail :}}=
+
  // phase de configuration du µcontrôleur (e/s, ... )
travail en binôme sur 7  semaines<br /><br />
 
  
'''1ère semaine''' :<br />
+
  // on sélectionne l'un des digits
* Présentation des projets et choix <br />
+
  PORTx = ... ;
* Etude des transducteurs : <br />
 
* Recherche des caractéristiques de fonctionnement des transducteurs ( tension et fréquence )<br />
 
* Tests : mise en oeuvre d'un émetteur et d'un récepteur ( portée, influence de la fréquence, influence de la tension )
 
* Recherche documentaire sur les "pont en H à transistors bipolaires"<br />
 
* Recherche documentaire "amplificateur à gain variable" ( 10 < amplification < 200 )<br /><br />
 
  
'''2ème semaine : '''<br />
+
  // boucle infinie
* Tests : mise en oeuvre d'un "pont en H à transistors bipolaires"<br />
+
  while(1)
* Tests : mise en oeuvre d'un "amplificateur à gain variable"<br /><br />
+
  {
* Recherche documentaire sur la structure "détecteur d'enveloppe"<br />
+
      // il y aura sans doute une attente quelque part !
* Recherche documentaire sur la structure "comparateur" <br /><br />
+
      _delay_ms(xxx);
 +
      if (i==9) i=0; else i++;
 +
  }
 +
}
 +
</source>
  
'''3ème semaine :''' <br />
+
{{Todo|Encore un peu de travail et vous avez un compteur de 0 à 9999 : il faut penser à afficher alternativement unité, dizaine, centaine, millier !}}
* Tests : structure "comparateur" <br />
 
* Tests : structure "détecteur d'enveloppe"<br />
 
* Fonction programmée " génération d'une salve"<br /><br />
 
  
 +
<source lang=c>
 +
#define F_CPU xxxxxxxxxxUL
 +
#include <avr/io.h>
 +
#include <util/delay.h>
 +
//déclaration des constantes et variables globales
  
'''4ème semaine :'''<br />
+
const unsigned char aff7[10]={...};  /// tableau de transcodage qui donnera les valeurs à placer sur le port correspondant aux segements
* Fin des tests fonctionnels<br />
 
* Saisie du schéma et routage <br />
 
* Programmation<br /><br />
 
  
'''5ème semaine :'''<br />
+
int main(void)
* Routage /Programmation <br />
+
{
* Tirage du PCB<br /><br />
+
  // déclaration des variables locales
 +
  int i=0;
  
'''6ème semaine :'''<br />
+
  // phase de configuration du µcontrôleur (e/s, ... )
* Montage / Programmation<br /><br />
 
  
'''7ème semaine :'''<br />
+
  // boucle infinie
Intégration / Tests finaux<br />
+
  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}}=
 
={{Rouge|Composants utilisés}}=
Ligne 154 : Ligne 401 :
 
! Nom !! Type !! Boîtier !! Librairie Eagle !! Référence eagle !! Documentation !! Fournisseur !! Référence
 
! Nom !! Type !! Boîtier !! Librairie Eagle !! Référence eagle !! Documentation !! Fournisseur !! Référence
 
|-
 
|-
| MA40S4S || Émetteur US || traversant ||  || || [http://www.farnell.com/datasheets/484560.pdf MA40S4S.pdf] || Farnell || [http://fr.farnell.com/murata/ma40s4s/capteur-ultrasonic-0-2-4m-tx/dp/1777667?Ntt=1777667 1777667]
+
| 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]
 +
 
 
|-
 
|-
| MA40S4R || Récepteur US || traversant ||  ||  || [http://www.farnell.com/datasheets/484560.pdf] || Farnell || [http://fr.farnell.com/murata/ma40s4r/capteur-ultrasonic-0-2-4m-rx/dp/1777668]
+
| 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

Ressources enseignant

Présentation du projet

Objectif

Ce projet consiste à réaliser un télémètre à ultrasons.

Notions de base

télémètre de chantier
transducteurs ultrasons

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

mesure par réflexion

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

contrôle de pièce par ultrasons
Echographie médicale

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 :

Telemetre N1.jpg

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.

module E/R ultrason

afficheur 4 digits

Description des fonctions secondaires

Principe avec module US.jpg

fonctionnement de l'émetteur/récepteur ultrason HC-SR04




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.

Question.jpg 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.jpg 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.

Todo.jpg 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 5V.


Todo.jpg 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
  • 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.

Avr isp.jpg
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 :

  1. fond en blanc : Options -> user interface -> layout
  2. 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.
  3. Choisir cette couche 116 puis change -> Fillstyle en plein
  4. Choisir les couches Bottom (bleu) Pads vias et la 116
  5. File -> export -> Image donner un nom et choisir 1200 DPI et monochrome
  6. 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.

Todo.jpg 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++;
   }
}

Todo.jpg 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++;
   }
}

Todo.jpg 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