This is an old revision of the document!
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.
Sistemul este împărțit în patru categorii logice principale, după cum urmează:
Unitatea de Procesare
Module de Intrare (Inputs)
Module de Ieșire (Outputs)
Sursa de Energie
| 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 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.
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ă.
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.Proiectul se bazează pe următorii algoritmi și concepte esențiale pentru prelucrarea semnalelor și stabilitatea sistemului:
millis(), care ignoră orice apăsare ce survine la mai puțin de 200ms de la ultima detectare validă.sin() și cos().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).Î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.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.
millis()).Resurse Software
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/adafruit_ssd1306
Resurse Hardware
https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/ML8511_3-8-13.pdf
https://www.vishay.com/docs/37894/oled128o032dlpp3n00000.pdf
https://www.friendlywire.com/projects/ne555-servo-safe/SG90-datasheet.pdf https://www.instructables.com/Build-a-Real-Time-UV-Exposure-Meter-With-Arduino/