Skocz do zawartości
nanorafa

DIY sterownik dwu (lub więcej) kanałowy lampy LED

Rekomendowane odpowiedzi

ds18b20 opisałem kilka postów wczesniej czytać, czytać, czytac :)

Czytałem o tym, ale jestem za cienki ,aby dołączyć to jakoś do tego działajacego kodu sterownika LED i dostosować do własnych potrzeb.

Też podpisuję się pod prośbą Komarka,czy możecie dopisać kod, aby 2-3 wyjścia działały jako on/off i sterowały

światłem w refugium oraz załączały świetlówki o określonej godzinie.Byłoby to bardzo pomocne. :smiling:


Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak myślę - czy dodanie kondestatora pomiędzy in a przekaźnikiem nie pomoże w zniwelowaniu migania....

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dobra, postaram się dopisać te 2 przekaźniki.


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chwilka przy browarku i jest kod na 2 przekaźniki, godziny do wpisania w kodzie.

Jak najdzie mnie wena to wyciągnę to do menu, ale to już więcej zabawy.

bezpośrednio pod bibliotekami czyli pod #include dodać konfigurację przekaxników czyli to:

////////// ustawienia przekaźników ///////////////////////////
int przekaznik1 = 6; // numer pinu przekaznika nr. 1
int przekaznik2 = 7; // numer pinu przekaznika nr. 2
int p1_godzina_start = 22; //godzina startu przkaznika nr. 1
int p1_minuta_start = 21; // minuta startu przekaznika nr. 1
int p1_godzina_stop = 22; // godzina stopu przekaznika nr. 1
int p1_minuta_stop = 23;  // minuta stopu przekaznika nr. 1
int p2_godzina_start = 22; //godzina startu przekaznika nr. 2
int p2_minuta_start = 57; //minuta startu przekaznika nr. 2
int p2_godzina_stop = 21; // godzina stopu przekaznika nr. 2
int p2_minuta_stop = 59; //minuta stopu przekaznika nr. 2
////////////////////////////////////////////////

następnie znajdz poniższy kod i zamień go na ten:

void displayTime()
{
 byte second, minute, hour, dayOfWeek, dayOfMonth, month, year, ggg;
 getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
 if (last_seconds == second)
   return;
 last_seconds = second;
 lcd.setCursor(0, 0);
 lcd.print("			    ");
 lcd.setCursor(0, 0);
 if (hour < 10)
   lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");
 if (minute < 10)
   lcd.print("0");
 lcd.print(minute, DEC);
 lcd.print(":"); 
 if (second < 10)
   lcd.print("0");
 lcd.print(second, DEC);
 /////////////////////// PRZEKAŻNIKI 2 SZTUKI /////////////////////////////////////////////////
pinMode(przekaznik1, OUTPUT);
if(hour == p1_godzina_start && minute == p1_minuta_start){
digitalWrite(przekaznik1, HIGH);
}
if(hour == p1_godzina_stop && minute == p1_minuta_stop){
digitalWrite(przekaznik1, LOW);
}
pinMode(przekaznik2, OUTPUT);
if(hour == p2_godzina_start && minute == p2_minuta_start){
digitalWrite(przekaznik2, HIGH);
}
if(hour == p2_godzina_stop && minute == p2_minuta_stop){
digitalWrite(przekaznik2, LOW);
}
 ////////////////////// koniec ///////////////////////////////////////////////
 delay(100);
}

I to już wszystko :)


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chwilka przy browarku i jest kod na 2 przekaźniki, godziny do wpisania w kodzie.

Jak najdzie mnie wena to wyciągnę to do menu, ale to już więcej zabawy.

bezpośrednio pod bibliotekami czyli pod #include dodać konfigurację przekaxników czyli to:

