FLOAREA NOPȚII - Lampă cu senzor de lumină

Introducere

Funcționalitate

Proiectul constă într-o floare inteligentă care reacționează la lumina ambientală. Pe măsură ce intensitatea luminii scade (ex. seara sau în spații întunecate), floarea se „deschide” automat cu ajutorul unui servomotor, iar un LED din interior se aprinde, transformând-o într-o lampă decorativă. Sistemul include un buton care permite utilizatorului să oprească manual LED-ul, chiar dacă senzorul de lumină ar indica altfel. Un ecran OLED afișează mesaje personalizate, contribuind la interactivitate.

Scop

Scopul proiectului este de a imita comportamentul natural al florii de noapte, transformându-l într-o aplicație practică și estetică. Floarea reacționează la lumina din mediu, aprinzând LED-ul și deschizând petalele odată cu lăsarea serii, oferind o soluție elegantă pentru iluminat ambiental automat.

Ideea inițială

Ideea proiectului mi-a venit inspirându-mă din comportamentul real al florilor nocturne. Inițial, voiam să creez o floare care doar să se deschidă cu ajutorul unui servomotor, dar pentru a adăuga utilitate și interactivitate, am decis să integrez un senzor de lumină, un led și un ecran OLED care oferă feedback vizual. Astfel, proiectul a evoluat într-o combinație între funcționalitate și natură.

Utilitate

Dispozitivul poate fi folosit ca lampă ambientală automată, decor inteligent sau proiect educațional. Este potrivit pentru camere de zi, dormitoare sau spații de relaxare, oferind un efect vizual plăcut și o experiență personalizată. În plus, integrează concepte de bază din electronică și programare, fiind ideal și pentru scopuri didactice.

Descriere generală

  • Circuitul proiectului are la bază un microcontroler Arduino UNO, care acționează ca unitate centrală de control și gestionează interacțiunea dintre toate componentele sistemului.
  • Pentru a detecta nivelul de luminozitate ambientală, se utilizează un senzor de lumină (LDR), care permite florii să se deschidă la scăderea luminii din încăpere. Când lumina scade sub un anumit prag, Arduino-ul acționează un servomotor care deschide treptat „petalele” florii și aprinde un LED RGB aflat în interior, transformând-o într-o lampă decorativă.
  • Un buton este inclus în circuit pentru a permite oprirea manuală a LED-ului, indiferent de condițiile de lumină detectate. În plus, un ecran LCD 16×2 este folosit pentru a afișa un mesaj prietenos sau informativ, adăugând un plus de interactivitate și personalitate proiectului.

Aceasta este schema bloc care ilustrează interacțiunea dintre componentele proiectului:

Hardware Design

Componente necesare:

  • 1 X Microcontroller: Arduino UNO Rev3
  • 1 X Senzor de lumină: YQZBML_Mod-light (LDR)
  • 1 X Servomotor: SG996 Micro Servo
  • 1 X LED RGB: Modul Senzor LED RGB KY-016
  • 1 X OLED: OLED_12C_JMD
  • 1 X Buton: Push-button
  • N X Fire jumper
  • 3 x Rezistente
  • 1 X Breadboard
  • 1 X Sursă alimentare: USB

Descriere

OLED 0.96" I2C Display

Ecranul OLED utilizează protocolul I2C pentru a comunica cu Arduino-ul. Este conectat la pinii dedicați SDA și SCL ai plăcii.

OLED 0.96” PIN Arduino PIN
VCC 5V
GND GND
SDA A4
SCL A5
LED RGB KY-009 (cu rezistențe externe)

Fiecare culoare este controlată printr-un pin PWM. Anodul comun este conectat la 5V. Rezistențele recomandate sunt: R: 220 Ω (pusă) G & B: 100 Ω (puși)

RGB LED PIN Arduino PIN Resistor
R D11 220Ω
G D9 100Ω
B D10 100Ω
COM (Anode) 5V -
LDR Sensor (Modul de lumină)

Senzorul de lumină este conectat la un pin analogic al Arduino-ului. Acesta detectează nivelul de iluminare din mediu și oferă o valoare între 0–1023. Se folosește un divizor de tensiune sau modul gata făcut.

LDR Module PIN Arduino PIN
VCC 5V
GND GND
OUT A0
ServoMotor MG996R

Servomotorul este controlat prin semnal PWM de la Arduino. Deoarece consumă curent mare (până la 2A), este alimentat separat dintr-o sursă de 5V.

ServoMotor PIN Arduino PIN External Source
VCC - 5V (+)
GND GND GND (-)
PWM (signal) D7 -
Button (4 pini, tactil)

