Spisu treści:
- Krok 1: Krótki przegląd obwodu
- Krok 2: Krótki przegląd oprogramowania
- Krok 3: Zawartość pakietu I2C
- Krok 4: Uzyskiwanie kodów zdalnego sterowania (ui32Data)
- Krok 5: Jak przetestować urządzenie I2C Slave?
- Krok 6: Zmniejszenie projektu
- Krok 7: Wniosek
- Krok 8: Użyte referencje
Wideo: Pilot na podczerwień I2C z Arduino: 8 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Wstęp Niniejsza instrukcja zawiera szczegółowe informacje na temat tworzenia uniwersalnego pilota zdalnego sterowania przy użyciu interfejsu I2C.
Jak dziwne mówisz, używając urządzenia podrzędnego I2C?
Tak, urządzenie podrzędne I2C.
Wynika to z faktu, że dokładne taktowanie pakietów IR jest dość wymagające, a typowy Arduino będzie miał problemy, jeśli wykonuje już wiele innych zadań w tym samym czasie. Lepiej jest rozłożyć obciążenie obliczeniowe, przypisując czynności wymagające dużej ilości czasu do dedykowanych procesorów, gdy tylko jest to możliwe (lepiej rób to na sprzęcie). Biorąc pod uwagę, że I2C jest dobrze udokumentowaną i solidną metodą komunikacji między układami scalonymi, wybrałem ten interfejs jako interfejs.
Wstęp
Jak wspomniano powyżej, ta instrukcja opisuje, jak sterować urządzeniami gospodarstwa domowego, takimi jak telewizor, odtwarzacz DVD i satelita itp., Za pomocą biblioteki IRremote na Arduino.
Kończy się przykładem projektu, który przekształca Arduino w podrzędny moduł zdalnego sterowania I2C (rys. 1 powyżej) z prototypowym obwodem testowym (rys. 2 powyżej) i szczegółowo opisuje, jak zmniejszyć projekt do minimum niezbędnych komponentów, aby mógł być osadzony w innym projekcie. W moim przypadku używam tego wbudowanego urządzenia w uniwersalnym urządzeniu zdalnego sterowania IoT opartym na ESP8266-12E.
Jakich części potrzebuję?
Do zbudowania obwodu przedstawionego w kroku 1 (nadajnik podczerwieni) potrzebne będą następujące części;
- 2 rezystory 10K
- 1 wyłączony rezystor 390R
- 1 wyłączony rezystor 33R
- 1 wyłączony rezystor 3K8
- 1 wyłączona czerwona dioda LED
- 1 szt. Dioda podczerwieni TSAL6400
- 1 szt. Tranzystor BC337
- 1 kondensator 220uF
- 1 szt. Arduino Uno
Do zbudowania obwodu przedstawionego w kroku 4 (odbiornik podczerwieni) potrzebne będą następujące części;
- 1 wyłączony rezystor 10K
- 1 szt. TSOP38328
- 1 kondensator 220uF
- 1 szt. Arduino Uno
Aby zbudować obwód przedstawiony w kroku 5 (obwód testowy urządzenia podrzędnego), będziesz potrzebować następujących części;
- 4 rezystory 10K
- Rezystor 2 szt. 390R
- 1 wyłączony rezystor 33R
- 1 wyłączony rezystor 3K8
- 2 zgaszona czerwona dioda LED
- 1 szt. Dioda podczerwieni TSAL6400
- 1 szt. Tranzystor BC337
- 1 kondensator 220uF
- 2 przyciski SPST
- 2 szt. Arduino Unos
Aby zbudować obwód przedstawiony w kroku 6 (projekt skurczony), będziesz potrzebować następujących części;
- 3 rezystory 10K
- 1 wyłączony rezystor 270R
- 1 wyłączony rezystor 15R
- 4 wyłączone rezystory 1K
- 1 wyłączona czerwona dioda LED
- 1 szt. Led IR TSAL6400 lub TSAL5300
- 1 szt. Tranzystor BC337
- 1 szt. kondensator elektrolityczny 220uF @ 6.3v
- 1 szt. kondensator elektrolityczny 1000uF @ 6.3v
- 2 kondensatory 0.1uF
- 2 kondensatory 22pF
- 1 szt. 16 MHz Xtal
- 1 szt. ATMega328P-PU
Uwaga: Do zaprogramowania ATMega328P potrzebne będzie również urządzenie FTDI
Jakich umiejętności potrzebuję?
- Minimalna znajomość elektroniki,
- Znajomość Arduino i jego IDE,
- Trochę cierpliwości,
- Przydałoby się trochę zrozumienia I2C (zobacz tutaj niektóre ogólne szczegóły dotyczące I2C/Wire Library).
Omówione tematy
- Krótki przegląd obwodu,
- Krótki przegląd oprogramowania,
- Zawartość pakietu I2C,
- Pozyskiwanie kodów zdalnego sterowania (ui32Data),
- Jak przetestować urządzenie I2C Slave,
- Zmniejszenie projektu,
- Wniosek,
- Wykorzystane referencje.
Zastrzeżenie
Jak zawsze, używasz tych instrukcji na własne ryzyko i są one nieobsługiwane.
Krok 1: Krótki przegląd obwodu
Zadaniem układu jest przesyłanie kodów pilota na podczerwień. Jego projekt jest dość prosty i dość prosty.
Gdy tranzystor Q1 i BC337 NPN jest włączony poprzez logiczną jedynkę z Arduino PWM O/P D3 do Rezystora R5, prąd przepływa przez diody 1 i 2. Ograniczony tylko przez rezystory balastowe odpowiednio R3 i R4. Q1 służy do zwiększenia prądu przepływającego przez diodę IR (IF Max = 100mA) do wartości przekraczającej możliwości Arduino O/P ~40mA przy zasilaniu +5V.
Kondensator C1 a 220uF elektrolityczny zapewnia pewną stabilizację zapobiegającą opadaniu szyny zasilającej przez moc pobieraną przez diody 1 i 2.
Rezystory R1 i R2 to podciąganie I2C.
Krok 2: Krótki przegląd oprogramowania
Preambuła
Aby pomyślnie skompilować ten kod źródłowy, będziesz potrzebować następującej dodatkowej biblioteki;
IRzdalny.h
- Przez: z3t0
- Przeznaczenie: zdalna biblioteka podczerwieni dla Arduino: wysyłanie i odbieranie sygnałów podczerwieni z wieloma protokołami
- Od:
Przegląd kodu
Jak pokazano na rysunku 1 powyżej, po uruchomieniu kod konfiguruje I/O mikrokontrolera, a następnie sprawdza stan wewnętrznej flagi oprogramowania „bFreshDataFlag”. Gdy ta flaga jest ustawiona, kontroler potwierdza, że jest zajęty (wysyłanie danych pin D4 w stanie niskim) i przechodzi do stanu eBUSY, sekwencyjnie odczytując przycisk wciskając polecenia trzymane w uDataArray i wysyłając dane modulowane IR do diody IR w sekwencja transmisji.
Gdy dane przechowywane w uDataArray zostaną w pełni wysłane, stan eIDLE jest wznawiany, a linia Busy jest anulowana (wysyłanie danych pin D4 high). Urządzenie jest teraz gotowe do przyjęcia kolejnych naciśnięć przycisków oznaczających koniec sekwencji transmisji.
Odbiór danych naciśnięcia przycisku IR
Gdy dane są wysyłane do pilota InfraRed przez I2C, wyzwala to przerwanie, a wywołanie funkcji receiveEvent() jest wyzwalane asynchronicznie.
Po uruchomieniu odebrane dane I2C są kolejno zapisywane w buforze 'uDataArray'.
Podczas odbioru danych, jeśli koniec sekwencji jest sygnalizowany przez mastera (bFreshData!=0x00), ustawiany jest 'bFreshDataFlag', tym samym sygnalizując początek sekwencji transmisji.
Rysunki 2…3 przedstawiają przykład typowej sekwencji pakietów.
Uwaga: Pełny kod źródłowy dostępny tutaj
Krok 3: Zawartość pakietu I2C
Format pakietu kontrolnego wysyłanego do urządzenia podrzędnego przez I2C jest podany powyżej na obrazku 1, znaczenie każdego pola podano poniżej
Znaczenie pól pakietu kontrolnego
bajt bKodowanie;
-
kodowanie pilota IR,
- RC6 (niebo) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Szesnastkowa reprezentacja binarnego strumienia danych IR 4 Bajty danych (długie bez znaku), LSByte … MSByte
bajt bNumberOfBitsInTheData;
Liczba bitów w danych (maksymalnie 32). Zakres = 1 … 32
bajt bPulseTrainPowtarzania;
Ile powtórzeń tego pociągu pulsu. Zakres = 1 … 255. Zazwyczaj 2…4 powtórzenia. Możesz rozszerzyć to dla poleceń włączania/wyłączania, ponieważ urządzenie odbiorcze czasami wymaga kilku dodatkowych powtórzeń ciągu impulsów, aby otrzymać sygnał włączenia
bajt bOpóźnienieMiędzyPulsPociągPowtarzania;
Opóźnienie między powtórzeniami tego ciągu impulsów. Zakres = 1 … 255mS. Zazwyczaj 22mS … 124mS
bajt bPrzycisk Powtórzenia;
Symuluje wielokrotne naciskanie tego samego przycisku (ale nie obsługuje zmodyfikowanego kodu jak pilot Apple, po prostu powtarza kod przycisku). Zakres = 1 … 256. Domyślnie = 1
uint16_t ui16DelayBetweenButtonPowtarzane;
Opóźnienie między powtórzeniami przycisku (bez znaku int). Łącznie 2 bajty LSByte … MSByte. Zakres = 1 … 65535mS. Domyślnie = 0mS
bajt bFreshData;
-
Świeże dane. Wartość niezerowa. Napisany jako ostatni, wyzwala sekwencję IR TX. Zakres 0x00…0xFF
- Więcej pakietów kontrolnych w przyszłości = 0
- To jest końcowy pakiet kontrolny = wartość niezerowa 1, 2, … 255
Zwróć uwagę na użycie dyrektywy kompilatora '_packed_'. Ma to na celu zapewnienie, że dane w pamięci są pakietami bajt po bajcie, niezależnie od używanego systemu docelowego (Uno, Due, ESP8266 itp.). Oznacza to, że połączenie między registerAllocationType i dataArrayType wymaga jedynie sekwencyjnego wygaszacza/zegarniania w bajtach z pakietu kontrolnego, czyniąc oprogramowanie TX/RX prostym.
Krok 4: Uzyskiwanie kodów zdalnego sterowania (ui32Data)
Istnieją trzy sposoby uzyskania odpowiedniego kodu klucza zdalnego sterowania;
- Poprzez liczenie bitów za pomocą oscyloskopu,
- Sprawdź to na stronie internetowej,
- Dekoduj go bezpośrednio ze strumienia danych w oprogramowaniu.
Poprzez liczenie bitów z oscyloskopem
Nie jest to skuteczna metoda, ponieważ zajmuje sporo czasu i potencjalnie wymaga więcej niż jednej próby, jednak może być bardzo dokładna. Przydaje się również do wizualnego sprawdzania kodów uzyskanych metodami 2 i 3, a także do określania wszelkich cech pilota. Na przykład podczas przytrzymywania przycisku na pilocie Apple IR. Pilot początkowo wyda sekwencję poleceń, a następnie powtórzy skompresowaną sekwencję 0xF….
Sprawdź to na stronie internetowej
Dobrym źródłem jest baza danych kodu zdalnego sterowania na stronie Linux Infrared Remote Control.
Minusem jest jednak to, że być może będziesz musiał wypróbować kilka kodów, dopóki nie znajdziesz takiego, który działa dla Ciebie. Być może będziesz musiał również zinterpretować niektóre reprezentacje kodów, aby przekonwertować je na ich równoważną formę szesnastkową.
Dekoduj go bezpośrednio ze strumienia danych
Używając układu na rysunku 1 powyżej w połączeniu z przykładem biblioteki IRremote 'IRrecvDumpV2.ino' możliwe jest dekodowanie strumienia danych bezpośrednio z pilota. Zdjęcie 2 przedstawia zdekodowany pilot telewizora Samsung do naciśnięcia przycisku włączania/wyłączania w oknie terminala Arduino IDE.
Połączony odbiornik/nadajnik
Zdjęcia 3 i 4 powyżej przedstawiają rozwiązanie, które umożliwia zarówno odbiór, jak i transmisję poleceń IR, co pozwala na łatwe prototypowanie.
Aby zdekodować naciśnięcia przycisków pilota na podczerwień, musisz sflashować Arduino za pomocą przykładu „IRrecvDumpV2.ino”, który jest dostarczany z biblioteką IRremote.
Działa równie dobrze przy transmisji, jeśli polecenia IR. Czerwona dioda LED jest wizualną sygnalizacją działania urządzenia.
Krok 5: Jak przetestować urządzenie I2C Slave?
Korzystając z kodu źródłowego i obwodu przedstawionego powyżej na rysunku 1, zaprogramuj Arduino „Master” za pomocą „IR_Remote_Sim_Test.ino”, a Arduino „Slave” za pomocą „IR_Remote_Sim.ino”.
Zakładając, że masz telewizor Sony Bravia, dekoder Sky HD i zestaw Sony BT SoundBar, naciśnij przycisk 1, a telewizor przełączy się na BBC1 (kanał 101). Naciśnij przycisk 2, a soundbar zostanie wyciszony. Naciśnij ponownie, a wyciszenie zostanie anulowane.
Podczas wykonywania sekwencji transmisji IR LED3 zaświeci się wskazując, że urządzenie podrzędne jest zajęte, a dioda LED1 będzie migać zgodnie z procesem transmisji IR.
Oczywiście, jeśli nie masz skonfigurowanego takiego samego systemu rozrywki, jak powyżej, możesz ponownie zaprogramować urządzenie podrzędne za pomocą „IRrecvDumpV2.ino”, zdekodować interesujące Cię zdalne polecenia, a następnie zaprogramować je w „IR_Remote_Sim_Test.ino” dla swojego danego scenariusza.
Rysunek 2 przedstawia przegląd oprogramowania testowego na poziomie systemu między urządzeniem nadrzędnym i podrzędnym.
Krok 6: Zmniejszenie projektu
Ok, więc założenie, że postępowałeś zgodnie z instrukcjami, polegając na dwóch Arduino do sterowania urządzeniami domowymi, nie jest najbardziej wydajnym wykorzystaniem twojego zapasu Arduino. W związku z tym, jeśli zbudujesz obwód pokazany na powyższym obrazku i zastosujesz się do instrukcji tutaj, aby zaprogramować ATMega328P za pomocą 'IR_Remote_Sim.ino', będziesz w stanie zredukować cały system do minimalnych elementów. Umożliwi to osadzenie projektu w innym systemie.
Krok 7: Wniosek
Rozwiązanie jest stabilne i działa dobrze, od kilku tygodni jest osadzone w innym systemie bez żadnych problemów.
Wybrałem Arduino Uno R3, ponieważ chciałem mieć urządzenie z wystarczającą ilością pamięci RAM, aby móc mieć bufor przycisków o rozsądnej głębokości. Zdecydowałem się na bufor o rozmiarze 20 pakietów (MAX_SEQUENCES).
Wykonana przeze mnie hybrydowa osłona TX/RX przydała się również podczas dekodowania pilotów Sony i Sky. Chociaż muszę przyznać, że od czasu do czasu używam mojego cyfrowego oscyloskopu, aby sprawdzić, czy dekodowane programowo polecenie IR jest takie samo, jak to pochodzące z otrzymanej podczerwieni (TSOP38328).
Jedyną rzeczą, którą zrobiłbym inaczej, byłoby użycie obwodu sterowania prądem stałym dla diody podczerwieni, jak pokazano powyżej na rys. 2.
Kolejną kwestią, na którą należy zwrócić uwagę, jest to, że nie wszystkie nadajniki IR są modulowane z częstotliwością 38 kHz, TSOP38328 jest zoptymalizowany do 38 kHz.
Krok 8: Użyte referencje
IRRemote.h
- Przez: z3t0
- Przeznaczenie: zdalna biblioteka podczerwieni dla Arduino: wysyłanie i odbieranie sygnałów podczerwieni z wieloma protokołami
- Od:
Biblioteka IR Remote
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Czujnik odbiornika IR (podczerwień) - TSOP38238 (odpowiednik)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Aby uniknąć dopełniania struktury danych do granic słów
- https://github.com/esp8266/Arduino/issues/1825
- https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
- https://stackoverflow.com/questions/11770451/co-jest-znaczenie-atrybutu-packed-aligned4
Dobre źródło danych pilota na podczerwień
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Baza danych pilotów na podczerwień
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
Arkusz danych BC337
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
Karta katalogowa 1N4148
https://www.vishay.com/docs/81857/1n4148.pdf
Zalecana:
Pilot na podczerwień do komputera z Arduino: 6 kroków
Pilot na podczerwień do komputera z Arduino: Za pomocą tego odbiornika możesz zdalnie sterować komputerem dzięki modułowi IR i Arduino. Włączony tryb leniwy ^^
Automatyczny pilot na podczerwień oparty na Arduino Sterowany temperaturą: 7 kroków
Automatyczny pilot na podczerwień oparty na Arduino Sterowany temperaturą: Hej, co słychać, chłopaki! Akarsh tutaj z CETech. Zmęczony budzeniem się w środku głębokiego snu tylko dlatego, że temperatura w pokoju jest zbyt niska lub zbyt wysoka z powodu głupiego prądu przemiennego. W takim razie ten projekt jest dla Ciebie.W tym projekcie zamierzamy zrobić nasze
Pilot na podczerwień sterowany Amazon Echo: 11 kroków (ze zdjęciami)
Amazon Echo Controlled IR Remote: System Amazon Echo może kontrolować wiele aspektów inteligentnego domu, ale inteligentne gniazdko może tylko wyłączać się i włączać. Wiele urządzeń nie włącza się natychmiast po podłączeniu i wymaga dodatkowych czynności, takich jak naciśnięcie przycisków na pilocie lub
Ręcznie robiony pilot na podczerwień: 5 kroków (ze zdjęciami)
Hand Made IR Remote: W moim poprzednim projekcie używałem tego urządzenia jako nadajnika IR i obiecałem wgrać ten opis projektu w kolejnych instrukcjach. Więc tutaj przedstawiam nadajnik IR używający timera 555. Ostatni projekt, w którym ten pilot chcemy zaprojektować astabilny mnożyć
Pilot na podczerwień i odbiornik podczerwieni (TSOP1738) z Arduino: 10 kroków
Pilot na podczerwień i odbiornik podczerwieni (TSOP1738) z Arduino: Ta instrukcja jest przeznaczona dla początkujących Arduino. To jeden z moich wcześniejszych projektów z Arduino. Bardzo mi się podobało, kiedy to zrobiłem i mam nadzieję, że Tobie też się spodoba. Najbardziej atrakcyjną cechą tego projektu jest „sterowanie bezprzewodowe”. I to jest