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
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

#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