
Witajcie moi drodzy
Przedstawię tutaj krótki test nocnego światełka BW-LT10 od Blitzwolfa. Jest to prosta lampka która może zapalać się automatycznie gdy w pokoju jest ciemno, może również być przełączana ręcznie. Pokażę też tutaj jej wnętrze, a na koniec podmienię jej układ kontrolera na PIC12F675 (o zgodnych wyprowadzeniach) i zademonstruję, jak można samodzielnie zaprogramować sterowanie takiej lampki w języku C.
Uwaga: lampka stąd nie posiada żadnego WiFi i nie jest sterowana z telefonu (podkreślam to tutaj dlatego, że wiele produktów Blitzwolfa takie coś oferuje i można łatwo ulec złudzeniu, że ta lampka też...)
Zakup BW-LT10
BW-LT10 kupiłem za jakieś 7$ (mam wrażenie, że koszt przesyłki na zrzucie ekranu jest większy niż w momencie gdy kupowałem), czyli około 26 zł:

Parametry (wg. sprzedawcy):
Brand | BlitzWolf |
Model | BW-LT10 |
Working Voltage | AC100-240V |
Working Current | Max. 0.1A |
Rated Power | 1W |
Standby Power | 0.2W |
Lumens | 20lm |
Color Temperature | 3000K |
Rendering index | ≥80 |
Lighting Angle | 120° |
Luminous Maintenance Rate | 85% |
Life-span | 30000h |
Working Temperature | -20℃ - 45℃ |
LED Amounts | 4pcs x 0.2W 2835 3000K |
Material | ABS + PC |
Net Weight | 45g(US Plug) 60g(EU Plug) |
Size | 55x55x50mm(US Plug) 60x60x68.5mm(EU Plug) |
Certification | FCC, RoHS(US Plug) CE, RoHS(EU Plug) |
Sprzedawca dobrze tłumaczy działanie BW-LT10 na tych dwóch grafikach:


A nawet pokusił się o szkic wnętrza lampki:

Grafika powyżej sugeruje też, że w środku jest 6 diod LED. Zaraz się przekonamy, czy tak rzeczywiście jest.
Pierwsze wrażenie
Lampka zapakowana jest tak jak większość produktów Blitzwolfa, czyli biało-zielone pudełeczko:


Pudełeczko jest podpisane: BW-LT10Plug-In Night Light, EU PLUG, POA3864346.

Sam produkt prezentuje się tak:



Tryby pracy lampki
Lampka ta posiada w zasadzie dwa tryby pracy. Tryby przełącza się dłuższym przyciśnięciem przycisku.
Tryb podstawowy (niebieska dioda LED zgaszona; wciśnięcie przycisku włącza/wyłącza światło):

Tryb nocny (o jego działaniu informuje nas niebieska dioda LED; lampka sama zapala się gdy w pomieszczeniu jest ciemno):

Tryb nocny jest rozszerzony też o tzw. "trzeci tryb", który polega na tym, że gdy ponownie wciśniemy przycisk to lampka sama zgaśnie po 30 minutach.
Wnętrze BW-LT10
Do środka jest bardzo łatwo się dostać. Nie ma żadnych śrubek. Po prostu zdejmuje się górną pokrywę, trzeba ją jednak lekko podważyć. Rodzi to pewne obawy, czy ta pokrywa po dłuższym użytkowaniu sama komuś nie spadnie?

W środku jest pięć diod LED; wkładka z tworzywa dobrze rozprasza ich światło:

Przegródka/ścianka też łatwo się wyciąga:

Teraz przyjrzymy się środkowi przy lepszym oświetleniu. PCB podpisane jest NL-EUP01:

Zasilanie lampki nie posiada izolacji galwanicznej.

Rzuca się w oczy duży rezystor bezpiecznikowy (F1) oraz mostek prostowniczy MB6F:

Zasilanie zrealizowane jest na OB2222MCP (kontroler przetwornicy buck/buck-boost):

Warto zapoznać się z jego notą aplikacyjną, gdyż pokazuje ona nam mniej więcej jak zbudowana jest sekcja zasilania lampki:

Na płytce widać też dwie diody prostownicze z powyższego schematu. Jedna z nich oznaczona jest M7 (to po prostu 1N4007), a druga to RS1M (czyli dioda szybka):

Dławik ze schematu na zdjęciu podpisany jest 471, czyli 470uH. Ten drugi dławik obok widoczny na PCB (zielony, osiowy) nie jest uwzględniony na schemacie powyżej, ale podłączony jest między dwa kondensatory elektrolityczne po stronie sieciowej i formuje filtr PI (widziałem już podobne zabiegi na wejściach innych produktów od Blitzwolfa).
Napięcie wyjściowe tutaj to 5V a częstotliwość pracy to z reguły 40kHz:

Samymi diodami steruje niepodpisany układ poprzez jeden tranzystor A2SHb, czyli SI2302DS (MOSFET typu N):

SI2302DS wyprowadzenia i kilka parametrów:

Po jego parametrach (oraz po samym PCB) widać, że te diody LED w środku zasilane są z 5V.
Teraz trzeba wyjąć całkiem płytkę. Trzyma się ona tylko na dwóch lutach od wtyczki. Tu też nie ma śrubek:


Spód PCB:

Układ kontrolujący logikę lampki nie jest podpisany, ale ma przy sobie miejsce na czteropinowe złącze, być może do programowania:

Na tym złączu dostępne jest 5V:

"Kwadratowy"/pierwszy pad to 5V, drugi to GND:

Noty katalogowe elementów ze środka:
Schemat BW-LT10
Na bazie zdjęć powyżej oraz kilku dodatkowych pomiarów naszkicowałem schemat lampki, a właściwie jej części odpowiedzialnej za kontrolę świecenia i przycisku. Części odpowiedzialnej za zasilanie nie rysowałem, bo przykładowa aplikacja OB2222MCP nam go wystarczająco tłumaczy.

Raczej bez większych niespodzianek. Na schemacie:
- BLUE_LED - to jest dioda 'standby' niebieska
- BUTTON - to przycisk, posiada rezystor pull-up 10k
- SENSOR - to czujnik oświetlenia, też z pull-up
- LIGHT - to wyjście sterujące diodami LED poprzez tranzystor Si2302DS (podpisany A2SHb; nie umieściłem go na schemacie)
- pin 1 układu kontrolera to VDD (5V)
- pin 8 to masa
- piny 6 i 7 służą zapewne do programowania
Próby programowania
Ten układ wyprowadzeń skojarzył mi się z pewnym PICem. Próbowałem podpiąć się PICKITem i sprawdzić, czy to jest mikrokontroler PIC, ale bez rezultatów. Nawet jak podpinałem piąty sygnał (MCLR). Złącze do programowania PICów wygląda tak:

Oczywiście na czas testów zasilałem układ przez USB - nie należy podejmować prób podłączania programatora do czegoś co jest podłączone do sieci, a tym bardziej bez izolacji galwanicznej!


Podmiana serca lampki na PICa
Nie udało mi się zaprogramować układu na którym zbudowana jest lampka, ale to wcale nie oznacza, że nie uda się zrobić pod nią własnego wsadu. Wyprowadzenia jej sterownika są mimo wszystko zgodne z PIC12F675, co oznacza, że można dokonać podmianki.

Przygotowałem swoje PICe:

Usunąłem układ który tam siedział:

Na jego miejsce wlutowałem tego PICa:

Jego nota katalogowa:
Gotowa konfiguracji do pracy (sygnał MCLR, czyli RESET podprowadzony jest bezpośrednio do pinu PICa):

PICKIT2 oczywiście poprawnie wykrywa tak podłączonego PICa:

Więc teraz pora troszkę poprogramować. Spróbujemy odwzorować funkcjonalność lampki na tym PICu.
Własny program na PIC12F675 - miganie lampą
Pierwszy program dla lampki jaki napisałem to klasyczny blink. Użyłem do tego Mikro C PRO for PIC, ale to nie ma znaczenia, bo program jest taki prosty, ze równie dobrze można go skompilować w SDCC (ew. trzeba tylko zmienić nazwę rejestru i funkcji delay).
Kod:
Code: c
Rezultat:
Na filmie może tego nie widać, ale niebieska dioda też miga.
Własny program na PIC12F675 - demo przycisku
Drugi przykładowy program demonstruje nam obsługę przycisku. Przycisk jest na pinie GPIO2, posiada rezystor pull-up (czyli jest podciągnięty do zasilania), domyślnie jego odczyt zwraca 1, ale gdy wciśniemy przycisk to zewrzemy pin do masy i odczytujemy 0. Łatwo to sprawdzić tak jak pokazałem poniżej:
Code: c
Te delay_ms(1000) w kodzie to najbardziej prymitywne jak się da rozwiązanie problemu drgania styków (by już bardziej nie komplikować).
Rezultat:
Własny program na PIC12F675 - demo czujnik oświetlenia
Teraz pora sprawdzić działanie czujnika oświetlenia. Niektórzy chcieliby użyć tutaj ADC, czyli przetwornika analogowo-cyfrowego, by odczytać napięcie na pinie, ale nie jest to wcale potrzebne. Wystarczy użyć cyfrowego wejścia, tak jak dla przycisku (i w razie czego dobrać rezystor).
Dodatkowo tutaj jeszcze jest jeden mały problem, a mianowicie czujnik oświetlenia jest na pinie IO numer 3, który ma też rolę RESET/MCLR i bierze udział w programowaniu:

Na szczęście można go użyć też w trybie wejścia cyfrowego (choć wyjściem już być nie może):

W tym celu w konfiguracyjnych bitach PICa trzeba odpowiednio ustawić jego rolę:

Kod:
Code: c
Rezultat:
Własny program na PIC12F675 - finalny własny wsad dla lampki
Teraz można zebrać w całość przedstawione wcześniej fragmenty kodu i odwzorować pierwotne zachowanie lampki. Czyli dwa tryby pracy, które przełączamy przyciskiem. Jeden tryb to automatyczne zapalanie gdy jest ciemno, a drugi to ręczne włączanie kiedy chcemy.
W kodzie za pomocą #define określiłem co jest na jakim pinie. Dodatkowo utworzyłem enum określający bieżący stan lampki oraz zmienną rem_light_loops która określa jak długo jeszcze będą świecić się LEDy.
Code: c
Ostateczna wersja mojej lampki niestety wymagała drobnej modyfikacji na PCB. Czujnik oświetlenia był zbyt czuły - włączał lampkę nawet gdy było względnie jasno w otoczeniu. Musiałem zwiększyć wartość rezystora do zasilania. Zwiększyłem ją o kilkadziesiąt kΩ. Troszkę było zabawy z jej dobieraniem. Na pewno byłoby o wiele prościej gdyby użyć tutaj ADC, bo można by było ustawić wartość progową w kodzie.
Rezultat:
Podsumowanie
Pokazałem tu wnętrze lampki BW-LT10 od Blitzwolfa. Układ w środku jest bardzo prosty, ale jak widać sprawdza się w praktyce. Nie udało się mi rozpoznać na czym zrealizowana jest logika lampki, podejrzewałem, że jest to PIC ale programator go nie wykrywał. Ostatecznie zamieniłem układ ze środka na swojego PICa (PIC12F675) i od zera napisałem wsad dla lampki który odwzorowuje jej funkcjonalność.
Wszystkie kody umieszczone są w treści tematu, ale w razie czego tu daję pełny projekt:
Cool? Ranking DIY