Vous êtes sur la page 1sur 17

Introduction

1
1. Cahier des charges technique

Le but du projet est de créer des cocktails de boisson à partir de quatre liquides en précisant le
pourcentage de chacune des boissons rentrant dans la constitution du cocktail final.

1. Définition de l’interface Homme / Machine

L’interface se compose de cinq boutons et de deux afficheurs sept segments à LED :


- Bouton incrément
- Bouton décrément
- Bouton OK
- Bouton Retour
- Bouton ON / OFF
- Afficheur des dizaines programmable
- Afficheur des unités forcé au chiffre 0

1.1. Mise en route / initialisation

Après avoir raccordé l’alimentation, l’appareil est prêt à recevoir le volume de liquide total
souhaité. La LED de définition du volume doit s’allumer, permettant à l’utilisateur de choisir
un volume prédéfini (10, 12, 25 ou 50cl).
Par souci de simplicité, le volume n’est définissable qu’au démarrage de l’appareil.

1.2. Saisie du volume final

L’utilisateur doit appuyer sur le bouton d’incrémentation noté « + » jusqu’au volume désiré.
En cas d’erreur il peut diminuer ce volume avec le bouton de décrément noté « - «. Une fois le
volume choisi, l’utilisateur doit appuyer sur le bouton OK afin de passer à la sélection du
pourcentage des liquides : la LED correspondant au liquide numéro 1 doit alors s’allumer.

1.3. Affichage

L’afficheur commandé doit afficher des nombres de 0 à 9 ainsi qu’un R pour le remplissage,
un U pour le volume et un C pour la calibration.

1.4. Saisie des pourcentages

La séquence débute par la saisie du pourcentage du premier liquide.

2
L’utilisateur appuie sur le bouton « + » jusqu’à arriver au pourcentage du premier liquide
souhaité du volume total. En cas d’erreur il peu appuyer sur « -«. Le bouton OK permet de
passer à la sélection du pourcentage du liquide suivant, la LED correspondant s’allume alors.
Le bouton « Retour » permet de revenir à la sélection du pourcentage du liquide précédent.
Il n’est pas possible de rentrer plus de 100% de liquide total, ainsi l’incrémentation du liquide
en cours sera bloquée pour respecter cette contrainte. Par exemple si l’utilisateur demande
30% du liquide 1 et 40% du liquide 2, l’incrémentation du liquide 3 sera bloquée à 30%.

1.5. Remplissage

Une fois les quatre pourcentages choisis, l’utilisateur est invité à appuyer une nouvelle fois
sur OK afin de valider sa sélection et de commencer le remplissage. Il peut également choisir
de revenir à l’étape précédente en appuyant sur « retour » et ainsi retourner à la sélection du
pourcentage du volume du liquide 4.

2. Pilotage du volume de remplissage

Le volume de remplissage dépend du temps d’ouverture de la pompe qui contrôle l’arrivée


d’un liquide.

3. Calibration des pompes

La calibration des pompes doit être gérée par le logiciel : en cas de remplacement d'une des
pompes, le temps d'ouverture pour obtenir un volume donné n'est pas le même.

4. Sécurité

Un dispositif interdira le remplissage en l’absence de verre.

5. Architecture

La maquette comprendra donc essentiellement :


- 4 boutons poussoir
- 1 bouton ON / OFF
- 2 afficheurs 7 segments à LED
- 4 pompes pour les liquides
- Un Microcontrôleur pour commander l’interface Homme / Machine et les pompes
- Alimentation de l’ensemble
- 4 LEDS

3
- Un microrupteur pour détecter la présence du verre.

2. Analyse fonctionnelle

Une analyse fonctionnelle de type SADT a été effectuée afin de bien décomposer les
différentes parties du projet.
Voir SADT en annexe
Au final, le projet doit effectuer toutes les fonctions suivantes

A compléter

4
3. Architecture

