Smart piggy bank

Introducere

Proiectul propus reprezintă o inovație în managementul personal al banilor: o pușculiță inteligentă care nu doar că păstrează bancnotele în siguranță, dar le și monitorizează eficient. Dispozitivul este dotat cu un senzor de culoare pentru identificarea bancnotelor și un ecran LCD pentru afișarea sumei totale. Utilizatorii pot accesa fondurile stocate introducând un cod PIN, iar securitatea este garantată prin limitarea încercărilor de acces și un sistem de alarmă eficient în caz de introducere eronată a codului. Această soluție tehnologică oferă un mod sofisticat și automatizat de economisire a banilor, adecvat nevoilor contemporane de securitate și gestionare a finanțelor personale.

Descriere generală

Proiectul pe care îl dezvolt constă într-o pușculiță inteligentă, concepută pentru a oferi o metodă sigură și eficientă de gestionare a banilor fizici. Această inovație folosește tehnologie avansată pentru a monitoriza și a securiza bancnotele introduse de utilizatori. Funcționarea sa începe în momentul în care o bancnotă este introdusă în dispozitiv; un senzor de culoare analizează bancnota și determină valoarea acesteia. Suma detectată este imediat adăugată la totalul acumulat, afișat pe un ecran LCD vizibil.

După identificarea și înregistrarea valorii, bancnota este transferată automat într-o zonă internă de depozitare, securizată și protejată. În același timp, dispozitivul emite un semnal sonor prin intermediul unui buzzer si un semnal vizual prin aprinderea unui LED verde pentru a indica faptul că se poate proceda la introducerea unei noi bancnote, în timp ce pe ecranul LCD apare un mesaj sugestiv referitor la starea actuală a pușculiței.

Securitatea banilor depozitați este asigurată printr-un sistem de acces bazat pe introducerea unui cod PIN, stabilit anterior de utilizator. Pentru extragerea banilor, utilizatorul trebuie să introducă corect codul PIN, ceea ce va declanșa deschiderea compartimentului de depozitare. Acest acces este permis pentru o perioadă limitată de timp, după care sistemul se reînchide automat. În plus, utilizatorul are posibilitatea de a încerca deblocarea pușculiței de până la trei ori. Dacă codul PIN este introdus incorect de trei ori consecutiv, se activează un semnal de alarmă compus din emiterea unui sunet continuu de buzzer și aprinderea unui LED roșu si a celui verde, care indică blocarea temporară a accesului la fonduri.

În final, după un interval prestabilit de timp, buzzer-ul si LED-ul verde se vor activa din nou pentru a notifica utilizatorul că procesul de introducere a bancnotelor poate fi reluat, moment în care pe ecranul LCD suma introdusa anterior si se afișează un mesaj corespunzător. Această pușculiță inteligentă oferă o soluție modernă și sigură pentru economisirea și administrarea eficientă a banilor cash într-un mediu personal sau de afaceri.

Hardware Design

Lista de piese hardware:

  • Placă Arduino Uno
  • Breadboard
  • Display LCD 1602 cu Interfață I2C
  • Buzzer
  • Micro Servomotoare
  • Tastatură Numerică
  • Fire
  • Rezistențe
  • Modul Senzor de Culoare
  • LED-uri
  • 2 Butoane

Stadiul actual al implementarii hardware

In prezent, implementarea hardware a proiectului este aproape finalizata. Toate componentele necesare au fost conectate si sunt functionale, conform specificatiilor initiale(testate separat si impreuna).

Etape urmatoare: pentru a finaliza implementarea hardware, urmatorul pas este proiectarea carcasei (cutiei) seifului. Aceasta va avea rolul de a integra toate piesele hardware si de a le proteja, asigurand totodata un aspect estetic si practic pentru utilizator. Carcasa va fi proiectata astfel incat sa permita accesul ușor la tastatura si ecranul LCD, si sa ofere deschideri adecvate pentru inserarea bancnotelor si accesul la compartimentul de depozitare.

