Le guet à pintes
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
#include <Wire.h> #include <rgb_lcd.h> #include <Servo.h> boolean saoul = false; byte const alarm =12; byte const BP_gauche = 0, BP_droite = 0, BP_haut = 0, BP_bas = 0; //Adresse des pins Bouton Pousoir rgb_lcd LCD; // on crée l'objet écran int colorR = 255; int colorG = 255; int colorB = 255; Servo verou; const int bp1 = 2; int closed = 45; int openn = 0; int buttonState1 ; float s; float sensor_volt; float RS; // Get the value of RS via in Alcohol float R0; // Get the value of R0 via in air float sensorValue; float ratio; float ratioc ; void setup() { Serial.begin(9600); //Démarrage de la liaison série USB LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes pinMode (BP_haut, INPUT); pinMode (BP_gauche, INPUT); pinMode (BP_bas, INPUT); pinMode (BP_droite, INPUT); pinMode(bp1, INPUT); verou.attach(5); buttonState1 = HIGH; // bouton relaché R0 = analogRead (A0); // calcul du niveau d'alcool dans l'air -> calibrage pinMode (alarm, INPUT); } void loop() { delay (200); LCD.clear(); colorR = 255; colorG = 255; colorB = 255; LCD.setRGB(colorR, colorG, colorB); saoul = false; LCD.setCursor(0,0); LCD.print("Bonjour, appuyer"); // on écrit Bonjour LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("sur une touche "); // on finit d'écrire if (!digitalRead(bp1) ){ LCD.clear(); LCD.setCursor(0,0); LCD.print("Soufflez et vous"); LCD.setCursor(0,1); LCD.print("saurez !"); delay (3000); LCD.clear(); LCD.setCursor(0,0); LCD.print("3"); delay (1000); LCD.setCursor(2,0); LCD.print("2"); delay (1000); LCD.setCursor(4,0); LCD.print("1..."); delay (1000); LCD.setCursor(0,1); LCD.print("Soufflez !"); delay (20); int i = 0; while(i<1000){ for(int x = 0 ; x < 100 ; x++) { sensorValue = sensorValue + analogRead(A0); } sensorValue = sensorValue/100.0; RS = analogRead(A0); ratio = RS/R0; ratioc = ratio*100; if (ratioc>125) { saoul=true; } i++; } if (saoul == true){ LCD.clear(); LCD.setCursor(0,0); colorR = 255; colorG = 0; colorB = 0; LCD.setRGB(colorR, colorG, colorB); LCD.print("Vous etes ivre"); delay (3000); verou.write(closed); } if (saoul == false){ LCD.clear(); LCD.setCursor(0,0); colorR = 0; colorG = 255; colorB = 0; LCD.setRGB(colorR, colorG, colorB); LCD.print("Vous etes sobre"); verou.write(openn); 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