Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:avaduva:alexandru.necula01 [2022/04/21 14:19]
alexandru.necula01 [Descriere generală]
pm:prj2022:avaduva:alexandru.necula01 [2022/04/30 19:02] (current)
alexandru.necula01 [Jurnal]
Line 22: Line 22:
  
 Culoarea LED-ului RGB va fi schimbata in functie de nivelul pulsului Culoarea LED-ului RGB va fi schimbata in functie de nivelul pulsului
-  * VERDE: puls < 80 +  * <color green>VERDE</​color>​: puls < 100 
-  * GABLEN: 80 < puls < 100 +  * <color orange>GABLEN</​color>: ​puls < 120 
-  * ROSU: puls > 100+  * <color red>ROSU</​color>​: puls > 120 
 +  * ALB: puls in curs de calcul 
 + 
 +==== Schema bloc ====
  
 {{:​pm:​prj2022:​avaduva:​diagrama.png?​600|}} {{:​pm:​prj2022:​avaduva:​diagrama.png?​600|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
-==== Componente ​==== +==== Lista componente ​==== 
-^ Nume      ^ Număr Piese          +^ Nume               ​^ Număr Piese ^ 
-| Arduino UNO R3    |1 | +| Arduino UNO R3                  | 1 | 
-| Breadboard ​       | 1 | +| Breadboard ​                     | 1 | 
-| Ecran TFT ST7789 ​  | 1| +| Ecran TFT ST7789 ​1.3" 240x240 ​  | 1 | 
-|Senzor puls MAX30100 ​  ​|1 | +| Senzor puls MAX30100 ​           | 1 | 
-|LED rosu   ​|1 | +| LED rosu                        | 1 | 
-|LED RGB   ​|1 | +| LED RGB                         ​| 1 | 
-|Buzzer ​  ​|1 | +| Buzzer ​                         | 1 | 
-|Rezistor ​  ​|+| Rezistor ​1kΩ                    ​5 | 
-|Jumper ​  ​|? |+| Rezistor 460Ω                   | 4 | 
 +| Rezistor 330Ω                   | 4 
 +| Jumper ​                         18| 
 + 
 +==== Schema electrica ==== 
 + 
 +{{:​pm:​prj2022:​avaduva:​schematic_heartmonitor.png?700|}} 
 +<​note>​ 
 +Placuta comandata care include senzorul are o problema de design, respectiv 
 +liniile de SDA si SCL sunt HIGH la tensiunea de 1.8V, si nu 3.3V, astfel incat  
 +Arduino UNO nu poate comunica cu senzorul ((https://​how2electronics.com/​interfacing-max30100-pulse-oximeter-sensor-arduino/​)). Am modificat placuta printr-un jumper 
 +astfel incat SDA si SCL sunt alimentate de la 3.3V.  
 +</​note>​ 
 + 
 +<​note>​ 
 +Display-ul TFT nu este compatibil cu tensiunea de 5V a pinilor de la Arduino UNO. 
 +Pe pinii folositi de SPI am instalat un divizor de tensiune folosind rezistori de  
 +460Ω si 1kΩ, astfel incat tensiunea finala este de aproximativ 3.3V  
 +((https://​simple-circuit.com/​arduino-st7789-ips-tft-display-example/​)) 
 +</​note>​ 
 ===== Software Design ===== ===== Software Design =====
  
-<note tip> +==== Mediul de dezvoltare ==== 
-Descrierea ​codului ​aplicaţiei ​(firmware)+ 
-  * mediu de dezvoltare ​(if any) (e.gAVR Studio, CodeVisionAVR+  * **Visual Studio Code + extensia PlatformIO ** → dezvoltarea ​codului ​și încărcarea acestuia pe Arduino 
-  * librării şi surse 3rd-party (e.gProcyon AVRlib+  * **Autodesk Eagle** → realizarea schemei electrice 
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +  * **LucidChart** → realizarea schemei bloc 
-  * (etapa 3surse şi funcţii implementate+ 
 +==== Biblioteci folosite ==== 
 + 
 +  * **SPI** ​((https://​www.arduino.cc/​en/​reference/​SPI)) 
 +  * **Wire** ​(I2C communication) ((https://​www.arduino.cc/​en/​reference/​Wire)
 +  * **MAX30100** (pulse sensor) ((https://​github.com/​oxullo/​Arduino-MAX30100)) 
 +  * **Adafruit GFX** (core graphics) ((https://​github.com/​adafruit/​Adafruit-GFX-Library)) 
 +  * **Adafruit BusIO** (I2C communication) ((https://​github.com/​adafruit/​Adafruit_BusIO)
 +  * **Adafruit ST7789** (specific TFT driver) ((https://​github.com/​cbm80amiga/​Arduino_ST7789_Fast)) 
 + 
 +==== Structura codului ==== 
 + 
 +Senzorul de puls are 3 stari: 
 +  * **WAITING** → degetul nu se afla pe senzor; se afiseaza mesajul "Rest your finger on the sensor"​ 
 +  * **INITIALIZING** → frecventa cardiaca este in curs de calcul; se afiseaza mesajul "​Please wait..."​ 
 +  * **WORKING** → display-ul afiseaza datele colectate; se afiseaza pulsul si oxigenarea sangelui pe display 
 + 
 +**Initializari** - inainte de orice functie, initializam urmatoarele variabile:​ 
 +  * //pox// → clasa care defineste senzorul de puls-oximetru 
 +  * //tft// → clasa care defineste display-ul tft 
 +  * //​lastState//​ → initializat cu WAITING, folosita pentru a tine cont cand actualizam display-ul 
 +  * //​prevHeartRate//​ → initializat cu 0, folosita pentru a determina daca calculul pulsului este stabil 
 +  * //​tsLastReport//​ → initializat cu 0, folosita pentru a actualiza display-ul la intervale determinate 
 + 
 +<​note>​ 
 +Senzorul puls-oximetru trebuie interogat cat mai rapid, altfel datele din buffer-ul sau se pierd. 
 +Conform bibliotecii utilizate, actualizarea ar trebui facuta la aproximativ 100Hz. 
 +De aceea, in majoritatea functiilor implementate am apelat //​pox.update()//
 </​note>​ </​note>​
 +
 +**Functii**
 +  * //setup()// → initializarea pinilor pentru buzzer si LED-uri, initializarea display-ului TFT, initializarea senzorului de puls, inregistrarea functie de callback pentru fiecare puls
 +  * //loop()// → logica principala a programului:​ apeleaza //​pox.update()//;​ la fiecare 2 secunde calculeaza pulsul si SpO2 si afiseaza informatii relevante pe display in functie de aceste valori
 +  * //​RGB_color(red,​ green, blue)// → seteaza pinii LED-ului RGB cu valorile date ca parametri
 +  * //​setRGBColor(spO2,​ heartRate)//​ → apeleaza //​RGB_color//​ cu valori in functie de puls si SpO2
 +  * //​onBeatDetected()//​ → functie callBack; porneste buzzer-ul si LED-ul rosu de fiecare data cand detectam un puls
 +  * //​printOnDisplay(x,​ y, whatToPrint)//​ -> afiseaza pe display mesajul/​valoarea dorita; deoarece aceasta operatie dureaza mai mult timp, apeleaza //​pox.update()//​
 +  * //​clearDisplay()//​ → diferit de implementarea din biblioteca Adafruit, pentru a permite interogarea senzorului de puls; printeaza cate un spatiu pe ecran pentru a sterge continutul anterior
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +==== Circuit final ==== 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</note>+{{:​pm:​prj2022:​avaduva:​img_0781.jpeg?600|}} 
 +{{:​pm:​prj2022:​avaduva:​img_0780.jpeg?​600|}} 
 + 
 +==== Demo ==== 
 + 
 +[[https://​youtu.be/Jzwkv7RFvvs|YouTube link]]
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Acest proiect m-a facut sa invat mai multe despre cum pot crea un dispozitiv  
 +cu utilitate practica folosind un microcontroller si cum pot programa un ansamblu 
 +de piese pentru a ajunge la rezultatul dorit. ​
  
-<note warning>​ +De asemenea, am invatat ca este foarte important sa citesti ​cu atentie 
-O arhivă (sau mai multe dacă este cazul) ​cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etcUn fişier READMEun ChangeLogun script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+datasheet-ul componentelor pe care doresti sa le comanzi pentru a te asigura 
 +ca sunt compatibile cu microcontroller-ul folositIn cazul meua fost nevoie de pasi 
 +suplimentari pentru a asigura compatibilitatearespectiv divizorul ​de tensiune pentru 
 +LCD si jumper-ul lipit pe senzorul de puls.
  
-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**. +===== Download ===== 
-</​note>​+ 
 +{{:pm:prj2022:avaduva:mobile_heart_rate_monitor.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
Line 71: Line 141:
   * **15.04.2022**:​ comanda piese   * **15.04.2022**:​ comanda piese
   * **21.04.2022**:​ publicare descriere wiki   * **21.04.2022**:​ publicare descriere wiki
 +  * **29.04.2022**:​ finalizare software si asamblare hardware
 +  * **30.04.2022**:​ finalizare wiki, publicare documentatie completa
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
- 
-  * [[https://​www.smart-prototyping.com/​Pulse-Oximeter-and-Heart-Rate-Sensor-MAX30100|Sensor puls]] 
-  * [[https://​github.com/​oxullo/​Arduino-MAX30100|Librarie Arduino puls]] 
-  * [[https://​simple-circuit.com/​arduino-st7789-ips-tft-display-example/​|Display ST7789]] 
  
 <​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>​
  
pm/prj2022/avaduva/alexandru.necula01.1650539971.txt.gz · Last modified: 2022/04/21 14:19 by alexandru.necula01
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0