////////// ustawienia przekaźników ///////////////////////////
int przekaznik1 = 6; // numer pinu przekaznika nr. 1
int przekaznik2 = 7; // numer pinu przekaznika nr. 2
int p1_godzina_start = 22; //godzina startu przkaznika nr. 1
int p1_minuta_start = 21; // minuta startu przekaznika nr. 1
int p1_godzina_stop = 22; // godzina stopu przekaznika nr. 1
int p1_minuta_stop = 23; // minuta stopu przekaznika nr. 1
int p2_godzina_start = 22; //godzina startu przekaznika nr. 2
int p2_minuta_start = 57; //minuta startu przekaznika nr. 2
int p2_godzina_stop = 21; // godzina stopu przekaznika nr. 2
int p2_minuta_stop = 59; //minuta stopu przekaznika nr. 2
////////////////////////////////////////////////

następnie znajdz poniższy kod i zamień go na ten:

void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year, ggg;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (last_seconds == second)
return;
last_seconds = second;
lcd.setCursor(0, 0);
lcd.print("			 ");
lcd.setCursor(0, 0);
if (hour < 10)
lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10)
lcd.print("0");
lcd.print(minute, DEC);
lcd.print(":");
if (second < 10)
lcd.print("0");
lcd.print(second, DEC);
/////////////////////// PRZEKAŻNIKI 2 SZTUKI /////////////////////////////////////////////////
pinMode(przekaznik1, OUTPUT);
if(hour == p1_godzina_start && minute == p1_minuta_start){
digitalWrite(przekaznik1, HIGH);
}
if(hour == p1_godzina_stop && minute == p1_minuta_stop){
digitalWrite(przekaznik1, LOW);
}
pinMode(przekaznik2, OUTPUT);
if(hour == p2_godzina_start && minute == p2_minuta_start){
digitalWrite(przekaznik2, HIGH);
}
if(hour == p2_godzina_stop && minute == p2_minuta_stop){
digitalWrite(przekaznik2, LOW);
}
////////////////////// koniec ///////////////////////////////////////////////
delay(100);
}

I to już wszystko :)

Pinki jesteś wielki,że to robisz dla nas bezinteresownie,ale dla mnie to i tak czarna magia.

Mógłbyś proszę to dopisać do tego pierwszego kodu Nano fafy na 2 kanały,tak aby stanowiło całość ?

Bardzo proszę.

Pozdrawiam Mariusz

Jeśli tak to byłoby super


Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

masz gotowca 2 kanały i 2 przekazniki

na samym poczatku kodu musisz wpisać godziny startu i stopu przekazników.

_2kana_y_2_przekazniki.zip


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

masz gotowca 2 kanały i 2 przekazniki

na samym poczatku kodu musisz wpisać godziny startu i stopu przekazników.

Pinki szacun :czapki z głów:) dla Ciebie to naprawdę działa :thumbsup: .

Jak sam próbowałem to dopisać to kompilator wywalał mi błędy.

Teraz jest ok. :clapping :clapping :clapping

Edytowane przez Mark112 (wyświetl historię edycji)

Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja mam dodany termometr z ustawioną temperaturą graniczną po przekroczeniu której odpalają się

wentylatory radiatora. Niestety nie chciało mi się wyciągać do menu zapisu temperatury granicznej

więc trzeba ją wpisać bezpośrednio w kodzie, na wyświetlaczu podawana jest aktualna temperatura oraz

stan wiatraków On / Off. Jak ktoś jest zainteresowany to mogę udostępnić.

Aha termometrów można mieć kilka bo każdy ma swój unikalny adres.

Pinki Dobrodzieju :smiling: czy mógłbym Cię jeszcze prosić,abyś w wolnej chwili do tego kodu,

który wczoraj zrobiłeś na 2 kanały PWM i 2 przekaźniki on/off dołożył jeszcze obsługę termometru z Twojego postu powyżej.

Ja nie potrafię tego samodzielnie zrobić,a dzięki Tobie tacy jak ja będą mieli całkiem funkcjonalne urządzonko do sterowania pracą akwarium.