L'ensemble des fonctions est gérée par le Microcontrôleur, qui doit être capable d'effectuer
des mesures de temps, de gérer les commandes d'ouverture de pompes, piloter un afficheur 7
segments, permettre la calibration des pompes et mémoriser cette calibration dans sa mémoire
interne.
Par souci de simplicité, il est essentiel de réduire au maximum le nombre de composants
utilisés. C'est pour cette raison que les pompes sont multiplexées : afin de séparer l'allumage
d'une LED correspondant à un liquide de l'ouverture de la pompe correspondant à ce liquide,
un transistor est situé en aval des transistors de commande des pompes, permettant à la LED
de s'allumer sans que la pompe ne soit en fonctionnement.
Seule la détection de présence du verre n'est pas gérée par le Microcontrôleur, mais par un
contacteur à lamelle directement placé en série avec l'alimentation.
Par souci de commodité, le choix s'est porté sur une carte Microchip KIT afin de pouvoir
câbler sur cette carte la partie de faible intensité, c'est à dire les afficheurs, et de mettre la
partie alimentation et commande des pompes sur une autre carte. L'autre utilisé d'adopter cette
solution est de pouvoir traiter la partie électronique et la partie programmation
indépendamment, et ainsi de pouvoir dépanner le programme sans avoir besoin de
l'alimentation provenant de la partie puissance. Cela fait partie de notre démarche
d'abstraction, dont le principe est de valider les parties les unes après les autres avant de les
joindre entre elle.

5
4. Choix des composants

Les composants électroniques à utiliser dans la réalisation de notre projet ne se choisissent pas
au hasard : en effet, énormément de paramètres rentrent en compte tels que les tensions ou
intensités supportés par le micro contrôleur, les afficheurs sept segments ou encore les
pompes.

1. Choix des pompes

Le choix des pompes est guidé par un souci de coût : en effet afin de respecter le budget
imposé lors du projet, les pompes utilisées sont des produits bon marché. Le choix s'est donc
fait sur des pompes consommant 0,7A avec une plage de tension de fonctionnement comprise
entre 6V et 12V. Il faut donc maintenant s’intéresser à l’interface entre le micro contrôleur et
la pompe.
Pour faire le lien entre ces deux éléments, un transistor est donc
indispensable. Le choix du transistor est conditionné par sa tenue en
tension, en courant, en gain ainsi qu’en dissipation thermique. Tous ces
éléments font donc que le choix s’est porté sur un boitier de type TO220
pour dissiper la chaleur, plus précisément sur le TIP232, un NPN. Ce
transistor est un Darlington, l’équivalent de deux transistors en cascade,
le coefficient d’amplification de courant β d’un transistor classique ne
suffisant pas.
Le principe étant de contrôler l’ouverture ou la fermeture de la pompe par l’intermédiaire de
ce transistor, ce dernier sera utilisé en mode bloqué/saturé et non en mode linéaire. Les
caractéristiques de tensions de saturation du transistor sont donc nécessaires pour tous les
calculs ultérieurs (voir annexe). Le transistor choisi possède donc un Vbe(sat) de 2V et un
Vce(sat) de 1,4V. La puissance dissipée par le transistor est de :
1,4V × 700mA = 1W
Or le transistor choisi possède une capacité de dissipation thermique de 78°C/W ce qui
donnerait un transistor qui chaufferait beaucoup trop. C’est pourquoi un radiateur qui
dissipera 38°/W sera utilisé, ramenant ainsi le transistor dans une plage de température
convenable.
Une fois le transistor complètement choisi, il faut maintenant calculer la valeur de la
résistance venant se placer entre la patte du PIC et la base du transistor T1. La chute de
tension due au transistor est de :
Vce(sat)+Vbe(sat)=3,5V
Sachant que la pompe est alimentée en 12V et que le PIC délivre du 5V, la loi d’Ohm donne
donc :
R = U I = 3,2kΩ

6
Schéma

Bien évidemment, ce montage est reproduit quatre fois (une pour chaque pompe).
Enfin, afin de séparer l’allumage de la LED correspondant à chaque pompe de la mise en
marche de cette pompe, un deuxième transistor aurait été nécessaire. Mais par manque de
sorties disponibles sur le micro contrôleur, les quatre transistors précédents ont été
multiplexés par un cinquième transistor possédant exactement les mêmes caractéristiques, au
travers duquel le micro contrôleur n’autorisera la circulation du courant que lorsque
l’allumage des pompes sera souhaité.
La résistance de polarisation de la LED se calcule comme suit :
R = U / I = 680Ω

