Spisu treści:

8-kanałowy programowalny timer: 13 kroków
8-kanałowy programowalny timer: 13 kroków

Wideo: 8-kanałowy programowalny timer: 13 kroków

Wideo: 8-kanałowy programowalny timer: 13 kroków
Wideo: 8 kan. Czasówka aktywowana Impulsem 8 wejść 8 wyjść 12v DC 2024, Lipiec
Anonim
8-kanałowy programowalny timer
8-kanałowy programowalny timer
8-kanałowy programowalny timer
8-kanałowy programowalny timer
8-kanałowy programowalny timer
8-kanałowy programowalny timer

Wstęp

Używam mikrokontrolerów Microchip PIC do moich projektów od 1993 roku i wykonałem całe moje programowanie w języku asemblera, używając Microchip MPLab IDE. Moje projekty obejmowały proste sygnalizacje świetlne i migające diody LED, interfejsy joysticka USB dla modeli R/C i analizatory rozdzielnic stosowane w przemyśle. Tworzenie trwało wiele dni, a czasem tysiące linijek kodu asemblera.

Po otrzymaniu Matrix Multimedia Flowcode 4 Professional byłem dość sceptyczny wobec oprogramowania. Zbyt łatwo w to uwierzyć. Postanowiłem spróbować i przetestowałem wszystkie makra komponentów, wszystkie z wielkim sukcesem. Najlepszą częścią korzystania z Flowcode było to, że proste projekty można było zakodować w ciągu jednej nocy. Po zabawie z I²C i zegarem czasu rzeczywistego DS1307 zdecydowałem się zaprojektować 8-kanałowy timer przy użyciu Flowcode. Nie będąc małym i łatwym projektem, wierzyłem, że będzie to świetny projekt, aby nauczyć się Flowcode.

Dobór mikroprocesora i innych komponentów

Ze względu na liczbę wymaganych pinów I/O było jasne, że potrzebne będzie urządzenie 40-pinowe. Wybrano PIC 18F4520, głównie ze względu na jego 32K pamięci programu i 1536 bajtów pamięci danych. Wszystkie użyte komponenty są standardowymi urządzeniami przewlekanymi, dzięki czemu w razie potrzeby można zbudować obwód na płytce Vero. Pomogło to również w rozwoju na płytce prototypowej.

Krok 1: Cele projektu

Cele projektu
Cele projektu

Cele

- Dokładne utrzymywanie czasu, z podtrzymaniem bateryjnym.

- Wszystkie programy i dane mają być zachowane, nawet po utracie zasilania.

- Prosty interfejs użytkownika.

- Elastyczność programowania.

Punktualność

Mieszkając w obszarze podatnym na awarie zasilania, standardowe 50/60 Hz z linii energetycznych nie wystarczy do dokładnego pomiaru czasu. Zegar czasu rzeczywistego był niezbędny i po przetestowaniu kilku układów RTC zdecydowałem się na DS1307 ze względu na jego prostą konfigurację oscylatora i podtrzymania bateryjnego. Dość dokładne utrzymywanie czasu uzyskano przy użyciu tylko kryształu 32,768 kHz podłączonego do DS1307. Dokładność wynosiła 2 sekundy w ciągu 2 miesięcznego okresu próbnego przy użyciu 4 różnych marek kryształów.

Zatrzymywanie danych

Wszystkie dane programu czasowego muszą być zachowane, nawet w przypadku awarii zasilania. Mając do 100 różnych programów i różne dane konfiguracyjne, stało się jasne, że 256 bajtów wbudowanej pamięci EEPROM PIC nie będzie wystarczająco duże. Pamięć EEPROM 24LC256 I²C służy do przechowywania wszystkich informacji programowych.

Prosty interfejs użytkownika

Interfejs użytkownika składa się tylko z 2 elementów, wyświetlacza LCD 16 x 4 linii z podświetleniem LED oraz klawiatury 4 x 3. Całe programowanie można wykonać za pomocą zaledwie kilku przycisków. Dodatki do interfejsu to słyszalny brzęczyk piezoelektryczny oraz wizualne migające podświetlenie LCD.

Krok 2: Elastyczność programowania

Elastyczność programowania
Elastyczność programowania

