This shows you the differences between two versions of the page.
pm:prj2025:fstancu:ionut_sorin.boraciu [2025/05/18 16:44] ionut_sorin.boraciu [Hardware Design] |
pm:prj2025:fstancu:ionut_sorin.boraciu [2025/05/25 19:55] (current) ionut_sorin.boraciu [Software Design] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Master Vault Boraciu Ionut-Sorin 335CA====== | + | ====== Master Vault - Boraciu Ionut-Sorin 335CA====== |
===== Introducere ===== | ===== Introducere ===== | ||
<note warning> | <note warning> | ||
Line 5: | Line 5: | ||
</note> | </note> | ||
- | <note tip> | ||
Seiful are urmatoarele caracteristici: | Seiful are urmatoarele caracteristici: | ||
Line 18: | Line 17: | ||
* **Led-uri: ** care afișeaza diferite stări | * **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. | * **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. | ||
- | </note> | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
{{/pm/prj2025/fstancu/boraciu_master_vault.png?400}} | {{/pm/prj2025/fstancu/boraciu_master_vault.png?400}} | ||
- | <note tip> | + | |
Concepte folosite din laboratoare: | Concepte folosite din laboratoare: | ||
Line 30: | Line 28: | ||
* **Intreruperi**: Întreruperea externă generată de apăsarea butonului ( pentru afișarea temperaturii) + înterupere la slave când primește date prin SPI | * **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) | * **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) | ||
- | </note> | + | |
Line 89: | Line 87: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Ca mediu de dezvoltare am folosit Arduino IDE | ||
- | <note tip> | + | Librarii: |
- | Descrierea codului aplicaţiei (firmware): | + | * Arduino_SensorKit ( pentru senzorii din kit-ul arduino) |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Arduino_SensorKit_BMP280 ( pentru senzorul de temperatura) |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * TTP229 ( pentru tastatura cu 16 butoane) |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * SPI ( comunicarea intre placute) |
- | * (etapa 3) surse şi funcţii implementate | + | * 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 |
- | </note> | + | |
+ | 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) | ||
- | ===== Rezultate Obţinute ===== | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
===== Concluzii ===== | ===== 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 ===== | ===== Download ===== | ||
Fișiere fusion360 ( schema electrică + PCB): {{pm:prj2025:fstancu:boraciu_fusion360.zip}} | Fișiere fusion360 ( schema electrică + PCB): {{pm:prj2025:fstancu:boraciu_fusion360.zip}} | ||
+ | Cod sursa: {{pm::prj2025:fstancu:cod_sursa_boraciu.zip}} | ||
- | ===== Jurnal ===== | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |