Alcoholimetro con lector de huellas

INTRODUCCIÓN

Nuestro proyecto consiste en un coche que incluye un alcoholímetro (Sensor MQ-3), un lector de huella, un módulo Bluetooth y una pantalla LCD.
Primero, nuestro coche comprueba que la huella leída sea la del conductor, si esto no es correcto el coche no hará nada más ni arrancará.
En segundo lugar, si la huella es correcta, se activará el alcoholímetro por el que el conductor deberá soplar. Si el conductor, sobrepasa la tasa de alcoholemia permitida, el coche no arrancará y mostrará en la pantalla un mensaje. En cambio, si el conductor no ha bebido o no sobrepasa esta tasa, el coche arrancará y lo controlaremos a través de una app en nuestro teléfono que está conectado con el coche mediante el módulo BlueTooth.

ESQUEMA DEL CIRCUITO

En las siguientes imágenes se puede observar el circuito detallado de nuestro proyecto, primero cada componente por separado y finalmente todos conectados.
  • Sensor de alcohol.
  • Módulo Bluetooth
  • Lector de huellas
  •  Pantalla LCD 16×2 con i2C
  • Circuito integrado L293D y motores.
circuitoArduino.png

CÓDIGO

A continuación, se muestra el código de nuestro proyecto:
#include “Wire.h”

#include “Adafruit_LiquidCrystal.h”
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 100; // Velocidad de los motores (0-255)
int estado = ‘g’; // inicia detenido
int getFingerprintIDez();
Adafruit_LiquidCrystal lcd(0);
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint( & mySerial);
//alcohol
const int analogPinSensor = A0;
void setup() {
   Serial.begin(9600);
   lcd.begin(16, 2); //inicializado
   lcd.print(“Huellas“);
   lcd.setCursor(0, 1);
   // set the data rate for the sensor serial port
   finger.begin(57600);
   if (finger.verifyPassword()) {
      lcd.print(“Sensor“);
   } else {
      lcd.print(“Not sensor“);
      while (1);
   }
   lcd.print(“Waiting“);
   // inicia el puerto serial para comunicación con el Bluetooth
   pinMode(derA, OUTPUT);
   pinMode(derB, OUTPUT);
   pinMode(izqA, OUTPUT);
   pinMode(izqB, OUTPUT);
}
void loop() {
   lcd.setCursor(0, 1);
   lcd.setBacklight(HIGH);
   delay(2000); //don’t need to run this at full speed.
   uint8_t p = finger.getImage();
   if (p != FINGERPRINT_OK) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(“Huellas“);
      lcd.setCursor(0, 1);
      lcd.print(“Not finger“);
   }
   p = finger.image2Tz();
   if (p != FINGERPRINT_OK) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(“Huellas“);
      lcd.setCursor(0, 1);
      lcd.print(“Not match2“);
   }
   p = finger.fingerFastSearch();
   if (p != FINGERPRINT_OK) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(“Huellas“);
      lcd.setCursor(0, 1);
      lcd.print(“Not match“);
   } else {
      // found a match!
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(“Huellas“);
      lcd.setCursor(0, 1);
      lcd.print(“Found#”);
      lcd.print(finger.fingerID);
      lcd.print(”with“);
      lcd.print(finger.confidence);
      delay(2000);
      lcd.clear();
      lcd.print(“Un momento”);
      int minuto = 0;
      while (minuto < 60) {
         lcd.setCursor(0, 1);
         lcd.print(minuto);
         minuto++;
         delay(1000);
      }
      int sensorRead = analogRead(analogPinSensor);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(“Alcohol”);
      lcd.setCursor(0, 1);
      if (sensorRead > 500) { //si está ebrio lo imprimimos por pantalla y volvemos a empezar
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print(“Ebrio”);
         lcd.setCursor(0, 1);
         long porcentaje = ((sensorRead / 100) * 0.79 * (4.8 / 100)) * 100;
         lcd.print(porcentaje);
         delay(1500);
         lcd.print(“No puede conducir”);
      } else { //en caso contrario, imprimimos sobrio y podemos continuar
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print(“Sobrio”);
         lcd.setCursor(0, 1);
         long porcentaje = ((sensorRead / 100) * 0.79 * (4.8 / 100)) * 100;
         lcd.print(porcentaje);
         delay(5000);
         / /imprimimos
         por pantalla 5 segundos
         lcd.clear(); //limpiamos el contenido de la pantalla
         lcd.setBacklight(LOW); //apagar alcohol y pantalla
         while (1) {
            if (Serial.available() > 0) { // lee el bluetooth y almacena en estado
               estado = Serial.read();
            }
            if (estado == ’a’) { // Botón desplazar al Frente
               analogWrite(derB, 0);
               analogWrite(izqB, 0);
               analogWrite(derA, vel);
               analogWrite(izqA, vel);
            }
            if (estado == ’b’) { // Botón IZQ
               analogWrite(derB, 0);
               analogWrite(izqB, 0);
               analogWrite(derA, 0);
               analogWrite(izqA, vel);
            }
            if (estado == ’c’) { // Botón Parar
               analogWrite(derB, 0);
               analogWrite(izqB, 0);
               analogWrite(derA, 0);
               analogWrite(izqA, 0);
            }
            if (estado == ’d’) { // Botón DER
               analogWrite(derB, 0);
               analogWrite(izqB, 0);
               analogWrite(izqA, 0);
               analogWrite(derA, vel);
            }
            if (estado == ’e’) { // Botón marcha atrás
               analogWrite(derA, 0);
               analogWrite(izqA, 0);
               analogWrite(derB, vel);
               analogWrite(izqB, vel);
            }
            if (estado == ’g’) { // Botón OFF, detiene los motores
               analogWrite(derB, 0);
               analogWrite(izqB, 0);
               analogWrite(derA, 0);
               analogWrite(izqA, 0);
            }
         }
      }
   }
}

PRESUPUESTO

Componente
Precio
Módulo Bluetooth
9,99 €
Lector de huellas
35,95 €
Sensor MQ-3
7,15 €
Módulo Adafruit i2c
12,10 €
Circuito integrado L293D
4 €
Total
69,19 €

PROBLEMAS Y SOLUCIONES

Mientras realizábamos este proyecto nos han surgido algunos problemas como los que se mencionan a continuación.
El primer problema que nos encontramos fue con el lector de huellas, porque, aunque no pusiéramos la huella en el lector para que la leyera salía: “Not finger. Not match” Tenía que aparecer “Not finger” sí, pero a continuación aparecía “Not match” que solo debía aparecer en caso de que la huella leída no estuviera en la base de datos o no fuera la del conductor del coche.
El segundo problema, fue que quemamos una pata del Sensor MQ-3 y no nos medía bien los grados de alcohol, pero no nos dimos cuenta hasta pasado un día de cuál era el fallo. Finalmente, este problema se solucionó porque había otra pata más del Sensor que se podía usar en lugar de ésta.

CONCLUSIONES / POSIBLES MEJORAS

Una de las conclusiones a las que hemos llegado es que, hoy en día, un coche puede tener cualquier dispositivo tecnológico incorporado e incluso que controle su arranque o identifique a su conductor, como es nuestro caso. Hoy en día todo es posible con la tecnología.
Una de las posibles mejoras para que el coche terminara de funcionar correctamente sería que dejará de aparecer todo el rato “Not finger. Not match” cuando no debería aparecer y que no hubiera que esperar un cierto tiempo hasta que se caliente el alcoholímetro para que el conductor pueda soplar y le detecte el grado de alcohol correcto.
Vídeo demostración:
Enlace presentación:

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *