Logo deroulant Logo minus projects
Aboutme contactme

 

 

Back

TUTORIAL ELECTRONIQUE (FR)

Sommaire

1.Video du projet terminé et fonctionnel
2.Présentation de l'équipement : l'altimètre
3.L'objectif du projet
4.Le schéma fonctionnel
5.Expression du besoin
6.Tâches à réaliser
7.Détails et explication
8.Matériels choisis
9.L’électroaimant
10.Conception d'une carte électronique (A1)
11.Présentation des documents de fabrication
12.Commande des composants et coûts
13.La programmation en C++ du microcontrôleur
14.La programmation Ni Vision builder
15.La programmation LabView
16.Conclusion

 


1.Video du projet terminé et fonctionnel


>>> Telecharger / Download <<<

 


2.Présentation de l'équipement : l'altimetre


L'altimetre en image

- L'emplacement de l'altimetre dans un cockpit ATR 42/72.
projet emplacement alti


- Un altimetre sortie de son cockpit.
avionic fonctionnement


- Présentation de l'altimetre ouvert en vue de profil (il manque la partie inférieur)
avionic fonctionnement

 


3.L'objectif du projet


Les tests sur ce type d’équipement sont souvent longs et fastidieux. Le but de ce projet sera donc d'améliorer de manière conséquente le test de cet équipement et d'en automatiser une partie afin de simplifier le travail du technicien en charge de l'éventuelle réparation et de la maintenance de cet équipement. Un certain moment du test nous impose de faire défiler le compteur tambour jusqu'à une altitude de 55 000 feets. Il faut environ 45 min pour faire cette courbe avec la configuration actuelle, car la tension envoyée sur le moteur du tambour est relativement faible et le temps de montée est très long. Lors de la réception de l' équipement, on commence par le brancher pour constater la panne et voir si la calibration de l'appareil est correcte. Il pourra en un clic faire monter le tambour de l'équipement à 55 000 feets sans avoir à câbler le banc de test. J'ajoute au passage que le banc servant à l'altimètre sert aussi aux tests des anémomètres. Il pourra alors libérer cette place jusqu'au test final. Il faut distinguer la partie électronique et mécanique dans l’altimètre. Dans ce projet je vais tester la partie mécanique. On se rend très vite compte en test réel si la carte électronique fonctionne ou pas.

Le passage au banc se fait à l'aide des outils présents sur la photo ci-dessous où l'on peut apercevoir deux "decaviders" l'un sur l'autre entourés d'un cercle rouge avec posé sur la gauche, un altimètre et sur la droite, différentes valises aéronautiques qui me permettent de simuler les diverses réactions d'un avion, en l'occurrence un ATR 42 ou encore un ATR 72 puisque c'est sur ces avions que sont montés les altimètres sur lesquels je travaille.

test_actuel

 


4.Le schema fonctionnel


avionic fonctionnement

Dans cette organisation fonctionnelle, nous pouvons observer les pièces maîtresses de ce projet qui sont un ordinateur, une webcam numérique USB, un microcontrôleur et un altimètre électromécanique.


presentation_global.jpg

 


5.Expression du besoin


Pour faciliter le travail de maintenance, il est demandé d’étudier la faisabilité de créer un banc de tests spécifique aux altimètres électromécaniques. Ce banc va permettre :

D’alimenter le moteur d’entraînement de l’altimètre dans les deux sens à une vitesse variable et pendant un temps précis.
De réaliser des cycles de commande de ce moteur, simulant des conditions de montée et de descente de l’avion.
De faire l’acquisition d’images de la position de l’aiguille et du tambour d’altitude de l’altimètre.
De traiter ces images afin d’évaluer d’éventuelles dérives (stockage des images dans un fichier et/ou analyse de la position de l’aiguille et/ou reconnaissance de la valeur numérique du tambour).

 


6.Tâches à réaliser


Hardware :


Mise en œuvre d’un microcontrôleur (PIC, MBED, carte "Linux embarquée", …).
Mise en œuvre d’une commande moteur DC (pont en H) et PWM.
Mise en œuvre d’un éclairage par leds.
Saisie de schéma, routage et mise au point d’une carte permettant la commande du moteur et l’allumage de l’éclairage à leds

