This is an old revision of the document!


Smart UV Exposure Alarm

  • Autor: Maria-Diana Vulpoi
  • Grupa: 331CA

Introducere

Smart UV Exposure Alarm este un sistem inteligent bazat pe un microcontroler Arduino conceput să monitorizeze în timp real intensitatea radiațiilor ultraviolete (UV) din mediul ambiant. Dispozitivul oferă utilizatorilor informații precise asupra nivelului de radiații UV la care se expun atât prin feedback vizual, cât și auditiv. Pentru situațiile în care se dorește doar verificarea vizuală a aparatului a fost inclus și un buton de tip “Mute”.

Scopul principal al proiectului este de a preveni expunerea excesivă și neprotejată la radiațiile ultraviolete, reducând astfel riscul apariției arsurilor solare și a altor afecțiuni dermatologice. Prin oferirea unor măsurători precise și localizate, dispozitivul își propune să atragă atenția utilizatorului asupra unui pericol invizibil, facilitând luarea unor măsuri de protecție imediate (precum aplicarea cremei solare sau retragerea la umbră) în momentul declanșării avertizărilor vizuale și sonore.

Ideea a pornit de la constatarea faptului că, în viața de zi cu zi, oamenii nu conștientizează nivelul real și fluctuațiile radiațiilor ultraviolete, fiind dificil de intuit vizual când lumina soarelui încetează să fie benefică și devine dăunătoare. Deși majoritatea persoanelor folosesc aplicații meteo pe telefonul mobil, acestea oferă doar previziuni și estimări generale pentru arii geografice largi. Astfel, a apărut necesitatea dezvoltării unui dispozitiv portabil și precis, capabil să ofere citiri în timp real, strict pentru locația exactă în care se află utilizatorul la momentul respectiv.

De ce este util? Pentru utilizatori, utilitatea constă în interfața hibridă și în alarma sonoră, care avertizează imediat asupra unui nivel periculos de radiații. Pentru mine, proiectul are o valoare didactică excelentă, oferindu-mi ocazia de a pune în practică materia de la curs prin integrarea perifericelor esențiale într-un sistem embedded complet.

Descriere generală

Sistemul este împărțit în patru categorii logice principale, după cum urmează:

Unitatea de Procesare

  • Arduino Uno R3: Acesta preia tensiunile de la senzor prin convertorul analog-digital (ADC), calculează indicele UV și comandă starea modulelor de afișaj și a alarmei.

Module de Intrare (Inputs)

  • UV Sensor (ML8511): Măsoară în timp real intensitatea radiațiilor ultraviolete (UV-A și UV-B) din mediul ambiant. Emite o tensiune variabilă (semnal analogic) direct proporțională cu nivelul de radiații, care este citită de pinul ADC al microcontrolerului.
  • Push Button (Buton de Mute): Permite interacțiunea manuală a utilizatorului cu sistemul. Acesta este configurat să declanșeze o întrerupere hardware (Interrupt Signal) pe microcontroler, având rolul de a opri instantaneu avertizarea sonoră, fără a bloca sau a încetini restul programului.

Module de Ieșire (Outputs)

  • OLED Display (128×32): Un ecran digital compact utilizat pentru a afișa valoarea numerică exactă a indicelui UV și starea sistemului. Microcontrolerul îi trimite datele folosind protocolul de comunicație serială I2C.
  • Servo motor: Oferă o reprezentare vizuală, analogică, a nivelului de risc. Este controlat prin generarea unui semnal PWM (Pulse Width Modulation) care îi dictează unghiul exact la care să mute acul indicator pe cadran.
  • Buzzer: Reprezintă alarma sonoră a sistemului. Este acționat printr-un semnal digital/PWM doar în momentul în care radiațiile UV depășesc pragul considerat periculos pentru piele.

Sursa de Energie

  • Power Source: Reprezintă sistemul de alimentare (o baterie externă tip Power Bank) conectat prin interfața USB. Acesta furnizează tensiunea constantă de 5V necesară funcționării corecte a microcontrolerului și a tuturor perifericelor, asigurând portabilitatea totală a aparatului.

