Master Vault - Boraciu Ionut-Sorin 335CA

Introducere

Funcționarea proiectului poate fi urmarită pe youtube: https://www.youtube.com/watch?v=uhSNb7-Z3uo

Seiful are urmatoarele caracteristici:

  • Tastatură capacitativă cu 16 butoane(TTP229): Folosită pentru a introduce parola de 5 cifre.
  • Ușă controlată de un servo motor: Ușa este deschisă cand parola este introdusă corect, sau introdusă în mod invers ( securitate).
  • Buton: Generează o întrerupere externă la apăsare, care declanșează afișarea temperaturii pe ecran.
  • Senzor de temperatură: Afișează temperatura din seif.
  • DC Motor: Activează evacuarea aerului din seif după două încercări greșite consecutive de introducere a parolei
  • Buzzer: pentru a imita un sunet de poliție ( sirenă)
  • Senzor de lumină: verifică starea banilor din seif
  • Oled I2C: afișează pe ecran diferite mesaje
  • Led-uri: care afișeaza diferite stări
  • Masuri de securitate: Daca o parolă a fost introdusă greșit de 2 ori, poliția va fi anunțată (2 led-uri albastru și rosu sunt pornite, alături de un buzzer, plus motorul va porni pentru a scoate aerul din seif), dacă parola este introdusă invers ca și la card-uri, poliția va fi anunțată, dar silențios fară buzzer, pentru a nu alerta atacatorul.

Descriere generală

Concepte folosite din laboratoare:

  • I2C: Între Master-ul Arduino și Ecran Oled
  • SPI: Între cele 2 Arduino Uno
  • PWM: Folosite pentru controlul servo-ului și motorului
  • Intreruperi: Întreruperea externă generată de apăsarea butonului ( pentru afișarea temperaturii) + înterupere la slave când primește date prin SPI
  • Timere: semnalele PWM folosesc timere ( pin-ul 3 pentru servo foloseste Timer 2, pin-ul 9 pentru motor foloseste Timer 1), ( problemă: buzzer-ul folosea același timer ca un senzor infraroșu pe care încercam să îl folosesc, a trebuit să folosesc o implementare a funcției tone() fără timere pentru a evita conflictul)

Hardware Design

Schemă electrică realizată în Fusion360:

PCB-ul realizat tot în Fusion360:

Fișierele din fusion360 pot să fie descarcăte din zona de Download

Componente hardware folosite:

  • 2 Arduino Uno R3 conectate prin SPI
  • sensor shield pentru Master, folosit pentru a conecta senzorii din kit
  • Grove 4 pin I2C Oled
  • Grove Button: generează o întrerupere externa pentru a afișa temperatura pe ecran - digital
  • Grove Light Sensor: detectează starea banilor din seif - analogic
  • Modul Senzor de Atingere Capacitiv TTP229: similar cu protocolul I2C, dar este un protocol 2 wire custom
  • Grove Buzzer: foloseste o funcție tone() custom pentru a evita folosirea de timere ( conflicte) - digital
  • 3 LED-uri: afișează diferite stări - digitale
  • SM-S2309S: operează ușa - digital
  • 6/9V brushed DC motor: folosit pentru a scoate aerul din încăpere
  • Tranzistor: folosit pentru a opera motorul de la Arduino
  • Diodă flyback: blochează curentul generat de motorul DC
  • Baterie 9V: folosită pentru a alimenta motorul DC
  • 3 * Rezistente de 220 ohm pentru led-uri

Poză cu implementarea proiectului:

boraciu_breadboard.jpg

Probleme în implementare + soluția pentru ele:

  • Conflict de timere între buzzer și senzor infraroșu
    • Problemă: Funcția tone() folosea același timer ca senzorul infraroșu, cauzând conflicte și comportament imprevizibil.
    • Soluție: Am înlocuit tone() cu o funcție personalizată care generează semnal PWM fără a utiliza timere hardware, eliminând astfel conflictul.
  • Servo afectat de zgomot electric la pornirea motorului
    • Problemă: La pornirea motorului DC alimentat separat (9V), servo-ul efectua o rotație bruscă de ~90°, cauzată de interferență electrică.
    • Soluție: Servo-ul este atașat în cod doar când este utilizat și deatașat imediat după. Deoarece motoarele nu sunt pornite simultan, interferența este evitată complet.
  • Instabilitate în interpretarea semnalului de la telecomanda IR
    • Problemă: Senzorul IR necesită întreruperi precise pentru decodificarea semnalului, însă conflictul cu alte întreruperi hardware ducea la rezultate instabile.
    • Soluție: Am înlocuit senzorul IR și codul de decodificare cu un buton fizic conectat la o întrerupere simplă, care a oferit un control mai fiabil și mai previzibil.

Software Design

Ca mediu de dezvoltare am folosit Arduino IDE

Librarii:

  • Arduino_SensorKit ( pentru senzorii din kit-ul arduino)
  • Arduino_SensorKit_BMP280 ( pentru senzorul de temperatura)
  • TTP229 ( pentru tastatura cu 16 butoane)
  • SPI ( comunicarea intre placute)
  • TimerFreeTone ( https://github.com/anothermist/LIBRARIES/tree/master/TimerFreeTone), am avut interferente cu buzzer-ul si alt senzor pe folosirea aceluiasi timer, asa ca am folosit o implementare a functiei tone(), care NU foloseste timere

Implementare efectiva:

  • Comunicarea SPI, este realizata prin intreruperi pentru slave: SPCR = (1 « SPE) | (1 « SPIE) ( pentru a activa interuperea generata de SPI)
  • Apoi, pe Master, am folosit si intreruperi create prin functia attachInterrupt(digitalPinToInterrupt(BUTTON), IR_ISR, FALLING), pentru butonul care o data apasat seteaza un flag, pentru a afisa pe ecran si temperatura
  • De mentionat, incercam sa folosesc in loc de buton, un senzor de infrarosu controlat de o telecomanda. Dar, imi doream sa procesez butonul pe care apas in ISR, ceea ce complica lucrurile, intrucat functia de procesare are intreruperi in spate. Chiar si dupa ce am activat sei(), avem toate flag-urile volatile, tot avea un comportament prea instabil. Asa ca l-am inlocuit cu un buton.
  • Un mic bug, in functia detectSteal, cand decrementam un flag, folosit pentru a stii daca banii au fost luati din seif cand usa era inchisa: initial asa decrementam *check–, ceea ce nu scadea cu 1 valoarea variabilei, ci schimba pointer-ul. ( am modificat la (*check)–, si a mers)

Concluzii

Am realizat implementarea unui seif, cu cateva masuri de securitate:

  • Scrierea parolei in ordine inversa va alerta politia, silentios
  • Scrierea parolei de 2 ori gresita va alerta politia, si scoate aerul din incapere
  • Monitorizarea statusului banilor din seif cu un senzor de lumina

Download

Fișiere fusion360 ( schema electrică + PCB): boraciu_fusion360.zip

Cod sursa: cod_sursa_boraciu.zip

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/fstancu/ionut_sorin.boraciu.txt · Last modified: 2025/05/25 19:55 by ionut_sorin.boraciu
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