Ta odpowiedź cieszy się zainteresowaniem. Patryk Sokol Opublikowano 5 godzin temu Ta odpowiedź cieszy się zainteresowaniem. Opublikowano 5 godzin temu Hej Wymęczyłem sterownik oświetlenia do Iskry. A, że pasuje do Iskry, to pasuje do większości współczesnych samolotów. I tylko ostrzegę - średnio się na elektronice znam, więc wszystko będzie bardzo podstawowo. No ale do rzeczy - czym jest omawiane urządzonko. W mojej wersji wygląda w ten sposób: I od spodu, z widoczną końcówką mocy: Ani ładne, ani zgrabne, ale przede wszystkim proste i działa. I teraz jakie to ma funkcje: 1. Pozwala sterować oświetleniem modelu z użyciem wyjścia SBUS z odbiornika - dzięki temu nie marnuje wyjść PWM odbiornika (czyli równie dobrze można wrzucić go do modelu z 4 kanałowym odbiornikiem) 2. Pozwala osobno sterować miganiem i diodami świecącymi stale (tryby są - wszystko wyłączone, włączone stałe oświetlenie, włączone stałe i migacze) 3.Pozwala regulować jasność LEDów z nadajnika - osobno migacze i osobno stałe światła 4. Ma wyjście do symulowania wydechu silnika odrzutowego. Tzn. jedno z wyjść jest powiązane z kanałem gazu i jego jasność zmienia się liniowo z przepustnicą 5. Jedno wyjście jest przeznaczone do sterowania oświetleniem podwozia - tzn. nie ma regulacji jasności i ma nastawialne opóźnienie włączenia (żeby podwozie zdążyło się otworzyć) 6. Obsługuje zarówno failsafe, jak i całkowicie utratę sygnału z odbiornika. Wtedy światła stałe świecą na maxa, a migacze migają z maksymalną jasnością. To jest dla umilenia buszowania w zbożu. I teraz, jak to działa od strony sprzętowej. Całość opiera się o mikrokontroler ESP32 devkit 1: https://mischianti.org/doit-esp32-dev-kit-v1-high-resolution-pinout-and-specs/ Całość pójdzie też na każdym innym ESP32. Mikrokontroler sam w sobie jest bardzo tani, ale stosunkowo duży i zdecydowanie za mocny. Ale to wszystko po to, żeby nie musieć się bawić w sprzętową inwersję SBUSa. Tak jest dużo prościej po prostu Sam układ elektrycznie złożony jest tak: Czyli całość składa się z ESP32, mosfetów typu N i LEDów. Sam użyłem FR3707Z, ale dosłownie każdy MOSFET typu N będzie OK (P też, ale to się inaczej podłącza). Oczywiście taki układ należy powtórzyć dla każdego wyjścia LED. Dobór rezystorów już zostawiam dla czytelnika, są do tego kalkulatory w internecie W ESP32 wyjścia można w miarę dowolnie konfigurować, pod LEDy mogą być użyte piny GPIO 2,4,12-19,21-23,25-27,32-33. Tych samych pinów można użyć jako wejścia SBUS. Później zaś opiszę jak użyte są piny domyślnie w moim programie. Sterownik można podpiąć pod tego samego BECa co odbiornik (jeśli jest odpowiednio mocny), ale raczej odradzam przepuszczenie jego zasilania przez odbiornik. Jak się obchodzić z Arduino znajdziecie tutaj: https://forbot.pl/blog/kurs-arduino-srodowisko-jak-zaczac-programowac-id936 Interesuje Was jak kompilować programy, dodawać biblioteki oraz jak je wgrywać na płytkę. Żeby użyć tego projektu, to musicie dodać bibliotekę Bolder Flight Systems SBUS oraz dodać płytkę ESP32 w menagerze płytek I teraz jak o jest to domyślnie skonfigurowane. Na początku programu są zmienne, zaczniemy od zmiennych wyjść: //Definicja portów na wyjścia const int out_zielony_koncowka = 26; //port do sterowania zielonym LEDem na koncowce const int out_czerwony_koncowka = 25; //port do sterowania czerwonym LEDem na koncowce const int out_biala_lewa_koncowka = 12; //port do sterowania lewm migaczem const int out_biala_prawa_koncowka = 27; //port do sterowania prawym migaczem const int out_bialy_pionowy = 19; //port do sterowania bialym na stateczniku - niekatwn - wpięty w port z białmi kadłuba const int out_czerwony_migacz_dol_kadluba = 13; //port do sterowania czerwonym migaczem na dole kadłuba const int out_czerwony_migacz_gora_kadluba = 14; //port do sterowania czerwonym migaczem na gorze kadłuba const int out_bialycieply_dol_kadluba = 33; //port do sterowania bialymi cieplyi ledami przy wlocie powietrza i podwoziu const int out_bialy_podwozie = 23; //port do sterowania białym na podwoziu const int out_pomaranczowy_silnik = 32; //port do sterowania pomaranczem na wylocie Czyli mamy nazwę funkcji i przypisany jej pin (jest to numer GPIO na rysunku ESP32 wyżej). Jeśli którejś funkcji nie potrzebujecie, to wystarczy diody nie podpinać. Jeśli chcecie - możecie sobie piny pozmieniać, ale jak się nie czujecie na siłach, to rozpiska wyżej tema załatwia Port SBUS zdefiniowany jest tak: //Parametry portu szeregowego const int serial_rx = 16; //definicja portu szeregowego const int serial_tx = 17; //definicja portu szeregowego const bool inverse = true; //czy SBUS ma wlaczona inwersj SBUS podpinamy do serial_rx, serial_tx nic tu nie robi, ale port musi być zadeklerowany. zmienna inverse określa czy SBUS jest z inwersją. Na 99% nie musicie tego dotykać, a pozostały 1% wie co robi Następnie mamy zmienne współczynników korekcyjnych //Współczynniki korekcyjne do LEDów pod jednym wyjściem const float kor_zielony_koncowka = 1; //wspolczynnik korekcyjny dla zielonego leda koncowki skrzydla const float kor_czerwony_koncowka = 1; //wspolczynnik korekcyjny dla czerwonego leda koncowki skrzydla const float kor_bialy_pionowy = 1; //wspolczynnik korekcyjny dla bialego leda statecznika const float kor_bialy_koncowka = 1; //wspolczynnik korekcyjny bialych migaczy na koncowkach const float kor_czerwony_kadlub = 1; //wspolczynnik korekcyjnyc czerwonych migaczy na kadłubie const float kor_bialy_wlot_powietrza = 1; //wspolcznnik korekcyjny bialych cieplych na kadlubie const float kor_pomaranczowy_silnik = 1; //wspolczynnik korekcyjny ledow przy wylocie z silnika const float kor_bialy_podwozie = 1; //wspolczynnik korekcyjny ledow na podwoziu Działa to tak, że jak mamy wstawione "1" to na max wysterowaniu daje 100% mocy, jak 0.5 to na maxie daje 50% mocy itd. Dzięki temu można wyrównać różnice w jasności, np. między zielonym, a czerwonm LEDem na końcówkach. Albo coś przygasić na stałe Później są kanał RC //Numery kanalow RC const int kan_przepustnicy = 0; //Numer kanalu przepustniczy - 1 const int kan_podwozia = 8; //Numer kanalu podwozia -1 const int kan_wybor_trybu = 12; //Numer kanalu wyboru trybu swiecenia -1 const int kan_jasnosci_stalych = 13; //Numer kanalu ustalania jasnosci swiecacych stale -1 const int kan_jasnosci_migajacych = 15; //Numer kanalu ustalania jasnosci migajacych -1 Działa to tak, że jak chcecie przypisać 9 kanał, o wpisujecie 8 (bo kanał 1 ma numer 0). Kanał przepustnicy służy do sterowania oświetleniem silnika, kanał podwozia włącza reflektor podwozia z zadanym opóźnieniem, kanał wyboru trybu pozwala określić jak świeci (poniżej 20% kanału nic nie świeci, powyżej 20% świecą światłą stałe, a powyżej 60% wszystko świeci i miga). Kanały jasności służą do regulowania jasności LEDów. I na koniec parametry do zmiany sposobu migania: //Definicje długości migania const uint32_t okres_czerwonych_migaczy = 2800; //Okres czerwonych migaczy [ms] const uint32_t okres_migania_czerwonych_migaczy = 140; //Okres migania czerwonych migaczy [ms] const int ilosc_migniec_czerwonych = 3; //Ile razy miga na cykl czerwony migacz const uint32_t okres_bialych_migaczy = 3000; //Okres czerwonych migaczy [ms] const uint32_t okres_migania_bialych_migaczy = 120; //Okres migania czerwonych migaczy [ms] const uint32_t ilosc_migniec_bialych = 3; //Ile razy miga na cykl bialy migacz const float przesuniecie_fazowe_czerwonych = 0.5; //Po jakim czasie fazy wlacza sie drugi migacz? const float przesuniecie_fazowe_bialych = 0.2; //Po jakim czasie fazy wlacza sie drugi migacz? const int blad_okresowy_czerwonych = 30; //O ile rozjezdza sie okres co cykl dla czerwonych [ms] const int blad_okresowy_bialych = 25; //O ile rozjezdza sie okres co cykl dla czerwonych [ms] const int opoznienie_podwozia = 1500; //czas opoznienia wlaczenia LEDów podwozia [ms] Migacze są zaprojektowane według poniższej konwencji: Czerwony kwadracik oznacza w którym miejscu LED świeci. Okres migaczy określa całkowity czas jednego cyklu, okres migania określa jak długo trwa cykl migania (składający się w połowie ze świecenia i w połowie z bycia wygaszonym), a liczba mignieć określa ile razy na cykl migacz miga. Czyli obecnie czerwony migacz ma ustawiony okres trwający 2800ms. W tm okresie po upływie czasu (okres migacza - ilość mignieć * okres migania => 2800 - 3 * 140 = 2380 ms) dioda trzy razy zaświeci się na połowę cyklu migania (czyli 70ms akywna, 70ms niekatywna) i cykl się powtórzy. Dodatkowo określone jest jeszcze przesunięcie fazowe przy starcie, dla drugiego migacza. Czyli jak czerwony ma przesunięcie fazowe = 0,5, o drugi migacz odpali się po upływie połowy cyklu pierwszego (czyli migają naprzemiennie). Bonusowy jest jeszcze błąd okresowy migacza. Jest to wartość która określa o ile przesuwają się mignięcia między pierwszym i drugim migaczem z pary na każdy cykl. Jest to po to, żeby symulować bimetaliczny wyłącznik migaczy, przez który światła starują w przeciwfazie, ale z czasem się rozjeżdżają. Można zostawić 0, wtedy cały czas idealnie równo migają. I na koniec jest opóźnienie w odpaleniu reflektora podwozia. I to tyle, zasadniczo proste. Można śmiało lutować, wgrać soft i nic w zmiennych nie grzebać, będzie działać OK A jak koś chce grzebać, to wszystko działa na funkcjach i jest okomentowane, więc łatwo pomodyfikować po swojemu Miłej zabawy Sterownik_oswietlenia_final.ino 4 2
Rekomendowane odpowiedzi