Spisu treści:
- Krok 1: Okablowanie
- Krok 2: Programowanie
- Krok 3: Ekranowanie diody podczerwieni
- Krok 4: Komunikuj się
Wideo: UChip - Serial Over IR!: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
Komunikacja bezprzewodowa stała się kluczową cechą w naszych projektach w dzisiejszych czasach i mówiąc o łączności bezprzewodowej, pierwsze co przychodzi mi do głowy to Wi-Fi lub BT, ale obsługa protokołów komunikacyjnych Wi-Fi lub BT nie jest łatwym zadaniem i dużo pochłania zasobów MCU, pozostawiając niewiele miejsca na kodowanie mojej aplikacji. Dlatego zazwyczaj wybieram zewnętrzny moduł Wi-Fi/BT połączony szeregowo z mikrokontrolerem, aby rozdzielić role i zyskać większą swobodę.
Czasami jednak Wi-Fi i BT są „przesadne” w przypadku niektórych aplikacji wymagających niskiej przepływności i krótkiej odległości komunikacji. Ponadto korzystanie z Wi-Fi lub BT wiąże się z koniecznością podłączenia smartfona lub urządzenia z odpowiednim uwierzytelnieniem.
Wyobraź sobie, że musisz po prostu włączyć/wyłączyć zewnętrzne światło, zmienić natężenie światła lub otworzyć bramę elektryczną. Czy warto skorzystać z Wi-Fi lub BT?
W zależności od środowiska i aplikacji może być przydatna komunikacja bezprzewodowa na długości fali IR (podczerwień). Serial over IR, zaimplementowany z kilkoma zewnętrznymi komponentami (3 dyskretne komponenty!) i uChip (bardzo mała płytka kompatybilna z Arduino) może być rozwiązaniem, którego szukałeś!
Zestawienie materiałów (dla jednego urządzenia Tx-Rx):
1 x uChip
1 x dioda IR: mająca szczyt emisji przy 950nm
1 x TSOP-38238 (odpowiednik)
Rezystor 1x1KOhm
Sprzęt komputerowy
1 x płytka do krojenia chleba/protoboard
1 x czarna plastikowa tuba: średnica wewnętrzna tego samego rozmiaru co dioda IR, tuba jest niezbędna, aby zapobiec przesłuchom z odbiornikiem TSOP.
1 x folia aluminiowa (3cm x 3cm)
1 x taśma
WSKAZÓWKA: Możesz stworzyć urządzenie only-TX lub only-RX w przypadku, gdy potrzebujesz jednokierunkowej komunikacji, usuwając niepotrzebny sprzęt RX/TX z obwodu lub włączając/wyłączając powiązany kod w szkicu.
Krok 1: Okablowanie
Połącz elementy razem zgodnie ze schematem.
Kilka uwag na temat prostego schematu. Ponieważ TSOP-38238 pozwala na zasilanie od 2,5V do 5V i pobiera co najwyżej 0,45mA (kartę katalogową znajdziesz TUTAJ), będę zasilał odbiornik za pomocą dwóch pinów, które zapewnią odpowiednio masę i zasilanie. Umożliwia to włączanie/wyłączanie odbiornika na żądanie i bardzo prostą konfigurację okablowania sprzętowego. Ponadto, jeśli potrzebujesz jednokierunkowej komunikacji, możesz wybrać, czy chcesz utworzyć urządzenie tylko (Tx/Rx), po prostu wyłączając/włączając TSOP-38238.
Jak działa obwód?
To całkiem proste. Pin wyjściowy TSOP jest wyciągany w dół, gdy czujnik wykryje ciąg 6 lub więcej impulsów przy 38KHz, z drugiej strony jest wyciągany w górę, gdy nie ma takiego sygnału. Dlatego, aby przesłać dane szeregowe przez IR, obwód zasila anodę LED za pomocą PWM 38KHz modulowanego sygnałem szeregowym TX, który obniża katodę LED.
W konsekwencji, na wysokim poziomie szeregowego TX0, dioda LED nie jest przesunięta lub przesunięta w tył (brak impulsów), a pin wyjściowy TSOP jest podciągnięty w górę. Przesyłając niski poziom na szeregowym, dioda LED jest zasilana i generuje impulsy IR zgodnie z zastosowanym sygnałem PWM; w związku z tym wydajność TSOP jest obniżona.
Ponieważ transmisja jest bezpośrednia (0->0 i 1->1), nie ma potrzeby stosowania falowników lub innej logiki po stronie odbiornika.
Reguluję optyczną moc wyjściową LED, wybierając cykl pracy PWM zgodnie z aplikacją. Im wyższy współczynnik wypełnienia, tym wyższa optyczna moc wyjściowa, a co za tym idzie, dalej będziesz transmitować swoją wiadomość.
Pamiętaj, że nadal musimy generować impulsy! Dlatego nie należy przekraczać cyklu pracy powyżej 90%, w przeciwnym razie TSOP nie wykryje sygnału jako impulsów.
Potrzebujesz więcej mocy?
Czy w celu zwiększenia prądu można po prostu zmniejszyć wartość rezystora 1kOhm?
Może po prostu nie bądź zbyt wymagający! Maksymalny prąd uzyskiwany z pinu MCU jest ograniczony do 7mA, gdy pin portu jest silniejszy niż normalnie (PINCFG. DRVSTR = 1 i VDD > 3V), jak podano w arkuszu danych SAMD21.
Jednak standardowa konfiguracja (przyjęta domyślnie przez biblioteki Arduino IDE) ogranicza prąd do 2mA. Dlatego użycie 1kOhm daje już limit prądu przy domyślnych ustawieniach!
Zwiększenie prądu to nie tylko kwestia komponentów elektrycznych. Krótko:
- Zmień rezystor (którego minimalna wartość jest ograniczona do około 470Ohm -> VDD/470~7mA);
- Ustaw odpowiednio PORT->PINCFG->DRVSTR na 1;
Kod zawierający tę funkcję udostępnię w przyszłej aktualizacji.
Pamiętaj jednak, że obniżanie i odprowadzanie prądu z pinów MCU w pobliżu jego granic nie jest tak dobrym podejściem. Rzeczywiście, obniża to żywotność i niezawodność MCU. Dlatego sugeruję zachowanie normalnej siły napędu do długotrwałego użytkowania.
Krok 2: Programowanie
Załaduj szkic „IRSerial.ino” do uChip (lub płyty zgodnej z Arduino, której używasz).
Jeśli potrzebujesz zmienić pin generujący PWM, upewnij się, że używasz pinu podłączonego do timera TCC, ponieważ ta wersja kodu działa tylko z timerami TCC (sprawdź „wariant.c” swojej płyty, aby uzyskać te informacje). Dodam kod, aby w przyszłych aktualizacjach używać również timerów TC.
Kod jest dość prosty. Po ustawieniu PIN_5 low (zapewnia TSOP GND) i PIN_6 high (zasilając TSOP), MCU uruchamia PWM na PIN_1, ustawiając okres timera i przechwytywanie porównując odpowiednio do niezbędnej modulacji częstotliwości (w moim przypadku jest to 38KHz) i wypełnienia cykl (12,5% domyślnie). Odbywa się to wykorzystując standardową funkcję analogWrite() na pinach PWM i zmieniając tylko rejestr PER_REG (rejestr okresu) i CC (porównanie przechwytywania) (napisany kod jest po prostu wytnij i wklej z biblioteki wire_analog). Można ustawić niezbędną częstotliwość odpowiednio do czujnika TSOP zmieniającego PER_REG (czyli górną granicę zerującą licznik timera), natomiast ustawić CC proporcjonalnie do wartości okresu na żądany procent wypełnienia.
Następnie kod ustawia port szeregowy przy użyciu prawidłowej szybkości transmisji, która wynosi 2400bps. Dlaczego tak niska prędkość transmisji?! Odpowiedź znajduje się w arkuszu danych TSOP, który można znaleźć TUTAJ. Ponieważ TSOP posiada filtry o wysokim tłumieniu szumów, aby zapobiec niepożądanemu przełączaniu, konieczne jest wysłanie ciągu wielu impulsów w celu ściągnięcia pinu wyjściowego TSOP (liczba impulsów zależy od wersji TSOP, 6 jest wartością typową). Podobnie, wyjście TSOP jest ustawiane w stan wysoki po minimalnym czasie odpowiadającym 10 impulsom lub więcej. W związku z tym, aby ustawić wyjście TSOP jako sygnał modulujący TX0, należy ustawić prędkość transmisji z uwzględnieniem następującego równania:
Szeregowy Baud < PWM_frequency/10
Przy użyciu 38 KHz daje to szybkość transmisji mniejszą niż 3800bps, co oznacza, że wyższa „standardowa” dozwolona szybkość transmisji wynosi 2400pbs, jak wcześniej przewidywano.
Chcesz zwiększyć szybkość transmisji? Istnieją dwie opcje.
Najprostszą opcją jest zmiana TSOP na wersję o wyższej częstotliwości (jako TSOP38256), która pozwoliłaby na podwojenie szybkości transmisji (4800bps)
Niewystarczająco?! Następnie musisz stworzyć własne łącze optyczne za pomocą prostego obwodu LED IR + fotodiody i wzmocnienia. Jednak to rozwiązanie wymaga dużej wiedzy z zakresu kodowania i elektroniki, aby zapobiec wpływowi szumu na przesyłane dane, a zatem jego wdrożenie wcale nie jest łatwe! Jeśli jednak czujesz się wystarczająco pewnie, możesz spróbować stworzyć własny system TSOP!:)
Na koniec ustawiłem port SerialUSB (2400bps), którego używam do wysyłania i odbierania danych na monitorze szeregowym.
Funkcja loop() zawiera kod niezbędny do przekazywania danych przez dwa seriale i jest kopiowana bezpośrednio z przykładowego szkicu SerialPassthrough zmieniając tylko nazwy seriali.
Krok 3: Ekranowanie diody podczerwieni
Jeśli włączysz powyższe obwody po załadowaniu kodu „IRSerial.ino”, sprawdź Serial Monitor w Arduino IDE i spróbuj wysłać ciąg. Prawdopodobnie zobaczysz, że uChip odbiera dokładnie to, co transmituje! W obwodach występuje przesłuch ze względu na komunikację optyczną między diodą IR a TSOP tego samego urządzenia!
Nadchodzi trudna część tego projektu, zapobiegająca przesłuchiwaniu! Pętla musi zostać przerwana, aby nawiązać dwukierunkową komunikację szeregową przez IR.
Jak przerwać pętlę?
Pierwsza opcja, obniżasz cykl pracy PWM, obniżając w ten sposób optyczną moc wyjściową diody LED. Jednak takie podejście zmniejsza również odległość, na której można uzyskać niezawodny kanał szeregowy IR. Drugą opcją jest ekranowanie diody podczerwieni, tworząc w ten sposób kierunkową „wiązkę podczerwieni”. Jest to kwestia prób i błędów; w końcu za pomocą kawałka czarnego pneumatycznego węża owiniętego folią aluminiową i taśmą (zapewniającą izolację elektryczną) udało mi się przerwać rozmowę. Umieszczenie nadawczej diody IR wewnątrz tuby uniemożliwia komunikację pomiędzy TX i RX tego samego urządzenia.
Spójrz na zdjęcie, aby zobaczyć moje rozwiązanie, ale wypróbuj inne metody i/lub zasugeruj swoje! Nie ma absolutnego rozwiązania tego problemu (chyba że potrzebujesz prostego kanału jednokierunkowego) i prawdopodobnie musisz dostroić układ obwodów, cykl pracy PWM i osłonę IR do swoich potrzeb.
Po przerwaniu rozmowy krzyżowej możesz sprawdzić, czy urządzenie nadal działa, tworząc pętlę na urządzeniu Tx-Rx, wykorzystując odbicie długości fali podczerwieni na powierzchniach odbijających promieniowanie podczerwone.
Krok 4: Komunikuj się
To wszystko
Twoje urządzenie szeregowe przez IR jest gotowe do komunikacji, używaj ich do wysyłania danych przez IR, włączania/wyłączania czegokolwiek chcesz lub sprawdzania stanu czujnika, który potajemnie ukrywasz!
Odległość, na której komunikacja jest niezawodna, nie jest tak duża, jak w przypadku urządzenia WiFi lub BT. Jest jednak kierunkowy (w zależności od przesłony LED i zastosowanego systemu ekranowania IR), co może być bardzo przydatne w niektórych aplikacjach!
Wkrótce wrzucę filmik, na którym będzie można zobaczyć kilka przykładów wykonanych przeze mnie aplikacji. Cieszyć się!
Zalecana:
Text to Speech Kliknij na UChip z zasilaniem ARMbasic i inne SBC z zasilaniem ARMbasic: 3 kroki
Text to Speech Kliknij UChip z zasilaniem ARMbasic i inne SBC z zasilaniem ARMbasic: Wstęp: Dzień dobry. Nazywam się Tod. Jestem specjalistą z branży lotniczej i obronnej, który w głębi serca jest trochę geekiem.Inspiracja: Pochodzę z ery dial-up BBS, 8-bitowych mikrokontrolerów, komputerów osobistych Kaypro/Commodore/Tandy/TI-994A, gdy R
Programowanie Arduino Over the Air (OTA) - Ameba Arduino: 4 kroki
Programowanie Arduino Over the Air (OTA) - Ameba Arduino: Na rynku dostępnych jest wiele mikrokontrolerów Wi-Fi, wielu producentów lubi programować swój mikrokontroler Wi-Fi za pomocą Arduino IDE. Jednak często pomija się jedną z najfajniejszych funkcji, jakie ma do zaoferowania mikrokontroler Wi-Fi, czyli
UChip - Prosty szkic do zdalnego sterowania silnikami i / lub serwami za pośrednictwem radia 2,4 GHz Tx-Rx!: 3 kroki
UChip - Prosty szkic do zdalnego sterowania silnikami i / lub serwami za pośrednictwem radia 2,4 GHz Tx-Rx!: Naprawdę lubię świat RC. Korzystanie z zabawki RC daje poczucie, że kontrolujesz coś niezwykłego, mimo że jest to mała łódka, samochód lub dron! Jednak nie jest łatwo dostosować swoje zabawki i sprawić, by robiły to, co chcesz
UChip – RC Boat z plastikowych butelek i odtwarzacz CD-ROM!: 4 kroki
UChip – RC Boat z plastikowych butelek i odtwarzacz CD-ROM!: Po zaimplementowaniu sprzętu i oprogramowania do podłączenia mojego radia dronowego do silników / serw, następnym krokiem było dobre wykorzystanie wykonanej ciężkiej pracy i zbudowanie własnego RC zabawka, którą jest…Łódka! Ponieważ nie jestem inżynierem mechanikiem, zdecydowałem się na łatwe
UChip - czujnik sonaru BEEP z transmisją danych Bluetooth: 4 kroki
UChip - BEEP Sonar Sensor z transmisją danych Bluetooth: Ostatnio opracowałem BEEP jak sonar samochodowy i szeregowy adapter Bluetooth na USB za pomocą uChip. Każdy projekt sam w sobie był dość ciekawy, ale… czy dałoby się je połączyć i stworzyć czujnik „BT zdalna transmisja BEEP jak samochód”?!?T