Table of Contents

Mircea-Adrian TĂNASE (66837) - Bartender

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Ce face?

Bartender este, asa cum ii spune si numele, este gandit sa vina in ajutorul barmanilor. Device-ul trebuie sa prepare cocktail-uri, combinand cantitati diferite dintr-o varietate de bauturi si respectand in acelasi timp un retetar strict. Sistemul in sine este format dintr-o serie de pompe care vor fi conectate la sticlele cu bautura si care vor pompa cantitatile cerute in retetar din fiecare bautura intr-un pahar. Retetele vor fi salvate in memoria microcontroller-ului, iar selectia retetei va fi facuta printr-o aplicatie pe smartphone, care comunica cu microcontroller-ul prin bluetooth.

Care este scopul?

Scopul sistemului este pe de o parte usurarea muncii barmanilor, intrucat ii scuteste pe acestia de efort si garanteaza faptul ca un cocktail anume va fi preparat dupa aceeasi reteta de fiecare data. Pe de alta parte, sistemul poate fi folosit pentru a elimina interactiunea barman-client, intrucat clientul poate folosi el insusi aplicatia de pe smartphone pentru a isi prepara bautura dorita.

Care a fost ideea de la care ati pornit?

Ideea de la care am pornit a fost aceea ca aglomeratia care se creaza la bar intr-un club creeaza neplaceri atat barmanilor -acestia sunt suprasolicitati- cat si clientilor -care asteapta foarte mult. Initial ideea a fost un sistem care sa ordoneze cumva cererile clientilor, insa apoi m-am gandit ca cea mai buna solutie ar fi sa lasam barmanul sa interactioneze mai mult cu acestia, si sa se ocupe mai putin de prepararea bauturilor.

De ce credeţi că este util pentru alţii şi pentru voi?

Solutia mea isi propune sa elimine cel putin o parte din aceste neplaceri, oferind o experienta mai putin solicitanta si mai de incredere. E adevarat ca barmanii au un farmec aparte si probabil ca nu vor fi vreodata inlocuiti complet de un sistem electronic, insa sistemul vine ca o alternativa la bartending-ul clasic. Principalul atu al unui astfel de device in fata barmanilor este acela ca ofera garantie ca acelasi cocktail va fi preparat mereu dupa aceeasi reteta, respectata strict.

Descriere generală

Schema bloc:

Prin intermediul aplicatiei smartphone, userul va selecta una dintre retetele existente deja si va trimite prin bluetooth un identificator al acesteia catre modulul bluetooth de pe placa microcontrollerului. Acesta va avea salvate in memorie, corespunzator fiecarei retete, o lista de numere care reprezinta ordinea si timpii in care trebuie actionata fiecare pompa pentru preparearea bauturii selectate. Pompele sunt actionate prin intermediul controllerului si sunt activate pe rand, in intervale de timp corespunzatoare pomparii cantitatii de lichid necesare. Numarul de pompe poate varia, insa aceste modificari aduc cu sine modificari in software.

Hardware Design

Lista de piese:

* Placa de baza cu microcontroller - PM 2017

* Drivere motoare (pompe) cu alimentare separata - 3 drivere L298N, unul pentru 2 pompe

* Pompe de lichid pentru fiecare sticla - 6 pompe (motoare CC) cu tensiune de alimentare 3V-12V

* Fire pentru alimentare si legatura

* Modul bluetooth pentru comunicarea cu telefonul - HC-05

* Telefonul pe care va rula aplicatia - interfata

* Alimentator 240V alternativ - 12V continuu

* Furtune pentru lichid

Schema electrica

Precizari implementare hardware:

-Am folosit un alimentator de 12V (12 W) pentru ca daca foloseam baterii, puterea generata de drivere pentru motoare era prea mica. Astfel, pentru fiecare sursa de alimentare din schema electrica, folosesc ”+” si ”-” de la alimentator.

Software Design

In implementarea software-ului am pornit de la urmatoarele premise:

- bauturile trebuie sa fie turnate pe rand, deci pompate separat, asadar nu a fost nevoie sa folosesc timere, ci doar functiile din delay.h

- la capacitate maxima debitul pompelor nu e foarte mare, deci nu am folosit PWM. Atunci cand o pompa lucreaza, pe semnalul de PWM al driverului scriu valoarea 1 constant, astfel pompele lucreaza doar la capacitate maxima

- am considerat ca toate retetele se bazeaza pe o cantitate minima din orice bautura de 20ml si ca orice cantitate din orice bautura este multiplu de 20ml