Componentele folosite si rolul lor in proiect

1. Placa de dezvoltare Arduino Uno

Rol: Este creierul proiectului, controland toate celelalte componente si gestionand logica de functionare a sistemului

Pini utilizati:

  1. D0, D1: Pini rezervați pentru comunicația serială.
  2. A0, A1, A2: Pini utilizati pentru randurile tastaturii
  3. A3, D2, D13: Pini utilizati pentru coloanele tastaturii
  4. A3: Pinul si pentru LED-ul rosu
  5. D3: Pinul pentru buzzer.
  6. D3: Pinul si pentru LED-ul verde(buzzer-ul si LED-ul verde oricum functioneaza simultan)
  7. D4: Pinul pentru butonul de start pentru introducerea bancnotelor
  8. D5: Pinul pentru butonul de reset si extragere a banilor
  9. D6: Pinul pentru Servomotor 1
  10. D7: Pinul pentru Servomotor 2
  11. D8, D9, D10, D11, D12: Pini utilizati pentru senzorul de culoare (s0, s1, s2, s3 și out)
  12. A4 (SDA), A5 (SCL): Pini I2C utilizati pentru LCD

2. Senzor de culoare TCS34725

Rol: Detecteaza culorile bancnotelor introduse si trimite datele catre Arduino pentru a determina valoarea acestora

Pini utilizati:

  1. S0: Pinul D8, utilizat pentru scalarea frecventei
  2. S1: Pinul D9, utilizat pentru scalarea frecventei
  3. S2: Pinul D10, utilizat pentru selectarea fotodiodelor
  4. S3: Pinul D11, utilizat pentru selectarea fotodiodelor
  5. OUT: Pinul D12, utilizat pentru iesirea semnalului de la senzor

3. LCD I2C (LiquidCrystal_I2C)

Rol: Afiseaza suma totala acumulata si alte mesaje de stare pentru utilizator

Pini utilizati:

  1. SDA (A4): Linie de date I2C
  2. SCL (A5): Linie de ceas I2C

4. Buzzer

Rol: Emite semnale sonore pentru a indica diferite actiuni si alarme, cum ar fi introducerea unei noi bancnote sau alarme de securitate

Pin utilizat:

  1. BUZZER_PIN (D3): Pinul digital la care este conectat buzzer-ul

5. LED-uri (Roșu si Verde)

Rol: Indicarea vizuala a starii sistemului. LED-ul roșu si verde se aprind in caz de alarma, iar doar LED-ul verde indica funcționarea corecta pentru introducerea bancnotelor

Pini utilizati:

  1. RED_LED_PIN (A3): Pinul analogic pentru LED-ul rosu
  2. GREEN_LED_PIN (D3): Pinul digital pentru LED-ul verde

6. Servo Motoare

Rol: Servo motoarele sunt utilizate pentru a misca bancnotele in zona de depozitare si pentru a permite accesul la bani dupa introducerea corecta a codului PIN

Pini utilizati:

  1. SERVO1_PIN (D6): Pinul digital pentru Servomotor 1
  2. SERVO2_PIN (D7): Pinul digital pentru Servomotor 2

7. Tastatura numerica 3×3

Rol: Permite utilizatorului sa introduca codul PIN pentru a accesa banii depozitati

Pini utilizati:

  1. R1 (A0): Pinul analogic pentru randul 1 al tastaturii
  2. R2 (A1): Pinul analogic pentru randul 2 al tastaturii
  3. R3 (A2): Pinul analogic pentru randul 3 al tastaturii
  4. C1 (A3): Pinul analogic pentru coloana 1 a tastaturii
  5. C2 (D2): Pinul digital pentru coloana 2 a tastaturii
  6. C3 (D13): Pinul digital pentru coloana 3 a tastaturii

8. Butoane 6x6x6