Software :


Mise au point des fonctions permettant de :
Piloter le moteur dans les deux sens de rotation pendant des laps de temps précis ( ± 1ms).
Déclencher l’allumage ou l’extinction de l’éclairage à Leds.
IHM de test permettant de :
Lancer la simulation de cycles de montées et descentes.
Gérer l’acquisition et/ou l’analyse d’images (via le logiciel VBAI).

 


7.Details et explication


Les tests ont lieu à l'intérieur d'une valise afin de contrôler parfaitement l'éclairage. Il est important d'avoir un contrôle total de l'éclairage car la moindre réflexion de lumière ambiante sur la façade de l'altimètre peut nuire au test. De plus, les façades sont équipées de verres spéciaux afin que la diffusion de lumière dans le cadran de l'équipement se fasse correctement pour les pilotes lors des vols de nuit pour une lecture parfaite.

L'éclairage à l'intérieur de cette valise se fera à l'aide de diodes électroluminescentes de puissance, comme celles présentes sur les Smartphones au niveau des appareils photos, servant de flash ou de lampe de poche.
Elles seront disposées stratégiquement au nombre de deux afin que l'éclairage ambiant à l'intérieur de la valise, soit toujours le même pour tous les tests et ainsi garantir la fiabilité des lectures de la webcam et l'interprétation des résultats par le logiciel NI vision. L'éclairage pourra éventuellement être contrôlé par PWM si je constate qu'il est trop important. Il faudra encore une fois faire attention aux placements de ces leds afin qu'aucun reflet dans le cadran n'affecte le test.

Principe_fonctionnement_pont en H

Une caméra USB sera positionnée devant la façade de l'altimètre. Elle sera bien évidement reliée à un pc sur lequel sera installé le logiciel Vision Builder développé par la compagnie National Instruments et appartenant à l'ensemble de logiciels LabView. Il donne la possibilité de configurer, définir des valeurs de référence et déployer un système qui répond aux attentes des applications de vision industrielle, depuis le filtrage par motif et la détection de présence jusqu'à l'alignement de précision et la classification.

Il est alors possible de configurer environ 100 outils puissants pour un traitement d'images simplifié.
Il est utilisé pour des applications de vision industrielle, notamment la correspondance géométrique, la reconnaissance optique de caractères (OCR) et l'analyse de particules pour trouver, compter, mesurer, identifier et classer des objets sans aucune programmation. Une chose très pratique : on utilise un seul ensemble logiciel pour tous les matériels de vision. Il aurait été possible, si je l'avais décidé, d'utiliser des cartes NI d'acquisition d'images, NI Compact Vision System, NI Embedded Vision System, des caméras NI intelligentes, ou des caméras USB3 Vision, GigE Vision, IEEE 1394 et USB DirectShow pour l'acquisition et le traitement d'images. Pour ma part, et vu l'utilisation que j'en aurai, j'ai choisi une caméra USB à bas coût. Il est possible aussi de configurer des prises de décisions complexes (de type "accepté/refusé") ce qui en fait un avantage crucial.
Il permet aussi de communiquer les résultats d'inspection par E/S numériques, série ou par protocoles Ethernet, d'afficher des images, des mesures et des résultats à l'aide de l'interface de déploiement intégrée, ou de personnaliser la vôtre. En somme une panoplie d'outils très intéressants qui répond parfaitement à mes attentes.
Le logiciel utilisé sera donc Vision Builder, le logiciel analysera l'image obtenue à l'aide de la webcam placée directement devant l'écran. La position de la caméra sera toujours la même. Il est important que celle-ci ne bouge pas car des réglages liés à la position de certaines parties de l'équipement seront analysés.

Par exemple, l'altimètre possède un "Flag OFF" qui indique si l'équipement est sous tension dans le cockpit de l'avion. Une zone dédiée sur l'écran correspondra à l'emplacement du "Flag OFF" sur l'altimètre. Il faudra s'assurer que la webcam soit bien positionnée. Je ne sais pas encore si j'aurai besoin de fixer cette webcam.