Aby zapewnić wystarczającą elastyczność programu, timer posiada 100 programów, które można ustawić indywidualnie. Dla każdego programu można ustawić czas włączenia, czas wyłączenia, kanały wyjściowe i dzień tygodnia. Każdy program ma trzy tryby:

- Auto: Czas włączenia, czas wyłączenia, kanał wyjściowy i dzień tygodnia są ustawione.

- Off: Indywidualny program można wyłączyć bez usuwania ustawień. Aby ponownie włączyć program, po prostu wybierz inny tryb.

- Dzień/noc: czas włączenia, czas wyłączenia, kanał wyjściowy i dzień tygodnia są ustawione. Działa tak samo jak tryb automatyczny, ale będzie

Wyjścia włączaj tylko pomiędzy czasem włączenia i wyłączenia, gdy jest ciemno. Umożliwia to również pełną kontrolę dnia/nocy

jako dodatkowa elastyczność włączania światła o zachodzie słońca i wyłączania o wschodzie słońca.

Przykład 1: Włączy światło po godzinie 20:00 i wyłączy o wschodzie słońca.:

W dniu: 20:00, Wyłączony: 12:00, Przykład 2: Włączy światło o zachodzie słońca i wyłączy o 23:00.

W dniu: 12:00

Wył.: 23:00

Przykład 3: Włączy światło o zachodzie słońca i wyłączy o wschodzie słońca.

W dniu: 12:01

Wyłączony: 12:00

Dostępne dodatkowe opcje, wszystkie działające niezależnie od 100 programów włączania/wyłączania.

Program Channels Active: Zamiast wyłączać kilka programów, poszczególne kanały wyjściowe można wyłączyć bez konieczności zmiany programów.

Wejścia pomocnicze: Dostępne są dwa wejścia cyfrowe, umożliwiające włączenie określonych kanałów wyjściowych na określony czas. Może być używany na przykład do włączania określonych świateł po powrocie do domu późną nocą, po naciśnięciu przycisku na pilocie lub do włączania różnych serii świateł po uruchomieniu alarmu w domu.

Wyjścia pomocnicze: Dostępne są dwa dodatkowe wyjścia (oprócz 8 kanałów wyjściowych). Można je zaprogramować tak, aby włączały się z określonymi kanałami wyjściowymi lub z wejściami cyfrowymi. W mojej instalacji mam wyjścia 6-8 sterujące nawadnianiem, które działa na 24V. Kanały 6-8 wykorzystuję do włączenia jednego z wyjść pomocniczych, do włączenia zasilania 24V systemu nawadniającego.

Ręczne włączanie: Na ekranie głównym przyciski 1-8 mogą być używane do ręcznego włączania lub wyłączania kanałów.

Krok 3: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy

Zasilacz: Zasilacz składa się z prostownika, kondensatora wygładzającego i bezpiecznika 1 A do ochrony przed przeciążeniem. Zasilanie to jest następnie regulowane przez regulator 7812 i 7805. Zasilanie 12V służy do sterowania przekaźnikami wyjściowymi, a wszystkie pozostałe obwody zasilane są z zasilacza 5V. Ponieważ regulator 7805 jest podłączony do wyjścia regulatora 7812, całkowity prąd musi być ograniczony do 1 A przez regulator 7812. Zaleca się zamontowanie tych regulatorów na odpowiednim radiatorze.

I²C Bus: Chociaż Flowcode pozwala na sprzętową kontrolę I²C, zdecydowałem się skorzystać z oprogramowania konfiguracji I²C. Pozwala to na większą elastyczność przypisywania pinów. Chociaż wolniejszy (50 kHz), nadal działa świetnie w porównaniu ze sprzętową magistralą I²C. Zarówno DS1307, jak i 24LC256 są podłączone do tej magistrali I²C.

Zegar czasu rzeczywistego (DS1307): Podczas uruchamiania rejestr RTC 0 i 7 jest odczytywany w celu określenia, czy zawiera on prawidłowy czas i dane konfiguracyjne. Po poprawnym ustawieniu odczytywany jest czas RTC, a czas ładowany do PIC. Jest to jedyny czas, kiedy odczytywany jest czas z RTC. Po uruchomieniu na styku 7 zegara czasu rzeczywistego pojawi się impuls 1Hz. Ten sygnał 1 Hz jest podłączony do RB0/INT0 i poprzez procedurę obsługi przerwań, czas PIC jest aktualizowany co sekundę.