- timpul masurat in care o pompa pompeaza 20ml de lichid este de aproximativ 4 secunde

- trebuie tinut cont de faptul ca la orice pompare e necesar un timp de umplere a furtunului de aproximativ 2 secunde

- o reteta anume se identifica printr-un singur caracter, care va fi primit de telefon via Bluetooth

- pentru comunicarea cu modulul Bluetooth HC-05 am folosit implementariile functiilor USART (fisierele usart.h si usart.c) din Laboratorul 1

- scopul proiectului nu este neaparat implementarea aplicatiei pe Android, asadar am folosit BlueTerm o aplicatie disponibila pe Google Play, care trimite caractere catre un terminal Bluetooth. Mentionez ca aplicatia este open-source (vezi resurse, 6.) si free-license.

Detalii implementare

- pinii care controleaza pompele prin drivere sunt stocati in vectorul pumps

- functia init_pumps() seteaza toti pinii pentru drivere in mod iesire

- functia pump(pompa, time) activeaza semnalele enable si IN pentru fiecare pompa, asteapta timpul *time*, dupa care realizeaza operatiile inverse

- retetele sunt salvate in matricea retetar, care pe coloana i stocheaza reteta pentru cocktail-ul i, in felul urmator: pentru fiecare din cele 6 bauturi, se cunoaste cantitatea care intra in reteta, ca multiplu de 20ml

- functia prepare(cocktail) parcurge linia din retetar corespunzatoare cocktail si activeaza pe rand pompele pentru un timp calculat in functie de debitul pompelor (macro-ul TIME20ML) si cantitatea necesara

- functia usart_receive() primeste un caracter prin usart, de la modulul bluetooth (Laboratorul 1 PM)

- led-ul de pe pinul PD7 se aprinde atunci cand sistemul este in curs de preparare a unei bauturi

- aplicatia de pe telefon este un proiect open-source, denumit BlueTerm, care stabileste o conexiune cu un modul Bluetooth si are optiunea de a trimite cate un caracter catre acestea

- microcontroller-ul preia caracterul primit, care identifica un cocktail anume si il prepara, dupa care asteapta un nou caracter

Pentru dezvoltare am folosit WINAVR, Programmers Notepad si bootloader-ul de la laborator.

Concluzii

Rezultatul final poate fi observat in imaginile de mai jos. Consider ca am atins scopurile pe care mi le-am propus atunci cand am inceput proiectul, in sensul ca acesta este functional si poate fi intr-adevar folosit.

Trebuie precizat faptul ca produsul este doar un prototip, care ar trebui mult imbunatatit pentru a fi folosit in situatii reale, in primul rand din punct de vedere al design-ului (vezi imaginile), si apoi datorita faptului ca foloseste mai multe simplificari (se considera ca debitul nu depinde de bautura si timpul de umplere a furtunului nu depinde de nivelul lichidului, toate cantitatile sunt multiplii de 20ml, avem doar 6 bauturi).

Cu toate astea, consider ca proiectul si-a atins scopul, intrucat am luat contact cu ce inseamna sa cauti cele mai potrivite componente hardware, si mai ales sa construiesti un sistem de la lipituri si pana la software.

Am intampinat foarte mari probleme la partea hardware, deoarece in datasheet-urile driverelor de motoare si in specificatiile motoarelor erau precizate mai ales tensiunile de functionare, nu si puterile. Faptul ca a trebuit sa efectuez foarte multe teste (baterii in serie, surse de alimentare) a generat costuri foarte mari atat in timp, cat si financiare.

Interfata aplicatiei BlueTerm:

Download

Sursele software si schema electrica: mircea_tanase_download.rar

Sursele se afla in folderul proiect. Sursa principala se numeste lab1.c. Pentru compilare se ruleaza comanda make, iar fisierul care trebuie incarcat pe microcontroller se numeste lab1.hex.

Aplicatia BlueTerm: https://play.google.com/store/apps/details?id=es.pymasde.blueterm&hl=en

Bibliografie/Resurse

1.Laboratoarele de PM: http://cs.curs.pub.ro/wiki/pm

2.Datasheet ATMEGA324: http://cs.curs.pub.ro/wiki/pm/_media/doc8272.pdf

3.WinAVR: https://sourceforge.net/projects/winavr/files/

4.Datasheet driver L298N: https://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.pdf

5.Datasheet bluetooth HC-05: http://www.electronicaestudio.com/docs/istd016A.pdf

6.BlueTerm source code: https://github.com/johnhowe/BlueTerm

*Documentația în format PDF