- moduł nadawczy jest zasilany baterią CR2032 i podłączamy do niego wyłącznik oświetlenia koniecznie tzw. dzwonkowy, czyli chwilowy,
- moduł odbiorczy steruje źródłem światła 230 V i jest zasilany z tego napięcia,
- maksymalny prąd styków: 5 A, 250 VAC,
- moduł nadawczy zaprojektowany na okrągłej płytce o średnicy zaledwie 40 mm,
- moduł odbiorczy zaprojektowany na okrągłej płytce o średnicy 60 mm,
- moduły są powiązane ze sobą za pomocą ustawianego adresu, liczba adresów: 32,
- częstotliwość pracy transceivera: 868 MHz,
- zasięg w terenie otwartym: ok. 100 m.
Zależało mi na tym by nadajnik tego systemu pracował na zasilaniu bateryjnym i charakteryzował się minimalnym poborem mocy zapewniającym długą pracę urządzenia. W jednym z moich poprzednich projektów – energooszczędnym systemie pomiaru temperatury z EP8/2018 i EP9/2018 zdobyłem duże doświadczenie w zakresie obsługi bardzo ciekawych modułów RFM-12B pracujących w paśmie 433, 868 lub 915 MHz (w zależności od wersji). Są one przedstawicielami całej rodziny modułów radiowych produkowanych przez firmę HopeRF. Dlatego zdecydowałem się na ich zastosowanie również w tym projekcie.
Moduły, o których mowa stanowią kompletne rozwiązanie toru radiowego nadawczo-odbiorczego dostarczając wygodny interfejs komunikacyjny SPI pozwalający na przeprowadzenie pełnej konfiguracji elementu w ramach dostępnej szerokiej palety ustawień jak i sterowanie komunikacją radiową. W tym miejscu nie będę powtarzał informacji dotyczących specyfikacji i obsługi tych peryferiów, gdyż takowe zamieściłem w ramach wspomnianych wcześniej artykułów w związku z czym zainteresowanych tymi szczegółami Czytelników odsyłam do pozycji powyżej.
Specyfikacja systemu
Zanim przejdę do schematów urządzenia kilka słów napiszę na temat specyfikacji całego systemu. Tak, jak wspomniano, system wi-link składa się z dwóch modułów komunikacyjnych: nadawczego (wi-link-tx), do którego podłączamy obsługiwany wyłącznik oświetlenia (koniecznie tzw. dzwonkowy, czyli chwilowy) i odbiorczego (wi-link-rx), który steruje źródłem światła 230 V (zasilany sieciowo). Moduł nadawczy pracuje na zasilaniu bateryjnym w postaci pastylki CR2032 i większość swojego czasu „spędza” w uśpieniu (dla ograniczenia poboru mocy) czekając na zmianę stanu obsługiwanego wyłącznika. Wspomnianej zmianie stanu towarzyszy wybudzenie układu (mikrokontrolera i modułu RF), wysłanie komunikatu do adresowalnego odbiornika i ponowne uśpienie urządzenia. W ten prosty sposób ograniczamy do minimum pobór energii ze źródła zasilania pozwalając na wieloletnią pracę urządzenia.
Uważny Czytelnik dostrzeże pewne ograniczenia i sformułuje związane z nimi zapytania. Otóż bateria CR2032 przeznaczona jest do zasilania urządzeń (3 V) cechujących się bardzo niskim poborem prądu rzędu ułamków mA do pojedynczych mA. Nasz układ po wybudzeniu aktywuje nadajnik modułu RFM-12B, który w czasie transmisji pobiera prąd rzędu 23 mA, co stanowi bardzo duże obciążenie dla niewielkiej baterii zasilającej. Na szczęście transmisja trwa około 10 ms, w związku z czym pobrana energia jest bardzo mała, niemniej jednak takie obciążenie skromnej baterii ma pewne reperkusje. Po pierwsze z czasem spada jej znamionowa pojemność, napięcie znamionowe oraz wzrasta rezystancja wewnętrzna. Spadek pojemności nie jest jakiś drastycznie wielki, ale można go szacować na 25%, przy spadku napięcia baterii do 2,2 V. Zagadnienie jest naprawdę bardzo ciekawe, w związku z czym zachęcam ambitnych Czytelników do zgłębienia tematu. Warto zajrzeć na stronę https://bit.ly/3Ol42zY, gdzie inżynierowie firmy Energizer i Nordic Semiconductor bardzo drobiazgowo omówili ten interesujący temat w dokumencie o nazwie „High pulse drain impact on CR2032 coin cell battery capacity”.
Na szczęście główne podzespoły nadajnika pracują już przy niewielkich napięciach zasilających (moduł RF: 2,2 V, mikrokontroler: 1,8 V) i nawet przy 25% spadku pojemności, tego typu aplikacja powinna zapewnić wieloletnią pracę urządzenia. Aby ocenić jak długo nadajnik będzie pracował na pojedynczej baterii CR2032 należy zastanowić się z jakich etapów składa się jego praca i jakie są wtedy prądy pobierane ze źródła napięcia zasilającego. Przystępując do obliczeń przyjąłem następujący podział cyklu pracy urządzenia:
- etap trybu power-down (uśpienia), który trwa z dużym przybliżeniem 24 h/dobę i podczas którego pobierany jest prąd rzędu 0,2 μA;
- etap transmisji przez moduł RFM-12B (po wybudzeniu), który trwa średnio 10 ms i podczas którego pobierany jest prąd rzędu 22,6 mA.
Założono ponadto, iż wybudzanie nadajnika, a więc zmiana stanu podłączonego wyłącznika instalacyjnego następuje 15 razy na dobę. Przy tych założeniach otrzymano teoretyczny, ponad 62 letni czas pracy na pojedynczej baterii CR2032 (o zredukowanej o 25% pojemności) co wydaje się wartością niespotykaną i grubo przekraczającą czas życia samej baterii.
Budowa i działanie
Zaprojektowano bardzo prosty system mikroprocesorowy (rysunek 1), którego „sercem” jest niewielki mikrokontroler ATtiny24A (niskonapięciowy) taktowany wewnętrznym oscylatorem 1 MHz. Steruje on pracą modułu transceivera dzięki realizacji programowej obsługi interfejsu SPI oraz obsłudze przerwania zewnętrznego Pin Change Interrupt 1 (wyprowadzenie PCINT9) odpowiedzialnego za mechanizm wysyłania danych. Ponadto mikrokontroler obsługuje przełącznik DIP-SWITCH, za pomocą którego ustawiamy adres nadajnika, który powinien się pokrywać z adresem powiązanego odbiornika oraz wyłącznik instalacyjny podłączany do złącza SW (koniecznie tzw. dzwonkowy, czyli chwilowy), którego obsługa realizowana jest z użyciem przerwania zewnętrznego Pin Change Interrupt 0 (wyprowadzenie PCINT5) inicjującego wybudzanie mikrokontrolera (i modułu RF).
Zgodnie z tym, co napisano wcześniej, nasz nadajnik powinien charakteryzować się minimalnym zapotrzebowaniem na energię elektryczną, jako że jest zasilany niewielką baterią CR2032. W związku z powyższym zastosowano poniższe mechanizmy programowo-sprzętowe:
- wyłączono wszystkie nieużywane peryferia mikrokontrolera (komparator analogowy, TIMER1, TIMER0, USI, ADC);
- wprowadzono mikrokontroler w tryb niskiego poboru mocy Power-down, z którego wybudzany jest wyłącznie poprzez zmianę stanu wyłącznika SW. Wybudzony mikrokontroler inicjuje transmisję danych, po czym przechodzi ponownie w tryb Power-down;
- nieużywany transceiver RFM-12B wprowadzany jest każdorazowo w tryb niskiego poboru mocy.
int main(void){
char Data, Address, Switch = 0;
//Podciągnięcie portu adresu do VCC
ADDRESS_PORT |= ((1<<PA4)|(1<<PA3)|(1<<PA2)|(1<<PA1)|(1<<PA0));
_delay_ms(1);
//Odczytanie adresu urządzenia
Address = READ_ADDRESS;
//Wyłączenie podciągania portu adresu do VCC z uwagi na redukcję poboru mocy
ADDRESS_PORT &= ~((1<<PA4)|(1<<PA3)|(1<<PA2)|(1<<PA1)|(1<<PA0));
//Wyłączenie komparatora analogowego dla zmniejszenia poboru mocy
ACSR = (1<<ACD);
//Redukcja poboru mocy przez wyłączenie modułów (lub ich zegarów):
//TIMER1, TIMER0, USI, ADC
PRR = (1<<PRTIM1)|(1<<PRTIM0)|(1<<PRUSI)|(1<<PRADC);
//Konfiguracja i uruchomienie przerwania zewnętrznego obsługującego
//switch SW wybudzający procesor
GIMSK |= (1<<PCIE0); //Uruchomienie przerwania od switcha SW
PCMSK0 = (1<<PA5); //Zmiana stanu na PA5 generuje przerwanie
//Uruchomienie i konfiguracja RFM12B, w tym interfejsu SPI
RFM12bInit(0xFF);
//Wprowadzmy moduł RFM12B w tryb powerDown
RFM12bPowerDown();
while(1){
cli();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sei();
sleep_cpu();
//--------------------------------------------------------------
//W tym miejscu śpimy i czekamy na wybudzenie
//przez zmianę stanu przycisku SW
//--------------------------------------------------------------
sleep_disable();
_delay_ms(40);
//Tylko dla załączonego wyłącznika SW
if(!READ_SWITCH){
if(Switch) Data = 0b10100000; else Data = 0b10101111;
Switch ^= 0x01;
//Wychodzimy z trybu powerDown modułu RFM12b
RFM12bPowerUp();
//Uruchomienie przerwania odpowiedzialnego za nadawanie
GIFR |= (1<<PCIF1);
GIMSK |= (1<<PCIE1);
//Wysyłamy ramkę danych do odbiornika
RFM12bStartTx(&Data, 1, Address);
//Czekamy na zakończenie transmisji
while(RFM12B.Status != PACKET_SENT);
//Wyłączenie przerwania odpowiedzialnego za nadawanie
GIMSK &= ~(1<<PCIE1);
//Wprowadzmy moduł RFM12B w tryb powerDown
RFM12bPowerDown();
}
//Uruchomienie przerwania od switcha SW
GIFR |= (1<<PCIF0);
GIMSK |= (1<<PCIE0);
}
}
Na listingu 1 zaprezentowano kompletną funkcję main programu obsługi aplikacji nadajnika systemu wi-link. Prawda, że prosta? Dzięki takim mechanizmom otrzymano wspomniane wcześniej wartości zapotrzebowania na energię dla całego urządzenia.
Tyle w kwestii nadajnika, przejdźmy do schematu ideowego odbiornika, który pokazano na rysunku 2. Tak jak poprzednio, zaprojektowano bardzo prosty system mikroprocesorowy, którego „sercem” jest ten sam niewielki mikrokontroler ATtiny24 sterujący pracą modułu transceivera dzięki realizacji programowej obsługi interfejsu SPI oraz obsłudze przerwania zewnętrznego Pin Change Interrupt 1 (wyprowadzenie PCINT9) odpowiedzialnego za mechanizm odbierania danych. Ponadto mikrokontroler obsługuje przełącznik DIP-SWITCH, za pomocą którego ustawiamy adres odbiornika oraz przekaźnik REL, który steruje pracą podłączonego źródła światła (lub innego odbiornika).
W odróżnieniu od układu nadajnika, w ramach aplikacji odbiornika zaprojektowano niewielki, kompletny układ zasilający przeznaczony do podłączenia do sieci 230 V. Było to niezbędne z uwagi na fakt, iż moduł odbiornika steruje pracą przekaźnika, który w czasie załączenia pobiera prąd rzędu 50 mA. Pomimo tego sumaryczny pobór mocy urządzenia w czasie załączenia przekaźnika nie przekracza 0,25 W.
Co oczywiste, aby komplet urządzeń typu nadajnik-odbiornik pracował ze sobą stanowiąc bezprzewodowy link oba moduły muszą mieć skonfigurowany ten sam adres (przełączniki DIP-SWITCH). Zastosowany rodzaj przełącznika umożliwia implementację 32 kompletów typu nadajnik-odbiornik/odbiorniki, przy czym jeden nadajnik sterować może pracą kilku odbiorników.
CKSEL3...0: 0010
SUT1...0: 10
CKDIV8: 0
CKOUT: 1
int main(void){
//Podciągnięcie portu adresu do VCC
ADDRESS_PORT |= (1<<PA4)|(1<<PA3)|(1<<PA2)|(1<<PA1)|(1<<PA0);
//Wyłączenie komparatora analogowego dla zmniejszenia poboru mocy
ACSR = (1<<ACD);
//Redukcja poboru mocy przez wyłączenie modułów (lub ich zegarów):
//TIMER1, USI, ADC
PRR = (1<<PRTIM1)|(1<<PRUSI)|(1<<PRADC);
//Port przekaźnika, jako wyjściowy i wyłączony
RELAY_PORT_AS_OUTPUT;
//Inicjalizacja RFM12B w trybie odbiornika
RFM12bInit(READ_ADDRESS);
sei();
while(1){
//Odebrano poprawną ramkę danych: Size|Payload|CRC8
if(dataReady){
dataReady = 0;
if(Payload == COMMAND_ON) RELAY_ON;
else if(Payload == COMMAND_OFF) RELAY_OFF;
}
}
}
Na listingu 2 zaprezentowano kompletną funkcję main programu obsługi aplikacji odbiornika systemu wi-link. Banalna, nieprawdaż?
Montaż i uruchomienie
Schematu montażowy nadajnika pokazano na rysunku 3. Jak widać, zaprojektowano bardzo niewielki obwód drukowany (średnica jedynie 40 mm) z przewagą elementów SMD, który w zamyśle przeznaczony jest do umieszczenia w puszcze połączeniowej obsługiwanego wyłącznika instalacyjnego.
Montaż obwodu drukowanego nadajnika rozpoczynamy od warstwy TOP, na której przylutowujemy mikrokontroler, następnie lutujemy moduł RFM-12B, dalej elementy bierne a na końcu elementy mechaniczne. Dalej, przechodzimy na warstwę BOTTOM, gdzie przylutowujemy koszyczek baterii zasilającej. Do tak przygotowanej płytki przylutowujemy antenę nadawczą w postaci kawałka przewodu o długości około 17 cm (może być odpowiednio zwinięty). Wygląd zmontowanego nadajnika od strony warstwy TOP pokazano na fotografii tytułowej.
Przejdźmy zatem do schematu montażowego odbiornika, który pokazano na rysunku 4. Tym razem zaprojektowano nieco większy obwód drukowany (o średnicy 60 mm), który integruje w sobie kompletny, transformatorowy zasilacz sieciowy i zbudowany jest w zdecydowanej większości z elementów przewlekanych. Miejscem podłączenia tego modułu będzie zazwyczaj połączeniowa puszka instalacyjna o nieco większej średnicy aniżeli puszka wyłącznika instalacyjnego, przez co możliwa stała się integracja niezbędnego, z uwagi na obecność przekaźnika, zasilacza.
Montaż obwodu drukowanego odbiornika rozpoczynamy od przylutowania modułu RFM-12B, następnie lutujemy pozostałe elementy półprzewodnikowe, dalej elementy bierne, zaś na samym końcu elementy mechaniczne oraz transformator do druku. Do tak przygotowanej płytki przylutowujemy antenę odbiorczą w postaci kawałka przewodu o długości około 17 cm (może być odpowiednio zwinięty). Wygląd zmontowanego odbiornika od strony warstwy TOP pokazano na fotografii tytułowej.
Warto zaznaczyć, iż zarówno w przypadku nadajnika, jak i odbiornika odczytanie adresu urządzenia odbywa się wyłącznie podczas włączania zasilania, także jeśli zmieniliśmy adres urządzenia za pomocą przełącznika DIP-switch należy wyłączyć i ponownie włączyć zasilanie modułu.
Robert Wołgajew, EP
- R1, R2, R3: 100 kΩ
- C1, C2, C3: 100 nF
- U1: ATtiny24A (SOIC14)
- U2: RFM12B-866MHz (SMD)
- SW: złącze śrubowe AK500/2 (raster 0,1”)
- BATT: koszyczek baterii CR2032 typu CONNFLY DS1092-11-N8S
- ADDR: dip-switch SMD 5-polowy typu A6S-5101-H OMRON lub podobny
- R1, R2: 100 kΩ
- R3: 2,2 kΩ
- C1, C4: 100 nF (raster 0,1”)
- C2, C3: 100 μF/16 V (raster 0,1”)
- U1: ATtiny24 (DIL14)
- U2: RFM12B-866MHz (SMD)
- U3: LP2950ACZ-3.3 (TO92)
- T1: BC548 (TO92)
- B1: mostek prostowniczy 1 A (raster 0,2”)
- D1: 1N4148 (DO35)
- TR1: transformator do druku typu BV 202 0154 (6 V, 0,5 VA)
- PK1: przekaźnik FTR-F3AA005E-HA FUJITSU
- AC, LOAD: złącze śrubowe AK500/2 (raster 0,1”)
- ADDR: przełącznik DIP-SWITCH 5-polowy THT typu A6T-5104 lub podobny