Rol: Permite utilizatorului să inițieze procesul de introducere a bancnotelor și să reseteze sistemul pentru extragerea banilor după introducerea corectă a codului PIN

Pini utilizati:

  1. BUTTON_MONEY_PIN (D4): Pinul digital pentru butonul de start pentru introducerea bancnotelor
  2. BUTTON_RESET_PIN (D5): Pinul digital pentru butonul de reset și extragere a banilor

Asamblarea si functionarea componentelor

Intregul ansamblu hardware

Detectarea culorii, afisarea sa pe display-ul LCD si aprinderea LED-ului corespunzator culorii

Introducerea PIN-ului folosind tastatura

Miscarea servomotoarelor(stiu ca nu se vede dintr-o poza, dar functioneaza)

Schema electrica

Stadiul actual al implementării software

Implementarea software a pușculiței este aproape completă și cuprinde toate funcționalitățile esențiale pentru gestionarea eficientă și sigură a banilor fizici:

1.Citirea culorilor bancnotelor și determinarea valorii acestora: Sistemul folosește senzorul de culoare TCS230 pentru a detecta frecvențele RGB și a identifica valoarea bancnotelor. Intervalele de frecvență au fost calibrate experimental pentru precizie.

2.Actualizarea și afișarea sumei totale pe ecranul LCD: După identificarea valorii bancnotei, suma totală este actualizată și afișată pe un ecran LCD I2C, care arată și mesaje de stare precum „Insert Bill” și „Please Wait”.

3.Utilizarea unui cod PIN pentru accesul la fonduri: Sistemul de acces bazat pe cod PIN permite utilizatorului să extragă banii doar după introducerea corectă a PIN-ului prin intermediul unei tastaturi numerice.

4.Activarea unui sistem de alarmă: Dacă PIN-ul este introdus greșit de trei ori consecutiv, se activează o alarmă sonoră și vizuală (LED-uri roșu și verde). După un timp, sistemul se resetează și permite reluarea introducerii bancnotelor.

5.Manipularea bancnotelor cu servomotoare: Servomotoarele transferă bancnotele în compartimentul de depozitare și permit accesul la fonduri după introducerea corectă a PIN-ului. Sistemul se reînchide automat după o perioadă de timp.

6.Reluarea introducerii bancnotelor după activarea alarmei: După activarea alarmei și expirarea perioadei de blocare, utilizatorul poate continua să introducă bancnote.

7.Verificarea prezenței bancnotelor: Sistemul verifică dacă senzorul detectează efectiv o bancnotă înainte de actualizarea sumei, prevenind erorile de detectare.

8.Continuarea introducerii bancnotelor după resetarea sumei: După accesarea fondurilor și resetarea sumei totale la zero, utilizatorul poate continua să introducă bancnote și să acumuleze economii.

Software Design

Motivația alegerii bibliotecilor folosite în cadrul proiectului

1. Wire.h (Biblioteca I2C)

Rol: Biblioteca Wire.h este utilizată pentru comunicația I2C (Inter-Integrated Circuit)

Aceasta este necesară pentru a controla ecranul LCD cu interfață I2C. Biblioteca oferă funcții simplificate pentru inițializarea comunicației și transmiterea datelor pe magistrala I2C, facilitând interacțiunea cu ecranul LCD și alte componente compatibile I2C.

2. Servo.h (Biblioteca pentru controlul servomotoarelor)

Rol: Biblioteca Servo.h este utilizată pentru a controla servomotoarele

Aceasta permite mișcarea precisă a servomotoarelor pentru manipularea seifului și accesul la compartimentul de depozitare. Biblioteca oferă funcții ușor de utilizat pentru atașarea servomotoarelor la pini și pentru setarea unghiului acestora, ceea ce simplifică semnificativ implementarea controlului servomotoarelor.

3. LiquidCrystal_I2C.h (Biblioteca pentru ecranul LCD I2C)

Rol: Biblioteca LiquidCrystal_I2C.h este utilizată pentru a interacționa cu ecranul LCD cu interfață I2C

