Table of Contents

Cuier smart pentru măști

Autor

Gherman Maria Irina

Introducere

Descriere generală

Schemă bloc

Funcționalitate

I / O

Plăcuța va primi input de la:

Output-ul va fi transmis prin:

Funcționalitate în mare

Ca funcționalitate generală, utilizatorul își poate înregistra un tag (care se prinde de mască printr-un clips) prin apăsarea unui buton pentru a trece în modul “înregistrare” și o pune în slot-ul din cuier care este afișat pe ecran.

Masca trebuie scanată și când este luată din cuier, și când este depozitată în cuier. Programul va incrementa counter-ul de utilizări doar la ridicare și începe cu 1 by default.

În afară de mesajele ajutătoare, ecranul LCD va afișa tot timpul numărul de utilizări per slot.

Cuierul va avea de asemenea și un buton pentru a șterge o anume mască, pentru a putea refolosi tag-ul.

Hardware Design

Piese necesare

Nume Numar piese
Arduino Uno 1
Ecran LCD 1
Butoane 2
Cititor RFID-RC522 1
Stickere NFC 5
Leduri 7
Rezistori 7
Fire tată-tată -
Fire mamă-tată -
Breadboard 1

Nu știu cât se înțelege din diagramă, deci o să explic un pic conexiunile:

Pini RFID reader Pini Arduino
SDA (SS) 10
SCK 13
MOSI 11
MISO 12
IRQ -
GND GND
RST (reset) -
3.3V 3.3V
Pini LCD Pini Arduino
SDA SDA
SCL SCL
GND GND
Vcc 5V

Butonul de ștergere este conectat la pinul 4, iar cel de scriere la pinul 2.

Cele 5 led-uri pentru sloturile cuierului sunt conectate la A0, A1, A2, A3, 5.

Cele 2 led-uri care indică dacă ne aflăm în modul de scriere/ștergere sunt conectate la pinii 9 respectiv 7.

Software Design

Diagrama de stări

O simplificare a codului ar fi diagrama asta de stări:

Implementare

Ca implementare propriu zisă, am folosit multe structuri de date în care țin informații despre fiecare ID în parte. Am extrem de multe “variabile de stare”, care mă ajută să țin cont de ce s-a întâmplat deja și ce trebuie să se întâmple.

De exemplu, am 2 variabile pentru a ține cont dacă sunt în modul de scriere, ștergere sau citire. Variabilele astea sunt activate de cele 2 butoane, care folosesc întreruperi.

Alte variabilă care m-a ajutat mult ține de LCD. Eu am în loop mereu să se afișeze slot-urile și utilizările. Dacă vreau să afișez un alt mesaj, trebuie să sar peste partea din loop care afișeaza utilizările ca să nu se suprascrie instantaneu mesajul. Variabila se setează desigur când afișez ceva pe LCD și se desetează în 2 moduri:

Rezultate Obţinute

Varianta finală nu arată așa! Cel mai bine se vede în video-ul de mai jos

Aici vedem mesajul de eroare când masca are prea multe utilizări.


Aici se vede cum se aprinde led-ul slot-ului corespunzător și ce se întâmplă când nu mai există sloturi disponibile.


Mesajul de eroare când se scanează un tag invalid.


Când tag-ul scanat nu este în memoria programului se afișează un mesaj de eroare.


Procesul de scriere. De menționat că nu adaugă masca în vreun slot, doar îi scrie ID pe tag.


Procesul de ștergere. Se vede de asemenea că se șterge și din slot-ul unde era pusă (slotul 1 mai exact) Pentru aceste două moduri, mesajul cu instrucțiuni nu dispare până nu se scanează o mască sau se reapasă butonul pentru a anula acțiunea.

Am vrut să includ și un video de tip “pitch”, ca să prezinte ideea proiectului. Varianta proiectului care se vede în video doar arată mai frumos. Funcționalitățile sunt exact ca în gif-uri

Concluzii

Download

Arhiva cu codul, câteva scheme și demo-urile

Jurnal

4 Mai

20 Mai

22 Mai

23 Mai

24 Mai

28 Mai

29 Mai

30 Mai

Bibliografie/Resurse

Export to PDF