Zewnętrzna pamięć EEPROM: Wszystkie dane programu i opcje są przechowywane w zewnętrznej pamięci EEPROM. Dane EEPROM są ładowane podczas uruchamiania, a kopia danych jest przechowywana w pamięci PIC. Dane EEPROM są aktualizowane tylko po zmianie ustawień programu.

Czujnik dzień/noc: Standardowy rezystor zależny od światła (LDR) jest używany jako czujnik dzień/noc. Ponieważ diody LDR występują w wielu kształtach i odmianach, wszystkie z różnymi wartościami rezystancji w tych samych warunkach oświetleniowych, użyłem analogowego kanału wejściowego do odczytania poziomu światła. Poziomy dzienne i nocne są regulowane i pozwalają na pewną elastyczność dla różnych czujników. Aby ustawić pewną histerezę, można ustawić indywidualne wartości dla dnia i nocy. Stan zmieni się tylko wtedy, gdy poziom światła będzie poniżej wartości dziennej lub powyżej nastawy nocnej przez dłużej niż 60 sekund.

Wyświetlacz LCD: używany jest 4-wierszowy, 16-znakowy wyświetlacz, ponieważ nie wszystkie dane mogą być wyświetlane na 2-wierszowym wyświetlaczu. Projekt zawiera kilka niestandardowych znaków, które są zdefiniowane w makrze LCD_Custom_Char.

Wejścia pomocnicze: Oba wejścia są buforowane tranzystorem NPN. Na złączu dostępne są również +12V i 0V, co pozwala na bardziej elastyczne połączenia z połączeniami zewnętrznymi. Na przykład do zasilania można podłączyć odbiornik zdalnego sterowania.

Wyjścia: Wszystkie wyjścia są elektrycznie odizolowane od obwodu za pomocą przekaźnika 12V. Zastosowane przekaźniki są przystosowane do napięcia 250 V AC, przy 10 amperach. Styki normalnie otwarte i normalnie zamknięte są wyprowadzone na zaciski.

Klawiatura: Użyta klawiatura to klawiatura matrycowa 3 x 4 i jest podłączona PORTB:2..7.

Krok 4: Przerwania klawiatury

Przerwania klawiatury
Przerwania klawiatury
Przerwania klawiatury
Przerwania klawiatury
Przerwania klawiatury
Przerwania klawiatury

Chciałem skorzystać z przerwania PORTB Interrupt on Change przy każdym naciśnięciu klawisza. W tym celu w Flowcode musiało zostać utworzone niestandardowe przerwanie, aby upewnić się, że kierunek i dane PORTB są ustawione prawidłowo przed i po każdym przerwaniu z klawiatury. Przerwanie jest generowane przy każdym naciśnięciu lub zwolnieniu przycisku. Procedura przerwania odpowiada tylko po naciśnięciu klawisza.

NIESTANDARDOWE PRZERWANIE

Włącz kod

portb = 0b00001110;trisb = 0b11110001;

wewn. RBIE = 1;

intcon2. RBIP = 1;

intcon2. RBPU = 1;

rcon. IPEN = 0;

Kod obsługi

if (intcon & (1 << RBIF))

{ FCM_%n();

portb = 0b00001110;

trisb = 0b11110001;

wreg= portb;

clear_bit(intcon, RBIF);

}

Problemy odnalezione

Podczas przerwania procedura obsługi przerwań musi pod warunkiem NIE wywoływać jakiegokolwiek innego makra, które może być użyte gdzieś w pozostałej części programu. Doprowadzi to ostatecznie do problemów z przepełnieniem stosu, ponieważ przerwanie może wystąpić w tym samym czasie, gdy program główny również znajduje się w tym samym podprogramie. Jest to również identyfikowane jako POWAŻNY BŁĄD przez Flowcode podczas kompilowania kodu.

