This shows you the differences between two versions of the page.
pm:prj2025:ccristi:alexandru.beiu [2025/05/18 19:08] alexandru.beiu [Jurnal] |
pm:prj2025:ccristi:alexandru.beiu [2025/05/26 01:56] (current) alexandru.beiu [Rezultate Obţinute] |
||
---|---|---|---|
Line 22: | Line 22: | ||
* Ecran OLED 0.96" I2C | * Ecran OLED 0.96" I2C | ||
* Modul DC-DC Step-Down MP1584EN | * Modul DC-DC Step-Down MP1584EN | ||
- | * Modul EEPROM AT24C256 | ||
* Microfon de la niște căști | * Microfon de la niște căști | ||
* Difuzorul original | * Difuzorul original | ||
* Buzzer | * Buzzer | ||
* Rezistente 10KOhm | * Rezistente 10KOhm | ||
- | {{:pm:prj2025:ccristi:whatsapp_image_2025-05-07_at_21.33.41.jpeg?200| }} | + | {{:pm:prj2025:ccristi:whatsapp_image_2025-05-07_at_21.33.41.jpeg?200| }} |
+ | |||
Schemă electrică: | Schemă electrică: | ||
Line 42: | Line 41: | ||
Astfel, am reușit să inițiez și să primesc apeluri telefonice/SMS-uri. Am testat de mai multe ori, totul pare să funcționeze cum trebuie, singura problemă este că persoana cu care vorbesc își aude propria voce, însă nu am gasit o rezolvare. | Astfel, am reușit să inițiez și să primesc apeluri telefonice/SMS-uri. Am testat de mai multe ori, totul pare să funcționeze cum trebuie, singura problemă este că persoana cu care vorbesc își aude propria voce, însă nu am gasit o rezolvare. | ||
+ | |||
+ | Mecanismul de formare a numarului l-am descifrat cu ajutorul unui multimetru si functioneaza in felul urmator: | ||
+ | |||
+ | - Avem 3 fire care ies de la rotita cu urmatoarele culori : **R**osu, **G**alben, **V**erde. Firul **R** va fi conectat la **GND**, celelalte 2 vor fi conectate la INPUT cu rezistente de PULL-UP. Pentru a semnala formarea numarului (momentul in care rotita incepe sa se invarta), firul **R** si firul **G** vor avea continuitate (la input vom avea LOW, discontinuitate), iar cand rotita ajunge la final, continuitatea nu mai este. Pentru a identifica cifra formata, firul **R** si **V** sunt in general in continuitate dar formeaza pauze de discontinuitate de cca 50ms, la fiecare cifra parcursa, exemplu: daca formam cifra 7, vom avea 7 pauze de discontinuitate de cca 50ms. Acest lucru este simplu de interpretat in cod deoarece Arduino va vedea 7 schimbari de semnal LOW-HIGH. | ||
+ | |||
+ | Pentru a vedea daca receptorul este ridicat sau nu, am lipit 2 fire de mecanismul care tine receptorul (IN si GND, cand receptorul este pus la IN vom avea HIGH iar cand este ridicat, LOW. | ||
+ | |||
+ | {{:pm:prj2025:ccristi:whatsapp_image_2025-05-20_at_01.28.02.jpg?direct&200|}} | ||
+ | |||
+ | |||
Line 47: | Line 56: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | **Link GitHub : https://github.com/Alexe1289/proiect_pm** | ||
- | <note tip> | + | **Mediu de dezvoltare și limbaj de programare**: |
- | Descrierea codului aplicaţiei (firmware): | + | Arduino IDE – mediu principal de programare |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Limbaj: C++ (Arduino Sketch) |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | **Librării folosite**: |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | - SoftwareSerial.h - folosită pentru a avea 2 conexiuni seriale (una la SIM800L, cealalta la Serial Monitor pentru debugging) |
- | <note tip> | + | - Adafruit_GFX.h - folosită pentru a afișa pe ecranul OLED imagini (bitmaps) |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | - Adafruit_SH110X.h - folosită pentru a interacționa cu display-ul OLED |
- | ===== Download ===== | + | - Wire.h - folosită pentru comunicarea prin I2C cu display-ul |
- | <note warning> | + | **Descrierea codului**: |
- | 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**. | + | - Pentru inceput, in functia de setup(), setez rezistentele de pull-up, conexiunea USART intre modul SIM800L si Arduino si comunicarea I2C cu display-ul. Dupa care pentru a stabili baudrate-ul cu SIM800L (lucru care se face automat la primul mesaj transmis), trimit un mesaj "AT". |
- | </note> | + | - In functia de loop, putem fi in urmatoarele stari: |
+ | - a fost ridicat receptorul ceea ce inseamna o schimbare a tensiunii pin-ului (LOW-HIGH, HIGH-LOW), deci: | ||
+ | - raspundem unui apel primit prin trimiterea comenzii "ATA" | ||
+ | - urmeaza sa formam un numar | ||
+ | - receptorul a fost pus jos ceea ce inseamna exact opusul al celor de mai sus, mai exact: | ||
+ | - inchidem apelul curent prin trimiterea comenzii "ATH" | ||
+ | - se reseteaza vectorul cu numere formate | ||
+ | Formarea numarului: | ||
+ | - Functioneaza exact cum am descris in partea hardware. Daca rotita se invarte, atunci pe pin-ul 5 vom primi LOW, deci putem incepe sa adaugam intr-un vector de caractere numerele formate. Numarul de schimbari HIGH-LOW pe pin-ul 6, semnifica ce numar a fost format. Dupa ce rotita a ajuns la final (pin 5 este din nou HIGH), afisam pe display numerele din vector. Cand se ajunge la 10 numere se initiaza apelul prin comanda "**ATD+(NUMAR_TELEFON);**" | ||
+ | |||
+ | Inainte de formarea numarului se verifica semnalul si accesul in retea in felul urmator: | ||
+ | |||
+ | - Se trimite o comanda "**AT+CSQ**" pentru a vedea calitatea semnalului. Raspunsul va fi de forma "**+CSQ: <rssi>,<ber>**" | ||
+ | |||
+ | <rssi> – Received Signal Strength Indication (nivelul semnalului): | ||
+ | |||
+ | 0 → -113 dBm (semnal foarte slab) | ||
+ | |||
+ | 31 → -51 dBm (semnal excelent) | ||
+ | |||
+ | 99 → necunoscut / nu se poate determina | ||
+ | | ||
+ | <ber> – Bit Error Rate (rata de erori): | ||
+ | | ||
+ | | ||
+ | - Pentru vizualizarea semnalului, am luat niste iconite de pe acest [[https://www.flaticon.com/|site]] si apoi le-am convertit in bytearrays(date constante care vor fi retinute in memoria **flash**) cu ajutorul [[https://javl.github.io/image2cpp/|image2cpp]], apoi am apelat functia "**.drawBitmap**" | ||
+ | |||
+ | - Se trimite o comanda "**AT+CREG?**" pentru a vedea daca avem acces in retea (in cazul meu, Orange). Daca primim: +CREG: 0,1, e totul ok. | ||
+ | |||
+ | |||
+ | - La primirea unui apel, generez prin buzzer 3 bip-uri scurte de 1000HZ folosind functia **tone**. | ||
+ | |||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | {{ :pm:prj2025:ccristi:whatsapp_image_2025-05-26_at_01.07.14.jpg?direct&300 |}} | ||
+ | |||
+ | |||
+ | ---- | ||
+ | [[https://youtu.be/3aeek7L6-k4|Videoclip de prezentare]] | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | #1 - am avut ceva probleme cu modulul deoarece nu reușea să se conecteze în rețea. Își lua "RESET" la fiecare 8s, iar în urma documentării, am aflat că placa are o problme din fabrică. Condensatorul între VCC si GND este subdimensionat (are 100 µF, iar producătorul chip-ului recomandă 1000 µF) și nu făcea față la burst-uri de 2A. Problema mai persistă uneori, așa că probabil voi pune un condensator mai mare. | + | #1 - am avut ceva probleme cu modulul deoarece nu reușea să se conecteze în rețea. Își lua "RESET" la fiecare 8s, iar în urma documentării, am aflat că placa are o problema din fabrică. Condensatorul între VCC si GND este subdimensionat (are 100 µF, iar producătorul chip-ului recomandă 1000 µF) și nu făcea față la burst-uri de 2A. Problema mai persistă uneori, așa că probabil voi pune un condensator mai mare. |
#2 - Am schimbat microfonul cu unul de la căști deoarece cel original nu părea să meargă. Difuzorul, însă, a funcționat. O poza cu improvizația: | #2 - Am schimbat microfonul cu unul de la căști deoarece cel original nu părea să meargă. Difuzorul, însă, a funcționat. O poza cu improvizația: | ||
{{:pm:prj2025:ccristi:pozamic2.jpg?50|}} {{:pm:prj2025:ccristi:pozamic1.jpg?50|}} | {{:pm:prj2025:ccristi:pozamic2.jpg?50|}} {{:pm:prj2025:ccristi:pozamic1.jpg?50|}} | ||
+ | |||
+ | #3 - Mecanismul soneriei lipsește așa că voi pune un buzzer, provizoriu. | ||
+ | |||
+ | #4 - Am adaugat un buton de "panica", da reset la arduino si SIM800L, deoarece existau situatii cand modulul GSM nu reusea sa se conecteze in retea. | ||
+ | |||
+ | #5 - Am renuntat la memoria EEPROM pentru a retine apeluri, din cauza problemelor aparute. Mi-am dat seama ca Arduino-ului nu ii place comunicarea SoftwareSerial + I2C (se blocheaza). Asta inseamna ca nu puteam sa fac debug la ce afisam | ||
+ | |||
+ | #6 - Am lipit firele si componentele pe perfboard pentru mai multa stabilitate. | ||
+ | |||
+ | {{:pm:prj2025:ccristi:whatsapp_image_2025-05-26_at_01.06.51.jpg?direct&200 |}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | https://www.flaticon.com/ |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | https://javl.github.io/image2cpp/ |
+ | |||
+ | https://lastminuteengineers.com/sim800l-gsm-module-arduino-tutorial/ | ||
+ | |||
+ | https://www.instructables.com/How-to-Display-Images-on-OLED-Using-Arduino/ | ||
+ | |||
+ | GPT + Google | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||