Skocz do zawartości
Tester

Kontroler Lampy LED DIY - parainstrukcja budowy

Rekomendowane odpowiedzi

TomekSz a wzuc jakies foto i opis funkcji

Wysyłane z mojego GT-I9300 za pomocą Tapatalk 2

Edytowane przez zielony mintaj (wyświetl historię edycji)

275 l,Sump 80l, 2x Ecotech RADION xr30w,Bubble King Mini 200,

Reef Octopus MF-70 na ROWA, Skimz + AllInOne BioPellets,

Vortech MP-10 x2, JEBAO DC6000 obieg, Grotech TEC III NG

FM Balling Light, 25kg LR, 18kg LS i pare zwierzaków :)

aquarium1737.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Stanowczo podziel się kodem :)


Kostka 100x100x50cm,

Oświetlenie: 12 x 39W, ATI Sunpower

Cyrkulacja: 2 x Tunze 6095, 1x Tunze 6055

Obieg: NewJet 4500

Reaktor Ca, DIY

Sól: Tropic Marine Pro Reef, RedSea.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Stanowczo podziel się kodem :)

Bardzo proszę, mam nadzieje, ze Tester sie nie obrazi za zasmiecanie tematu:

Tak więc: do arduino podłączyłem: moduł zegara RTC i dwa analogowe potencjometry dla kanału białego i niebieskiego i z arduino wyprowadziłem wyjściami PWM sygnał na drivery kanałów białego i niebieskiego.

Cały ukłąd ma działać w taki sposób, że: zdefiniowałem godzine wschodu i zachodu, lampa załącza się rano od razu do poziomu wyregulowanego przez potencjometry. Jeśli jest dzień to zmany nastaw na potencjometrach regulują poziomem jasności na obydwu kanałach, jesli jest noc, to zmiany nastawów na potencjometrach nie zmieniaja jasności na kanałach tylko później w czasie wschodu lampa zaswieci sie do poziomów ustawionych na potencjometrach. W nocy swieci tylko kanal niebieski symulujac swiatlo ksiezyca.

NIE zrobiłem plynnego wschodu/zachodu, NIE dodałem wyswietlacza, dlatego ze mi sie nie chciało :) Jesli ktos bardzo chce moge to zrobic, u mnie po prostu nie bylo takiej potrzeby bo zrobilem lampe do szczepkarium w sumpie.

A teraz baaaardzo prosty kod z komentami:

#include <Wire.h>

#include "RTClib.h"

RTC_DS1307 RTC;

int whitePotValue = 0; //analogowa wartość na potencjometrze kanału białego

int bluePotValue = 0; //analogowa wartość na potencjometrze kanału niebiekiego

int bluePWMValue = 0; //cyfrowa wartość PWM podawana na driver niebieskich

int whitePWMValue = 0; //cyfrowa wartość PWM podawana na driver białych

bool dzien = true; //wartość logiczna określająca czy jest dzień czy noc

void setup() {

// te 4 linijki ponizej dotycza podlaczenia RTC do arduino

pinMode(16, OUTPUT);

pinMode(17, OUTPUT);

digitalWrite(16, LOW);

digitalWrite(17, HIGH);

Wire.begin();

RTC.begin();

}

// the loop routine runs over and over again forever:

void loop() {

DateTime now = RTC.now();

//tutaj ustawiam godzine/minute/sekunde wschodu

if(now.hour()==10 && now.minute()==0 && now.second()==0 && dzien!=true)

{

dzien = true;

}

//tutaj ustawiam godzine/minute/sekunde zachodu

if(now.hour()==20 && now.minute()==0 && now.second()==0 && dzien==true)

{

dzien = false;

}

//odczytuje wartośc z potencjometrów

int bluePotValue = analogRead(A0);

int whitePotValue = analogRead(A1);

//mapuje wartość analogowe z potencjometrów do wartości PWM

bluePWMValue = map(bluePotValue, 0, 1023, 0, 255);

whitePWMValue = map(whitePotValue, 0, 1023, 0, 255);

//jeśli jest dzień to wysyłam sygnały PWM do driverów

if(dzien)

{

analogWrite(9, bluePWMValue);

analogWrite(10, whitePWMValue);

}

//jeśli jest noc na kanal biały wysylam wartość 0 - nie swieci

// i na kanał niebieski wysylam wartość 10 czyli słabe swiatło symulujące księżycc

else

{

analogWrite(9, 10);

analogWrite(10, 0);

}

delay(100);

}

Edytowane przez TomekSz (wyświetl historię edycji)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak więc: do arduino podłączyłem: moduł zegara RTC i dwa analogowe potencjometry dla kanału białego i niebieskiego i z arduino wyprowadziłem wyjściami PWM sygnał na drivery kanałów białego i niebieskiego.

Właśnie przymierzam się do zastosowania arduino do sterowania lampą. Jednak z elektroniki jestem cienki Bolek :/ Gdybyś mógł napisać, jak połączyłeś Arduino z driverami? Tak samo jak na schemacie Testera?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To ja też dorzucę mój kod. Kanały niebieski i biały zapalają się w 10 krokach. Najpierw niebieski, potem przerwa, a następnie biały. Przerwa standardowo wynosi 0, ale w przypadku konieczności ograniczenia długości świecenia białym światłem, np. przy walce z plagami, możemy sobie ustawić zwłokę. Lampa gaśnie też w sposób płynny, najpierw białe, potem niebieskie. Czas wyłączenia to czas, kiedy lampa przechodzi w tryb nocny. Na podstawie tego czasu, Arduino oblicza kiedy zacząć wyłączać lampę. Kod pozwala ustawić czas włączania, wyłączania, długość pojedyńczego kroku, oraz maksymalne moce kanałów. Aby zastosować kod, potrzebujemy tylko Arduino, zegar RTC1307, oraz sterowalne drivery, np MR2007Vxx.