Schéma

7
2. Choix des afficheurs

Des afficheurs à cathode commune sont utilisés. Le choix s’est porté sur un afficheur rouge de
12,7mm La documentation technique (voir annexe) donne la caractéristique de brillance des
segments en fonction de l’intensité, puis la caractéristique de tension de jonction de LED en
fonction du courant. Il a été estimé qu’une brillance correspondant a un courant de 5mA était
suffisante, ce qui correspond a une tension de polarisation de 1,7V Ainsi, il est possible de
calculer la différence de potentiel entre la sortie du micro contrôleur et les LEDs, et ainsi
déterminer la résistance nécessaire à insérer.
R = U I = (5 − 1,7)V 5mA = 680Ω
Schéma

3. Choix de l’alimentation

Le choix de l’alimentation dépend de beaucoup de critères, il faut donc effectuer un bilan


énergétique. Dans le pire des cas, les éléments fonctionnant simultanément sont :
- le transistor de multiplexage en mode saturé
- un transistor de commande de pompe en mode saturé (un seul à la fois).
- une pompe (une seule à la fois)
- une LED (une seule à la fois)
- l’afficheur piloté par le micro affichant un 8.
- l’afficheur forcé à 0.
Comme expliqué précédemment, le transistor dissipe une puissance de 1W, donc le transistor
de commande des pompes et le transistor de multiplexage dissipent à eux deux 2W.
Dans le pire des cas 13 segments sont allumés sur les deux afficheurs. La puissance nécessaire
est donc :
13 × 1,7V × 5mA = 110,5mW

8
Une LED dissipe au maximum 87mW (voir documentation technique en annexe).
Enfin une pompe consomme d’après la documentation technique 0,7A sous une tension de
12V, la tension dissipée est donc de :
12 * 0.7 = 8,4W .
Au final une alimentation pouvant fournir environ 10,6W est nécessaire, possédant deux
sorties :
- 12V pour l’alimentation des pompes
- 5V pour le micro contrôleur et les afficheurs
Il faut alors calculer le transformateur ainsi que la valeur des condensateurs de redressement.
Lorsqu’une tension passe au travers d’un pont de diode, sa valeur efficace est multipliée par
2 . Ainsi pour obtenir un peu plus de 12V il faut un transformateur avec une tension au
secondaire de 9V. En effet la tension en sortie ainsi obtenue sera de 13,5V.
Un condensateur de redressement de 2200 µ F ainsi qu’un fusible pour protéger le montage
sont également utilisés.
Pour obtenir maintenant une tension de 5V, il faut abaisser la tension de 13,5V via un
régulateur 5V.
Le régulateur 5V est protégé par deux petits condensateurs dont la valeur est donnée dans la
documentation technique (voir annexe).
Entre le 13,5V et le 5V, une chute de tension de 8,5V s’effectue au travers du régulateur,
traversé par une intensité maximale de 65mA (treize fois l’intensité d’une LED des
afficheurs). La puissance dissipée par le régulateur est donc :
8,5V × 65mA = 0,55W
Schéma de l'alim.

4. Boutons et contacteurs

9
Aucune précaution particulière n’est à prendre pour ces composants puisque pour les boutons
sont gérés par un micro contrôleur pour la détection des 0 et des 1 correspondant
respectivement a des potentiels de 5V et 0V.
La seule contrainte au niveau du contacteur est la rigidité du ressort de la lamelle qui doit être
suffisamment faible afin de permettre à un verre vide de pousser la lamelle et de la maintenir
enfoncée.

5. Choix du Micro