Aceasta oferă funcții pentru inițializarea ecranului, scrierea de text și gestionarea cursorului. Biblioteca simplifică gestionarea ecranului LCD, permițând afișarea facilă a sumei totale și a mesajelor pentru utilizator.

4. Keypad.h (Biblioteca pentru tastatura numerică)

Rol: Biblioteca Keypad.h este utilizată pentru a gestiona tastatura numerică

Aceasta oferă funcții pentru detectarea și citirea tastelor apăsate, facilitând introducerea codului PIN de către utilizator. Biblioteca permite maparea simplă a tastelor la pinii de intrare și gestionarea eficientă a interacțiunilor cu tastatura.

5. Adafruit_I2CDevice.h (Biblioteca pentru interfața I2C)

Rol: Biblioteca Adafruit_I2CDevice.h este utilizată pentru a facilita comunicația I2C cu diverse dispozitive

În special cu senzorul de culoare TCS230. Aceasta oferă funcții pentru inițializarea și gestionarea dispozitivelor I2C, simplificând interacțiunea cu senzorul de culoare și asigurând o comunicare fiabilă.

Elemente de noutate

Proiectul meu se remarcă prin integrarea mai multor inovații. Identificarea și cuantificarea automată a bancnotelor este realizată printr-un senzor de culoare, care detectează și determină automat valoarea bancnotelor, eliminând necesitatea intervenției manuale. Securitatea prin cod PIN oferă un nivel de protecție similar cu sistemele bancare. După trei încercări greșite de acces, sistemul activează o alarmă constând într-un semnal sonor continuu și aprinderea LED-urilor roșu și verde. Automatizarea procesului de introducere și extragere a bancnotelor este realizată cu ajutorul servomotoarelor, care transportă bancnotele în compartimentul de depozitare și permit accesul după introducerea corectă a PIN-ului. Afișarea interactivă a informațiilor este realizată printr-un ecran LCD cu interfață I2C, care afișează suma totală acumulată și diverse mesaje pentru utilizator în timp real. Reluarea introducerii bancnotelor după activarea alarmei permite utilizatorului să continue folosirea pușculiței fără resetare manuală complexă, după expirarea perioadei de blocare post-alarmă. Calibrarea personalizată a senzorului de culoare asigură o identificare precisă a valorilor bancnotelor prin intervale experimentale specifice fiecărei bancnote.

Funcționalități din laborator în cadrul proiectului

1. Întreruperi și timer-e Utilizate pentru detectarea apăsării butoanelor și pentru gestionarea duratei de activare a servomotoarelor și resetarea alarmei.

2. Pulse Width Modulation (PWM) Folosite pentru controlul precis al servomotoarelor, asigurând mișcarea exactă a bancnotelor în compartimentul de depozitare.

3. Convertorul Analog-Digital (ADC) Utilizat pentru citirea frecvențelor RGB de la senzorul de culoare, determinând valoarea bancnotelor prin conversia semnalelor analogice în date digitale.

4. Protocolul I2C (Inter-Integrated Circuit) Folosit pentru comunicarea eficientă cu ecranul LCD, asigurând afișarea clară și în timp real a sumei totale și a mesajelor de stare.

Scheletul proiectului, interacțiunea dintre funcționalități și validare

Scheletul Proiectului

Proiectul este structurat în mai multe module care colaborează pentru a asigura funcționarea corectă și eficientă a proiectului. Aceste module includ citirea bancnotelor, actualizarea sumei, securitatea prin cod PIN, sistemul de alarmă și gestionarea servomotoarelor.

1. Declarația și inițializarea componentelor:

  1. Placa de dezvoltare Arduino Uno controlează toate componentele și gestionează logica de funcționare a sistemului
  2. Senzorul de culoare TCS230 detectează culorile bancnotelor
  3. LCD I2C afișează suma totală acumulată și alte mesaje de stare pentru utilizator
  4. Buzzer-ul emite semnale sonore pentru a indica diferite acțiuni și alarme
  5. LED-urile (roșu și verde) indică vizual starea sistemului
  6. Servomotoarele mută bancnotele în zona de depozitare și oferă acces la bani
  7. Tastatura numerică permite introducerea codului PIN pentru accesul la bani

