Witam.
Dotychczasowe moje wpisy dotyczyły RaspberryPI oraz ESP8266. Tym razem chciałbym Wam zaprezentować proste rozwiązanie, które pozwala zbudować kontroler oświetlenia LED (rgbw) i sterować nim za pośrednictwem smartfona.
Potrzebne elementy to:
- Smartfon z systemem Android (min. 3.1.x) – w chili obecnej aplikacja dla iOS nie obsługuje jeszcze RGB
- Arduino MEGA (http://botland.com.pl/arduino-moduly-glowne/1062-arduino-mega-2560-rev3.html)
- Ethernet Shield (http://botland.com.pl/arduino-shield-komunikacja/3779-ethernet-shield-dla-arduino-z-czytnikiem-kart-microsd.html)
- Pięć rezystorów 1k
- Pięć tranzystorów typu N-Channel MOSFET np. IRFZ44N
- Płytka stykowa (http://botland.com.pl/plytki-stykowe/55-plytka-stykowa-a-830-otworow.html)
- Przewody połączeniowe
- Zasilacz 12V
- Taśma LED (rgbw) (https://www.eled.pl/tasmy_led_rgbw_5050)
Na początek krótki film prezentujący rozwiązanie opisywane w tym artykule.
1. Zaczynamy od połączenia wszystkich elementów razem.
Przewody RED, GREEN, BLUE, WHITE oraz +12V należy podłączyć do taśmy LED RGBW
2. Pobieramy bibliotekę SuplaDevice dla Arduino MEGA z https://www.supla.org/download/ArduinoSuplaDevice.zip i instalujemy ją w Arduino IDE (Menu Szkic->Dołącz bibliotekę->Dołącz bibliotekę ZIP)
3. W Arduino IDE otwieramy przykład SuplaEthernetShield_RGBW (Menu Plik->Przykłady->SuplaDevice->SuplaEthernetShield_RGBW)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
#include <SPI.h> #include <Ethernet.h> #include <SuplaDevice.h> /* * SUPLA DEVICE - ARDUINO - ETHERNET SHIELD & RGBW * Autor: Przemyslaw Zygmunt <przemek@supla.org> */ #define RED_PIN 44 #define GREEN_PIN 45 #define BLUE_PIN 46 #define BRIGHTNESS_PIN 7 #define COLOR_BRIGHTNESS_PIN 8 unsigned char _red = 0; unsigned char _green = 255; unsigned char _blue = 0; unsigned char _color_brightness = 0; unsigned char _brightness = 0; void get_rgbw_value(int channelNumber, unsigned char *red, unsigned char *green, unsigned char *blue, unsigned char *color_brightness, unsigned char *brightness) { *brightness = _brightness; *color_brightness= _color_brightness; *red = _red; *green = _green; *blue = _blue; } void set_rgbw() { analogWrite(BRIGHTNESS_PIN, (_brightness * 255) / 100); analogWrite(COLOR_BRIGHTNESS_PIN, (_color_brightness * 255) / 100); analogWrite(RED_PIN, _red); analogWrite(GREEN_PIN, _green); analogWrite(BLUE_PIN, _blue); } void set_rgbw_value(int channelNumber, unsigned char red, unsigned char green, unsigned char blue, unsigned char color_brightness, unsigned char brightness) { _brightness = brightness; _color_brightness= color_brightness; _red = red; _green = green; _blue = blue; set_rgbw(); } void setup() { Serial.begin(9600); set_rgbw(); // Set RGBW callbacks SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value); // Podmień poniższy GUID char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; // z tym, który odczytasz pod adresem https://www.supla.org/arduino/get-guid // Adres MAC uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05}; /* * Jeżeli urządzenie było już wcześniej zarejestrowane na cloud.supla.org, * a chcesz zniemić kolejność lub ilość kanałów, * to musisz wcześniej usunąć to urządzenie z cloud.supla.org. * W innym przypadku otrzymasz błąd konfliktu kanałów "Channel conflict!". */ //KANAŁ0 - Kontroler RGB i ściemniacz (RGBW) SuplaDevice.addRgbControllerAndDimmer(); /* * SuplaDevice - inicjalizacja. * Adres serwera, identyfikator lokalizacji i hasło lokalizacji odczytasz z https://cloud.supla.org * Jeżeli nie masz jeszcze konta możesz je założyć pod adresem https://cloud.supla.org/account/create * SUPLA i SUPLA CLOUD są bezpłatne * */ SuplaDevice.begin(GUID, // Globalny unikalny identyfikator urządzenia mac, // Adres MAC "svr1.supla.org", // Adres serwera SUPLA 0, // Identyfikator lokalizacji ""); // Hasło lokalizacji } void loop() { SuplaDevice.iterate(); } |
4. W powyższym kodzie należy zamienić GUID
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} na ten wygenerowany na stronie https://www.supla.org/arduino/get-guid
5. Następnie należy zarejestrować się na https://cloud.supla.org (rejestracja i korzystanie są bezpłatne ) i odczytany tam ID lokalizacji oraz hasło lokalizacji należy przepisać do parametrów wywołania funkcji SuplaDevice.begin
6. Po zmodyfikowaniu powyższego kodu należy wgrać go do Arduino i uruchomić urządzenie.
7. Arduino po połączeniu z serwerem pojawi się na cloud.supla.org na liście urządzeń. Należy otworzyć właściwości kanału 0 i zmienić typ kanału na “Ściemniacz i oświetlenie RGB”
8. Pobieramy aplikację na Smartfon z GooglePlay https://play.google.com/store/apps/details?id=org.supla.android
9. W ustawieniach aplikacji wprowadzamy adres serwera, id dostępu oraz hasło dostępu, które należy odczytać na cloud.supla.org
Gotowe.
Strona domowa projektu: https://www.supla.org
Forum (pomoc) projektu: https://forum.supla.org
czy możliwa jest konfiguracja dla LED WS2812
https://github.com/romi06/WS2812-bluetooth
Po ominięciu sterownika – tak
Pracuję nad podobną rzeczą, z tym że sterowanie jest za pomocą RPi, a ledy są tylko RGB (bez białej).
Korzystam z tych samych mosfetów i niestety prawdopodobnie nie do końca się otwierają. Po pierwsze logika maliny to 3.3v a jeszcze w szeregu mam diody schottkiego które zdejmują jakieś 0.1-0.2V. W dodatku kolor czerwony dużo słabiej świeci. Czy Autor może mi coś w tej kwestii doradzić?
Druga sprawa widzę 5 tranzystorów, 4 do sterowania każdym kolorem, a piąty?
3 tranzystory do kolorów R G B
1 tranzystor do koloru białego
1 tranzystor do ściemniania RGB. Z uwagi na to, że Arduino ma PWM-a 8 bitowego to ciężko zrobić ściemnianie na 3 tranzystorach dodając odpowiedni współczynnik. Na ESP8266 powinno być już trochę inaczej. Co do pozostały kwestii to elektronikiem nie jestem i trudno mi to coś precyzyjnie doradzić.
Bardzo dziękuję za odpowiedź.
Jeszcze dwa pytania, czy rezystory nie powinny znaleźć się między bramką a masą w celu odprowadzenia ładunku?
Czy dołożyłeś jakiś radiator do tranzystora pełniącego rolę ściemniacza? U mnie na listwie o długości ~1.8m te mosfety były lekko ciepłe, a na tym odkłada się prąd z trzech wcześniejszych.
Ja testuję to na taśmie 1m i są zimne.
Generalnie części jakie użyłem są takie jakie miałem pod ręką. Ogólnie rzecz biorąc układ powinien być bardziej dopracowany ale tu chodziło bardziej o to aby zaprezentować działanie. Prawdopodobnie przygotujemy coś bardziej precyzyjnego, ale to już na ESP8266.
Piąty pewnie całosciowy do sterowania strumieniem światła jasno -ciemno.
po co arduino mega?
Ten szeregowy rezystor do bramki nie jest niezbędny, taki mosfet można do mikrokontrolera podłączyć właściwie bezpośrednio.Rezystor taki napewno przyda się np.: w przypadku wewnętrznego zwarcia bramki z drenem. Wskazany jest też rezystor bramka-gnd, który rozładuje pojemność wejściową tranzystora w momencie przełączania. Dobór parametrów pracy tranzystorów w tym przypadku zależy m.in. od wielkości obciążenia czy częstotliwości PWM itd. Dla 1m taśmy ten model tranzystora to “duży kaliber” ale kwestia samego tranzystora wykonawczego jest tu jak pisze autor raczej drugoplanowa dużo ciekawszy jest sposób w jaki działa cały system i jakie daje możliwości. Jestem pod wrażeniem.
Trochę dziwnie rozwiązane. Strona upadnie i już nasz system przestanie działać, nie lepiej napisać sobie samemu takie coś? Znaczy, ja rozumiem, że będzie to znacznie trudniejsze ale i znacznie lepsze.
Można postawić własny niezależny serwer s domu.
Mam coś takiego z maliną i nano podłączone do hyperiona – robie tez za ambilight w tv.
A czy w zamian za ethernet shield można użyć ESP 8266 ?
ESP8266 może działać jako nieależny układ. Nie trzeba wtedy Arduino.
jesteście w stanie zrobić jak ma to wyglądać z ESP??
obrazkowo???
Czy zamiast arduino mega można użyć innego modelu?
Będzie działać na klonie arduino nano bez żadnych modyfikacji?
A da sie to zrobic by działalo tylko sciemnianie i rozjasnianie na tasmie led białej
Krótko: tak.
Trochę dłużej: trzeba wyrzucić z kody obsługę kolorów.
Do sterowania starczy jeden mosfet. Osobiście dałbym odbiór danych po UDP, lub prostą usługę REST i całkowicie pominął wypychanie danych na zewnątrz. Tutoriali na to jest mnóstwo.
Ja mam oświetlenie LED od producenta Klusdeisgn.pl Muszę wykombinować coś podobnego u siebie :)