C’est la partie la plus délicate car elle dépend d’énormément de paramètres. La première étape
est de déterminer combien d’entrées et sorties sont nécessaires pour le micro contrôleur : il
faut quatre entrées pour les boutons, ainsi que douze sorties, sept pour l’afficheur et cinq pour
les transistors.
Ensuite, le micro contrôleur doit pouvoir commander des afficheurs en direct. Il doit
également posséder une EEPROM afin de garder en mémoire la calibration des pompes. Il
doit posséder une taille mémoire suffisante (il faut prendre de la marge car il n’est pas
possible de déterminer à l’avance quelle taille mémoire va être nécessaire) pour accueillir le
programme tout en étant programmable en C avec un outil de développement simple et
économique. Le fait d’avoir une carte de teste livrée avec la chaine de développement est
également un grand avantage, permettant de tester le programme sans avoir besoin de la partie
électronique, uniquement en utilisant le débuggeur. Cela fait partie du principe d’abstraction,
permettant de valider la partie électronique et le programme indépendamment. Ensuite, il doit
posséder des pull up intégrés afin de faciliter la gestion des boutons. Enfin il doit être
disponible chez Radiospares.
Tout ces éléments font que le choix s’est porté sur la famille PIC de Microchip, et plus
précisément sur le 16F689.
Voici donc le tableau des entrées/sorties avec leur broche du PIC affectée et leur sens :

1
Nom de la broche Fonction dans le montage Sens
RA0 Anode A Sortie
RA1 Anode B Sortie
RA2 Anode C Sortie
RA3 Bloquée en entrée
RA4 Anode D Sortie
RA5 Anode E Sortie
RB4 Bouton OK Entrée
RB5 Bouton PREC Entrée
RB6 Bouton PLUS Entrée
RB7 Bouton MOINS Entrée
RC0 Transistor de commande 1 Sortie
RC1 Transistor de commande 2 Sortie
RC2 Transistor de commande 3 Sortie
RC3 Transistor de commande 4 Sortie
RC4 Transistor de multiplexage Sortie
RC5
RC6 Anode F Sortie
RC7 Anode G Sortie

11
5. Programmation du PIC

Avant tout le programme en C doit être compréhensible comme du français avec des noms de
fonctions et des commentaires explicites permettant à toute personne n’ayant pas participé à
sa réalisation de comprendre le programme. C’est pourquoi toutes les constantes sont définies
en tête de fichier C à chaque fois afin de n’avoir à ne modifier sa valeur qu’une seule fois
dans tout le programme si le besoin s’en fait sentir.
Le programme se décompose en cinq modules :
- gestion des afficheurs
- gestion des boutons
- gestion des pompes
- gestion de l’EEPROM
- le Main
A chaque module (fichier .c) sera associé sa bibliothèque (fichier .h) permettant aux différents
modules de communiquer les uns avec les autres.

1. Gestion des afficheurs

La première chose à faire est de regarder ce qui doit être affiché : des nombres de 0 à 9 ainsi
que le C de calibration, le R de remplissage et le volume qui sera représenté par un U (c’est ce
qui ressemble le plus à un V sur un afficheur 7 segments). Il faut donc créer un tableau
permettant d’associer chaque nombre ou lettre à son code en hexadécimal sur les ports A et C.
Un souci provient du fait que la broche RA3 est bloquée en entrée et ne pourra donc pas être
utilisée pour commander une LED de l’afficheur. Voici le tableau associant chaque caractère
souhaité à sa valeur en binaire en en hexadécimal dans les registres A et C :

1
Caractère Equation Reg A (bin) Reg C (bin) Reg A (héxa) Reg C (héxa)
0 abcdef 0011 0111 0100 0000 0x37 0x40
1 ef 0000 0110 0000 0000 0x06 0x00
2 abdeg 0011 0011 1000 0000 0x33 0x80
3 abcdg 0001 0111 1000 0000 0x17 0x80
4 bcfg 0000 0110 1100 0000 0x06 0xC0
5 acdfg 0001 0101 1100 0000 0x15 0xC0
6 acdefg 0011 0101 1100 0000 0x35 0xC0
7 abc 0000 0111 0000 0000 0x07 0x00
8 abcdefg 0011 0111 1100 0000 0x37 0xC0
9 abcdfg 0001 0111 1100 0000 0x17 0xC0
C adef 0011 0001 0100 0000 0x31 0x40
R abef 0010 0011 0100 0000 0x23 0x40
V bcdef 0010 0111 0100 0000 0x27 0x40

