DistributeurBoisson
Sommaire
Partie1
PRESENTATION DU DISTRIBUTEUR DE BOISSON
INTRODUCTION
Le projet Distributeur de boisson est réalisé par les étudiants en DUT GEII au troisième et quatrième semestre.
Le distributeur de boisson est composé d’une carte électronique ( carte capable de piloter les capteurs et actionneurs ).
Nous développons ce projet pour un mémoire de projet à la fin d’étude.
Le but de ce projet est de mettre en application tous nos acquis.
L’objectif est de fabriquer une carte électronique capable de commander les actionneurs et d’afficher l'état des capteurs à fin de faire un boisson.
Cahier de charges
Concevoir une carte électronique de commande d’une machine à café.
Partie2
PILOTAGE DES CAPTEURS
Ce capteur que nous avons utilisé est un capteur TOR, une sorte d’interrupteur qui informe d’un stock plein de l’eau lorsque le courant passe.
Schéma Electronique
Ce schéma électronique nous a permis de faire des testes sur une plaque à essais.
Ceci nous a permis de piloter les capteurs en simulation et ensuite le remplacer par les capteurs qui sont dans le distributeur de boisson.
Ensuite en le programme en suivant l'algorithme ci dessous:
Lorsque la led est à l'etat 1 c'est à dire qu'il y a de l'eau dans la cuve.
Lorsqu'elle est à l'etat bas led=0 c'est à dire qu'il n'y a pas de l'eau dans la cuve.
Microship
Le MCP23017 utilise 2 broches I2C pins (qui peuvent être partagées avec d'autres périphériques I2C), et en échange, il fournit 16 broches d'utilisation générale en plus.
Chacune des 16 broches peut être configurée:
en entrée (input)
en sortie (output)
Les broches intéressantes:
Alimentation
Attention de ne pas inverser le sens de raccordement.
VDD: Alimentation
VSS: GND, la masse
Les entrées/Sorties
Notées GPAx et GPBx. Toutes les entrées/sorties GPAx sont codées sur un octet (byte) tandis que toutes les entrées/sorties GPBx sont codées sur un autre octets.
Si vous utilisez moins de 8 entrées/sorties, il est préférable de les regrouper sur GPAx... car du coup, elles peuvent toutes être commandées en même temps avec un seul octet.
Brancher le bus I2C
Connectez la broche #12 sur Arduino broche Analogique A5 (Horloge I2C, SCL)
Connectez la broche #13 sur Arduino broche Analogique A4 (Données I2C, SDA)
Ce circuit intégré peut être utilisé entre 2.7 et 5.5V (convient donc pour tous du 3.3V comme Raspberry Pi ou 5V comme Arduino).
Vous pouvez consommer jusqu'à 20mA sur n'importe quelle porte... vous pouvez donc allumer une LED.
Changement d'adresse
Les circuits intégrés se trouvant sur un Bus I2C ont chacun une adresse (un peut comme un numéro de maison dans une rue).
Cela permet de connecter plusieurs circuit sur un même bus (les même fils SDA et SCL) et de pouvoir s'adresser à un circuit bien particulier en utilisant sont adresse.
Il ne peut pas y avoir deux circuits différents avec la même adresse sur le Bus.
Il est possible de combiner différent types de circuits I2C sur un même bus... chaque circuit ayant sa propre adresse différente des autres circuits (ce qui est généralement le cas).
Si l'on veut mettre plusieurs fois le même circuit sur un bus I2C alors il faut pourvoir en changer l'adresse.
C'est justement la fonction des broches A0, A1, A2. Elle permet de modifier l'adresse par défaut du composant sur le Bus I2C.
Librairie
"Adafruit MCP23017 Arduino Library" «GitHub d'AdaFruit»
"Adafruit MCP23008 library" Arduino Library «GitHub d'AdaFruit»
Schématique & Routage
Voici quelques contraintes de routage que nous avons 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
Carte Capteur
Test effectué:
-Vérification de la communication avec le MCP23017.
-Communication avec les capteur du distributeur.
Code de pilotage de capteurs
code de pilotage de capteurs
#include <Wire.h>
#include <Adafruit_MCP23017.h>
Adafruit_MCP23017 mcp;
int bouton = 9; // Numéro de la broche à laquelle est connecté le bouton poussoir
int led = 8; // Numéro de la broche à laquelle est connectée la LED
// Déclaration des variables :
int etatBouton = 0; // variable qui sera utilisée pour stocker l'état du bouton
void setup() {
Serial.begin(9600);
mcp.begin(); // use default address 0
mcp.pinMode(led, OUTPUT); // indique que la broche led est une sortie :
mcp.pinMode(bouton, INPUT); // indique que la broche bouton est une entrée :
}
// le code dans cette fonction est exécuté en boucle
void loop() {
etatBouton = mcp.digitalRead(bouton); // lit l'état du bouton et stocke le résultat dans etatBouton
// Si etatBouton est à 5V (HIGH) c'est que le bouton est appuyé
if ( etatBouton == HIGH) {
mcp.digitalWrite(led, HIGH); // on allume la LED(presence d'eau dans la cuve au nivau max.)
Serial.println(0); //On affiche l'etat de la led sur le moniteur serie
delay(1000); //Pour une durée de 1s(Petite temporisation)
}
else {
mcp.digitalWrite(led, LOW); // sinon on éteint(Absence d'eau dans la cuve)
Serial.println(1); //On affiche l'etat de la led sur le moniteur serie
delay(1000); //Pour une durée de 1s(Petite temporisation)
}
}
PILOTAGE DES ACTIONNEURS
RESISTANCES CHAUFANTE
PROGRAMMATION DU PROJET
Pour commencer il faut télécharger la librairie adafruit/Adafruit-MCP23008 et Adafruit-MCP23017-Arduino-Library - GitHub en format zip, ensuite l'inclure dans l'Arduino ( ouvrir Arduino ensuite clic sur [Croquis + Inclure une bibliothèque] enfin clic sur ajouter la bibliothèque zip). C'est l'étape la plus importante car Arduino n'a pas ces librairies et ensuite déclarer les variables, donner les instructions en fonction de notre besoin. "Adafruit/Adafruit-MCP23008-library" Arduino Library «GitHub d'AdaFruit»
"Adafruit MCP23017 Arduino Library" ici sur le «GitHub d'AdaFruit»
code général du projet
#include <Wire.h>
#include "Adafruit_MCP23008.h"
#include "Adafruit_MCP23017.h"
Adafruit_MCP23008 mcp_sortie; //que les electrovannes sur ce mcp
Adafruit_MCP23017 mcp_entree;
int pinBouton = 11;
int pinBouton2 = 13; //bouton et bouton2 correspondent aux deux capteurs
int pinGrille1 = 7;
int pinGrille2 = 6;
bool conditiondepart = 0;
int pinLed1 = 10;
int pinBoutonPoussoir = 8;
int pinBoutonPoussoir2 = 9;
int pinLed2 = 50;//12
void setup()
{
mcp_entree.begin(2);
mcp_sortie.begin();// utiliser l'adresse par défaut
// définition des broches en sortie
//Serial.begin(9600);
mcp_entree.pinMode(pinBouton, INPUT);
mcp_entree.pinMode(pinBoutonPoussoir, INPUT);
mcp_entree.pinMode(pinBoutonPoussoir2, INPUT);
mcp_sortie.pinMode(pinGrille1, OUTPUT);
mcp_sortie.pinMode(pinGrille2, OUTPUT);
mcp_entree.pinMode(pinLed1, OUTPUT);
mcp_entree.pinMode(pinLed2, OUTPUT);
pinMode(1,OUTPUT);//pompe
}
void loop()
{
if (mcp_entree.digitalRead(pinBoutonPoussoir)==HIGH){
conditiondepart = !conditiondepart;
delay(400);
}
if (conditiondepart == 1)
{
if (mcp_entree.digitalRead(pinBouton)==HIGH) //attention c'est l'inverse de la position du flotteur
{
mcp_sortie.digitalWrite(pinGrille1,HIGH); //5v
mcp_sortie.digitalWrite(pinGrille2,LOW);
mcp_entree.digitalWrite(pinLed1, LOW);
digitalWrite(1,LOW); //pompe
}
else
{
mcp_sortie.digitalWrite(pinGrille1,LOW);
mcp_sortie.digitalWrite(pinGrille2,HIGH); //
mcp_entree.digitalWrite(pinLed1,HIGH); //
digitalWrite(1, HIGH);//pompe
}
delay(100); //petite attente
}
else if (conditiondepart ==0){
mcp_entree.digitalWrite(pinLed1, LOW);
digitalWrite(1,LOW);
}
delay(1);
}
CONCLUSION
Pendant ce projet, nous avons eu l'opportunité de s'entraîner sur les logiciels tels que Eagle et arduino et aussi de développer les compétences en matière de fabrication et de programmation de cartes avec des MCP. Nous avons écrit les programmes en C pour tester le fonctionnement de la carte fabriquée. C’est un projet très intéressant et très enrichissant. Pour nous, il a fallu faire preuve d'ingéniosité pour trouver les raisons des dysfonctionnement pendant les tests et également pour souder des composants à la place de certains qui ont été abîmés pendant les essais. Malgré les problèmes rencontrés nous avons pu trouver des solutions pour que la carte se réalise. Malheureusement nous ne sommes pas allés jusqu'à la fin de notre objectif qui était de faire du café.