A oto kod:

#include <Wire.h>

#include <DS1307.h>

#define nieb 11

#define bial 10

void setup()

{

pinMode(nieb, OUTPUT);

Serial.begin(9600);

}

void loop()

{//****************************************************************************************

//***************************************************************************************

// TU USTAWIASZ JAK MA ŚWIECIĆ I NIC WIĘCEJ NIE MUSISZ ROBIĆ

// Oczywiście jak chesz, możesz się pobawić kodem, ale do sterowania lampą wystarczy to co jest.

//***************************************************************************************

int krok = 1; //długość w minutach trwania jednego stopnia rozjaśniania

int maxb = 10; //maksymalna moc kanału białego WARTOŚCI 0-10

int maxn = 10; //maksymalna moc kanału niebieskiego WARTOŚCI 0-10

int plaga = 0; //w przypadku plagi opóźnia zapalanie białego światła w godzinach

int gwl = 12; //godzina załączenia

int mwl = 26; //minuta załączenia

int gwy = 13; //godzina włączenia

int mwy = 35; //minuta wyłączenia

//**************************************************************************************

int GODZ = (RTC.get(DS1307_HR,true)); //godzina pobierana z RTC

int MIN = (RTC.get(DS1307_MIN, true)); //minuta pobierana z RTC

int CZAS = (GODZ*60+MIN); //aktualna godzina podawana w minutach

int CZASWL = (gwl*60+mwl); //czas załączenia podany w minutach

int CZASWY = (gwy*60+mwy); //czas wyłączenia podany w minutach

static int blue; //stopień niebieskiego

static int white; //stopień białego

int mocbia[11] = {

0,15,31,45,63,96,123,160,190,220,255 }; //stopnie mocy kanału białego

int mocnieb[11] = {

10,26,38,45,63,96,123,160,190,220,255 }; //stopnie mocy kanału niebieskiego

int pla;

pla=plaga*60;

//***************************************************************************************

// kolejne stopnie załączania i wyłączania

//***************************************************************************************

//1. przedział od północy do czasu włączenia

if ((CZAS>=0)&&(CZAS<CZASWL))

{

blue=0;

white=0;

}

//2. przedział od załączenia niebieskiego do rozjaśnienia

if ((CZAS>=CZASWL)&&(CZAS<(CZASWL+(krok*maxn))))

{

blue=((CZAS - CZASWL)/krok);

Serial.println("ROZJASNIANIE NIEBIESKIEGO");

}

//3. przedział zwłoka od raozjaśnienia niebieskiego do początku rozjaśniania białego (na wypadek plagi)

if ((CZAS>=(CZASWL+(krok*maxn)))&&(CZAS<(pla+CZASWL+(krok*maxn))))

{

blue=maxn;

white=0;

Serial.println("PRZERWA NA PLAGE");

}

//4. przedział rozjaśnianie białego

if((CZAS>=(pla+CZASWL+(krok*maxn)))&&(CZAS<(pla+CZASWL+(krok*maxn)+(krok*maxb))))

{

blue=maxn;

white=((CZAS-(pla+CZASWL+(krok*maxn)))/krok);

Serial.println("ROZJASNIANIE BIALEGO");

}

//5. przedział świecenie na maksa

if((CZAS>=(pla+CZASWL+(krok*maxn)+(krok*maxb))))

{

blue=maxn;

white=maxb;

}

//6. przedział ściemnianie białego

if((CZAS>=(CZASWY-(krok*maxb)-(krok*maxn))&&(CZAS<CZASWY-(krok*maxn))))

{

blue=maxn;

white=(((CZASWY-krok*maxn)-CZAS)/krok);

Serial.println("SCIEMNIANIE BIALEGO");

}

//7. przedział ściemnianie niebieskiego

if((CZAS>=CZASWY-(krok*maxn))&&(CZAS<CZASWY))

{

white=0;

blue=((CZASWY-CZAS)/krok);

Serial.println("SCIEMNIANIE NIEBIESKIEGO");

}

//8. noc do północy

if((CZAS>=CZASWY))

{

blue=0;

white=0;

Serial.println("NOC");

}

//************************************************

//SAMO STEROWANIE

// ***********************************************

analogWrite(nieb, mocnieb[blue]);

analogWrite(bial, mocbia[white]);

Serial.print("Niebieski : ");

Serial.print(blue);

Serial.print(" Bialy : ");

Serial.println(white);

Serial.print(GODZ);

Serial.print(":");

Serial.println(MIN);

delay(1000);

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Odgrzebie temat.Czy taki http://allegro.pl/arduino-uno-r3-atmel-atmega328-klon-avr-najtaniej-i5035517234.html podejdzie pod driver LDD-100H?

http://www.tme.eu/pl...dcdc/mean-well/

dzięki

Edytowane przez roofii1 (wyświetl historię edycji)

Akwa 315L+sump 135L,blau scuma 150 na pompie jebao 6500,oświetlenie hybryda 4x39WT5+ledchip 210W,2x koralia II 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Panowie czy u was to wszystko tak płynnie działa ze tylko wrzucacie ten kod w arduino i ładujecie? U mnie za kazdym razem wyskakuje masa błedów, nie wiem czy muszę sciagnąc wcześniej jeszcze jakieś biblioteki czy coś ;/

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Ten wątek jest dość stary. Należy rozważyć rozpoczęcie nowego wątku zamiast ożywienia tego.

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.


  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wchodząc do serwisu Nano-Reef, zgadzasz się na warunki Warunki użytkowania.