This shows you the differences between two versions of the page.
|
pm:prj2026:mihnea.dinica:ovidiu.calina [2026/05/05 18:16] ovidiu.calina created |
pm:prj2026:mihnea.dinica:ovidiu.calina [2026/05/05 18:23] (current) ovidiu.calina |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | Proiectul constă într-un seif electronic controlat printr-o tastatură | + | Proiectul constă într-un seif electronic controlat printr-o tastatură matriceală 4x4, care permite deblocarea unui mecanism de zăvorâre (servomotor SG90) doar la introducerea codului PIN corect. |
| - | matriceală 4x4, care permite deblocarea unui mecanism de zăvorâre | + | |
| - | (servomotor SG90) doar la introducerea codului PIN corect. | + | |
| - | * **Ce face:** Utilizatorul introduce un cod PIN de 4 cifre pe tastatura | + | Utilizatorul introduce un cod PIN de 4 cifre pe tastatura matriceală. Dacă codul este corect, servomotorul deblochează ușa seifului, LCD-ul afișează "Acces permis" și LED-ul RGB devine verde. La cod greșit, buzzer-ul emite un semnal sonor iar LED-ul devine roșu. După 3 încercări greșite consecutive, sistemul intră în blocare temporară de 30 de secunde. Un senzor LDR montat în interiorul seifului detectează deschiderea forțată a ușii și declanșează o alarmă sonoră continuă. |
| - | matriceală. Dacă codul este corect, servomotorul deblochează ușa seifului, | + | |
| - | LCD-ul afișează "Acces permis" și LED-ul RGB devine verde. La cod greșit, | + | |
| - | buzzer-ul emite un semnal sonor, LCD-ul afișează "Cod incorect" și LED-ul | + | |
| - | devine roșu. După 3 încercări greșite consecutive, sistemul intră în | + | |
| - | blocare temporară de 30 secunde. Un senzor LDR montat în interiorul | + | |
| - | seifului detectează deschiderea forțată a ușii fără cod și declanșează | + | |
| - | o alarmă sonoră continuă. | + | |
| - | * **Scopul:** Realizarea unui sistem de securitate simplu, funcțional și | + | Scopul proiectului este realizarea unui sistem de securitate simplu și funcțional construit în jurul microcontrolerului ATmega328P Xplained Mini, care să demonstreze integrarea perifericelor GPIO, PWM, ADC și I2C într-un sistem embedded real. |
| - | ieftin, construit în jurul microcontrolerului ATmega328P Xplained Mini. | + | |
| - | + | ||
| - | * **Ideea de pornire:** Proiectele similare de tip seif există, însă | + | |
| - | niciuna nu combina mecanismul de blocare cu un senzor de lumină | + | |
| - | anti-efracție pe ATmega328P Xplained Mini. Adăugarea LDR-ului oferă | + | |
| - | un nivel suplimentar de securitate față de proiectele anterioare. | + | |
| - | + | ||
| - | * **Utilitate:** Proiectul demonstrează integrarea mai multor periferice | + | |
| - | hardware (GPIO, PWM, ADC, I2C) într-un sistem embedded real, util | + | |
| - | atât ca proiect educațional cât și ca prototip funcțional. | + | |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| - | Schema bloc a proiectului: | + | Sistemul este compus din următoarele module hardware, toate coordonate de microcontrolerul ATmega328P Xplained Mini: |
| - | +------------------+ +-------------------+ | + | ^ Modul ^ Rol ^ Interfață ^ |
| - | | Tastatură 4x4 |------>| |-----> LCD 1602 (I2C) | + | | Tastatură 4x4 | Input cod PIN | GPIO | |
| - | +------------------+ | ATmega328P |-----> Servomotor SG90 | + | | LCD 1602 | Afișare mesaje | I2C | |
| - | | Xplained Mini |-----> LED RGB | + | | Servomotor SG90 | Mecanism blocare ușă | PWM | |
| - | +------------------+ | |-----> Buzzer pasiv | + | | Senzor LDR | Detecție efracție | ADC | |
| - | | Senzor LDR |------>| | | + | | Buzzer pasiv | Feedback audio | PWM | |
| - | +------------------+ +-------------------+ | + | | LED RGB | Indicator vizual status | GPIO/PWM | |
| - | **Module hardware:** | + | Fluxul de funcționare al sistemului este următorul: utilizatorul introduce cifre pe tastatură, ATmega procesează input-ul prin întreruperi, compară codul cu cel stocat în EEPROM, comandă servomotorul prin PWM și afișează rezultatul pe LCD prin I2C. LDR-ul monitorizează continuu lumina prin ADC și poate declanșa alarma independent de starea codului. |
| - | * **Tastatură 4x4** — input utilizator pentru introducerea codului PIN. | + | |
| - | Conectată pe 8 pini GPIO ai ATmega328P (4 rânduri + 4 coloane), | + | |
| - | citită prin scanare matriceală. | + | |
| - | * **LCD 1602 + modul I2C** — afișează starea sistemului (introducere cod, | + | |
| - | acces permis/refuzat, alarmă). Comunicație I2C (SDA/SCL). | + | |
| - | * **Servomotor SG90** — controlează mecanismul fizic de blocare al ușii | + | |
| - | seifului. Poziție 0° = blocat, poziție 90° = deblocat. Controlat | + | |
| - | prin semnal PWM. | + | |
| - | * **Senzor LDR** — detectează variația de lumină în interiorul seifului | + | |
| - | (ușă deschisă forțat). Citit prin ADC. | + | |
| - | * **Buzzer pasiv** — feedback audio: bip scurt la tastă apăsată, bip | + | |
| - | lung la cod greșit, ton continuu la alarmă. Controlat prin PWM. | + | |
| - | * **LED RGB** — indicator vizual: verde = deblocat, roșu = cod greșit | + | |
| - | sau alarmă. Controlat prin GPIO/PWM. | + | |
| - | + | ||
| - | **Interacțiunea modulelor:** | + | |
| - | Utilizatorul introduce cifre pe tastatură → ATmega procesează input-ul | + | |
| - | prin întreruperi → compară codul cu cel stocat în EEPROM → comandă | + | |
| - | servomotorul prin PWM și afișează rezultatul pe LCD prin I2C → LDR | + | |
| - | monitorizează continuu lumina prin ADC și poate declanșa alarma | + | |
| - | independent de starea codului. | + | |
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | **Listă de piese:** | + | ==== Listă de piese ==== |
| - | * ATmega328P Xplained Mini (placă de dezvoltare) | + | |
| - | * Tastatură matriceală 4x4 (membrană) | + | |
| - | * Display LCD1602 HD44780 | + | |
| - | * Modul interfață I2C/IIC pentru LCD1602 | + | |
| - | * Servomotor SG90 180 grade | + | |
| - | * Modul senzor LDR (fotorezistor) | + | |
| - | * Modul buzzer pasiv KY-006 | + | |
| - | * Modul LED RGB 3 culori | + | |
| - | * Breadboard 830 puncte MB-102 | + | |
| - | * Set rezistoare 20 valori 400 bucăți | + | |
| - | * Fire Dupont tată-mamă 20cm (x40) | + | |
| - | * Fire Dupont tată-tată 30cm (x40) | + | |
| - | * Cutie lemn (carcasă seif) | + | |
| - | **Conexiuni principale:** | + | ^ Componentă ^ Cantitate ^ |
| - | * Tastatură 4x4 → PB0-PB3 (rânduri), PD4-PD7 (coloane) | + | | ATmega328P Xplained Mini | 1 | |
| - | * LCD I2C → SDA (PC4), SCL (PC5) | + | | Tastatură matriceală 4x4 (membrană) | 1 | |
| - | * Servo SG90 → PB1 (OC1A, Timer1 PWM) | + | | Display LCD1602 HD44780 | 1 | |
| - | * LDR → PC0 (ADC0) | + | | Modul interfață I2C pentru LCD1602 | 1 | |
| - | * Buzzer → PB2 (OC1B, Timer1 PWM) | + | | Servomotor SG90 180 grade | 1 | |
| - | * LED RGB → PD3 (roșu), PD5 (verde), PD6 (albastru) — cu rezistențe | + | | Modul senzor LDR (fotorezistor) | 1 | |
| - | 220Ω în serie | + | | Modul buzzer pasiv KY-006 | 1 | |
| + | | Modul LED RGB 3 culori | 1 | | ||
| + | | Breadboard 830 puncte MB-102 | 1 | | ||
| + | | Set rezistoare 20 valori 400 bucăți | 1 | | ||
| + | | Fire Dupont tată-mamă 20cm (x40) | 1 | | ||
| + | | Fire Dupont tată-tată 30cm (x40) | 1 | | ||
| + | | Cutie lemn (carcasă seif) | 1 | | ||
| + | |||
| + | ==== Conexiuni principale ==== | ||
| + | |||
| + | ^ Componentă ^ Pini ATmega328P ^ | ||
| + | | Tastatură 4x4 (rânduri) | PB0, PB1, PB2, PB3 | | ||
| + | | Tastatură 4x4 (coloane) | PD4, PD5, PD6, PD7 | | ||
| + | | LCD I2C (SDA) | PC4 | | ||
| + | | LCD I2C (SCL) | PC5 | | ||
| + | | Servo SG90 | PB1 (OC1A, Timer1 PWM) | | ||
| + | | LDR | PC0 (ADC0) | | ||
| + | | Buzzer | PB2 (OC1B, Timer1 PWM) | | ||
| + | | LED RGB roșu | PD3 + rezistență 220Ω | | ||
| + | | LED RGB verde | PD5 + rezistență 220Ω | | ||
| + | | LED RGB albastru | PD6 + rezistență 220Ω | | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | **Mediu de dezvoltare:** | + | ==== Mediu de dezvoltare ==== |
| - | * Microchip Studio (fost AVR Studio) — IDE principal | + | |
| - | * AVR-GCC — compilator C | + | |
| - | * AVRDUDE — programare prin USB (mEDBG integrat pe Xplained Mini) | + | |
| - | **Librării utilizate:** | + | ^ Tool ^ Utilizare ^ |
| - | * LiquidCrystal_I2C (portată pentru AVR) — comunicație cu LCD prin I2C | + | | Microchip Studio | IDE principal | |
| - | * Librărie proprie pentru scanare tastatură matriceală | + | | AVR-GCC | Compilator C | |
| - | * avr/io.h, avr/interrupt.h, avr/eeprom.h, util/delay.h — librării | + | | AVRDUDE | Programare prin USB (mEDBG) | |
| - | standard AVR | + | |
| - | **Algoritmi și structuri planificate:** | + | ==== Librării utilizate ==== |
| - | 1. **Scanare tastatură (Lab 0 — GPIO + Lab 2 — Întreruperi)** | + | ^ Librărie ^ Scop ^ |
| - | - Rândurile tastaturii pe pini OUTPUT, coloanele pe INPUT_PULLUP | + | | LiquidCrystal_I2C (AVR) | Comunicație LCD prin I2C | |
| - | - Timer2 configurat să declanșeze întrerupere la fiecare 10ms | + | | avr/io.h | Registre I/O | |
| - | pentru debounce și scanare matriceală | + | | avr/interrupt.h | Gestionare întreruperi | |
| - | - La detecție tastă: adaugă cifra în buffer cod curent | + | | avr/eeprom.h | Stocare cod PIN persistent | |
| + | | util/delay.h | Delay-uri software | | ||
| - | 2. **Verificare cod PIN (EEPROM)** | + | ==== Algoritmi implementați ==== |
| - | - Codul PIN stocat în EEPROM (persistent între resetări) | + | |
| - | - Comparare buffer introdus vs. cod stocat | + | |
| - | - Contor încercări greșite — blocare 30s după 3 eșecuri | + | |
| - | - Posibilitate schimbare cod prin secvență specială (#) | + | |
| - | 3. **Control servomotor (Lab 3 — Timer/PWM)** | + | **Scanare tastatură — Lab 0 (GPIO) + Lab 2 (Întreruperi)** |
| - | - Timer1 în modul Fast PWM, frecvență 50Hz (perioada 20ms) | + | |
| - | - Deblocat: ICR = 1500μs (poziție 90°) | + | |
| - | - Blocat: ICR = 500μs (poziție 0°) | + | |
| - | 4. **Buzzer (Lab 3 — Timer/PWM)** | + | Timer2 declanșează o întrerupere la fiecare 10ms pentru scanarea matriceală și debounce. Rândurile sunt configurate ca OUTPUT, coloanele ca INPUT_PULLUP. La detecția unei taste, cifra este adăugată în buffer-ul codului curent. |
| - | - Ton la apăsare tastă: 1kHz, 50ms | + | |
| - | - Ton cod greșit: 500Hz, 500ms | + | |
| - | - Alarmă: 2kHz continuu | + | |
| - | 5. **Senzor LDR — anti-efracție (Lab 4 — ADC)** | + | **Verificare cod PIN — EEPROM** |
| - | - ADC în modul Free Running, referință AVcc | + | |
| - | - Prag calibrat la pornire (lumina din interior când ușa e închisă) | + | |
| - | - Dacă valoare ADC depășește pragul + offset → declanșare alarmă | + | |
| - | - Verificare la fiecare 100ms prin flag setat de Timer2 | + | |
| - | 6. **Afișaj LCD (Lab 6 — I2C)** | + | Codul PIN este stocat persistent în EEPROM. La fiecare introducere, buffer-ul este comparat cu codul stocat. După 3 încercări greșite consecutive sistemul se blochează 30 de secunde. Codul poate fi schimbat printr-o secvență specială cu tasta #. |
| - | - Mesaje: "Introduceti PIN:", "Acces permis!", "Cod incorect!", | + | |
| - | "ALARMA ACTIVA!", "Blocat 30s..." | + | |
| - | - Afișare număr asteriscuri (*) per cifră introdusă | + | |
| - | 7. **LED RGB (Lab 0 — GPIO)** | + | **Control servomotor — Lab 3 (Timer/PWM)** |
| - | - Verde: cod corect / ușă deblocată | + | |
| - | - Roșu: cod greșit / alarmă | + | Timer1 este configurat în modul Fast PWM la frecvența de 50Hz (perioadă 20ms). Poziția deblocat corespunde unui puls de 1500μs (90°), iar poziția blocat unui puls de 500μs (0°). |
| - | - Clipire roșu: blocare temporară | + | |
| + | **Buzzer — Lab 3 (Timer/PWM)** | ||
| + | |||
| + | Ton scurt de 1kHz la apăsarea unei taste, ton de 500Hz timp de 500ms la cod greșit, ton continuu de 2kHz la declanșarea alarmei. | ||
| + | |||
| + | **Senzor LDR anti-efracție — Lab 4 (ADC)** | ||
| + | |||
| + | ADC configurat în modul Free Running cu referință AVcc. La pornire se calibrează pragul de lumină cu ușa închisă. Dacă valoarea ADC depășește pragul cu un offset predefinit, alarma este declanșată. Verificarea se face la fiecare 100ms printr-un flag setat de Timer2. | ||
| + | |||
| + | **Afișaj LCD — Lab 6 (I2C)** | ||
| + | |||
| + | Mesajele afișate sunt: "Introduceti PIN:", "Acces permis!", "Cod incorect!", "ALARMA ACTIVA!" și "Blocat 30s...". Cifrele introduse sunt mascate cu asteriscuri (*). | ||
| + | |||
| + | **LED RGB — Lab 0 (GPIO)** | ||
| + | |||
| + | Verde la cod corect și ușă deblocată, roșu la cod greșit sau alarmă, clipire roșu la blocare temporară. | ||
| ===== Rezultate Obținute ===== | ===== Rezultate Obținute ===== | ||
| - | // De completat după finalizarea proiectului. | + | De completat după finalizarea proiectului. |
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | // De completat după finalizarea proiectului. | + | De completat după finalizarea proiectului. |
| ===== Download ===== | ===== Download ===== | ||
| - | // Arhiva cu sursele .c/.h, schema electrică și README se va încărca | + | Arhiva cu sursele .c/.h, schema electrică și fișierul README se va încărca după finalizarea proiectului. |
| - | // după finalizare. | + | |
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| - | * **Săptămâna 1:** Achiziție componente, testare individuală (LCD, | + | ^ Săptămâna ^ Activitate ^ |
| - | tastatură, servo) | + | | Săptămâna 1 | Achiziție componente, testare individuală (LCD, tastatură, servo) | |
| - | * **Săptămâna 2:** Implementare scanare tastatură + verificare PIN + | + | | Săptămâna 2 | Implementare scanare tastatură + verificare PIN + control servo | |
| - | control servo | + | | Săptămâna 3 | Integrare LDR (anti-efracție) + buzzer + LED RGB | |
| - | * **Săptămâna 3:** Integrare LDR (anti-efracție) + buzzer + LED RGB | + | | Săptămâna 4 | Montare în carcasă, teste finale, documentație | |
| - | * **Săptămâna 4:** Montare în carcasă, teste finale, documentație | + | |
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | **Resurse Hardware:** | + | ==== Resurse Hardware ==== |
| - | * ATmega328P Datasheet — https://www.microchip.com/en-us/product/atmega328p | + | |
| - | * ATmega328P Xplained Mini User Guide — https://www.microchip.com | + | ^ Componentă ^ Link ^ |
| - | * SG90 Servo Datasheet — http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf | + | | ATmega328P Datasheet | https://www.microchip.com/en-us/product/atmega328p | |
| - | * LDR Datasheet — GL5528 | + | | ATmega328P Xplained Mini User Guide | https://www.microchip.com | |
| + | | SG90 Servo Datasheet | http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf | | ||
| + | | LDR Datasheet GL5528 | https://www.datasheethub.com/gl5528-datasheet/ | | ||
| + | |||
| + | ==== Resurse Software ==== | ||
| - | **Resurse Software:** | + | ^ Resursă ^ Link ^ |
| - | * Laboratoare PM OCW — https://ocw.cs.pub.ro/courses/pm | + | | Laboratoare PM OCW | https://ocw.cs.pub.ro/courses/pm | |
| - | * AVR-GCC Documentation — https://gcc.gnu.org/wiki/avr-gcc | + | | AVR-GCC Documentation | https://gcc.gnu.org/wiki/avr-gcc | |
| - | * LiquidCrystal I2C AVR — https://github.com/marcoschwartz/LiquidCrystal_I2C | + | | LiquidCrystal I2C AVR | https://github.com/marcoschwartz/LiquidCrystal_I2C | |
| - | * Room of Inspiration PM — https://ocw.cs.pub.ro/courses/pm/roomofinspiration | + | | Room of Inspiration PM | https://ocw.cs.pub.ro/courses/pm/roomofinspiration | |