Table of Contents

Radu MALUŞ - Aquarium Lights Controller

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul presupune implementarea unui controller pentru iluminarea unui acvariu reef. Se urmareste controlarea a mai multe grupuri de leduri de culori diferite precum si dimming-ul pe fiecare canal de culoare pentru a obtine o iluminare cat mai naturala.

Se vor folosi leduri albe (6500K aproximativ), albastre (450-465nm si 465-485nm), cyan, rosii si verzi pentru a asigura un spectru cat mai complet.

De asemenea, se doreste ca fiecare canal sa poata fi programat astfel incat intensitatea luminii sa creasca / descreasca treptat de la minim la maxim si invers intr-un anumit interval pentru a simula rasaritul / apusul soarelui. Exemplu:

Diming-ul se va face cu PWM pe fiecare canal in parte, iar controlul si programarea canalelor se va face prin intermediul unui touch-screen.

Descriere generală

Componente:

Hardware Design

Lista piese:

Software Design

Pentru dezvoltare am folosit Programmer's Notepad (WinAVR).

Software-ul urmareste controlarea manuala a 5 canale PWM precum si programarea fiecarui canal pentru a creste si descreste factorul de umplere intr-o anumita perioada de timp, automat. Fiecare semnal PMW de pe fiecare canal controleaza la randul lui un DC-DC Constant Current Step-Down LED driver (LDD) pentru a aprinde sau stinge cate o serie de leduri conectata pe fiecare LDD. Fiecare set de leduri este de o anumita culoare, iar astfel, controland puterea fiecarei serii, se poate simula lumina naturala de recif necesara iluminarii unui acvariu reef, precum si ciclul zi-noapte, asigurandu-se temperaturi de culoare specifice fiecarui moment al zilei.

Neavand accesibil inca un touch-screen, am folosit un ecran LCD pentru un output rudimentar:

Am folosit doua butoane (push-button-uri):

Pentru o interactiune lina si user-experience cat mai bun, pentru a se asigura un singur eveniment pe o apasare, am implementat un software debouncing pentru fiecare buton. Prin teste repetate, am ajuns la valoarea 500 - pentru aceasta am obtinut efectul dorit:

''if (bit_is_clear(PINC, PC0)) {
	pcl1++;
	if (pcl1 > 500) {
		if (button_pushed == 0) {
			display_duty_cycle(selected, 1, clicks);
			button_pushed = 1;
		}
		pcl1 = 0;
	}
}
else if (!bit_is_clear(PINC, PC0)) {
	rcl1++;
	if (rcl1 > 500) {
		button_pushed = 0;
		rcl1 = 0;
	}
}''

Cresterea sau descresterea factorului de umplere se face din 5 in 5 procente. Am ales sa implementez numarand si memorand numarul de apasari pe fiecare canal - de la 0 la 20 (0 * 5 = 0%, 20 * 5 = 100%). Folosind acest factor, scalez semnalul PWM in functie de valorile TOP.

Atunci cand semnalul PWM este setat la minim (0), ledurile nu sunt stinse de tot, inca lumineaza foarte putin. Pentru a rezolva acest aspect, am folosit o rezistenta ce conecteaza input-ul PWM al LDD-ului si masa - rezistenta de pull-down. In acest fel se asigura stingerea completa a ledurilor cand semnalul PWM este la minim. Valoarea aleasa a rezistentei este de 10K.

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • 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

Rezultate Obţinute

In momentul de fata, controller-ul poate controla cu succes toate cele 5 canale dorite. Dimand fiecare canal in parte, pot obtine o lumina intre true actinic (doar cu ledurile royal blue (lungime de unda intre 450-465nm) si pana la o temperatura de culoare de aproximativ 10000K (masurat).

Implementarea RTC-ului (Real Time Clock) nu este completa, automatizarea inca nu functioneaza.

Concluzii

Download

radu_malus_code.zip radu_malus_schema.zip

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.