Prosiłbym jeszcze o krótką instrukcję jak podłączyć termometr do arduino z Twojego projektu.

Czy jedno wyjście PWM z arduino mogę połączyć do 2 wejść PWM driverów LED tak aby nimi sterować,

bo np.niebieskie diody mam w 2 nitkach po 6 szt.na 2 driverach.

Edytowane przez Mark112 (wyświetl historię edycji)

Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jedno wyjście PWM łączysz z 2 driverami, wystarczy mały mostek od drivera do drivera.

Co do termometru to oczywiście kod mogę dodać tylko jest pytanie co ty będziesz nim mierzył ?

Temperaturę wody (informacyjnie), czy radiatora ?

Bo jeśli radiatora to to dojdzie do tego jeszcze sterowanie wentylatorami radiatora.


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pinki,a mógłbyś wkleić kod do przekazników do softu na 5 PWM od Nanorafy?

Coś źle wklejam i nie działa....

Proszę ładnie...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jedno wyjście PWM łączysz z 2 driverami, wystarczy mały mostek od drivera do drivera.

Co do termometru to oczywiście kod mogę dodać tylko jest pytanie co ty będziesz nim mierzył ?

Temperaturę wody (informacyjnie), czy radiatora ?

Bo jeśli radiatora to to dojdzie do tego jeszcze sterowanie wentylatorami radiatora.

Myślałem o mierzeniu temperatury wody i tak jak w Twoim przypadku sterowaniu wentylatorami po przekroczeniu temperatury wody latem.Czyli zmianie w Twoim projekcie, o ile dobrze myślę ulegnie tylko temp.przy której włączy się wentylator i przy której wyłączy.

Edytowane przez Mark112 (wyświetl historię edycji)

Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dla komarka

Aha ustawione jest to tak że o określonej godzinie (startu) na pinie przekaźnika pojawi się stan wysoki.

więc sprawdź jak masz podpięty przekaźnik lub zmień w kodzie HIGH NA LOW.

_5pwm_2przekazniki.zip


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sprawdze,ale te przekazniki nie mają ustawienia....

Mam te http://www.allegro.pl/ShowItem2.php?item=4862928951

Ale nawet jeśli aktywnie je stan niski to no problem. Zrobię start na stop i tyle.

Dzięki serdeczne.

Mam jeszcze jeden problem. Otóż mam 2 arduino. Jedno ( obecnie w lampie) niby jest sprawne, ale nie komunikuje się z kompem. Drugie działa po podłączeniu do usb, jest komunikacja, ale u palił em cuś przy gnieździe zasilenia. Działa więc tylko pod USB.

Co poszło i co wymienić?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zapewne padła przetwornica, ale ja bardziej programista niż elektronik jestem, lepiej napisz na elektrodzie

tam ci dokładnie powiedzą co i jak. Ja bym na szybko dolutował się z zasilaczem 5v do usb. Pierwszy i ostatni styk

to gnd i vcc ale zerknij jeszcze w schemat.


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Spoko

A co do softu - cztam piny przekaźników 15 i 16, piny lcd 26,27.....

To na Uno jest?

Żeby zmienić na sterowanie st.niskim wystarczy navkońcu zmienić Low z High ?

Edytowane przez Komarek (wyświetl historię edycji)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Teraz termometr

Tu sprawa jest bardziej zagmatwana bo musisz najpierw odczytać adres swojego termometru

który ma swój unikatowy adres.

Podłączenie to gnd, wcc, oraz dane które idą do pinu cyfrowego, w załączonym kodzie jest to pin 20

możesz zmienić w/g własnego uznania.

Po załadowaniu kodu (z załącznika) narzędzia / monitor portu szeregowego, w oknie monitora zobaczysz adres czujnika

Skopiować i zapisać ten adres.

Teraz otwierasz kod sterownika z dołączonym oprogramowaniem termometru (załącznik)

i w kodzie w lini:

#define ONE_WIRE_BUS 52 // numer pinu pod który podpięty jest termometr

następnie w lini

DeviceAddress insideThermometer = { 0x28, 0xF4, 0x3A, 0x5E, 0x6, 0x0, 0x0, 0x95 }; // wpisujesz wcześniej skopiowany adres swojego termometru.

następnie:

int wiatrakPin = 32; // pin pod który podpięty jest przekaźnik do wentylatorów

następny:

int temp_graniczna = 28.00; //trmperatura po przekroczeniu której zostanie załączony przekaźnik wentylatorów.

Teraz ładujesz cały kod i wszystko.

Komarek bo pisze na mega stąd te dziwne numery pinów, ale spoko na uno też będzie działać

jak zmienisz piny oczywiście :)

_2kanaly_2_przekazniki_termometr.zip

teromometr_odczyt_adresu.zip


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok.

Ale licząc piny na Uno ich brak nie.

Spróbuje dopisać 3 Ci kanał do Twojej wersji 2+2

Czy piny do przekaźnika dopisuje się tylko na początku?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok.

Ale licząc piny na Uno ich brak nie.

Spróbuje dopisać 3 Ci kanał do Twojej wersji 2+2

Czy piny do przekaźnika dopisuje się tylko na początku?

Deklaracja pinów i godzin na początku kodu, a w srodku jeszcze musisz dopisać warunek a właściwie 2

if na włączenie i wyłączenie.


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pinki

jeszcze jedno pytanie, czy do czujnika temperatury DS18B20 nie trzeba dać rezystora,

gdziś czytałem o jakimś oporniku 4,7k Ohma podłączonym do czujnika.

Czy wystarczy tyko takie wpięcia jak opisałeś w poście powyżej.

Pozdrawiam i dziekuję .


Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pinki

jeszcze jedno pytanie, czy do czujnika temperatury DS18B20 nie trzeba dać rezystora,

gdziś czytałem o jakimś oporniku 4,7k Ohma podłączonym do czujnika.

Czy wystarczy tyko takie wpięcia jak opisałeś w poście powyżej.

Pozdrawiam i dziekuję .

tak dodaj rezystor.


acee4e0f3e82859a8ba176830428e15au882a770.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrobiłem wczoraj mix - 3 kanały i 2 przekaźniki. Dzięki Pinki.

Niestety kupa - Arduino w lampie nie komunikuje się z klub kompem. Drugie nie działa ns gnieździe zasilania. Trza będzie programować procesor w jednym i przekładać do tego z lampy.....

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Teraz termometr

Tu sprawa jest bardziej zagmatwana bo musisz najpierw odczytać adres swojego termometru

który ma swój unikatowy adres.

Podłączenie to gnd, wcc, oraz dane które idą do pinu cyfrowego, w załączonym kodzie jest to pin 20

możesz zmienić w/g własnego uznania.

Po załadowaniu kodu (z załącznika) narzędzia / monitor portu szeregowego, w oknie monitora zobaczysz adres czujnika

Skopiować i zapisać ten adres.

Mam problem z odczytem adresu czujnika.Program do odczytu zaladował sie prawidłowo do arduino ,ale w monitorze portu szeregowego nic się nie pokazuje.Czujnik mam w metalowej rurce z wyprowadzonymi przewodami przewodami :

czerwony wpięty do +5v ,

czarny do masy

zółty (data) do arduino do pinu nr 2 .

W kodzie zmieniłem numer pinu z 20 na 2 ,tak jak mam to wpięte.

Dałem też opornik 4,7 k ohma podłączony między żółty a +5V.

Niestety adres się nie pokazuje w monitorze.

Czy czujnik może być uszkodzony czy robię coś nie tak ?


Mark 112

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak czujnik jest w rurce to montujesz go bez opornika, opornik dotyczy tylko samego czujnika !!!

A ty masz gotowy zestaw.


acee4e0f3e82859a8ba176830428e15au882a770.png

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.