- Objaśnienie robocze:
- Składniki:
- Programowanie:
- Projektowanie obwodów i PCB za pomocą EasyEDA:
- Obliczanie i zamawianie próbek PCB online:
W tym projekcie zamierzamy użyć mikrokontrolera PIC do zdalnego sterowania kilkoma odbiornikami prądu przemiennego za pomocą pilota na podczerwień. Podobny projekt zdalnie sterowanej na podczerwień automatyki domowej został już wykonany z Arduino, ale tutaj zaprojektowaliśmy go na PCB przy użyciu internetowego projektanta i symulatora PCB EasyEDA i wykorzystaliśmy ich usługi projektowania PCB, aby zamówić płytki PCB, jak pokazano w kolejnej sekcji artykuł.
Pod koniec tego projektu będziesz mógł przełączać (WŁ. / WYŁ.) Dowolne obciążenie AC za pomocą zwykłego pilota, siedząc wygodnie na krześle / łóżku. Aby uczynić ten projekt bardziej interesującym, włączyliśmy również funkcję sterowania prędkością wentylatora za pomocą Triaka. Wszystko to można zrobić za pomocą prostych kliknięć na pilocie na podczerwień. Do tego projektu możesz użyć dowolnego pilota do telewizora / DVD / MP3. Różne sygnały IR z pilota są odbierane przez mikrokontroler, który następnie steruje odpowiednimi przekaźnikami za pośrednictwem obwodu sterownika przekaźnika. Te przekaźniki służą do podłączania i odłączania obciążeń AC (świateł / wentylatorów).
Objaśnienie robocze:
Działanie tego projektu jest dość łatwe do zrozumienia. Po naciśnięciu przycisku na pilocie na podczerwień wysyła sekwencję kodu w postaci zakodowanych impulsów z częstotliwością modulującą 38 kHz. Impulsy te są odbierane przez czujnik TSOP1738, a następnie odczytywane przez kontroler. Następnie kontroler dekoduje odebrany ciąg impulsów na wartość szesnastkową i porównuje ją z predefiniowanymi wartościami szesnastkowymi w naszym programie.
Jeśli wystąpi jakakolwiek zgodność, kontroler wykonuje odpowiednią operację, wyzwalając odpowiedni przekaźnik / triak, a odpowiedni wynik jest również wskazywany przez wbudowane diody LED. Tutaj, w tym projekcie, użyliśmy 4 żarówek (małych żarówek) o różnych kolorach jako obciążenia oświetleniowe, a druga żarówka (większa żarówka) jest uważana za wentylator do celów demonstracyjnych.
Wybraliśmy klawisz 1 do przełączania przekaźnika1, 2 do przełączania przekaźnika2, 3 do przełączania przekaźnika3, 4 do przełączania przekaźnika4 i Vol + do zwiększania prędkości wentylatora i Vol- do zmniejszania prędkości wentylatora.
Uwaga: tutaj zastosowaliśmy 100 watową żarówkę zamiast wentylatora.
Istnieje wiele typów pilotów na podczerwień dostępnych dla różnych urządzeń, ale większość z nich pracuje z częstotliwością 38 kHz. Tutaj w tym projekcie sterujemy urządzeniami domowymi za pomocą pilota IR TV, a do wykrywania sygnałów IR używamy odbiornika podczerwieni TSOP1738. Ten czujnik TSOP1738 może wykryć sygnał częstotliwości 38 kHz. Działanie pilota na podczerwień i TSOP1738 jest szczegółowo omówione w tym artykule: Nadajnik i odbiornik podczerwieni
Nasz mikrokontroler PIC działa przy + 5V, a przekaźniki przy + 12V, dlatego używamy transformatora, aby obniżyć napięcie 220 V AC i naprawić go za pomocą prostownika z pełnym mostkiem. To wyprostowane napięcie prądu stałego jest następnie regulowane do +12 V i +5 V za pomocą układów scalonych regulatora, odpowiednio 7812 i 7805.
Do wyzwalania przekaźnika wykorzystujemy tranzystory, takie jak BC547, które mogą działać jako elektroniczny przełącznik do włączania / wyłączania przekaźników na podstawie sygnału z mikrokontrolera PIC.Ponadto do sterowania prędkością wentylatora używamy TRIAC. TRIAC to półprzewodnik mocy, który może kontrolować napięcie wyjściowe; ta funkcja służy do sterowania prędkością wentylatora.
Użyliśmy również sterownika triaka do sterowania triakiem za pomocą naszego mikrokontrolera PIC. Sterownik ten służy do nadawania impulsu kąta wypalania do triaka, aby można było kontrolować moc wyjściową. Tutaj użyliśmy 6 poziomów kontroli prędkości. Gdy poziom wynosi 0, wentylator zostanie wyłączony. Gdy poziom wyniesie 1, prędkość będzie równa 1/5 pełnej prędkości. Gdy poziom wyniesie 2, prędkość będzie wynosić 2/5 pełnej prędkości i odpowiednio dla innych. Aktualny poziom prędkości można monitorować za pomocą 7-segmentowego wyświetlacza pokładowego.
Schemat blokowy projektu przedstawiono poniżej.
Składniki:
Poniżej podano komponenty wymagane do zbudowania tego projektu:
- PIC18f2520 Mikrokontroler -1
- TSOP1738 -1
- Pilot do telewizora IR / DVD -1
- Tranzystor BC547 -4
- Przekaźniki 12 V -4
- Żarówka z oprawką -5
- Przewody połączeniowe -
- EasyEda PCB -1
- Wyświetlacz LCD 16x2
- Zasilanie 12v
- Złącze zaciskowe 2 pin `` -8
- Złącze terminalu 3 pin -1
- Transformator 12-0-12 -1 -
- Regulator napięcia 7805-1
- Regulator napięcia 7812-1
- Kondensator 1000uf -1
- Kondensator 10uf -1
- Kondensator 0,1 uf -1
- Kondensator 0,01 uf 400V `-1
- 10 tys. -5
- 1k -5
- 100ohm -7
- Wspólny segment katody -1
- Dioda 1n4007 -10
- BT136 triak -1
- Złącze męskie / żeńskie -
- Diody LED -6
- Opto-łącznik MOC3021 -1
- Opto-łącznik MTC2E lub 4N35 -1
- Kryształ 20 Mhz -1
- Kondensator 33pf -2
- Dioda Zenera 5,1 V -1
- Rezystor 47 omów 2 waty -1
Wszystkie te komponenty są powszechnie używane i można je łatwo kupić. Jeśli jednak szukasz najlepszego zakupu online, polecamy LCSC.
LCSC to świetny sklep internetowy, w którym można kupić komponenty elektroniczne do wszelkiego rodzaju projektów. Składają się z około 25 000 rodzajów komponentów, a najlepsze jest to, że sprzedają nawet małe ilości produktów do małych projektów, a także mają globalną wysyłkę.
Dekodowanie pilota na podczerwień:
Jak wspomniano wcześniej, możesz użyć dowolnego pilota do swojego projektu. Ale musimy wiedzieć, jaki rodzaj sygnału jest generowany z tego konkretnego pilota. Dla każdego klucza na pilocie będzie odpowiadała mu wartość HEX. Używając tej wartości HEX, możemy rozróżnić każdy klucz po stronie naszego mikrokontrolera. Dlatego zanim zdecydujemy się na użycie pilota, powinniśmy znać wartość HEX dla kluczy zaprogramowanych w tym konkretnym pilocie. W tym projekcie użyliśmy pilota NEC. Poniżej podano wartości szesnastkowe przycisków na pilocie NEC.
Jak widać, wartość HEX ma 7 znaków, z których tylko dwie ostatnie różnią się, dlatego możemy wziąć pod uwagę tylko dwie ostatnie cyfry, aby rozróżnić każdy klawisz.
Schemat obwodu:
Schemat projektu przedstawiono poniżej.
Powyższy schemat został uproszczony przy użyciu edytora schematów esayEDA, ponieważ zapewnia on układy wszystkich komponentów używanych w tym projekcie. Nie wymaga również instalacji i może być używany online w podróży.
Pinouty i wartości komponentów są jasno określone na powyższym schemacie. Możesz również pobrać plik schematu stąd.
Programowanie:
Program dla tego projektu jest wykonany przy użyciu MPLABX, kod jest również dość prosty i łatwy do zrozumienia. Kompletny kod zostanie podany na końcu tego samouczka, kilka dalszych ważnych fragmentów programu zostało opisanych poniżej.
Na początku kodu powinniśmy załączyć wymagane biblioteki, zdefiniować piny i zadeklarować zmienne.
#zawierać
Następnie utworzyliśmy prostą funkcję opóźnienia, używając pętli „for”.
void delay (int time) {for (int i = 0; i
Następnie zainicjowaliśmy licznik czasu za pomocą następującej funkcji
void timer () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Źródło zegara timera pochodzi z Prescaler T0CS = 0; // Prescaler pobiera zegar z FCPU (5 MHz) T08BIT = 0; // TRYB 16-BITOWY TMR0IE = 1; // Włącz TIMER0 Przerwanie PEIE = 1; // Włącz przerwanie peryferyjne GIE = 1; // Włącz INTs globalnie TMR0ON = 1; // Teraz uruchom stoper! }
Teraz w funkcji głównej podajemy wskazówki do wybranych pinów i inicjalizujemy timer oraz zewnętrzne przerwanie int0 w celu wykrycia przejścia przez zero.
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; przekaźnik1 = 0; przekaźnik2 = 0; przekaźnik3 = 0; przekaźnik4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; tric = 0; regulator czasowy(); INTEDG0 = 0; // Przerwanie przy opadającej krawędzi INT0IE = 1; // Włącz zewnętrzne przerwanie INT0 (RB0) INT0IF = 0; // Czyści bit flagi przerwania zewnętrznego INT0 PEIE = 1; // Włącz przerwanie peryferyjne GIE = 1; // Włącz INT globalnie
Teraz nie używamy żadnego trybu przerwania ani przechwytywania i porównywania do wykrywania sygnału IR. Tutaj właśnie użyliśmy cyfrowego pinu do odczytu danych, tak jak czytamy przycisk. Zawsze, gdy sygnał jest wysoki lub niski, po prostu ustawiamy metodę debouncing i uruchamiamy licznik czasu. Za każdym razem, gdy pin zmieni swój stan na inny, wartości czasu zostaną zapisane w tablicy.
Logika wysyłania pilota IR 0 jako 562,5us i logika 1 jako 2250us. Ilekroć licznik odczytuje około 562,5us, zakładamy, że jest to 0, a gdy licznik odczytuje około 2250us, zakładamy, że jest to 1. Następnie konwertujemy go na hex.
Sygnał przychodzący z pilota zawiera 34 bity. Przechowujemy wszystkie bajty w tablicy, a następnie dekodujemy ostatni używany bajt.
while (ir == 1); INT0IE = 0; while (ir == 0); TMR0 = 0; while (ir == 1); i ++; dat = TMR0; if (dat> 5000 && dat <12000) {} else {i = 0; INT0IE = 1; } if (i> = 33) {GIE = 0; opóźnienie (50); cmd = 0; for (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; else if (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Powyższy fragment kodu odbiera i dekoduje sygnał IR przy użyciu przerwań czasowych i zapisuje odpowiednią wartość HEX w zmiennej cmd. Teraz możemy porównać tę wartość HEX (zmienna cmd) z naszymi predefiniowanymi wartościami HEX i przełączyć przekaźnik, jak pokazano poniżej
if (cmd == 0xAF) {przekaźnik1 = ~ przekaźnik1; rly1LED = ~ rly1LED; } else if (cmd == 0x27) {przekaźnik2 = ~ przekaźnik2; rly2LED = ~ rly2LED; } else if (cmd == 0x07) {relay3 = ~ relay3; rly3LED = ~ rly3LED; } else if (cmd == 0xCF) {relay4 = ~ relay4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {speed ++; if (prędkość> 5) {prędkość = 5; }} else if (cmd == 0x9f) {speed--; if (prędkość <= 0) {prędkość = 0; }}
Teraz, aby wiedzieć, przy którym aktualnie pracuje nasz wentylator, powinniśmy skorzystać z 7-segmentowego wyświetlacza. Poniższe wiersze służą do instruowania styków wyświetlacza 7-segmentowego.
if (speed == 5) // wyłączony 5x2 = 10ms triger // prędkość 0 {PORTA = 0xC0; // wyświetl 0 RB6 = 1; fanLED = 0; } else if (speed == 4) // wyzwalacz 8 ms // prędkość 1 {PORTA = 0xfc; // wyświetlenie 1 RB6 = 1; fanLED = 1; } else if (speed == 3) // wyzwalacz 6 ms // prędkość 2 {PORTA = 0xE4; // wyświetlanie 2 RB6 = 0; fanLED = 1; } else if (speed == 2) // wyzwalacz 4ms // prędkość 3 {PORTA = 0xF0; // wyświetlanie 3 RB6 = 0; fanLED = 1; } else if (speed == 1) // wyzwalacz 2ms // prędkość 4 {PORTA = 0xD9; // wyświetlanie 4 RB6 = 0; fanLED = 1; } else if (speed == 0) // wyzwalacz 0ms // prędkość 5 pełna moc {PORTA = 0xD2; // wyświetlanie 5 RB6 = 0; fanLED = 1; }
Poniższa funkcja służy do zewnętrznego przerwania i przekroczenia czasu. Ta funkcja jest odpowiedzialna za wykrywanie przejścia przez zero i sterowanie triakiem.
nieważne przerwanie isr () {if (INT0IF) {opóźnienie (prędkość); tric = 1; for (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if (TMR0IF) // Sprawdź, czy jest to TMR0 Przepełnienie ISR {TMR0IF = 0; }}
Ostateczna płytka drukowana tej zdalnie sterowanej na podczerwień automatyki domowej wygląda, jak pokazano poniżej:
Projektowanie obwodów i PCB za pomocą EasyEDA:
Aby zaprojektować tę zdalną automatykę domową, użyliśmy EasyEDA, które jest darmowym narzędziem online EDA do tworzenia obwodów i PCB w bezproblemowy sposób. Wcześniej zamówiliśmy kilka płytek drukowanych w EasyEDA i nadal korzystamy z ich usług, ponieważ stwierdziliśmy, że cały proces, od rysowania obwodów po zamówienie PCB, jest wygodniejszy i wydajniejszy w porównaniu z innymi producentami PCB. EasyEDA oferuje bezpłatne rysowanie obwodów, symulację, projektowanie PCB, a także oferuje wysokiej jakości, ale niską cenę Indywidualną usługę PCB. Sprawdź tutaj pełny samouczek dotyczący korzystania z Easy EDA do tworzenia schematów, układów PCB, symulowania obwodów itp.
EasyEDA poprawia się z dnia na dzień; dodali wiele nowych funkcji i poprawili ogólne wrażenia użytkownika, co czyni EasyEDA łatwiejszym i użytecznym do projektowania obwodów. Wkrótce udostępnią wersję na komputery stacjonarne, którą można pobrać i zainstalować na komputerze do użytku w trybie offline.
W EasyEDA możesz upublicznić swoje projekty obwodów i płytek drukowanych, aby inni użytkownicy mogli je kopiować lub edytować i móc z nich korzystać, również upubliczniliśmy wszystkie nasze układy obwodów i PCB dla tej zdalnej automatyki domowej.
Poniżej znajduje się migawka górnej warstwy układu PCB z EasyEDA, możesz wyświetlić dowolną warstwę (górną, dolną, topową, dolną itp.) PCB, wybierając warstwę z okna „Warstwy”.
Obliczanie i zamawianie próbek PCB online:
Po zakończeniu projektowania PCB, możesz kliknąć ikonę wyjścia z produkcji , która przeniesie Cię na stronę zamówienia PCB. Tutaj możesz obejrzeć swoją płytkę drukowaną w Gerber Viewer lub pobrać pliki Gerber z Twojej płytki PCB i wysłać je do dowolnego producenta, jest też dużo łatwiej (i taniej) zamówić ją bezpośrednio w EasyEDA. Tutaj możesz wybrać liczbę PCB, które chcesz zamówić, ile warstw miedzi potrzebujesz, grubość PCB, wagę miedzi, a nawet kolor PCB. Po wybraniu wszystkich opcji kliknij „Zapisz w koszyku” i sfinalizuj zamówienie, a następnie w ciągu kilku dni otrzymasz PCB.
Możesz bezpośrednio zamówić tę płytkę drukowaną lub pobrać plik Gerber za pomocą tego linku.
Po kilku dniach zamawiania PCB otrzymaliśmy PCB. Tablice, które otrzymaliśmy, pokazujemy poniżej.
Po otrzymaniu płytek drukowanych zamontowałem wszystkie wymagane komponenty na płytce drukowanej, a na koniec przygotowaliśmy naszą zdalnie sterowaną automatykę domową na podczerwień, sprawdź ten obwód działający w filmie demonstracyjnym na końcu artykułu.