Une des premières fonctions à l'aide de Vision Builder sera de détecter si le "Flag OFF" est présent ou non avant de lancer les tests de calibration. Je vais très certainement utiliser la détection de couleurs. Comme ce fameux drapeau est de couleur rouge, je pense faire une détection de la couleur dominante sur une partie de l'écran, si la couleur dominante est le rouge cela voudra dire que le "Flag OFF" est présent, le logiciel se chargera d'envoyer une commande pour le "déflager".

C'est d'ailleurs une panne récurrente. Beaucoup d'altimètres arrivent au laboratoire avionics avec une panne liée au "Flag". Le technicien pourra très rapidement savoir s'il fonctionne correctement ou pas. Si le Flag reste en bas il pourra d'emblée faire la commande d'un nouveau électroaimant ou bien l'inscrire sur le devis avant de continuer son "testing".

Les commandes entre le pc et l'altimètre se feront via une liaison RS232 et un microcontrôleur présent sur une carte externe qui lui même enverra une tension à l'endroit prévu afin de venir activer ou non le flag. Le principe sera le même pour les tests d'étalonnage et calibration de l'aiguille et du tambour.

 


8.Materiels choisis


- Le microcontrôleur:

J'ai choisi d'utiliser une carte électronique de type MBED-KL46Z. J'aurai pu concevoir une carte électronique comme je l'ai déjà fait dans le passé avec un microcontrôleur implanté sur la carte. Comme par exemple, un PIC16F877A de chez Microship qui aurait très bien pu faire l'affaire vu qu'il permet de gérer une PWM, une des choses les plus importantes pour moi car c'est avec elle que je vais pouvoir contrôler la vitesse de rotation de mon moteur.

En vu d'éventuelles modifications futures, j'ai préféré m'assurer d'avoir de multiples fonctionnalités à portée de main vu le bas coût des cartes MBED-KL46Z (environs 15€). Elle met en œuvre un microcontrôleur KL46Z (ARM Cortex M0+) cadencé à 48MHz doté d’une mémoire flash de 256KB et d’une RAM de 32KB avec la possibilité d'utiliser de nombreuses options ou interfaces supplémentaires, en voici quelques exemples :

Je précise que je n'aurais pas forcément besoin d'utiliser ces options dans mon projet mais il est important de savoir que cela existe et que cette petite carte peut gérer tout cela. Il arrive souvent dans l'aéronautique que les CMM soient mis à jour. Ou si le besoin de faire des actions simultanées sur plusieurs cartes électroniques se fait sentir, je serai paré à faire les modifications nécessaires au sein de l'entreprise dans le futur :

La carte MBED-KL46Z possède un USB Host, USB Device, SPI, I2C, ADC, DAC, PWM, LCD Controller, Touch Sensor et I/O interfaces.
- USB Host : Un appareil disposant d'un port USB Host peut lire le contenu d'un périphérique USB sans avoir besoin d'un ordinateur
- USB Device : Il permet de gérer des périphériques USB externes tels que des disques externes.
- Le bus I2C : (Inter-Integrated Circuit) est un bus populaire développé par la société Philips dans les années 1980, il permet de relier facilement un microprocesseur et différents circuits.
- Liaison SPI : (pour Serial Peripheral Interface) est un bus de données série synchrone baptisé ainsi par Motorola. Les circuits communiquent selon un schéma maître-esclaves, où le maître contrôle la communication.