Hardware Design

Lista de piese

Componentă Cantitate Rol în sistem
Placă de dezvoltare Arduino Uno 1 Unitatea centrală de procesare a datelor
Senzor UV ML8511 1 Citește intensitatea radiațiilor UV (semnal analogic)
Display OLED 0.96” I2C 1 Afișează valoarea procentuală și statusul (interfață utilizator)
Servomotor (SG90) 1 Controlează acul indicator de pe cadranul fizic
Buzzer activ 1 Emite o alertă sonoră când se atinge pragul critic
Buton (Push-button) 1 Declanșează funcția de “Mute” (folosind întreruperi)
Breadboard și Fire de conexiune - Baza pentru realizarea circuitului de testare

Schema electrică

Schema a fost realizată folosind mediul de proiectare KiCad. Pinul de activare (EN) al senzorului UV a fost conectat direct la 3.3V pentru a asigura stabilitatea citirilor, eliminând fluctuațiile de tip zgomot.

Software Design

Mediu de dezvoltare

Aplicația a fost dezvoltată folosind Arduino IDE, mediul standard pentru microcontrolerul Arduino Uno R3. Acesta a facilitat scrierea codului și încărcarea acestuia pe placă.

Librării și surse 3rd-party

Pentru a interacționa cu modulele periferice, am integrat următoarele biblioteci standard și externe:

  • <Wire.h> - bibliotecă standard Arduino, folosită pentru a realiza comunicația I2C între microcontroler și ecranul OLED.
  • <Adafruit_GFX.h> și <Adafruit_SSD1306.h> - biblioteci third-party dezvoltate de Adafruit, necesare pentru generarea elementelor grafice (cercuri, linii, text) și afișarea lor pe ecranul OLED de 128×32 pixeli.
  • <Servo.h> - bibliotecă standard Arduino utilizată pentru generarea semnalului PWM (Pulse Width Modulation), care dictează unghiul la care trebuie să se poziționeze acul servomotorului.

Algoritmi și structuri implementate

Proiectul se bazează pe următorii algoritmi și concepte esențiale pentru prelucrarea semnalelor și stabilitatea sistemului:

  • Filtrarea semnalului analogic (Averaging): Pentru a elimina fluctuațiile senzorului (zgomotul), sistemul preia multiple eșantioane de la senzorul UV (20 de citiri în bucla principală și 50 în secvența de calibrare), și le face media. Această metodă asigură stabilitatea acului indicator pe cadran.
  • Debouncing software: Acționarea mecanică a butonului generează un scurt parazit. Pentru a preveni declanșarea repetată accidentală, în rutina de întrerupere a fost implementat un mecanism de debouncing folosind funcția millis(), care ignoră orice apăsare ce survine la mai puțin de 200ms de la ultima detectare validă.
  • Desenare trigonometrică: Pentru a oferi o reprezentare de tip „indicator de bord” pe OLED, unghiul asociat intensității UV este convertit în radiani, iar coordonatele x și y ale vârfului acului sunt calculate folosind funcțiile sin() și cos().
  • Mapare și Constraining: Semnalul brut (analogic) este translatat folosind funcția map() într-un procent de nivel de risc (0-100%). Ulterior, acest procent este protejat împotriva ieșirii din limite prin constrain() și este din nou mapat pentru a stabili unghiul servomotorului (0-180 grade).

Surse și funcții implementate

