Le guet à pintes

De Les Fabriques du Ponant
Aller à : navigation, rechercher

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

Photocreation.jpg

Erreur lors de la création de la miniature : Fichier avec des dimensions supérieures à 12,5 MP
Erreur lors de la création de la miniature : Fichier avec des dimensions supérieures à 12,5 MP

Code arduino

Photo2.jpg câblage de la carte 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