Les différences entre ces deux derniers sont selon moi :
- Le bus I2c est un véritable protocole qui permet l'interconnexion de multiples boitiers dans différentes configurations comme par exemple : Maitre / Esclave, Maitre / Multiple esclaves, Multiple Maitres /Multiples esclaves et nécessite uniquement deux fils (SDA/SCL: Data/Clock). Il consommera d'avantage et la vitesse de transmission sera beaucoup plus faible que la liaison SPI.
- La liaison SPI en général point à point, bien que l'on puisse connecter plusieurs esclaves mais il faut alors des lignes supplémentaires. Un seul maitre qui génère l'horloge. Le grand avantage du SPI est qu'il est beaucoup plus simple à mettre en œuvre. Au final tout dépend du système que l'on souhaite mettre en place.
- Le bus I2S : (Inter-IC Sound, Integrated Interchip Sound, ou IIS) un standard d'interface électrique de type serial bus pour connecter des matériels audio numériques ensemble.
- ADC : (Analog Digital Converter) Pour convertir une tension analogique en un signal numérique on utilisera un ADC.
- DAC : (Digital Analog Converter) Pour convertir les valeurs d'un signal numérique en tension analogique on utilisera un DAC.
- Le LCD conroller : c'est l'écran présent sur la carte afin de pouvoir lire des valeurs en fonction du programme interne par exemple.
- Le touch sensor : il permet de faire varier la valeur de la capacité avec le doigt et ainsi avoir une utilisation "tactile".
- I/O interfaces : Ce sont les entrées/ sorties dont je me vais me servir pour mon projet.

J'ai donc choisi une MBED car c'est pour moi un incontournable. Il est important de connaitre ces "petites bêtes" surtout dans le futur de l'électronique.
De plus, comme les CMM sont amenés à être modifiés, les modifications de la gamme d'essais en lien avec l'équipement en découleront. Il sera facilement possible de rajouter des modules supplémentaires en faisant quelques soudures et lignes de code en C/C++ que devoir refaire une carte car il manque des pistes.

Le second grand avantage d'utiliser une carte MBED est le fait de pouvoir accéder à l'interface de développement (IDE) MBED depuis n'importe quel appareil électronique qui peut se connecter à internet.

Après avoir effectué la liste des actions que je vais effectuer dans ce projet, j'ai choisi les broches stratégiquement de façon à ce qu'elles soient toutes réunies au même endroit pour une future conception, voici les broches que j'ai choisies :
- Commande de la vitesse de rotation du moteur : se fera avec la broche PTC9 puisque la sortie PTC9 comme beaucoup d'autres, peut jouer le rôle de PWM. En fonction du rapport cyclique, j'aurai la possibilité de modifier la vitesse de rotation du moteur.
- Commande du sens de rotation du moteur avec les broches PTC8 et PTA5 afin d'avoir un contrôle sur la carte pont en H dont je vais parler juste après, je vais connecter les sorties INA et INB à PTC8 et PTA5. En fonction d'une table de vérité trouvable dans la datasheet, je pourrais piloter le moteur soit dans un sens, soit dans l'autre.
- Commande des Leds : PTA4 et PTA12 encore une fois ici j'utiliserai la PWM pour avoir un contrôle total sur l'éclairage.
- La commande de l'électroaimant qui gère l'apparition du "flag off" sur l'équipement se fera via la broche PTD3.
- J'ai prévu d'utiliser les deux boutons poussoirs présents sur la MBED PTC12 et PTC3 afin de pouvoir faire défiler sans limite l'aiguille lorsque je ferai tous les tests sans que l'interface homme machine soit faite.
L'alimentation de la carte MBED se fera via l'entrée Vin car elle est équipée d'un régulateur de tension interne.

micro_processeur


Principe de fonctionnement

Principe_fonctionnement_pont en H


- Carte Electronique PONT en H:

Pont en H


Comme on peut le voir sur l'image ci-contre, la carte Pont en H a besoin d'être alimentée en +5V.

J'utiliserai les entrées suivantes :
- +5V (Alimentation de la carte)
- GND
- INA
- INB
- PWM

 


9.L’electroaimant


L’électroaimant placé dans l’altimètre (voir photo en vue de profil page 6 ) est le composant majeur qui permet de faire apparaître ou non le Flag off. Une armature métallique est collé sur l’axe de l’électroaimant sur lequel est vissé le Flag off. Un petit ressort lui permet de revenir dans sa position de repos c'est-à-dire lorsque le « Flag OFF » est visible lorsque que l’électroaimant n’est plus alimenté.

ELECTROAIMANT

On voit très bien sur le schéma que c’est le transistor Q9 qui vient faire la commande de l’électroaimant. Si le transistor est bloqué alors le flag off est position repos. Si le transistor est au contraire saturé, l’électroaimant est alors activé et le Flag off sort du cadrant.