Întregul cod este grupat într-un singur fișier, principalele funcții fiind detaliate mai jos:

  • setup() : Funcția de inițializare. Pornește comunicația Serială și I2C, configurează pinii pentru buzzer (OUTPUT) și buton (INPUT_PULLUP), atașează funcția de întrerupere (attachInterrupt) de tip FALLING pentru buton și cheamă funcțiile de pornire a ecranului și calibrare a senzorului.
  • loop() : Execută la infinit logica principală. Citește semnalul senzorului UV, calculează procentul de radiație reală pe baza offset-ului din calibrare, setează unghiul noului motor doar dacă diferența e mai mare de 5 grade (pentru a evita mișcările bruște/zgomotul motorului) și pornește alarma sonoră (tone()) dacă nivelul este >= 40 și funcția “Mute” este inactivă. La final, cheamă funcția de afișare.
  • welcomeScreen() : Afișează un scurt mesaj de întâmpinare (“UV METER - READY”) pe ecran în momentul alimentării sistemului.
  • calibrateSensor() : Se execută o singură dată la pornire. Citește senzorul timp de aproximativ 1 secundă pentru a stabili valoarea de bază (baseline) a mediului la momentul respectiv.
  • drawMeter() : Desenează pe OLED toate elementele grafice: conturul semicercului, liniile care indică pragurile, gradațiile, statusul de risc (LOW/MEDIUM/HIGH), valoarea numerică exactă și, dacă este cazul, statusul alarmei sonore (MUT).
  • muteAlarm() : Rutina de tratare a întreruperilor hardware (ISR). Este apelată de microcontroler în momentul apăsării butonului de “Mute”. Inversează starea variabilei volatile isMuted instantaneu, ținând cont de algoritmul de debouncing de 200ms menționat anterior.

Rezultate Obţinute

Concluzii

Proiectul Smart UV Exposure Alarm a fost finalizat cu succes, rezultând un sistem portabil funcțional capabil să monitorizeze în timp real nivelul radiațiilor ultraviolete și să alerteze utilizatorul prin feedback vizual și sonor.

Download

Jurnal

  • 20 Aprilie - 26 Aprilie: Achiziția componentelor
    • Stabilirea arhitecturii hardware și a necesarului de piese pentru proiect.
    • În data de 20 aprilie s-a plasat comanda pentru componentele principale: placă de dezvoltare Arduino Uno, senzor UV ML8511, display OLED I2C, servomotor SG90, buzzer activ și buton push.
  • 27 Aprilie - 3 Mai: Realizarea circuitului hardware
    • Asamblarea componentelor pe breadboard pentru testarea conexiunilor inițiale și validarea pinilor.
    • Verificarea individuală a comunicării I2C (pentru ecran) și a citirii analogice (pentru senzorul UV).
    • Realizarea schemei electrice finale a circuitului folosind mediul de proiectare KiCad, asigurând inclusiv legarea pinului EN al senzorului la 3.3V pentru stabilitate.
  • 4 Mai - 10 Mai: Dezvoltarea software-ului
    • Scrierea logicii de bază a aplicației, inclusiv algoritmul de filtrare (mediere) cu zeci de eșantioane pentru senzorul UV și funcțiile trigonometrice pentru redesenarea acului pe afișajul OLED.
    • Trecerea codului la nivel de regiștri pentru a respecta cerințele materiei: configurarea ADC-ului, setarea Timerelor hardware pentru generarea semnalelor PWM destinate servomotorului și buzzer-ului, și implementarea întreruperilor externe hardware pentru butonul de Mute (inclusiv debouncing software cu millis()).
  • 11 Mai - 17 Mai: Proiectarea 3D a carcasei
    • Măsurarea atentă a dimensiunilor fiecărei componente hardware pentru a asigura toleranțe corecte la montaj.
    • Proiectarea unei carcase personalizate în Fusion, gândită special pentru a integra fix ecranul OLED, a oferi o deschidere directă către exterior pentru senzorul UV, un suport stabil pentru prinderea fizică a servomotorului indicator și un spațiu dedicat pentru buton si buzzer.
  • 18 Mai - 24 Mai: Printarea 3D, asamblarea și finalizarea
    • Printarea 3D a elementelor carcasei.
    • Asamblarea fizică finală a sistemului: montarea plăcii de bază, fixarea ecranului, a senzorului și a servomotorului în sloturile printate, urmate de organizarea compactă a cablajului la interior.
    • Testarea practică a sistemului complet asamblat, verificarea declanșării alarmei și redactarea documentației finale pentru pagina de wiki a cursului.

Bibliografie/Resurse

pm/prj2026/bianca.popa1106/maria_diana.vulpoi.1779705909.txt.gz · Last modified: 2026/05/25 13:45 by maria_diana.vulpoi
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