Butonul este conectat între un pin digital și GND. Se activează folosind INPUT_PULLUP pentru a evita folosirea unui rezistor extern de pull-down.

Button PIN Arduino PIN
1 (diagonal) D2
2 (diagonal) GND

Software Design

Mediu de dezvoltare

IDE: Arduino IDE 2.x Placă: Arduino UNO R3 (ATmega328P)

Librării & surse

Bibliotecă Rol
————————————— —————————————————–
`Servo.h` control PWM pentru servomotor (deschiderea petalelor)
`Wire.h` comunicare I²C
`Adafruit_GFX.h` + `Adafruit_SSD1306.h` afișare text/bitmap pe OLED 0 .96″

Algoritmi & structuri implementate

1. Mapare lumină → deschidere floare
  • Citirea valorii de pe LDR (`analogRead`) oferă un număr între `0` și `1023`, proporțional cu lumina ambientală.
  • Se calculează o valoare `darkness` normalizată între `0.0` și `1.0`, folosind formula:

`(LUX_BRIGHT - lux) / (LUX_BRIGHT - LUX_DARK)`, apoi se folosește `constrain(…)` pentru a o menține în interval.

  • Poziția servomotorului este calculată ca interpolare între `SERVO_MIN` și `SERVO_MAX`, proporțional cu `darkness`.
  • Se aplică un filtru de netezire (EMA – *Exponential Moving Average*) pentru a evita salturile bruște ale servo-ului.
2. Aprindere LED RGB în mai multe moduri
  • LED-ul are 3 moduri, comutate printr-un buton:
  • `MODE_BASIC` – LED alb aprins, mesaj OLED: *it's night*.
  • `MODE_OFF` – LED complet stins, mesaj OLED: *bed time*.
  • `MODE_PARTY` – LED ciclând automat prin culori (ex. roz, galben, mov), mesaj OLED: *party time*.

* Modurile se comută doar când floarea este deschisă. * Culoarea LED-ului în modul *party* se schimbă la fiecare `PARTY_STEP` ms.

3. Debounce buton
  • Apăsările rapide ale butonului pot genera semnale electrice multiple.
  • Se folosește o fereastră de 50 ms (`debounceDelay`) în care se verifică stabilitatea semnalului folosind `millis()`.
4. Afișare OLED sincronizată
  • Mesajele afișate se actualizează doar dacă s-au schimbat față de cele anterioare, pentru a evita *flicker*-ul.
  • Mesaje afișate:
  • `sun is up` – ziua, floarea închisă
  • `it's night` – floarea deschisă + LED alb
  • `bed time` – floarea deschisă + LED stins
  • `party time` – floarea deschisă + culori animate
5. Resetare stare la lumină
  • Când lumina crește și floarea se închide:
  • LED-ul este stins complet (`LEDoff()`).
  • Modul LED revine la `MODE_BASIC` pentru următoarea deschidere.
Funcții & roluri principale
Funcție Rol principal
——————–——————————————————————————
`setup()` Inițializează pinii, servo, OLED, LED, buton și mesajul de start
`loop()` Logica principală: senzor lumină, poziție servo, LED, OLED, buton
`show(…)` Afișează mesaj pe OLED doar dacă este diferit față de precedentul
`LEDoff()` Stinge complet LED-ul RGB
`LEDwhite()` Aprinde LED-ul cu alb (toate canalele la valoare maximă 255)
`LEDrgb(r,g,b)` Aprinde LED-ul cu o culoare specifică RGB

Pentru cod poti accesa Github - FloareaNoptii

Design 3D

Pentru construcția florii s-a utilizat o imprimantă 3D, care a permis imprimarea separată a fiecărei componente. Ulterior, acestea au fost asamblate pentru a forma mecanismul complet de deschidere al florii.

Am avut nevoie să printez:

  • 1 × bază
  • 1 × tijă
  • 1 × legătură(pentru mecanismul de deschidere)
  • 1 × sepale
  • 6 × petale

Rezultate Obţinute

1.Floare închisă pe lumină

2.Deschidere graduală în penumbră

3.Floare complet deschisă pe întuneric

4.LED interior cu aprindere lină

5.Mesaj OLED corect

Concluzii

Proiectul simulează o floare care se deschide pe măsură ce se întunecă și se închide la lumină, folosind un senzor LDR și un servomotor controlat lin. LED-ul interior se aprinde treptat în funcție de întuneric, iar OLED-ul afișează mesaje diferite.

Sistemul funcționează stabil, reacționează natural și respectă toate cerințele propuse.

pm/prj2025/iotelea/vasilica.dantis.txt · Last modified: 2025/05/28 01:10 by vasilica.dantis
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