On peut aussi remarquer que le +6v est relié à la broche négative de l’électroaimant, ce n’est pas une erreur de la part du constructeur Honeywell, c’est le composant en lui-même qui à été fabriquer comme cela. Il faut juste y faire attention lors du remontage lorsqu’on effectue la maintenance de cette partie au travail.

J’ai de la chance car le 5v fournit par le régulateur de ma carte A1 suffit à activer l’électroaimant, je n’ai pas besoin d’amplifier cette tension afin d’atteindre les 6v comme inscrit sur la doc technique du constructeur. J’aurais à relier deux fils entre le bornier de l’electroaimant de la carte A1 et les broches 6 et 8 du connecteur de la carte électronique à l’intérieur de le l’altimètre afin de pouvoir piloter via le programme de la carte MBED l’appariation ou non du Flag OFF en passant par un étage de puissance fait à l’aide de l’ULN2003A.

 


10.Conception d'une carte électronique (A1):


A la base, je pensais faire la conception d'une carte électronique supplémentaire avec un ensemble de borniers afin de pouvoir connecter toutes les parties électroniques entre elles sans avoir une grande quantité de fils dans tous les sens.
J'ai très vite remarqué lors de mes premiers tests que la tension fournie en sortie de la carte MBED n'était pas suffisante pour alimenter ma carte pont en H qui attend une tension de 5v en entrée. J'ai alors fait des relevés de mesures et j'ai trouvé que la tension de sortie de la carte MBED était d'environ 3.3V, se qui correspond effectivement au régulateur interne de la carte MBED.

La solution à ce problème après quelques recherches a été de rajouter à la conception de la carte A1 un buffer ULN2003A. J’aurais pu faire un montage avec divers transistors mais ce buffer regroupe sur un même circuit intégré 7 transistors darlington cela permet d'alimenter un moteur avec un courant beaucoup plus intense que ce que peut fournir un microcontrôleur.

Le microcontrôleur de la carte MBED peut délivrer un courant avoisinant les 10mA. L’appel de courant au démarrage du moteur est de l’ordre de 20mA et ça consommation est légèrement inférieur en fonctionnement. J’ai eu de la chance de ne pas griller la broche voir le microcontrôleur tout entier en faisant mes premiers tests. Dans mon cas, l’ULN2003A aura aussi l'intérêt de faire passer tous mes signaux à 5V au lieu de 3.3V délivré par la MBED initialement. Lorsque les transistors seront bloqués à l’intérieur de l’ULN2003A je vais obtenir 0v sur le bornier et lorsqu’ils seront saturés je vais obtenir une différence de potentiel de 5V.

Pour la carte A1, le but était donc de laisser un endroit pour venir placer la carte MBED et d'implanter les différents borniers autour. Sauf qu’entre temps tous les signaux de commande émis du KL46Z vont passer dans le Buffer ULN2003A. On peut voir sur l'image suivante que l'alimentation même en 5-9v de la carte MBED est transformée via un régulateur intégré. Il est donc impossible pour moi de faire sortir directement du 5v continu en sortie de la carte MBED.

details_alim_Mbed

Sur cette carte électronique A1, il me fallait donc un régulateur 5v. J'ai choisi un LM7805. C'est aussi cette carte A1 qui fournira l'alimentation de la carte MBED, et comme je l'ai dit précédemment, l'alimentation de la carte pont en H ainsi que celle des leds de puissance et de l'électroaimant.

Il est important d'observer la tension de « Dropout Voltage » de ce régulateur, c'est-à-dire la tension qui sera perdue entre l'entrée et la sortie du régulateur. Ici on est à 2v en typique. Je dois donc faire l'addition de 5v+2v = 7v minimum en entrée du régulateur que je vais mettre en place à l'aide d'une alimentation continue externe.

carteA1

 


11.Présentation des documents de fabrication


Schema electronique


schema_elec1

schema_elec2

Les résistances placées au niveau des borniers et relié aux alimentations (R1,R2 ,R3,R4,R5) sont des résistances de « pull up » qui servent à fixer l’état haut à 5V.