2. Configurarea componentelor in setup:

  1. Inițializarea și setarea servomotoarelor, senzorului de culoare, LCD-ului, buzzer-ului, LED-urilor și butoanelor
  2. Setarea pozițiilor inițiale pentru servomotoare și configurarea pinilor de intrare și ieșire pentru componentele hardware

3. Loop-ul principal:

  1. Verificarea stării alarmei și gestionarea activării/dezactivării acesteia
  2. Gestionarea introducerii codului PIN și verificarea corectitudinii acestuia pentru accesul la fonduri
  3. Monitorizarea stării butoanelor pentru inițierea procesului de scanare a bancnotelor sau resetarea sistemului
  4. Actualizarea servomotoarelor pentru mișcarea bancnotelor și resetarea sistemului după accesarea fondurilor

4. Funcții pentru gestionarea componentelor:

  1. scanBill(): Activează senzorul de culoare pentru a scana bancnota introdusă
  2. resetSystem(): Activează procesul de resetare a sistemului
  3. getColors(): Obțin frecvențele culorilor roșu, verde și albastru ale bancnotei scanate
  4. check_money_type(): Determină tipul bancnotei pe baza frecvențelor culorilor detectate
  5. playTone(int frequency, int duration): Redă un ton la buzzer pentru notificări sonore
  6. activateAlarm(): Activează alarma în cazul introducerii incorecte a PIN-ului de trei ori

5. Verificarea si actualizarea sumei:

  1. Frecvențele culorilor sunt măsurate și comparate cu intervalele predefinite pentru a determina valoarea bancnotei
  2. Suma totală este actualizată și afișată pe LCD, iar bancnota este mutată în zona de depozitare folosind servomotorul

6. Securitate:

  1. Sistemul este protejat de un cod PIN pentru accesul la bani
  2. Dacă PIN-ul este introdus incorect de trei ori consecutiv, sistemul de alarmă se activează, emițând un semnal sonor și aprinzând LED-urile roșu și verde

Interacțiunea Dintre Funcționalități

Citirea Bancnotelor:

  1. Senzorul de Culoare detectează frecvențele RGB ale bancnotelor
  2. Valorile RGB sunt convertite în valoarea bancnotelor și transmise modulului de actualizare a sumei

Actualizarea Sumei:

  1. Modulul LCD afișează suma totală actualizată după fiecare citire a bancnotelor
  2. Dacă nu este detectată nicio bancnotă, suma rămâne neschimbată

Securitate prin Cod PIN:

  1. Utilizatorul introduce un cod PIN prin tastatura numerică pentru a accesa banii
  2. Microcontroller-ul verifică corectitudinea PIN-ului
  3. După trei încercări greșite, se activează sistemul de alarmă

Sistemul de Alarmă:

  1. Buzzer-ul și LED-urile (roșu și verde) indică o alarmă activată
  2. Sistemul intră într-o perioadă de blocare temporară după activarea alarmei

Gestionarea Servomotoarelor:

  1. Servomotoarele sunt utilizate pentru a muta bancnotele în compartimentul de depozitare
  2. După verificarea PIN-ului, servomotoarele permit accesul la bani pentru o perioadă limitată

Validarea Funcționalităților

Citirea Bancnotelor:

  1. Frecvențele RGB au fost calibrate experimental pentru fiecare bancnotă, asigurând detecția precisă
  2. Teste repetate au fost efectuate pentru a verifica acuratețea senzorului de culoare

Actualizarea Sumei:

  1. Suma afișată pe LCD a fost verificată manual prin introducerea și verificarea diferitelor bancnote.
  2. Scenariile de eroare, cum ar fi nedetectarea bancnotelor, au fost testate pentru a asigura stabilitatea sistemului

Securitate prin Cod PIN:

  1. Funcționalitatea de introducere și verificare a PIN-ului a fost testată pentru a se asigura că sistemul acceptă doar coduri corecte
  2. Sistemul de alarmă a fost verificat prin introducerea incorectă a PIN-ului de trei ori

Sistemul de Alarmă:

  1. Activarea și dezactivarea alarmei au fost testate pentru a asigura corectitudinea funcționării
  2. Timpul de blocare post-alarmă a fost verificat pentru a asigura reluarea corectă a funcționalităților

Gestionarea Servomotoarelor:

  1. Servomotoarele au fost testate pentru a verifica mișcările corecte și precise
  2. Interacțiunea dintre servomotoare și restul sistemului a fost verificată prin scenarii de test complexe, asigurând sincronizarea corectă cu celelalte module

Calibrarea senzorului de culoare

Calibrarea senzorului de culoare s-a realizat prin citirea frecvențelor RGB pentru fiecare bancnotă în diverse condiții și poziții pentru a obține citiri exacte și determinarea intervalelor specifice fiecărei valori. Aceste intervale au fost stabilite experimental, prin măsurători repetate și ajustări pentru a asigura acuratețea detectării.

Optimizări realizate

1.Pentru butoane am implementat un debouncing software pentru butoane pentru a preveni activările multiple accidentale.

2.Pentru a obține valori precise și rapide de la senzorul de culoare, am realizat media a 10 citiri pentru stabilizarea valorilor. Acest lucru a fost implementat în funcțiile de citire a frecvențelor RGB. Timpul de așteptare a fost redus pentru a obține un răspuns mai rapid al sistemului, ajustând valorile delay() fără a afecta funcționalitatea, în special în codul de mișcare a servomotoarelor.

3.Gestionarea eficientă a servomotoarelor a fost realizată prin verificarea poziției înainte de mișcare și ajustarea incrementărilor, pentru a asigura precizia și a evita blocajele. În secțiunea de cod care gestionează PIN-ul, am simplificat verificarea acestuia pentru a asigura rapiditate și eficiență. Pentru stabilitatea sistemului, am optimizat utilizarea memoriei prin declarații globale și utilizarea eficientă a bibliotecilor în întregul proiect.

4.Calibrarea frecvențelor RGB a fost esențială pentru acuratețea detectării bancnotelor. Am realizat această calibrare prin ajustarea intervalelor pentru fiecare bancnotă specifică în funcția de verificare a tipului de bancnotă.

Rezultate Obţinute

Proiect finalizat cu succes

Concluzii

Am finalizat proiectul cu succes, integrand toate functionalitatile propuse la inceput pentru o pusculita inteligenta. Utilizarea senzorului de culoare pentru identificarea automata a valorii bancnotelor, combinata cu sistemul de securitate bazat pe cod PIN si alarma, ofera utilizatorilor o solutie eficienta pentru mentinerea economiilor. Interactiunea dintre modulele hardware si software, validate prin numeroase teste, confirma ca toate functionalitatile proiectate merg conform asteptarilor, rezultand intr-un proiect terminat cu succes.

A fost interesant sa lucrez la acest proiect, un proces destul de captivant si provocator, si diferit de alte proiecte anterioare. Mi-am folosit destul de mult imaginatia pentru a proiecta carcasa pusculitei si pentru modul in care am legat piesele (nu prea mi-au ajuns pinii de pe placuta). Mi s-a parut o experienta interesanta din care am invatat ceva nou si care mi-a consolidat cunostintele.

Download

DEMO cu prezentarea tuturor functionalitatilor in arhiva:

proiect_pm_barbusi_darius_final.zip

Bibliografie/Resurse

pm/prj2024/avaduva/darius.barbusi.txt · Last modified: 2024/05/26 21:25 by darius.barbusi
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