Differences

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

Link to this comparison view

pm:prj2024:rrusu:calin.basturea [2024/04/27 21:50]
calin.basturea [Descriere generală]
pm:prj2024:rrusu:calin.basturea [2024/05/27 03:26] (current)
calin.basturea
Line 1: Line 1:
 ====== Sleeping Monitor ====== ====== Sleeping Monitor ======
-===== Bașturea Călin ​=====+===== Introducere ​===== 
  
-<note tip> 
 Un Monitor de Somn este exact ceea ce sugerează și numele lui. Este un dispozitiv care urmărește experiența ta de somn și mediul în care dormi, folosind o serie de factori precum temperatura,​ umiditatea și nivelul de zgomot din timpul somnului(indiferent că este vorba de foșnete, sunete aleatorii etc.). Toate datele sunt înregistrate pe un SD card și ulterior sunt procesate pentru a genera o diagramă a experienței tale de somn. Scopul acestui dispozitiv este să se asigure că, prin monitorizarea zgomotului, persoana are un somn profund, calm și lipsit de stres. Un Monitor de Somn este exact ceea ce sugerează și numele lui. Este un dispozitiv care urmărește experiența ta de somn și mediul în care dormi, folosind o serie de factori precum temperatura,​ umiditatea și nivelul de zgomot din timpul somnului(indiferent că este vorba de foșnete, sunete aleatorii etc.). Toate datele sunt înregistrate pe un SD card și ulterior sunt procesate pentru a genera o diagramă a experienței tale de somn. Scopul acestui dispozitiv este să se asigure că, prin monitorizarea zgomotului, persoana are un somn profund, calm și lipsit de stres.
-</​note>​+
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip>+
 Proiectul implică utilizarea microcontroller-ului Arduino Uno și a senzorilor (deși schema bloc nu include un SD card sau un senzor de zgomot, deoarece Tinkercad nu dispune de ele :-/). Pe placa de conexiuni avem, de asemenea, 3 butoane, fiecare cu funcționalitatea sa. Un buton pentru începerea monitorizării,​ unul pentru oprirea monitorizării și unul pentru Opțiuni. De asemenea, avem și 3 LED-uri care vor funcționa ca indicatori vizuali pentru a denota nivelul zgomotului detectat. Pe LCD va fi afișat timpul monitorizării,​ iar la apăsarea butonului de opțiuni diferite statistici 8-). Proiectul implică utilizarea microcontroller-ului Arduino Uno și a senzorilor (deși schema bloc nu include un SD card sau un senzor de zgomot, deoarece Tinkercad nu dispune de ele :-/). Pe placa de conexiuni avem, de asemenea, 3 butoane, fiecare cu funcționalitatea sa. Un buton pentru începerea monitorizării,​ unul pentru oprirea monitorizării și unul pentru Opțiuni. De asemenea, avem și 3 LED-uri care vor funcționa ca indicatori vizuali pentru a denota nivelul zgomotului detectat. Pe LCD va fi afișat timpul monitorizării,​ iar la apăsarea butonului de opțiuni diferite statistici 8-).
  
-{{:​pm:​prj2024:​rrusu:​tcad_pm_calinb.png}}+{{:​pm:​prj2024:​rrusu:​sleeping_monitor_scheme.png?450|}}
  
-</​note>​+Cele 3 LED-uri(care trebuie conectate fiecare la un pin diferit, nu ca pe schema de mai sus) se vor aprinde în funcție de nivelul de zgomot perceput(în funcție de un anumit threshold). 
 +Ideea codului este un FSM(Finite State Machine). La bază este un meniu de opțiuni care ne lasă să alegem ce dorim să monitorizăm(temperatura,​ umiditatea, fie ambele deodată).
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +{{:​pm:​prj2024:​rrusu:​ardu_sleepmon.png?​450|}} 
-Aici puneţi tot ce ţine de hardware design+{{:pm:​prj2024:​rrusu:​sm_electrical_scheme.png?​450|}} 
-  * listă de piese + 
-  ​* scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +NOTE: Buzzer-ul si modulul 2 digit sunt funcționale,​ dar trebuie solder-uite. 
-  ​* diagrame de semnal ​ + 
-  ​* rezultatele simulării +Listă de piese 
-</​note>​+  - Senzor de temperatură DHT11  
 +  {{:pm:​prj2024:​rrusu:​dht11.png?​150|}} 
 +  ​LED-uri 
 +  ​butoane 
 +  - microcontroller Arduino Uno 
 +  - buzzer 
 +  - rezistențe 
 +  - Ecran LCD I2C 
 +  {{:​pm:​prj2024:​rrusu:​lcdi2c_pinout.png?250|}} 
 +  ​- Modul senzor sunet cu microfon KY-038 ​ 
 +  ​- Modul 2 digit 74HC595 
 +  ​{{:​pm:​prj2024:​rrusu:​2digit_module.png?​200|}}
  
 ===== Software Design ===== ===== Software Design =====
 +Codul a fost dezvoltat in Arduino IDE. În cadrul acestuia, m-am folosit de 2 biblioteci thirdy-party.
 +  - LiquidCrystal_I2C.h (pentru gestionarea ecranului LCD)
 +  - DHT11.h (pentru gestionarea senzorului de temperatură și umiditate)
 +  - ShiftRegister74HC595.h (pentru gestionarea modului 2 led digits) NOTE! Acest modul a avut probleme, unele functii a trebuit sa le rescriu cand am importat manual zip-ul cu libraria si in continuare, gruparea de led-uri din stanga, nu merge intotdeauna as intended.
 +De asemenea, deoarece citirea temperaturii și a umidității este destul de costisitoare d.p.d.v. al ciclilor de ceas, vom face această acțiune la un interval specific de timp(o dată la 10 secunde).
  
 +<code c>
 +unsigned char buttonState = digitalRead(SETTINGS_BUTTON);​
  
