This shows you the differences between two versions of the page.
pm:prj2024:cpatru:david_matache [2024/05/26 11:30] david.matache [Descriere generală] |
pm:prj2024:cpatru:david_matache [2024/05/26 12:17] (current) david.matache [Download] |
||
---|---|---|---|
Line 9: | Line 9: | ||
</note> | </note> | ||
- | Proiectul va fi compus dintr-un radio dotat cu o antena, doua butoane de schimbat frecventa, un potentiometru pentru schimbarea volumului, un ecran LCD pentru afisarea frecventei/orei, doua butoane de setat alarma si schimbat ora alarmei, un difuzor si un buton de on/off. | + | Proiectul va fi compus dintr-un radio dotat cu o antena, doua butoane de schimbat frecventa, un potentiometru pentru schimbarea volumului, un ecran LCD pentru afisarea frecventei/orei, doua butoane de setat alarma si schimbat timpul alarmei, un difuzor si un buton de on/off. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 47: | Line 47: | ||
* 4 x Butoane | * 4 x Butoane | ||
- | 2 Butoane sunt folosite pentru a controla frecventa iar celelate 2 sunt folosite pentru a controla ceasul cu alarma | + | 2 Butoane sunt folosite pentru a controla frecventa iar celelate 2 sunt folosite pentru a controla alarma |
* 2 x Boxa 40mm 3W | * 2 x Boxa 40mm 3W | ||
Line 94: | Line 94: | ||
Schema electrica: | Schema electrica: | ||
- | {{:pm:prj2024:cpatru:schematic_radio2_2024-05-19.png?800|}} | + | {{:pm:prj2024:cpatru:schematic_radio2_2024-05-26.png?800|}} |
+ | |||
+ | Radio-ul cu alarma in functiune: | ||
+ | |||
+ | {{:pm:prj2024:cpatru:radioalarmimage.jpg?800|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | ===== Motivatia alegerii bibliotecilor folosite in cadrul proiectului ===== | ||
- | <note tip> | + | Pentru acest proiect, au fost utilizate mai multe biblioteci pentru a facilita comunicarea si interactiunea cu diferite componente hardware. Acestea includ: |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | 1. **Adafruit_GFX si Adafruit_SSD1306:** Aceste biblioteci sunt utilizate pentru a controla afisajul OLED. Biblioteca Adafruit_GFX ofera functii grafice de baza, cum ar fi desenarea de forme si text, in timp ce Adafruit_SSD1306 permite controlul specific al afisajului OLED SSD1306. Am ales aceste biblioteci datorita compatibilitatii lor excelente si a documentatiei detaliate, care faciliteaza implementarea rapida si eficienta a functionalitatilor de afisare. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | 2. **Wire:** Biblioteca Wire este utilizata pentru comunicarea I2C. Este necesara pentru interactiunea cu modulul TEA5767 (radio FM) si afisajul OLED. Aceasta simplifica foarte mult procesul de initializare si comunicare cu dispozitivele I2C. |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | 3. **Tone:** Aceasta biblioteca este folosita pentru a controla un buzzer piezo. Permite generarea de tonuri audio, care sunt utilizate pentru notificari sonore in proiect. Am ales aceasta biblioteca datorita usurintei sale de utilizare si a flexibilitatii in generarea diferitelor frecvente sonore. |
+ | |||
+ | |||
+ | |||
+ | ===== Evidentierea elementului de noutate al proiectului ===== | ||
+ | |||
+ | Elementul de noutate al acestui proiect consta in integrarea unui sistem de alarma cu functionalitati de radio FM si afisaj OLED, toate controlate printr-un set simplu de butoane. Proiectul combina mai multe functionalitati independente intr-un singur dispozitiv compact: | ||
+ | |||
+ | - Controlul frecventei radio FM. | ||
+ | - Setarea si afisarea unui cronometru care declanseaza o alarma sonora si vizuala la expirare. | ||
+ | - Utilizarea unui afisaj OLED pentru a furniza feedback vizual utilizatorului. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Justificarea utilizarii functionalitatilor din laborator in cadrul proiectului ===== | ||
+ | |||
+ | **Laboratorul 0: GPIO** | ||
+ | - **Justificare:** Proiectul utilizeaza pinii GPIO pentru a citi starea butoanelor de control (crestere/scadere frecventa si setare cronometru). | ||
+ | |||
+ | **Laboratorul 1: UART** | ||
+ | - **Justificare:** Comunicarea seriala UART este utilizata pentru a debuga si a monitoriza functionalitatea proiectului prin intermediul Serial Monitor. | ||
+ | |||
+ | **Laboratorul 2: Intreruperi** | ||
+ | - **Justificare:** Desi proiectul nu utilizeaza intreruperi hardware, utilizarea delay-urilor mici (debounce) pentru butoane poate fi vazuta ca o forma simpla de gestionare a evenimentelor asemanatoare intreruperilor. | ||
+ | |||
+ | **Laboratorul 3: Timere. PWM** | ||
+ | - **Justificare:** Proiectul utilizeaza un cronometru pentru a numara secundele si a declansa alarma. PWM este utilizat pentru a genera tonuri cu buzzer-ul. | ||
+ | |||
+ | **Laboratorul 6: I2C** | ||
+ | - **Justificare:** Biblioteca Wire pentru I2C este esentiala pentru comunicarea cu modulul TEA5767 si afisajul OLED. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Explicarea scheletului proiectului, interactiunea dintre functionalitati si modul de validare ===== | ||
+ | |||
+ | Proiectul este structurat in functii separate pentru initializare si pentru bucla principala de executie: | ||
+ | - **Setup:** Initializeaza comunicatiile I2C, afisajul OLED, si buzzer-ul, si seteaza pinii pentru butoane. | ||
+ | - **Loop:** Verifica starea butoanelor, actualizeaza cronometrul si declanseaza alarma la expirarea timpului. Afisajul OLED este actualizat in mod regulat pentru a reflecta modificarile. | ||
+ | |||
+ | Interactiunea dintre functionalitati este gestionata prin variabile globale si functii dedicate pentru fiecare componenta. Validarea functionalitatilor s-a realizat prin teste iterative, monitorizarea seriala si ajustari pentru debounce si controlul timpurilor. | ||
+ | |||
+ | ===== Explicarea optimizarilor realizate ===== | ||
+ | |||
+ | Optimizarile au inclus: | ||
+ | - **Debounce pentru butoane:** Utilizarea unui delay scurt pentru a preveni declansarea multipla a evenimentelor de buton. | ||
+ | - **Reducerea sarcinilor inutile:** Actualizarea afisajului OLED si a frecventei radio doar atunci cand este necesar. | ||
+ | - **Eficientizarea codului:** Divizarea functionalitatilor in functii separate pentru a creste lizibilitatea si usurinta de intretinere a codului. | ||
+ | |||
+ | Aceste optimizari au fost implementate pentru a asigura un raspuns rapid al dispozitivului si pentru a minimiza consumul de resurse. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Am reusit sa implementez un radio ce poate capta unde din frecventa 76-108MHZ si il reda printr-un amplificator. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
+ | De altfel folosind acelasi display OLED pentru Radio pot sa afisez o alarma ce poate fi setata de 2 butoane separate. O data ce timer-ul ajunge la 0 un alt speaker va suna pentru 3 secunde pentru a alerta de trecerea timpului. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Aici e codul Arduino pentru radio-ul cu alarma |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | + | ||
- | 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**. | + | |
- | </note> | + | |
+ | {{:pm:prj2024:cpatru:radioalarmpm.txt|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||