Cosmin-Andrei STANCIU (78493) - Etilotest

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta intr-un dispozitiv de tip etilotest, care masoara cantitatea de alcool in aerul expirat. Acesta transmite datele spre afisare prin intermediul unui modul Bluetooth catre o aplicatie Android de pe telefon. Am ales acest proiect deoarece mi s-a parut fun, iar dispozitivul mi se pare util in viata de zi cu zi, mai ales pentru soferi, oferindu-le posibilitatea de a-si testa alcoolemia inainte de a se urca la volan(Don't drink and drive).

Descriere generală

Senzorul masoara cantitatea de alcool din aerul expirat si transmite rezultatul prin intermediul unui modul Bluetooth catre un smartphone, care afiseaza rezultatul printr-o aplicatie simpla.

Hardware Design

Lista de piese:

  • Placa de baza
  • Placa de test
  • Senzor Alcool MQ-3
  • Modul Bluetooth HC-05
  • Fire, rezistente, pini
  • 3 LED-uri

Schema electrica

Software Design

1. Mediu de dezvoltare

  • Editare: Sublime-Text
  • Biblioteci AVR și comunicarea cu placa: WinAVR Toolkit
  • Încărcarea programului pe placa: HID Boot Flash (GUI version)
  • Creare schemă electrică: Autodesk Eagle
  • Creare schemă bloc: https://www.draw.io/

2. Biblioteci folosite

#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <string.h>

3. Functii implementate

3.1. Functii de initializare

  • Initializare I/O: setarea celor 3 LED-uri ca porturi de iesire
/* set LEDs as output */
void io_init(void);
  • Initializare ADC pentru senzorul de alcool
/* initiate adc for sensor reading */
void adc_init(void);
  • Initializare USART pentru comunicarea cu modulul de bluetooth
/* initiate usart for bluetooth communication */
void usart_init(void);

3.2. Functii pentru senzorul de alcool

  • Functie pentru citirea datelor preluate de senzor
* read sensor value */
uint16_t adc_read(uint8_t channel);
  • Functie pentru calibrarea senzorului la mediul de test
/* reads 100 samples
determine the alcohol concentration in clean air */
uint16_t calibrate(void);
  • Functie de conversie de la valoarea intoarsa de senzor la (dg/L)
/* convert sensor value to (dg/L) */
uint16_t convert(uint16_t mq3Value, uint16_t mq3Normal, uint16_t alcNormal);

3.3. Functii pentru modulul de bluetooth

  • Functie de transmisie prin USART: trimite un caracter pe seriala
/* send value to usart */
void usart_send(char data);
  • Functie de receive de pe seriala: asigura comunicatia intre aplicatie si microcontroller

Cand se apasa butonul de 'START TEST' din aplicatie, senzorul incepe sa citeasca.

/* receive data from usart */
uint16_t usart_receive(void);
  • Functie de trimitere a unui string pe seriala

Se trimite un string caracter cu caracter pe USART, pentru a fi preluat de aplicatie

/* send a string character by character */
void usart_string(char *data);

4. Fluxul programului

- Cand se alimenteaza placa, se aprinde LED-ul galben, ce semnifica ca senzorul se calibreaza: se face media a 100 de citiri, pentru a determina la fiecare rulare concentratia de alcool din mediul test.

- Dupa ce s-a terminat calibrarea, se aprinde LED-ul verde, semn ca senzorul este gata sa citeasca.

- La apasarea unui buton din aplicatia Android se trimite un byte prin bluetooth, si comunica programului sa inceapa un test. Se aprinde LED-ul galben.

- Un test consta in citirea a 50 de valori(aprox 10s), se face o medie, si se trimite catre modulul de bluetooth prin intermediul USART, pentru a fi afisata in aplicatie. In functie de concentratia de alcool detectata, se aprinde led-ul verde sau led-ul rosu si se transmite si un mesaj sugestiv.

- Dupa incheirea testului, senzorul nu mai citeste, si se aprinde LED-ul verde.

- Programul asteapta mesaj de la aplicatie pentru inceperea unui nou test.

Rezultate Obţinute

Am reusit sa creez un etilotest functional, cu o acuratete decenta, care comunica prin intermediul unui modul Bluetooth cu o aplicatie Android de pe smartphone.

Am atasat si cateva poze cu proiectul.

Concluzii

Proiectul mi s-a parut o experienta foarte interesanta si m-a captivat de la prima “lipitura” ca sa zic asa LOL. Satisfactia vine de la faptul ca am pornit cu acest proiect de la zero, o placa goala si niste piese si am reusit sa construiesc ceva util, care si functioneaza. De asemenea, am imbinat mai multe cunostinte, de la hardware si electronica si pana la programare.

Per total, sunt multumit de ce a iesit si urmaresc sa il imbunatatesc pe viitor cu o calibrare mai buna a senzorului si poate o carcasa.

Download

Bibliografie/Resurse

  • Documentația în format PDF
pm/prj2018/mandrei/etilotest.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0