-<note tip> +  switch(STATE)
-Descrierea codului aplicaţiei ​(firmware): +    case IDLE{ 
-  * mediu de dezvoltare ​(if any(e.g. AVR Studio, CodeVisionAVR) +      ​unsigned long currMillis = millis();
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+      // Verificam daca au trecut 10 secunde 
 +      if (currMillis - prevMillis >interval) { 
 +        prevMillis ​currMillis;​ 
 +        dht.readTemperatureHumidity(t,​ h); 
 +      }
  
-<note tip+      // Pressed 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+      if(buttonState == 0){ 
-</note>+        STATE = SETTINGS_STATE;​ 
 +        lcd.clear();​ 
 +        delay(250);​ 
 +      } 
 + 
 +      switch(selectedSetting){ 
 +        // Temp 
 +        case 0: { 
 +          temperature_led_handle(t);​ 
 +          displaySetting("​Temp",​ t); 
 +          break; 
 +        } 
 +        // Humidity 
 +        case 1: { 
 +          TURNALLOFF();​ 
 +          displaySetting("​Humidity",​ h); 
 +          break; 
 +        // Both 
 +        }case 2: { 
 +          TURNALLOFF();​ 
 +          displaySetting("​Tmp",​ t, "​Hum",​ h); 
 +          break; 
 +        } 
 +        default: break; 
 +      } 
 + 
 +      break; 
 +    } 
 +    case SETTINGS_STATE:​ { 
 +      lcd.setCursor(0,​ 0); 
 +      lcd.print("​Settings Menu"​);​ 
 +      lcd.setCursor(0,​ 1); 
 + 
 +      unsigned char nextButtonState = digitalRead(NEXT_BUTTON);​ 
 +      unsigned char backButtonState = digitalRead(BACK_BUTTON);​ 
 +       
 +      if(!nextButtonState){ 
 +        idx = (idx + 1) % SETTINGS_ARR_SIZE;​ 
 +        currentOption = &​settingsArr[idx];​ 
 +        delay(250);​ 
 +        lcd.clear();​ 
 +        Serial.println("​apasat next"​);​ 
 +      }else if(!backButtonState){ 
 +        idx = (idx <= 0) ? SETTINGS_ARR_SIZE - 1 : (idx - 1) % 3; 
 +        currentOption = &​settingsArr[idx];​ 
 +        delay(250);​ 
 +        lcd.clear();​ 
 +        Serial.println("​apasat next"​);​ 
 +      } 
 + 
 +      if(buttonState == 0){ 
 +        selectedSetting = idx; 
 +        lcd.setCursor(0,​ 0); 
 +        lcd.clear();​ 
 +        lcd.print("​Monitoring..."​);​ 
 +        STATE = IDLE; 
 +        // Putin delay, deoarece va iesi din acest state si va intra inapoi instant tot in SETTINGS_STATE 
 +        delay(250);​ 
 +      } 
 + 
 +      lcd.print((char*)*currentOption);​ 
 +       
 +      break; 
 +    } 
 +    default: { 
 +      break; 
 +    } 
 +  } 
 +  </code
 +   
 + NEW! MULTIPLE LANGUAGES!! Limba poate fi aleasa din meniul de setari. 
 + <​codec>​ 
 + 
 +const unsigned char settingsArrEnglish[][17] = { 
 +  "<- Disp Temp ->",​ "<- Disp Humid ->",​ "<- Disp Both ->",​ "<- Language ->","<​- Zen ->"​ 
 +}; 
 +const unsigned char settingsArrRomanian[][17] = { 
 +  "<- Afis Temp ->",​ "<- Afis Umid ->",​ "<- Afis Ambele ->",​ "<- Limba ->","<​- Zen ->"​ 
 +}; 
 + 
 +</code>
  
 ===== Concluzii ===== ===== Concluzii =====
 +8-O =) M-am distrat creand un FSM pentru a controla meniul principal.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Codul sursa poate fi descarcat ​de aici {{pm:prj2024:rrusu:sleepingmonitor.zip}}
-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>​+
  
 ===== Jurnal ===== ===== Jurnal =====
Line 60: Line 156:
  
 <​note>​ <​note>​
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.+https://www.diodes.com/​assets/​Datasheets/​74HC595.pdf (foarte enervant)
 </​note>​ </​note>​
  
pm/prj2024/rrusu/calin.basturea.1714243810.txt.gz · Last modified: 2024/04/27 21:50 by calin.basturea
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