W niestandardowym kodzie klawiatury pod GetKeyPadNumber jest takie wywołanie makra Delay_us, które spowoduje przepełnienie stosu. Aby rozwiązać ten problem, usunąłem polecenie Delay_us(10) i zastąpiłem je 25 wierszami „wreg = porta;” polecenia. To polecenie odczytuje PORTA i umieszcza jego wartość w rejestrze W, aby uzyskać trochę opóźnienia. To polecenie zostanie skompilowane do pojedynczej instrukcji podobnej do asemblera movf porta, 0. Dla zegara 10MHz użytego w projekcie każda instrukcja będzie miała 400ns, a aby uzyskać opóźnienie 10us, potrzebowałem 25 tych instrukcji.

Zauważ w drugim wierszu rysunku 3: Kod niestandardowy GetKeypadNumber, że oryginalne polecenie delay_us(10) zostało wyłączone za pomocą „//”. Poniżej dodałem moje 25 „wreg = porta;” komendy, aby uzyskać nowe opóźnienie 10us. Bez wywołań jakichkolwiek makr wewnątrz niestandardowego kodu Keypad_ReadKeypadNumber, makro Keypad może być teraz używane w procedurze obsługi przerwań.

Należy zauważyć, że komponenty Flowcode Keypad i eBlocks nie wykorzystują standardowych rezystorów podciągających na liniach wejściowych. Zamiast tego używa rezystorów pull-down 100K. Ze względu na pewne zakłócenia występujące na klawiaturze podczas projektowania, wszystkie rezystory 100K zostały zastąpione 10K, a wszystkie rezystory 10K zastąpione 1K5. Klawiatura została przetestowana pod kątem poprawnej pracy z przewodami 200mm.

Krok 5: Korzystanie z timera

Korzystanie z timera
Korzystanie z timera
Korzystanie z timera
Korzystanie z timera
Korzystanie z timera
Korzystanie z timera

Wszystkie ekrany są skonfigurowane tak, aby wskazywały wszystkie wymagane informacje, aby użytkownik mógł dokonać szybkich zmian w ustawieniach. Wiersz 4 służy do pomocy w nawigacji po menu i opcjach programu. Podczas normalnej pracy dostępne są łącznie 22 ekrany.

LINIA 1: Czas i status

Pokazuje bieżący dzień i godzinę, a następnie ikony stanu:

A – Wskazuje, że wejście Aux A zostało wyzwolone, a zegar Aux Input A jest uruchomiony.

B – Wskazuje, że wejście Aux B zostało wyzwolone, a zegar Aux Input B jest uruchomiony.

C – wskazuje, że wyjście Aux C jest włączone.

D – wskazuje, że wyjście Aux D jest włączone.

} – Stan czujnika Dzień/Noc. Jeśli jest obecny, oznacza, że jest noc.

LINIA 2: Wyjścia programu

Pokazuje kanały, które zostały włączone przez różne programy. Kanały są wyświetlane w ich numerach wyjść, a „-” wskazuje, że określone wyjście nie jest włączone. Kanały, które zostały wyłączone w „Aktywne wyjścia programu” będą nadal wskazywane tutaj, ale wyjścia rzeczywiste nie zostaną ustawione.

LINIA 3: Rzeczywiste wyjścia

Pokazuje, które kanały są włączane przez różne programy, wejścia A i B lub wyjścia ręczne ustawione przez użytkownika. Naciśnięcie 0 spowoduje wyłączenie wszystkich ręcznie aktywowanych wyjść i zresetuje liczniki czasu A i B wyjścia Aux.

LINIA 4: Opcje menu i klawiszy (we wszystkich menu)

Wskazuje funkcję klawiszy „*” i „#”.

Środkowa część wskazuje, które klawisze numeryczne (0–9) są aktywne dla wybranego ekranu.

Stan wejść A i B jest również pokazywany za pomocą ikony przełącznika otwartego lub zamkniętego.

Wyjścia można włączać/wyłączać ręcznie, naciskając odpowiedni klawisz na klawiaturze.

W całym menu klawisze Star i Hash służą do poruszania się po różnych opcjach programu. Klawisze 0-9 służą do ustawiania opcji. Jeśli na jednym ekranie lub w menu programowania dostępnych jest wiele opcji, do przechodzenia przez różne opcje służy klawisz skrótu. Aktualnie wybrana opcja będzie zawsze oznaczona znakiem „>” po lewej stronie ekranu.

0-9 Wprowadź wartości czasu

1-8 Zmień wybór kanału