Ces valeurs sont stockées dans un tableau et on passe par l’index de ce tableau pour afficher le
chiffre souhaité.
Une fonction doit permettre de bloquer l’afficheur lorsque la sélection des volumes a débuté.
Par exemple, l’utilisateur ne doit pas pouvoir sélectionner plus de 70% pour la 2 ème cuve s’il a
déjà sélectionné 30% pour la 1ère. Une autre fonction permet l’affichage en clignotement du
pourcentage possible restant avant la sélection du volume de chaque cuve. Dans l’exemple
précédent un 7 doit clignoter brièvement avant de choisir le volume de la 2 ème pompe. Ce
clignotement est géré grâce à une temporisation ainsi qu’une fonction d’extinction et
d’allumage de l’afficheur. De plus, il faut également utiliser un masque afin de ne pas toucher
aux bits du port C qui ne font pas partie de l’affichage.
L’affichage permet aussi d’afficher des grands nombres (utile pour la calibration des pompes
notamment) : d’abord le plus grand nombre puis en décroissant jusqu’aux unités. Par exemple
pour afficher 1842, un 1 sera d’abord affiché puis un 8, un 4 et un 2.

2. Gestion des boutons

Le but est ici de forcer par défaut à 1 l’entrée du micro contrôleur qui n’est pas définie, il faut
donc utiliser une résistance de pull up. En effet lorsque le bouton est appuyé, l’entrée du
micro contrôleur est forcée à 0 et un courant circule dans le pull up.

1
Le grand problème de la gestion des boutons consiste en la compensation du phénomène de
rebond. En effet, lorsque l’utilisateur appuie une fois sur le bouton d’incrémentation,
l’afficheur augmente de plusieurs unités d’un coup. Ceci est du au fait que le contact d’un
bouton n’est pas franc, des rebonds peuvent être perçus comme une suite d’état d’ouverture et
de fermeture. Ce problème se gère en attendant grâce à une temporisation et à la détection du
bouton relâché avant toute nouvelle action afin d’en acquérir un état stable. C’est dans la
bibliothèque des boutons que l’on associe la détection d’un 1 sur une broche du
microcontrôleur à un bouton spécifié. Enfin, il suffit de définir quelle action entraine l’appui
de chaque bouton, avec une particularité lorsque l’utilisateur souhaite rentrer en mode
calibration des pompes : celui-ci doit appuyer sur un bouton avant de mettre la machine en
tension, une détection de bouton appuyé doit donc s’effectuer dès l’allumage.

3. Gestion des pompes

La gestion des pompes s’effectue par l’envoi ou non via la broche du PIC d'un état de 5V pour
saturer les transistors, ce qui se traduit dans le programme par mettre un bit à 1. Les pompes
sont contrôlées par un temps d'ouverture reposant sur le pourcentage demandé par l'utilisateur
et la calibration de la pompe. Le module doit donc gérer cette calibration, le grand problème
étant que le PIC ne possède pas la division, la calibration des pompes s’effectue en centaines
de ms.
Le temps d’ouverture d’une pompe se calcule de la manière suivante :
temps = volume_verre* calibration_pompe
temps = temps *pourcentage_souhaité
temps = temps/100
temps = temps /25cl

4. Gestion de l’EEPROM

L’intérêt d’utiliser l’EEPROM du PIC est de garder en mémoire la calibration des pompes à
chaque extinction de l’appareil ou coupure électrique : en effet la calibration ne doit être
effectuée qu’en cas de remplacement d’une des pompes.

5. Le Main

Le main fait le lien entre les différents modules du programme explicités précédemment. Il
s’occupe juste d’initialiser le PIC, c'est-à-dire configurer les différents ports en entrée ou en
sortie, d’activer les pull-up ou encore de forcer le port b (celui des boutons) en digital et pas
en analogique comme il est configuré par défaut. C’est également dans le main que le
pourcentage qu’il est encore possible de sélectionné est recalculé. Enfin le main reprend

1
toutes les fonctions des autres modules afin d’aboutir au mélange du cocktail puis au
remplissage du verre.

6. Problèmes rencontrés

1. Choix des composants

