Le guet à pintes : Différence entre versions
(21 révisions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | |||
==L'idée de base== | ==L'idée de base== | ||
Ligne 7 : | Ligne 8 : | ||
===Public=== | ===Public=== | ||
− | Nous espérons que notre projet permettra de réguler la prise d'alcool | + | Notre projet s'adresse à tous les habitués des bars. |
+ | Nous espérons que notre projet permettra de réguler la prise d'alcool dans les bars. | ||
===Notions abordées=== | ===Notions abordées=== | ||
Ligne 22 : | Ligne 24 : | ||
*LED | *LED | ||
*Résistances | *Résistances | ||
− | *Capteur | + | *Capteur de gaz (éthanol) |
+ | *boite en carton | ||
+ | *servomoteur pas à pas | ||
+ | *4 boutons poussoirs | ||
+ | *afficheur LCD 2 lignes 16 colonnes | ||
+ | |||
+ | La boite en carton est fabriqué à la main et est constitué de deux compartiments et d'une porte s'ouvrant électroniquement. L'un des deux compartiments contiendra les clés de voiture, et l'autre, la carte Arduino qui sera relié à la porte, à l'afficheur LCD, et aux boutons poussoirs. | ||
+ | L'afficheur LCD permettra d'afficher le menu et les boutons poussoirs de naviguer sur celui-ci. | ||
+ | |||
+ | ==Fabrication de la boite== | ||
+ | |||
+ | [[Fichier:Photocreation.jpg|190px]] | ||
+ | |||
+ | [[Fichier:Boite-2-.jpg|190px]] | ||
+ | |||
+ | [[Fichier:Boite-3.jpg|190px]] | ||
+ | |||
+ | [[Fichier:Boite-1-.jpg|190px]] | ||
+ | |||
+ | ==Code arduino== | ||
+ | |||
+ | [[Fichier:Photo2.jpg|190px]] | ||
+ | câblage de la carte Arduino | ||
+ | |||
+ | <pre> | ||
+ | #define LCD_I2C false //Compilation conditionelle en fonction de l'afficheur utilisé | ||
+ | |||
+ | #if LCD_I2C // Si afficheur LCD 16x2 (I2C) | ||
+ | #include <Wire.h> | ||
+ | #include <rgb_lcd.h> | ||
+ | rgb_lcd lcd; // on crée l'objet écran | ||
+ | int colorR = 255; | ||
+ | int colorG = 255; | ||
+ | int colorB = 255; | ||
+ | #else // Sinon afficheur LCD 16x2 (RS, Enable, D4, D5, D6, D7) | ||
+ | #include <LiquidCrystal.h> | ||
+ | const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; | ||
+ | LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // on crée l'objet écran | ||
+ | #endif | ||
+ | |||
+ | #include <Servo.h> | ||
+ | boolean Saoul = false; | ||
+ | byte const BP_gauche = 0, BP_droite = 0, BP_haut = 0, BP_bas = 0; //Adresse des pins Bouton Pousoir | ||
+ | |||
+ | byte const AnalogCapteurEthanol = A0; | ||
+ | int sensorValue = 0; | ||
+ | int RS = 0; // Valeur de saturation RS de l'air "Alcoolisé" soufflé | ||
+ | int R0 = 0; // Valeur R0 de saturation dans l'air "Sain" | ||
+ | float RatioRS_R0 = 0; | ||
+ | int const nombrePointMesure =3000; //Nombre de points de mesure éthylomètre (1 point par 1 ms) | ||
+ | |||
+ | void setup() { | ||
+ | lcd.begin(16, 2); // Initialisation de l'afficheur LCD | ||
+ | lcd.noDisplay(); | ||
+ | |||
+ | Serial.begin(9600); | ||
+ | |||
+ | pinMode (BP_haut, INPUT); | ||
+ | pinMode (BP_gauche, INPUT); | ||
+ | pinMode (BP_bas, INPUT); | ||
+ | pinMode (BP_droite, INPUT); | ||
+ | |||
+ | R0 = analogRead (A0); // calcul du niveau d'alcool dans l'air -> calibrage | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | #if LCD_I2C | ||
+ | colorR=255; colorG=255; colorB=255; // couleur "Blanc" | ||
+ | lcd.setRGB(colorR, colorG, colorB); // Changement de la couleur | ||
+ | #endif | ||
+ | lcd.setCursor(0,0); // On se place en (x:0,y:0) | ||
+ | lcd.print("Bonjour, appuyer"); | ||
+ | lcd.setCursor(0,1); // On se place en (x:0,y:1) | ||
+ | lcd.print("sur une touche "); | ||
+ | |||
+ | if(digitalRead(BP_droite)){ | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); // On se place en (x:0,y:0) | ||
+ | lcd.print("Soufflez et vous"); | ||
+ | lcd.setCursor(0,1); // On se place en (x:0,y:1) | ||
+ | lcd.print("saurez !"); | ||
+ | delay (3000); | ||
+ | |||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); // On se place en (x:0,y:0) | ||
+ | lcd.print("3"); | ||
+ | delay (1000); | ||
+ | lcd.setCursor(2,0); // On se place en (x:2,y:0) | ||
+ | lcd.print("2"); | ||
+ | delay (1000); | ||
+ | lcd.setCursor(4,0); // On se place en (x:4,y:0) | ||
+ | lcd.print("1..."); | ||
+ | delay (1000); | ||
+ | lcd.setCursor(0,1); // On se place en (x:0,y:1) | ||
+ | lcd.print("Soufflez !"); | ||
+ | |||
+ | int index = 0; | ||
+ | RS = 0; | ||
+ | while (index<nombrePointMesure){ | ||
+ | RS += analogRead(AnalogCapteurEthanol); | ||
+ | delay(1); | ||
+ | index++; | ||
+ | } | ||
+ | RS /= nombrePointMesure; | ||
+ | RatioRS_R0 = RS/R0; | ||
+ | RatioRS_R0 *=100; | ||
+ | |||
+ | if (RatioRS_R0 > 125){ | ||
+ | Saoul=true; | ||
+ | } | ||
+ | if (Saoul == true){ | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | #if LCD_I2C | ||
+ | colorR = 255; colorG = 0; colorB = 0; | ||
+ | lcd.setRGB(colorR, colorG, colorB); | ||
+ | #endif | ||
+ | lcd.print("Vous etes ivre"); | ||
+ | delay (3000); | ||
+ | } | ||
+ | else{ | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | #if LCD_I2C | ||
+ | colorR = 0; colorG = 255; colorB = 0; | ||
+ | lcd.setRGB(colorR, colorG, colorB); | ||
+ | #endif | ||
+ | lcd.print("Vous etes sobre"); | ||
+ | delay (3000); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | ===Problème rencontré=== | ||
+ | *capteur de gaz qui ne détecte que les fortes concentrations d'alcool. | ||
+ | *mise en place d'une bibliothèque personnelle sur le programme Arduino | ||
+ | |||
+ | ==Sources== | ||
+ | |||
+ | *ajout sur le programme Arduino de la bibliothèque "rgb_lcd" | ||
==Equipe== | ==Equipe== |
Version actuelle datée du 27 février 2018 à 15:40
Sommaire
L'idée de base
Vous êtes au bar, vous ne savez pas si vous êtes aptes à conduire. Grâce à notre guet à pintes, il n'y a pas de problème. En arrivant, vous laissez vos clés de voiture dans une boîte, sécurisé par un code de votre choix. Ensuite, vous entrez votre poids, votre taille, âge... Cela vous indiquera alors le nombre de verres que vous pouvez boire. Enfin, en sortant du bar, vous entrez votre code et vous soufflez sur un capteur à gaz (éthanol), si c'est positif, la boîte ne s'ouvre pas même avec le code.
Cadre pédagogique
Public
Notre projet s'adresse à tous les habitués des bars. Nous espérons que notre projet permettra de réguler la prise d'alcool dans les bars.
Notions abordées
- Programmer une carte Arduino
- Bricolage
- Utiliser un servomoteur
Réalisation technique
Matériels
- Carte Arduino
- LED
- Résistances
- Capteur de gaz (éthanol)
- boite en carton
- servomoteur pas à pas
- 4 boutons poussoirs
- afficheur LCD 2 lignes 16 colonnes
La boite en carton est fabriqué à la main et est constitué de deux compartiments et d'une porte s'ouvrant électroniquement. L'un des deux compartiments contiendra les clés de voiture, et l'autre, la carte Arduino qui sera relié à la porte, à l'afficheur LCD, et aux boutons poussoirs. L'afficheur LCD permettra d'afficher le menu et les boutons poussoirs de naviguer sur celui-ci.
Fabrication de la boite
Code arduino
#define LCD_I2C false //Compilation conditionelle en fonction de l'afficheur utilisé #if LCD_I2C // Si afficheur LCD 16x2 (I2C) #include <Wire.h> #include <rgb_lcd.h> rgb_lcd lcd; // on crée l'objet écran int colorR = 255; int colorG = 255; int colorB = 255; #else // Sinon afficheur LCD 16x2 (RS, Enable, D4, D5, D6, D7) #include <LiquidCrystal.h> const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // on crée l'objet écran #endif #include <Servo.h> boolean Saoul = false; byte const BP_gauche = 0, BP_droite = 0, BP_haut = 0, BP_bas = 0; //Adresse des pins Bouton Pousoir byte const AnalogCapteurEthanol = A0; int sensorValue = 0; int RS = 0; // Valeur de saturation RS de l'air "Alcoolisé" soufflé int R0 = 0; // Valeur R0 de saturation dans l'air "Sain" float RatioRS_R0 = 0; int const nombrePointMesure =3000; //Nombre de points de mesure éthylomètre (1 point par 1 ms) void setup() { lcd.begin(16, 2); // Initialisation de l'afficheur LCD lcd.noDisplay(); Serial.begin(9600); pinMode (BP_haut, INPUT); pinMode (BP_gauche, INPUT); pinMode (BP_bas, INPUT); pinMode (BP_droite, INPUT); R0 = analogRead (A0); // calcul du niveau d'alcool dans l'air -> calibrage } void loop() { #if LCD_I2C colorR=255; colorG=255; colorB=255; // couleur "Blanc" lcd.setRGB(colorR, colorG, colorB); // Changement de la couleur #endif lcd.setCursor(0,0); // On se place en (x:0,y:0) lcd.print("Bonjour, appuyer"); lcd.setCursor(0,1); // On se place en (x:0,y:1) lcd.print("sur une touche "); if(digitalRead(BP_droite)){ lcd.clear(); lcd.setCursor(0,0); // On se place en (x:0,y:0) lcd.print("Soufflez et vous"); lcd.setCursor(0,1); // On se place en (x:0,y:1) lcd.print("saurez !"); delay (3000); lcd.clear(); lcd.setCursor(0,0); // On se place en (x:0,y:0) lcd.print("3"); delay (1000); lcd.setCursor(2,0); // On se place en (x:2,y:0) lcd.print("2"); delay (1000); lcd.setCursor(4,0); // On se place en (x:4,y:0) lcd.print("1..."); delay (1000); lcd.setCursor(0,1); // On se place en (x:0,y:1) lcd.print("Soufflez !"); int index = 0; RS = 0; while (index<nombrePointMesure){ RS += analogRead(AnalogCapteurEthanol); delay(1); index++; } RS /= nombrePointMesure; RatioRS_R0 = RS/R0; RatioRS_R0 *=100; if (RatioRS_R0 > 125){ Saoul=true; } if (Saoul == true){ lcd.clear(); lcd.setCursor(0,0); #if LCD_I2C colorR = 255; colorG = 0; colorB = 0; lcd.setRGB(colorR, colorG, colorB); #endif lcd.print("Vous etes ivre"); delay (3000); } else{ lcd.clear(); lcd.setCursor(0,0); #if LCD_I2C colorR = 0; colorG = 255; colorB = 0; lcd.setRGB(colorR, colorG, colorB); #endif lcd.print("Vous etes sobre"); delay (3000); } } }
Problème rencontré
- capteur de gaz qui ne détecte que les fortes concentrations d'alcool.
- mise en place d'une bibliothèque personnelle sur le programme Arduino
Sources
- ajout sur le programme Arduino de la bibliothèque "rgb_lcd"
Equipe
- Edwin Kerbaul
- Emeline Gilles
- Florian Lenoir
- Edwin Fontenelle
- Tristan Pirou