14 36 Przechodzenie przez programy, 1 krok do tyłu, 4 kroki do tyłu 10 programów, 3 kroki do przodu, 6 kroków do przodu 10

programy

1-7 Ustaw dni tygodnia. 1=niedziela, 2=poniedziałek, 3=wtorek, 4=środa, 5=czwartek, 6=piątek, 7=sobota

0 Na ekranie głównym usuń wszystkie ręczne nadpisania oraz zegary wejścia A i wejścia B. W innych menu zmiany

wybrane opcje

# Na ekranie głównym wyłączy wszystkie ręczne nadpisania, liczniki czasu wejścia A i wejścia B oraz wyjścia programu, aż

następne wydarzenie.

* i 1 Zrestartuj timer

* i 2 Wyczyść wszystkie programy i opcje, przywróć ustawienia do wartości domyślnych.

* i 3 Przełącz timer w stan czuwania. Aby ponownie włączyć minutnik, naciśnij dowolny klawisz.

Podczas błędnych wpisów dowolnej wartości czasu, podświetlenie LCD mignie 5 razy, aby wskazać błąd. W tym samym czasie zabrzmi brzęczyk. Polecenia Exit i Next będą działać tylko wtedy, gdy bieżący wpis jest poprawny.

Podświetlenie LCD

Przy pierwszym uruchomieniu podświetlenie LCD zostanie włączone na 3 minuty, chyba że:

- Wystąpiła awaria sprzętu (nie znaleziono EEPROM lub RTC)

- Czas nie jest ustawiony w RTC

Podświetlenie LCD włączy się ponownie na 3 minuty po każdym wejściu użytkownika na klawiaturze. Jeżeli podświetlenie LCD jest wyłączone, każde polecenie z manipulatora najpierw włączy podświetlenie LCD i zignoruje naciśnięty klawisz. Gwarantuje to, że użytkownik będzie mógł odczytać wyświetlacz LCD przed użyciem klawiatury. Podświetlenie LCD zostanie również włączone na 5 sekund, jeśli aktywne jest wejście Aux A lub wejście Aux B.

Krok 6: Zrzuty ekranu menu

Zrzuty ekranu menu
Zrzuty ekranu menu
Zrzuty ekranu menu
Zrzuty ekranu menu
Zrzuty ekranu menu
Zrzuty ekranu menu

Za pomocą klawiatury można łatwo zaprogramować każdą z opcji. Obrazy dają pewne informacje o tym, co robi każdy ekran.

Krok 7: Projekt systemu

Projekt systemu
Projekt systemu

Cały rozwój i testowanie zostało wykonane na płytce prototypowej. Patrząc na wszystkie sekcje systemu, podzieliłem system na trzy moduły. Decyzja ta wynikała głównie z ograniczeń rozmiaru PCB (80 x 100 mm) darmowej wersji Eagle.

Moduł 1 - Zasilacz

Moduł 2 - płyta procesora

Moduł 3 - Płytka przekaźnikowa

Uznałem, że wszystkie komponenty muszą być łatwo dostępne i że nie chcę używać komponentów do montażu powierzchniowego.

Przyjrzyjmy się każdemu z nich.

Krok 8: Zasilanie

Zasilacz
Zasilacz
Zasilacz
Zasilacz
Zasilacz
Zasilacz
Zasilacz
Zasilacz

Zasilacz jest prosty i zasila procesor i płyty przekaźników napięciem 12 V i 5 V.

Regulatory napięcia zamontowałem na porządnych radiatorach, a do zasilania użyłem też przereklamowanych kondensatorów.

Krok 9: Płyta procesora

Płyta procesora
Płyta procesora
Płyta procesora
Płyta procesora
Płyta procesora
Płyta procesora
Płyta procesora
Płyta procesora

Wszystkie komponenty, z wyjątkiem ekranu LCD, klawiatury i przekaźników, są zamontowane na płycie procesora.

Dodano bloki zacisków, aby uprościć połączenia między zasilaniem, dwoma wejściami cyfrowymi i czujnikiem światła.

Styki/gniazda nagłówka umożliwiają łatwe podłączenie do ekranu LCD i klawiatury.