Tout d’abord il faut rappeler que le projet ne débute de rien. La première chose à faire est de
réaliser un cahier des charges. Après avoir longuement hésité entre des électrovannes et des
pompes, le coût des deux solutions a forcé le choix sur les pompes.
Ensuite, il faut déterminer quel schéma électronique permet d’effectuer toutes les
fonctionnalités souhaitées. L’erreur initiale a été de choisir un PIC afin de décider des
composants autour de ce PIC. Finalement, la démarche à effectuer était de d’abord décider du
schéma électronique, puis enfin de choisir le PIC, en fonction de l’analyse, de l’architecture
du nombre de pattes d’entrée/sortie nécessaires. Carte d eval plus de vingt pines
Aussi le nombre de broches disponibles sur le PIC a introduit une contrainte électronique : le
multiplexage des transistors fait que les émetteurs des quatre transistors n'étaient plus reliés à
la masse mais au collecteur de cinquième transistor.

2. Respect du budget

A l’origine le projet devait être plus élaboré qu’il ne l’est au final : un clavier devait servir
d’interface en lieu et place des boutons et le menu proposant les différents cocktails devait
dérouler sur un afficheur LCD. Etant donné que la solution choisie dépasse déjà le budget
autorisé de 230€ (voir annexe sur les bons de commande), cette solution aurait été beaucoup
trop chère.

3. Programmation du PIC

Cette partie a été une grande difficulté pour plusieurs raisons :


- Le choix du PIC s'était fait selon une volonté de programmer en C mais une fois installée, la
licence gratuite fournie avec le programme ne gérait pas le 16f689 utilisé pour notre projet.
Différents forums sur les Pics ont permis de résoudre ce problème et de trouver la chaine de
compilation gratuite Sourceboost.
- La plaque de test jouait les programmes de démonstration en assembleur fournis avec mais
pas le programme en C consistant simplement à afficher des chiffres de 0 à 9. Il y avait un
problème dans l'initialisation du PIC que la l'instruction # pragma résout, permettant de forcer

1
l’organisation interne du PIC dans la programmation et pas uniquement dans l'exécution, tels
que des paramètres d'horloge interne par exemple. Voici cette ligne de code, recopiée
directement à partir des programmes en assembleur :
#pragma DATA _CONFIG, _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF
& _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF
Un autre souci pour exécuter ce programme était que le bit RA3 n'est pas utilisable en sortie,
ce qui avait pour résultat que le segment D de l'afficheur ne s'allumait jamais.
- La gestion des boutons : lorsque l’on souhaitait incrémenter l’afficheur d’une unité, celui-ci
s’emballait et grimpait de plusieurs unités d’un coup. Ceci était du a un souci de rebonds, que
nous avons réglé grâce à une temporisation et la configuration des pull up internes du PIC,
ainsi que par l'utilisation de masques sur les bits concernés. Aussi une fonction interdit
l'incrémentation avant de recevoir la confirmation via une fonction que le bouton est relâché.
- La gestion du temps : des problèmes de troncature nous ont obligés à définir les nombres
comme des long (32 bis) et pas des unsigned (16 bits). Il faut aussi bien choisir l'ordre des
opérations à effectuer car effectuer toutes les multiplications dans un premier temps ne
rentrerait pas dans un format de 8 bits.
- La gestion de l'EEPROM : il est très simple de gérer une EEPROM sur un octet mais le
programme nécessite de l'utiliser sur 8 octets ( 4 × 2 unsigned) afin de garder en mémoire la
calibration des quatre pompes. Ainsi, les forums sur les Pics ont permis de découvrir que la
solution consistait à introduire une temporisation plutôt que de gérer des bits de fin
d'interruption.

7. Améliorations possibles

1. Performances

La contrainte du budget a forcé le choix des pompes sur des produits bon marché :
ainsi, le remplissage des verres est relativement long. Les pompes souhaitées initialement
coutaient 40€, celles utilisées au final coutent 15€.

2. Interface

Encore une fois avec plus de budget, l'interface aurait été différente : au lieu de
boutons et d'afficheurs sept segments, le choix du cocktail aurait été préenregistré dans le
micro contrôleur et la sélection se serait effectuée par l'intermédiaire d'un écran LCD
proposant les différents choix disponibles et d'un clavier permettant à l'utilisateur de formuler
son choix.

1
Conclusion