This is an old revision of the document!
Autor: Emilian Horduna
Grupa: 332CD
Am realizat un seif electronic care se deschide prin introducerea unui cod PIN. În plus, am integrat un sistem de închidere automată, care blochează ușa seifului la 5 secunde după ce a fost închisă, pentru un plus de siguranță.
Scopul acestui proiect este să creez un design eficient și practic pentru a-mi păstra obiectele importante în siguranță. M-am gândit la un sistem care să fie ușor de folosit, dar și suficient de sigur pentru a preveni accesul neautorizat.
Inițial, pornisem de la ideea de a construi doar un mecanism inteligent de blocare a unei uși, dar pe parcurs m-am decis să dezvolt ceva mai complet și mai util – așa a apărut ideea acestui seif electronic.
Proiectul constă în realizarea unui seif electronic inteligent controlat de o placă Arduino UNO R3. Seiful oferă o metodă de autentificare pentru deschidere: introducerea unui cod PIN printr-o tastatură matricială (keypad).
După ce ușa seifului este închisă, sistemul va aștepta automat 5 secunde, iar apoi va activa un servomotor care acționează un zăvor mecanic, blocând ușa. Acest mecanism previne uitarea ușii deschise și oferă un plus de securitate.
Pe parcursul utilizării, utilizatorul este asistat de un ecran LCD 1602, care afișează informații relevante precum: introducerea codului, starea de acces, erori sau confirmări. Codul PIN tastat va fi afișat parțial sau complet, în funcție de logica de securitate aleasă.
Pentru a indica starea seifului, sistemul utilizează două LED-uri:
- LED verde – indică faptul că seiful este deblocat;
- LED roșu – indică faptul că seiful este blocat.
În plus, un buzzer piezoelectric emite sunete diferite pentru a semnala:
- introducerea unui cod corect;
- introducerea unui cod greșit;
- blocarea automată a ușii.
Actor → Keypad 4×4 → Arduino UNO R3: Utilizatorul introduce un cod PIN folosind tastatura matricială 4×4. Tastatura este conectată la 8 pini digitali ai plăcii Arduino și transmite caracterele tastate către microcontroler pentru validare.
Arduino UNO R3 → LCD 1602: Pe ecranul LCD sunt afișate mesaje precum „Introduceți codul”, „Acces permis” sau „Cod greșit”. LCD-ul este conectat prin interfața I2C la pinii A4 (SDA) și A5 (SCL).
Arduino UNO R3 → Buzzer pasiv: Buzzerul pasiv este utilizat pentru a oferi feedback sonor (sunet scurt pentru cod corect, ton de eroare pentru cod greșit etc.). Este comandat prin semnal generat cu funcția tone() și conectat pe un pin digital (D10).
Arduino UNO R3 → LED roșu + LED verde: Cele două LED-uri indică starea sistemului: LED-ul roșu este aprins când seiful este blocat, iar LED-ul verde când este deblocat. Ambele LED-uri sunt conectate pe pini digitali și sunt comandați prin semnal simplu GPIO.
Arduino UNO R3 → Servomotor → Zăvor ușă: Servomotorul SG90 este folosit pentru acționarea mecanică a zăvorului ușii seifului. În urma unui cod corect, Arduino trimite un semnal PWM pe pinul D11 către servomotor, care deblochează mecanismul. După 5 secunde, un timer software (implementat prin millis()) declanșează automat reînchiderea ușii prin rotirea servo-ului în poziția de blocare.
Bill Of Materials:
Nr. crt. | Componentă | Tip de semnal / protocol | Pini Arduino folosiți |
---|---|---|---|
1 | Arduino UNO R3 ATmega328P | GPIO, PWM, I2C | — |
2 | LCD 1602 + Modul I2C | I2C | A4 (SDA), A5 (SCL) |
3 | Tastatură matricială 4×4 | GPIO (Digital Input) | D2, D3, D4, D5, A0, A1, A2, A3 |
4 | Buzzer piezoelectric pasiv | PWM audio / Timere | D10 |
5 | Servomotor SG90 | PWM (semnal control servo) | D11 |
6 | LED roșu | GPIO (Digital Output) | D13 |
7 | LED verde | GPIO (Digital Output) | D12 |
Mediul de dezvoltare utilizat pentru implementarea firmware-ului a fost Arduino IDE, cu suport pentru platforma AVR-GCC, țintind microcontrolerul ATmega328P de pe placa Arduino UNO R3. În cadrul proiectului, s-a optat pentru o implementare low-level a protocoalelor, pentru o înțelegere mai profundă a funcționării hardware-ului.
Platformă | Detalii |
IDE | Arduino IDE |
Microcontroler | ATmega328P (pe placa Arduino UNO R3) |
Compilator | AVR-GCC (implicit prin Arduino Toolchain) |
Programare | În limbaj C/C++ cu acces direct la registre |
Biblioteci | Fără librării externe (implementare manuală a I2C, PWM, GPIO, Timere) |
Elemente software implementate până în acest moment:
• Control tastatură matricială 4×4 (scanare + debouncing software)
• Verificare PIN + contor de greșeli
• Blocare automată a seifului după 10 secunde de la deschidere (millis() – non-blocking)
• Servomotor acționat manual pentru deschiderea/zăvorârea ușii
• LED-uri pentru semnalizare vizuală (GPIO)
• Buzzer cu secvențe sonore diferite pentru stări (corect, greșit, autodistrugere)
• Afișare mesaje pe LCD I2C controlat prin TWI
Element de noutate:
• Cod scris fără librării externe – totul este controlat direct prin registrul microcontrolerului.
• Interfața I2C cu LCD este complet low-level, fără utilizarea Wire.h.
• PWM-ul pentru servo este controlat prin generare manuală de semnal, fără Servo.h.
Corelare cu laboratoare:
• Lab 0 – GPIO: tastatură, LED-uri
• Lab 3 – PWM & Timere: servo și buzzer
• Lab 6 – I2C: comunicare cu LCD (fără librării)
Structura proiectului:
- Tastatura permite introducerea PIN-ului
- LCD-ul afișează statusul și mesajele
- Dacă PIN-ul este corect, servomotorul deblochează ușa, se aprinde LED-ul verde și se aude un semnal sonor pozitiv
- După 10 secunde, sistemul se blochează automat, revine LED-ul roșu
- 3 greșeli la rând declanșează o secvență animată de autodistrugere (LCD + buzzer + LED blinking)
- Interacțiunea între module se face exclusiv prin GPIO, PWM, I2C – toate gestionate software fără delay-uri blocante
Validare:
• Sistemul a fost testat funcțional complet – introducerea codului, feedback vizual și sonor, blocare automată, secvență de eroare.
• Toate funcționalitățile rulează sincron, fără interferențe sau erori.
Calibrare:
• Servomotorul a fost calibrat manual pentru unghiurile de blocare (1500µs = blocat, 600µs = deblocat), verificat fizic pe prototip.
• Debouncing-ul tastaturii a fost testat empiric și ajustat prin delay de 50ms.
• Durata semnalelor PWM și I2C a fost reglată pentru a asigura funcționarea corectă pe toate componentele.
Optimizări:
• Toate întârzierile blocante au fost înlocuite cu temporizări bazate pe millis()
• LCD-ul nu este actualizat permanent – doar când e nevoie, pentru a evita flicker
• Servomotorul este controlat doar în momentul schimbării stării, nu continuu
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.