Do wyjść do przekaźników użyłem ULN2803. Zawiera już wszystkie wymagane rezystory sterujące i diody flyback. Zapewniło to, że płyta procesora nadal może być wykonana przy użyciu darmowej wersji Eagle. Przekaźniki są podłączone do dwóch ULN2803s. Dolny ULN2803 jest używany dla 8 wyjść, a górny ULN2803 dla dwóch wyjść pomocniczych. Każde wyjście pomocnicze ma cztery tranzystory. Połączenia z przekaźnikami są również realizowane przez styki/gniazda nagłówkowe.

PIC 18F4520 został wyposażony w gniazdo do programowania, aby umożliwić łatwe programowanie za pomocą programatora PicKit 3.

NOTATKA:

Zauważysz, że płyta zawiera dodatkowy 8-pinowy układ scalony. Górny układ scalony to PIC 12F675, podłączony do wejścia cyfrowego. Zostało to dodane podczas projektowania PCB. Ułatwia to wstępne przetwarzanie wejścia cyfrowego. W mojej aplikacji jedno z wejść cyfrowych jest podłączone do mojego systemu alarmowego. Jeśli zabrzmi alarm, w moim domu zapalają się określone światła. Uzbrojenie i rozbrajanie mojego systemu alarmowego daje różne sygnały dźwiękowe na syrenie. Używając PIC 12F675, mogę teraz odróżnić uzbrojenie/rozbrojenie od prawdziwego alarmu. 12F675 jest również wyposażony w gniazdo do programowania.

Zapewniłem również port I2C przez pin/gniazdo nagłówka. Przyda się to później z płytami przekaźników.

Płytka zawiera kilka zworek, które należy wlutować przed zamontowaniem gniazd IC.

Krok 10: Podsumowanie kodu przepływu

Wniosek dotyczący kodu przepływu
Wniosek dotyczący kodu przepływu
Wniosek dotyczący kodu przepływu
Wniosek dotyczący kodu przepływu
Wniosek dotyczący kodu przepływu
Wniosek dotyczący kodu przepływu

Ponieważ jestem przyzwyczajony do pracy na poziomie rejestrów w asemblerze, czasami korzystanie z makr komponentów było trudne i frustrujące. Wynikało to głównie z braku znajomości struktury programowania Flowcode. Jedynymi miejscami, w których używałem bloków C lub ASM, było włączanie wyjść w procedurze przerwań oraz w procedurze Do_KeyPressed, aby wyłączyć/włączyć przerwanie z klawiatury. PIC jest również umieszczany w trybie SLEEP za pomocą bloku ASM, gdy EEPROM lub RTC nie zostaną znalezione.

Pomoc dotyczącą korzystania z różnych poleceń I²C uzyskano z plików pomocy Flowcode. Należy dokładnie wiedzieć, jak działają różne urządzenia I²C, zanim polecenia będą mogły być pomyślnie używane. Projektowanie obwodu wymaga od projektanta posiadania wszystkich odpowiednich arkuszy danych. To nie jest wada Flowcode.

Flowcode naprawdę sprostał testom i jest wysoce zalecany dla osób, które chcą rozpocząć pracę z mikroprocesorami Microchip.

Programowanie i konfiguracja Flowcode dla PIC zostały ustawione jak na zdjęciach

Krok 11: Opcjonalna płyta przekaźnikowa I2C

Opcjonalna płyta przekaźnikowa I2C
Opcjonalna płyta przekaźnikowa I2C
Opcjonalna płyta przekaźnikowa I2C
Opcjonalna płyta przekaźnikowa I2C
Opcjonalna płyta przekaźnikowa I2C
Opcjonalna płyta przekaźnikowa I2C

Płyta CPU ma już złącza nagłówkowe dla 16 przekaźników. Wyjścia te są tranzystorami typu otwarty kolektor za pośrednictwem dwóch układów ULN2803. Można je wykorzystać do bezpośredniego zasilania przekaźników.

Po pierwszych testach systemu nie podobały mi się wszystkie przewody między płytą procesora a przekaźnikami. Ponieważ dołączyłem port I2C na płycie procesora, postanowiłem zaprojektować płytę przekaźnika, aby połączyć się z portem I2C. Używając 16-kanałowego układu MCP23017 I/O Port Expander i macierzy tranzystorów ULN2803, zredukowałem połączenia między procesorem a przekaźnikami do 4 przewodów.