Rootage TOP


typon_top

Rootage BOTTOM


typon_bottom

Rootage GLOBAL


Rootage_Carte_Alim

 


12.Commande des composants et coûts


Commande de piece

 


13.La programmation en C++ du microcontrôleur


DEBUT DU CODE



#include "mbed.h"

Serial pc(USBTX, USBRX); //tx,rx Permet de pouvoir établir un dialogue entre le PC et la carte MBED

DigitalOut led_r(PTE29); // led carte Mbed red
DigitalOut led_v(PTD5); // led carte Mbed GREEN
DigitalOut p_led3(PTA4); // Sortie Led Puissance
DigitalOut p_led4(PTA12); // Sortie Led Puissance
DigitalOut ElecAIM (PTD3); // Sortie Electroaimant
DigitalOut INA (PTC8); // Sortie INA
DigitalOut INB (PTA5); // Sortie INB

PwmOut tpsrotate(PTC9); // PWM

InterruptIn sw1 (PTC3); //Active les interrupteurs présent sur la carte MBED
InterruptIn sw3 (PTC12);


void Inter1() // le moteur tourne en Fully Clockwise à la pression du switch SW1
{
printf("SW1>Moteur FULL Clockwise\r\n");
INA = 1;
INB = 0;
wait(4.2002f);
INA = 1;
INB = 1;
}

void Inter2() // le moteur tourne en Fully CounterClockwise à la pression du switch SW3
{
printf("SW3>Moteur FULL CounterClockwise\r\n");
INA = 0;
INB = 1;
wait(4.2002f);
INA = 1;
INB = 1;
}

int main()
{
sw1.rise(&Inter1); // fait une pause dans le « main » afin d'aller exécuter le code externe au main Inter1 ou inter2
sw3.rise(&Inter2);

tpsrotate.period_ms(15); // Etablit la période de la PWM
tpsrotate.pulsewidth_ms(12); // Etablit la largeur d’impulsion de la PWM

p_led3=0; //fixe l’état logique des led de puissance
p_led4=0;

ElecAIM=0; // fixe l’état logique de l’électroaimant


char saisie; // déclaration de la variable saisie de type char dans lequel sera contenu la commande
pc.baud(9600); // vitesse de transfert de la liaison RS232

while(1)
{
saisie=pc.getc(); // Place le caractère sélectionné au clavier du pc dans la variable saisie
switch (saisie) // Les différent cas en fonction du caractère présent dans la variable saisie
{
case 'M': // Allume les LEDS de puissance
printf("M>LED ALLUMEES\r\n"); //Permet l’affichage du texte dans une console RS232 dans mon cas
p_led3=1; //Les Leds de puissance s’allument
p_led4=1;
break;

case 'L': // Eteint les LEDS de puissance
printf("L> LED ETEINTE\r\n");
p_led3=0;
p_led4=0;
break;

case 'm': // Le Flag off part
printf("m> FLAG OUT\r\n");
ElecAIM=1;
break;

case 'l': // Le Flag off revient en position de repos
printf("l> FLAG IN\r\n");
ElecAIM=0;
break;

case 'A': // le moteur tourne en Clockwise de 1000feets
printf("A> Moteur Clockwise\r\n 1000fT\r\n");
INA = 1;
INB = 0;
wait(4.2508f);
INA = 1;
INB = 1;
break;

case 'Z': // le moteur stop vcc
printf("Z> Moteur stop Vcc \r\n");
INA = 1;
INB = 1;
break;

case 'E': // moteur ccw 1000ft
printf("E> Moteur CounterClockwise\r\n 1000fT\r\n");
INA = 0;
INB = 1;
wait(4.2005f);
INA = 1;
INB = 1;
break;

case 'R': // moteur stop GND
printf("R> Moteur stop GND \r\n ");
INA = 0;
INB = 0;
break;

case 'Q': // le moteur tourne en Clockwise de 200ft
printf("Q> Moteur Clockwise\r\n 200fT\r\n");
INA = 1;
INB = 0;
wait(0.88f);
INA = 1;
INB = 1;
break;

case 'S': // le moteur tourne en CClockwise de 200ft
printf("S> Moteur CounterClockwise\r\n 200fT\r\n");
INA = 0;
INB = 1;
wait(0.88f);
INA = 1;
INB = 1;
break;

case 'D': // le moteur tourne en Clockwise de 100ft
printf("D> Moteur Clockwise\r\n 100fT\r\n");
INA = 1;
INB = 0;
wait(0.46f);
INA = 1;
INB = 1;
break;

case 'F': // le moteur tourne en CounterClockwise de 100ft
printf("F> Moteur CounterClockwise\r\n 100fT\r\n");
INA = 0;
INB = 1;
wait(0.46f);
INA = 1;
INB = 1;
break;

case 'W': // le moteur tourne en Fully Clockwise
printf("F> Moteur FULL Clockwise\r\n");
INA = 1;
INB = 0;
break;

case 'X': // le moteur tourne en Fully Counter Clockwise
printf("F> Moteur FULL CounterClockwise\r\n");
INA = 0;
INB = 1;
break;

case '1': // le moteur tourne très légèrement en Clockwise
printf("A> Moteur Clockwise\r\n Quelques Millimètres\r\n");
INA = 1;
INB = 0;
wait(0.02f);
INA = 1;
INB = 1;
break;

case '2': // le moteur tourne très légèrement en CounterClockwise
printf("A> Moteur CounterClockwise\r\n Quelques Millimètres\r\n");
INA = 0;
INB = 1;
wait(0.02f);
INA = 1;
INB = 1;
break;
}
}
}

FIN DU CODE




J'ai mis du temps à comprendre qu'il fallait sortir du "main" pour que je puisse effectuer mon idée. Je me suis alors renseigné sur l'aide au développer de MBED. Et j'ai vu que je pouvais utiliser la commande suivante "sw1.rise(&Inter1);"

En effet l'utilisation de cette dernière me permet de faire une pause dans le main afin d'aller executer un code en dehors. Si bien que lorsque j'appuis sur SW1 ou alors SW3, mon programme principal ce met sur pause, execute le code annexe "inter1" ou bien"inter2".

 


14.La programmation Ni Vision builder



number_detect_screen02

caliper2

1 : Comme précédemment, c'est l'acquisition d'image de la webcam.

2 : "Vision assistant" permet de passer l'image acquise provenant de la webcam en une image noir et blanc afin de pouvoir utiliser le "Read/Verify text" qui est le Node suivant. Sans cette opération il est impossible d'utiliser le "Read/Verify text"

3 : "Read/Verify text" ce sont les zones où le logicielle va détecter les chiffres ou les lettres s'y trouvant. On peut les voir sur la capture d'image ci-dessus, ce sont les deux cadres vert qui entour les numéros du compteur.
Au début avec le "Read/Verify text", la détection des nombres s’est mal passée, il ne détectait aucuns nombres et la sensibilité du réglage était tel que la moindre petite réflexion de lumière sur la peinture du compteur ou de la vitre, me donnait des résultats totalement improbables. J’ai donc réglé le seuil de détection et fais une petite bibliothèque de caractères afin qu’il puisse effectuer une comparaison entre ce que j’ai mis dans sa base de donné et l’image en cour d’acquisition. Voici sur l’image ci-dessous un extrait des caractères que je lui est renseigné:

character_number_detect01

J’ai fais défiler le compteur afin d’avoir tous les chiffres en façade puis j’ai effectué l’acquisition, j’ai aussi fait des suppléments comme l’aiguille qui passe devant le chiffre par exemple.

4 : "Read/Verify text" même chose que au dessus.

5 : "Calculator" est présent sous cette forme :

Voici un zoom sur les Nodes du Calculator:

zoom_node_calculator

Et voici l’ensemble :

node_calculator ensemble

Dans mon cas j’ai besoin afin de répondre au CMM, que j'ai présenté au début de ce dossier de valeurs précises. Je dois par exemple faire le test à 1000, 10000, 50000 feets etc. Je dois donc obtenir une précision sur les centaines. Comme j’ai décidé de faire varier l’altimètre tous les 100, 200 et 1000 feets j’ai du dissocier les chiffres des millièmes et ceux des centaines de façon à obtenir par exemple pour 10 000 feets, 10 sur un "Read/Verify text" puis 000 .
Si le "Read/Verify text" retourne un résultat de 010 par exemple alors l'équipement est hors tolérence. Je peux ainsi rester conforme aux attentes de la gamme d’essai et aux tolérances prescrites. Je demande donc au "Calculator1" de vérifier si le nombre détecté est bien 000 ou 100 ou 200 etc mais pas d’autres valeurs. Il enverra alors soit "true" soit " false " si les chiffres du compteur ne sont pas égaux aux valeurs attendues.

6 : "Custom Overlay" récupère les valeurs trouvé ci-dessus soit " true" soit " false " et m’indique dans une case visible à l’écran si le compteur est bien calibré.

7: "Caliper" me sert quant à lui de détecteur de position d’aiguille, j’avais commencé avec le même outil à relever l’angle entre la position de l’aiguille lorsqu’elle est pile en face du zéro et la position sur laquelle elle est supposée arriver après une rotation. Mais le problème c’est que l’aiguille est en partie de couleur noir et la détection ne se faisait pas du tout. J’ai ensuite utilisé le caliper autrement, cette technique est visible sur l’image de droite. Un petit cadre me permet de faire la détection de la partie basse et blanche de l’aiguille. Si l’aiguille est dans la zone du "Caliper" alors l’aiguille est bien étalonnée et envoie la valeur "true".

caliper

8 : "Custom Overlay" récupère la valeur du "Caliper" et l’affiche à l’écran.

9 : "Calculator" permet de faire la liaison entre tous les résultats obtenu puisque l’important est de d’apprécier si l’aiguille + le compteur sont tout les deux bien calibré. J’ai donc fait les choses comme ceci :

calculator2

J’ai uniquement pris les résultats du "Read/Verify text" et du "Caliper" et si ses deux nodes renvoient "true" en même temps, le résultat final sera "true".

10 : "Custom Overlay" récupère la valeur du second "Calculator" et l’affiche à l’écran. On peut ainsi savoir directement en regardant l’indicateur "Custom Overlay" si le compteur + l’aiguille sont bien étalonnées.

 


15.La programmation LabView



labview1

labview2

1 : Permet de faire la sélection du port COM pour la communication sérial.

2 : Configure le port série, comme par exemple la vitesse de transfert en bits par seconde appelé bauds.

3 : Création d’une boucle "While", tout ce qui sera présent à l’intérieur de cette boucle tournera en permanence.

4 : C’est le node bouton poussoir que j’ai crée dans la partie interface, que je récupère dans la partie diagramme.

5 : C’est une condition, c’est à dire que si il y a un appui sur le bouton, la condition est vrai. Il envoi alors la lettre présent dans la constante présente à l’intérieur de la condition.

6 : C’est la constante dans laquelle ce trouve la lettre lorsque la condition est vrai et rien quand la condition est fausse car j’ai intégré une constante vide dans le cas ou la condition est fausse.

7 : C’est une concaténation, c’est à dire qu’il va faire l’addition des termes de toutes les conditions.

8 : Ici on retrouve un timer réglé sur 100. C'est-à-dire qu’il y aura une exécution de toute la boucle while toutes les 100ms.

9 : On écrit dans ce node le résultat de la concaténation pour que la lettre correspondante au bouton qui a été appuyé éventuellement se retrouve envoyer sur la liaison RS232 vers la carte MBED.

10 : Coupe la liaison RS232 lorsqu’il n’y a rien à envoyer de façon à libérer la liaison série.

Et pour finir voici l’interface homme machine créer à l’aide de LABVIEW :

labview_interface

 


16.Conclusion


Ce projet m'a permis de comprendre en profondeur et d'apprendre de nombreuses choses dans les différents domaines que mon projet traverse, de l'aéronautique au traitement industriel par acquisition d'image en passant par la création de carte électronique. Il aura été complet et très à mon gout, j'ai beaucoup apprécier pouvoir travailler sur cet ensemble.

Back