Skocz do zawartości

Moduły sterujące oświetleniem modelu


milczacy

Rekomendowane odpowiedzi

Jak niektórzy wiedzą mam na "koncie" dwa modele samolotów w skali 1:144, w których zastosowałem oświetlenie nawigacyjne. Nie wdając się w tym momencie w szczegóły, tym razem chciałbym tylko napisać o samych modułach sterujących.

Pomoc otrzymałem od kolegi "AndyCopter" z forum pfmrc.eu i w wykonanych modelach, z racji ich sporych rozmiarów zastosowałem płytkę Arduino Nano. Jest to o tyle dobre rozwiązanie, że możemy dzięki odpowiedniemu programowi zasymulować praktycznie dowolną sekwencję świecenia lamp strobo i beacon. Niestety do mniejszych modeli ta płytka jest po prostu za duża.

 

GQtnQhH.jpg?1

 

Jednak inny kolega "bluuu" z pfmrc.eu, zaprojektował, wykonał i przysłał mi mikro płytkę rozmiarów 9,7x13,2mm. Zmieści się ona chyba w każdym modelu, nawet w skali 1:144.

Poniżej zamieszczam schemat tego modułu oraz filmik demonstrujący jej pracę. Jego jedyną wadą jest fakt, że programu sterującego nie można zmienić, jest on wgrany już "fabrycznie".

 

Jn2Nnx5.png?1

 

W razie pytań - postaram się pomóc.

Odnośnik do komentarza
Udostępnij na innych stronach

Podaję zatem garść 'konkretów'.

Zacząć należy od zakupu płytki Arduino Nano lub jej klona (na allegro jest tego pokaźna ilość) koszt ~15zł. Następnie należy pobrać darmowe oprogramowanie ze strony https://www.arduino.cc/en/Main/Software

W międzyczasie może być potrzebne zainstalowanie sterowników obsługi USB. W sprzedaży są dostępne moduły z chipem CH340 (mniej typowy, potrzebne odpowiednie sterownika dla Windows) oraz FTDI (Windows rozpoznaje je automatycznie).

Po rozpoznaniu modułu w komputerze uruchamiamy program Arduino, ustawiamy w nim odpowiednie opcje (typ posiadanego modułu Arduino oraz port szeregowy do komunikacji), kopiujemy kod sterujący oświetleniem i wgrywamy do pamięci modułu.

Przykładowy kod, który steruje oświetleniem w moim B748F wygląda tak:

/* Oświetlenie nawigacyjne Boening 747
Program przeznaczony dla Arduino, udostępniany jest na licencji OpenSource.
autor: warp3r[at]wp.pl
modified by milczacy 
*/

const int LEDOFF = 0;
const int LEDON = 96; // 25%
const int LEDBLINK = 244;  // 100%
const int LEDHALF = 120; // 50%

class LED {
 private:
   byte _ledPin;
   int _ledState;
   int _ledLastState;
   long _currentMillis;
   long _previousMillis;
 public:
   byte _brightness;
   long _interval;
   long _time;
   LED ( byte pin);
   void setOn();
   void setOff();
   void setOnTime();
   void setBrightness( byte brightness);
};

LED::LED( byte ledpin) : _ledPin(ledpin) {
 _brightness = 0;
   _ledState = LOW;
   _ledLastState = LOW;
   _currentMillis = millis();
   _previousMillis = _currentMillis;
   long _time;  pinMode(_ledPin, OUTPUT);
}

void LED::setOn() {
 analogWrite (_ledPin, _brightness);
}

void LED::setOff() {
 digitalWrite (_ledPin, LOW);
}

void LED::setBrightness ( byte brightness) {
 _brightness = brightness;
}

void LED::setOnTime(){
 _currentMillis = millis();
 if( _currentMillis - _previousMillis > _interval) {
   _previousMillis = _currentMillis;   
   if (_ledState == LOW) {
     _ledState = HIGH;
     _brightness = LEDBLINK;
   } else {
     _ledState = LOW;
     _brightness = LEDOFF;
   }
   _ledLastState = _ledState;
 }
 if (_ledLastState == _ledState) {
   if ( (_currentMillis - _time) < _previousMillis) {
     _brightness = LEDBLINK;
   } else {
     _brightness = LEDOFF;
   }
   setOn();
 }
   
}

/* dla Arduino Nano */
int Led_1 = 3;  //ogon, białe flash
int Led_2 = 5;  //strobo skrzydla, biały flash
int Led_3 = 6;  //beacon, czerwony flash
int Led_4 = 9;  //position-zielone,czerwone,białe
int Led_5 = 10;  
int Led_6 = 13;  
int Led_7 = 2;  //landing golen, białe stałe
int Led_8 = 7;  //landing skrzydla wew, białe stałe
int Led_9 = 8;  //landing skrzydla zew, białe stałe
int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 12;      // oświetlenie wnętrza modelu, białe
int sensorValue = 0;  // variable to store the value coming from the sensor