Ponieważ nie mogłem zmieścić 16 przekaźników na płytce 80 x 100mm, postanowiłem zrobić dwie płytki. Każdy MCP23017 używa tylko 8 z 16 portów. Płyta 1 obsługuje 8 wyjść, a płyta 2 dwa wyjścia pomocnicze. Jedyna różnica na tablicach to adresy każdej tablicy. Można to łatwo ustawić za pomocą mini zworki. Każda płyta ma złącza do zasilania i danych I2C do drugiej płyty.

NOTATKA:

W razie potrzeby oprogramowanie przewiduje tylko jedną płytę, która może korzystać ze wszystkich 16 portów. Wszystkie dane przekaźników wyjściowych są dostępne na pierwszej płytce.

Ponieważ obwód jest opcjonalny i bardzo prosty, nie stworzyłem schematu. Jeśli jest wystarczające zapotrzebowanie, mogę je później dodać.

Krok 12: Opcjonalne łącze RF

Opcjonalne łącze RF
Opcjonalne łącze RF
Opcjonalne łącze RF
Opcjonalne łącze RF
Opcjonalne łącze RF
Opcjonalne łącze RF

Po zakończeniu projektu szybko zdałem sobie sprawę, że muszę pociągnąć do timera dużo przewodów 220V AC. Opracowałem łącze RF przy użyciu standardowych modułów 315 MHz, które umożliwiły umieszczenie timera wewnątrz szafki, a tablic przekaźników wewnątrz dachu, blisko całego okablowania 220V.

Łącze wykorzystuje AtMega328P działający z częstotliwością 16 MHz. Oprogramowanie nadajnika i odbiornika jest takie samo, a tryb wybierany jest za pomocą mini zworki.

Nadajnik

Nadajnik jest po prostu podłączany do portu I2C procesora. Nie jest wymagana żadna dodatkowa konfiguracja, ponieważ AtMega328P słucha tych samych danych, co karty przekaźnikowe I2C.

Dane są aktualizowane raz na sekundę na porcie I2C, a nadajnik wysyła te informacje przez łącze RF. Jeśli nadajnik nie odbierze danych I2C przez około 30 sekund, nadajnik będzie nieprzerwanie przesyłał dane, aby wyłączyć wszystkie przekaźniki do jednostki odbiorczej.

Zasilanie modułu nadajnika można wybrać między 12V a 5V za pomocą mini zworki na płytce drukowanej. Nadajnik zasilam napięciem 12V.

Odbiorca

Odbiornik nasłuchuje zakodowanych danych z nadajnika i umieszcza dane na porcie I2C. Płyta przekaźnika po prostu podłącza się do tego portu i działa tak samo, jak była podłączona do płyty procesora.

Jeśli odbiornik nie otrzyma prawidłowych danych przez 30 sekund, odbiornik będzie stale wysyłał dane do portu I2C, aby wyłączyć wszystkie przekaźniki na płytkach przekaźników.

Schematy

Pewnego dnia, jeśli będzie na to zapotrzebowanie. Szkic Arduino zawiera wszystkie informacje wymagane do zbudowania obwodu bez schematu obwodu.

Zasięg

W mojej instalacji nadajnik i odbiornik są oddalone od siebie o około 10 metrów. Zegar znajduje się w szafce, a przekaźnik na suficie.

Krok 13: Produkt końcowy

Produkt finalny
Produkt finalny
Produkt finalny
Produkt finalny
Produkt finalny
Produkt finalny

Jednostka główna została zamontowana w starym pudełku projektowym. Zawiera:

- Transformator 220V/12V

-Płyta zasilająca

-Płyta procesora

- Wyświetlacz LCD

- Klawiatura

- Nadajnik łącza RF

- Dodatkowa jednostka zdalnego odbiornika domowego, aby umożliwić mi włączanie/wyłączanie światła za pomocą pilota

Jednostka przekaźnikowa składa się z następujących elementów:

- Transformator 220V/12V

-Płyta zasilająca

- Odbiornik łącza RF

-2 x tablice przekaźnikowe I2C

Wszystkie deski zostały zaprojektowane z tym samym wymiarem, co ułatwia układanie ich jedna na drugiej za pomocą przekładek 3mm.

Zalecana: