Proiect Închisoarea lui Bachus

De cele mai multe ori consumul de alcool afectează capacitatea de a evalua cantitatea de băutură consumată deja dar deschide apetitul pentru a bea din ce în ce mai mult.

1

”Personal nu beau niciodată mai mult de un pahar dar după un pahar devin cu totul și cu totul alt om. Acel om bea enorm de mult… ”

Având în vedere efectele negative grave cauzate de consumul excesiv de alcool proiectul de față își propune să construiască un sistem de protecție care să țină seama de cantitatea de alcool consumată deja – o încuietoare care nu se va deschide dacă persoana este în stare de ebrietate. Această încuietoare poate fi instalată la dulapul sau barul în care sunt depozitate băuturile alcoolice și va încerca să împiedice o persoană să consume mai mult decât este cazul. Bineînțeles, proiectul are un caracter strict demonstrativ – nu există nici o garanție că poate opri o persoană să consume prea mult alcool, fiecare persoană are responsabilitatea să consume băuturi alcoolice cu moderație.

Sistemul se va baza pe o placă de dezvoltare Arduino Uno și va include următoarele componente: un senzor brick alcool MQ-3, o placă releu SPDT 5V, o încuietoare solenoid, un brick buton și două brick-uri led.

2

https://www.robofun.ro/bricks/senzor-alcool-brick

3

https://www.robofun.ro/module/module-releu/releu-spdt-5V

4

https://www.robofun.ro/mecanice/mecanice-altele/incuietoare-solenoid-12vdc

Modul de funcționarea a sistemului va fi următorul: la pornirea sistemului încuietoarea este închisă și ledul roșu este aprins; pentru deblocare se apasă butonul și se suflă în senzor timp de 10 secunde – interval semnalizat de clipirea ledului roșu; dacă proba este negativă, nu există alcool în respirația celui testat, ledul roșu se va stinge, se va aprinde ledul verde și se va comanda de deschidere a încuietorii pentru 10 secunde.

Cele două leduri vor fi conectate pe pinii 5 și 6 ai plăcii de dezvoltare. Pinul 2 al plăcii de dezvoltare va fi utilizat pentru conectarea butonului (INT0) iar pinul 3 pentru comanda către încuietoare. Senzorul de alcool se va conecta pe pinul analogic A0.

#define led_verde 5

#define led_rosu 6

#define pin_releu 3

#define int_buton 0

Schema de interconectare între componentele utilizate este:

5

Chiar dacă senzorii de gaz din familia MQ sunt în general mari consumatori de curent și nu se recomandă alimentarea directă din placa de dezvoltare ci utilizarea unui surse externe de alimentare – senzorul de alcool MQ-3 nu consumă mai mult de 200mA deci poate fi alimentat direct și în cazul alimentării plăcii prin intermediul cablului USB și în cazul utilizării unui alimentator extern.

Comanda încuietorii se va realiza prin intermediul unui releu deoarece funcționează la o altă tensiune (12V) decât restul montajului. Având în vedere faptul că placa de dezvoltare Arduino Uno poate fi alimentată, prin intermediul regulatorului intern de tensiune, la tensiuni între 6V și 12V, sistemul poate fi alimentat în ansamblu de la o singură sursă de tensiune. Nu se recomandă utilizarea de baterii deoarece consumul este destul de mare și nu se va asigura o autonomie prea mare a sistemului.

În cadrul programului se vor utiliza următoarele variabile globale: unlockme – semnalizează apăsarea butonului de deschidere; alcool – conține valoarea citită de la senzor în mod curent; alcool_test – conține valoarea citită în urma testării. Comparația dintre cele două valori va sta la baza de deschidere sau nu a încuietorii.

volatile boolean unlockme = false;

int alcool, alcool_test;

În cadrul secțiunii setup() se realizează inițializarea pinilor de comandă și a procedurii  (unlock()) de tratare a evenimentului de apăsare a butonului.

void setup() {               

    attachInterrupt(int_buton,unlock,RISING);

    pinMode(pin_releu,OUTPUT);

    pinMode(led_rosu,OUTPUT);

    pinMode(led_verde,OUTPUT);

    digitalWrite(pin_releu,LOW);

    digitalWrite(led_verde,LOW);

    digitalWrite(led_rosu,HIGH);

}

void unlock() {  unlockme = true; }

Secțiunea loop() va implementa mecanismul de testare și de comandă a încuietorii. Funcționarea încuietorii se bazează pe un mecanism extrem de simplu: se compară valoarea de test (alcool_test) cu valoarea achiziționată chiar înainte de efectuarea testului (alcool). În cazul în care valoarea este mai mare (detecție alcool) sau egală (nu s-a suflat deloc în senzor) încuietoarea nu se va deschide. Comportamentul senzorului face ca în momentul unui test negativ (se suflă în senzor de către o persoană care nu a consumat alcool) valoarea raportată să fie mai mică decât valoarea citită în gol – acesta este cazul în care încuietoarea se va deschide. Cu alte cuvinte nu se poate păcăli senzorul și să se deschidă încuietoarea fără ca o persoană să efectueze testul.

void loop() {

    alcool = analogRead(0);

    if (unlockme) {

      for (int i=0; i<10; i++) {

        digitalWrite(led_rosu,LOW);

        delay(500);

        digitalWrite(led_rosu,HIGH);

        delay(500);

      }

      unlockme = false;

      alcool_test = analogRead(0);

      if (alcool_test < alcool) {

        digitalWrite(led_rosu,LOW);

        digitalWrite(led_verde,HIGH);

        digitalWrite(pin_releu,HIGH);

        delay(10000);

        digitalWrite(led_rosu,HIGH);

        digitalWrite(led_verde,LOW);

        digitalWrite(pin_releu,LOW);

      }

      unlockme = false;

    }

    delay(1000);

}

În cazul în care doriți să implementați sisteme de testare mai sofisticate decât cel prezentat în această lecție vă recomandăm și următorul proiect:

The Droidalyzer – An open source, Bluetooth alcohol detector accessory for Android Phones

http://www.instructables.com/id/The-Android-Breathalyzer/