LED Led_tail(Led_1);
LED Led_strobe(Led_2);
LED Led_beacon(Led_3);

// Ustawienia po uruchomieniu układu
void setup() {
 // ustawiamy stan IO, internal pull
 pinMode(Led_1, OUTPUT);     
 pinMode(Led_2, OUTPUT);     
 pinMode(Led_3, OUTPUT);     
 pinMode(Led_4, OUTPUT);     
 pinMode(Led_7, OUTPUT);       
 pinMode(Led_8, OUTPUT);       
 pinMode(Led_9, OUTPUT);         
 pinMode(ledPin, OUTPUT);

 // tu regulujesz czas błysków
 Led_tail._interval = 1700;
 Led_tail._time = 60;
 
 Led_strobe._interval = 1000;
 Led_strobe._time = 70;
 
 Led_beacon._interval = 2400;
 Led_beacon._time = 100;
}

/* Wszystkie światła wyłączone */
void LEDS_OFF() {
 analogWrite(Led_1, LEDOFF);
 analogWrite(Led_2, LEDOFF);
 analogWrite(Led_3, LEDOFF);
 analogWrite(Led_4, LEDOFF); 
 analogWrite(Led_7, LEDOFF); 
 analogWrite(Led_8, LEDOFF);
 analogWrite(Led_9, LEDOFF);
 analogWrite(ledPin, LEDOFF);
}

/* Tylko światła nawigacyjne i pozycyjne (obrysowe) */
void Mode1() {  
 Led_tail.setOnTime();
 Led_strobe.setOnTime();
 Led_beacon.setOnTime();
 analogWrite(Led_4, LEDBLINK);
 analogWrite(Led_7, LEDOFF);
 analogWrite(Led_8, LEDOFF);
 analogWrite(Led_9, LEDOFF);
}

/* Światła nawigacyjne, pozycyjne i lądowania*/
void Mode2a() {  
 Led_tail.setOnTime();
 Led_strobe.setOnTime();
 Led_beacon.setOnTime();
 analogWrite(Led_4, LEDBLINK);
 analogWrite(Led_7, LEDBLINK);
 analogWrite(Led_8, LEDOFF);
 analogWrite(Led_9, LEDOFF);
}

void Mode2b() {  
 Led_tail.setOnTime();
 Led_strobe.setOnTime();
 Led_beacon.setOnTime();
 analogWrite(Led_4, LEDBLINK);
 analogWrite(Led_7, LEDBLINK);
 analogWrite(Led_8, LEDBLINK);
 analogWrite(Led_9, LEDOFF);
 
}

void Mode2c() {  
 Led_tail.setOnTime();
 Led_strobe.setOnTime();
 Led_beacon.setOnTime();
 analogWrite(Led_4, LEDBLINK);
 analogWrite(Led_7, LEDBLINK);
 analogWrite(Led_8, LEDBLINK);
 analogWrite(Led_9, LEDBLINK);
}

/* Tylko światła pozycyjne - obrysowe */
void Mode3() {
 analogWrite(Led_1, LEDOFF);
 analogWrite(Led_2, LEDOFF);
 analogWrite(Led_3, LEDOFF);
 analogWrite(Led_4, LEDBLINK);
 analogWrite(Led_7, LEDOFF);
 analogWrite(Led_8, LEDOFF);
 analogWrite(Led_9, LEDOFF);
}

/* w tej pętli, program wykonuje się w nieskończoność */
void loop() {
   /* read the value from the sensor:
   potencjometr dzielę na 6 pozycji, dla 6 trybów pracy */
 sensorValue = analogRead(sensorPin);    
 if ( sensorValue < 170 ) {
   LEDS_OFF();
   analogWrite(ledPin, LEDOFF);
 }
 if ((sensorValue > 170) and (sensorValue < 340)) {
   Mode3(); 
   analogWrite(ledPin, LEDHALF); }
 if ((sensorValue > 340) and (sensorValue < 510)) {  
   analogWrite(ledPin, LEDOFF);   
   Mode1(); }
 if ((sensorValue > 510) and (sensorValue < 680)) {
   analogWrite(ledPin, LEDOFF);   
   Mode2a(); }
 if ((sensorValue > 680) and (sensorValue < 850)) {
     analogWrite(ledPin, LEDOFF);   
   Mode2b(); }
 if (sensorValue > 850) {
   Mode2c(); }
}
/* a tu jest koniec kodu v2.3.2 */

Jest to wersja nieco rozbudowana, bo wymyśliłem sobie kilka trybów świecenia, w najprostszej wersji, gdyby był tylko jeden tryb, kod byłby prostszy.

W kolejnym poście opiszę stosowane diody świecące - LED.

Odnośnik do komentarza
Udostępnij na innych stronach

Ostatnią sprawą pozostaje wybór diod świecących. Z uwagi na dłubanie w skali 1:144 stosują małe diody LED SMD typu 0603, które są naprawdę małe (choć są jeszcze mniejsze typu 0402) i pewien problem może sprawić przylutowanie do nich przewodów. Jest to jednak do zrobienia, a być może oświetlając większy model możemy użyć większych diod.

Oto kilka propozycji LED z oferty Conrad:

czerwona 250 mcd

zielona 430 mcd

biała (ale nie podano zimna czy ciepła)

czerwona 50 mcd

zielony 50 mcd

czerwony 80 mcd

czerwony 100 mcd

W/w diody dobrze nadają się jako światła pozycyjne, czy stroboskopy. Do oświetlenia wnętrza, jako 'beacon' można z powodzeniem stosować diody THT czyli takie z nóżkami, które lutuje się bardzo łatwo.

Do modułu Arduino diody podłączam poprzez rezystory o oporności 200-600 Ohm, w zależności jaką jasność chcę otrzymać.

Edytowane przez Gość
Odnośnik do komentarza
Udostępnij na innych stronach

A są jakieś malutkie diody, które można wysunąć poza obrys kadłuba i na przykład umieścić wewnątrz wywierconych światełek pozycyjnych z plastiku clear?

Do tego dochodzą jeszcze światła antykolizyjne, które migają, więc to już by takie proste nie było.

Ja jestem kompletnym lajkonikiem w tym temacie, więc nawet nie wiedziałbym od czego zacząć, jakie diody kupić, jaki układy elektroniczne, jak je połączyć, czym zasilić itp.

Taki przewodnik dla niekumatych byłby tutaj pewnie nie tylko przeze mnie bardzo gorąco powitany.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja osobiście kupowałem u tego użytkownika, ale każda płytka Arduino Nano się nada.

 

@Solo - ja aż tak małych LED nie znam, w tym przypadku pomyślałbym o światłowodach wyprowadzonych poza obrys modelu. Tylko wtedy należy bardzo dobrze "zaizolować" samo źrodło światła w modelu, gdyż może ono prześwitywać przez plastik modelu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Super Moderator

No dobra płytkę już zamówiłem, czas przejść z teorii do praktyki.

Mamy już płytkę Audrino Nano V3.0 i co dalej?

Gdzie, które przewody lutujemy?

A i jeszcze jedno, czym to jest zasilane? Bo chyba jakaś bateria musi być?

Poprosimy jakiś schemat?

Odnośnik do komentarza
Udostępnij na innych stronach

Jutro postaram się opisać to jakoś prościej, przyda się jednak informacja do jakiego samolotu chciałbyś to wbudować - trzeba bowiem rozpoznać i odwzorować właściwą sekwencję świecenia.

Arduino Nano może być zasilane z zasilacza 5V (każdy zasilacz do smartfona) lub dowolnedo stałoprądowego zasilacza 6 do chyba 15V.

Ja po prostu zasilam to z portu USB.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Super Moderator

Będę budował Airbusa A380 z Revell i jak mam się męczyć i malować te setki foteli co są w tym modelu, to czemu mam się nie pomęczyć i zrobić mu oświetlenie jak należy. Na pewno urozmaici urok tego modelu.

Tylko się zastanawiam czy pokład miałby się świecić stale, czy tylko co jakiś czas, na jakiś czas. Za to kabina pilotów świeciła by stale.

Odnośnik do komentarza
Udostępnij na innych stronach

Tutaj jest opis wyprowadzeń:

W sekcji programu masz przypisanie nóżki płytki do obwodu świetlnego

/* dla Arduino Nano */
int Led_1 = 3;  //ogon, białe flash
int Led_2 = 5;  //strobo skrzydla, biały flash
int Led_3 = 6;  //beacon, czerwony flash
int Led_4 = 9;  //position-zielone,czerwone,białe
int Led_5 = 10;  
int Led_6 = 13;  
int Led_7 = 2;  //landing golen, białe stałe
int Led_8 = 7;  //landing skrzydla wew, białe stałe
int Led_9 = 8;  //landing skrzydla zew, białe stałe
int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 12;      // oświetlenie wnętrza modelu, białe
int sensorValue = 0;  // variable to store the value coming from the sensor
 

gdzie liczba po znaku równości określa właśnie oznaczenie wyjścia (D2...D13) na płytce Arduino.

Testowo podłączaj LED przez opornik 300-500 Ohm do anody(+) diody; masa jest wspólna, podłączana do katody (-) diody.

12960_10.jpg

Edytowane przez milczacy
aktualizacja opisu płytki Arduino Nano
Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 years later...
  • 10 months later...

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.