Go Down

Topic: Flugzeug Lichtschaltung (Tag/Nacht) mit Fotowiderstand (Read 3293 times) previous topic - next topic

TERWI

Quote
Hab die Nanos für die Flugzeuge gekauft.
Aaaah ! Ein sehr wichtiger Fakt. Das sind propper Teile - haben aber begrenzt Steuer-Pins (analog/diigital).
Quote
Verkabelung bekommt man schon gut unter.
.... wenn man fein zieseliertes Werkzeug hat und ruhige Hände / Nerven  :)
Quote
Nur wie schon angesprochen, wenn die Flugzeuge über das Bugrad angetrieben werden sollen (wieder so ein Problemfall bei mir) wird das schon ein bisschen eng
Oooh - nun wird es detaillierter !

... muss also wenigstens noch ein Mini-Servo, Mini-Stepper + Akku (18650-Zelle o.ä.) rein.
Bekommst du als Nano-Chiruig sicher locker hin  :)

Aber wie mit dem Modell "kommunizieren" (Licht an/aus, fahren, etc), wenn da nix "Kabelei" ?
Bleibt nur so was wie Funk-Module ala Blue-Tooth (ooooch nööö), NRF24, oder WiFi mit ESP8266.

To young to die - never to old for rock'n roll

biberlecram

Aaaah ! Ein sehr wichtiger Fakt. Das sind propper Teile - haben aber begrenzt Steuer-Pins (analog/diigital)..... wenn man fein zieseliertes Werkzeug hat und ruhige Hände / Nerven  :) Oooh - nun wird es detaillierter !

... muss also wenigstens noch ein Mini-Servo, Mini-Stepper + Akku (18650-Zelle o.ä.) rein.
Bekommst du als Nano-Chiruig sicher locker hin  :)

Aber wie mit dem Modell "kommunizieren" (Licht an/aus, fahren, etc), wenn da nix "Kabelei" ?
Bleibt nur so was wie Funk-Module ala Blue-Tooth (ooooch nööö), NRF24, oder WiFi mit ESP8266.


Jetzt geht es erstmal darum Programme für Standmodelle zu machen, die nur an diversen Positionen des Airports stehen. Nur für die Beleuchtung und halt die Triebwerkssimulation (Fanblades sollen sich drehen). Ansonsten bewegt sich das Flugzeug erstmal nicht.

Zum Thema mit den fahrenden Flugzeugen:
Kennst du das Faller Car System? Draht in die Fahrbahn und mit Magnetschleifer drüber fahren. Das heißt, der Motor muss nur bei gewissen Punkten auf dem Rollweg anhalten. Das könnte man einerseits über Reedkontakte machen oder halt über eine Infrarot- bzw. Lichtschranke. Aber Bluethooth oder sonstige Drahtlosen Funkverbindungen sind natürlich auch eine Idee wert. Aber wie gesagt eins nach dem anderen. Erstmal jetzt die Beleuchtungsprogramme hinzimmern. :D

TERWI

 :)  :) Faller Car System kenne ich nicht, aber .....
.... booah der HAMMER (echt wahr): gegen 15:00 dachte ich noch drüber nach, wie ich/man mit meiner alten Faller-Autobahn (älter als 40 Jahre !!!) so was wie nen TAX-WAY basteln könnte ..... sähe sogar optisch sehr passend aus ! .... und währe auch ansatzweise passend zum Maßstab. Echt hammer ey ....

100.000.000 Dollar Frage vorweg:
? Wenn sich dein(e) Modell(e) bewegen können, dürfen diese nicht "fest" verdrahtet sein -> d..h. alles LIVE ist innen drin - wie im richtigen Fliescher.
? Alles drin & mobil .... wie dann mit dem Teil kommunizieren ? -> geht also nur DRAHTLOS !

Aber wie über welchen "ohne Draht-Funk"  und welches Modul ?
Arduino allein kann das nicht - muss ein Zusatzmodul her - Welches ?
BlueTooth, WLAN (NRF), WiFi (ESP), ..... magnetisch wirds nicht funktioneren (das schleppen vielleicht !!!)

To young to die - never to old for rock'n roll

biberlecram

Naja, theoretisch könnte so ein Reedkontakt ja einfach den Stromkreis für den Motor unterbrechen. Oder halt irgendwie ein Signal dem Arduino senden. So wie das der Fotowiderstand ja auch macht. Irgendwas, was ständig einen Wert abfragt und wenn dann ein Wert Unterschritten/ Überschritten oder gleich ist, einfach dann eine Aktion ausführen lassen.

TERWI

OK - ein Magnet im Boden unter dem Pseudo-Fluggerät (AN DER RICHTIGEN STELLE - MIT WENIG RÄUMLICHEN SPIEL) löst das Prob des "sich von der Stelle bewegen".
.... sehr Un-Elegant ! ..... weil die Plazierung muss sehr eindeutig sein, ist von anderen Magneten beinflusst und eine "Wiederkehr" des Modells muss sehr exakt sein.

Nächste Mega-Euro-Quiz-Frage wäre:
.... wie willst du das Modell ansatzweise über einen bestimmen Kurs steuern ? .... sofern es nicht vom "TAXI" gezogen wird ?
Mit Magneten im Boden drunter wird das sicher nix - da schenke ich dir lieber 10-100m meiner alten Faller-Bahn mit Modifikation meines grünen Lieblings-Jaguar-E-Type zum Schlepper ......  :)


Der albernde Foto-Widerstand, welcher Taghell oder Nacht-Duster identifiziert ist da wirklich ein echt albernes Feature.
Sorry - Wichtiges natürlich.

ABER:
Wenn alle deine Flieger / Roll-Outs auf dem nicht wirklichen Flugfeld wie im echten Leben mit ein klitzeklein "Kommunikation" ausgerüstet sind,

KANN

das besser sein als im echten Leben .............. 8)

To young to die - never to old for rock'n roll

biberlecram

#20
Jan 08, 2017, 11:35 am Last Edit: Jan 08, 2017, 11:45 am by biberlecram
Jajaja... genug jetzt von dem fahrenden Flugzeug. Das kann ich mir immer noch überlegen, was ich wie mache. Ausserdem finde ich es nicht gut, wenn jemand so abwertend schreibt, der anscheinend selber keine Ahnung hat, was diese Technik betrifft oder was die Grundidee eigentlich ist. Ich verweise hier mal auf das Miniatur Wunderland in Hamburg, schau dir doch einfach da mal Videos von dem Airport an und der Technik die dahinter steckt und du wirst sehen wie die ganze Sache funktioniert. Und dann kann man sich normal mit anderen Leuten unterhalten und seine Ideen mit einbrigen, wie man was besser machen könnte. Denn dazu sind dann Foren wie dieses hier da, um anderen zu helfen, sich selber tipps und tricks anzueignen und vorallem das man mit anderen respektvoll umgeht.
Mir geht es jetzt erstmal um die Lichtsteuerung und nicht um ein fahrendes Flugzeug. Und dieses soll halt mit Fotowiderstand betrieben werden, damit das Flugzeug selber erkennen kann, ob Tag oder Nacht simuliert wird (wie bereits geschrieben) und ich nicht 140 Flugzeuge per Hand (Manuell) umschalten will. Ich würde jetzt um konstruktive Beiträge bitten. :)

TERWI

Nun denn, relativ einfach:

Man nehme einen lichtempfindlichen Widerstand (LDR genannt), der seinen Widerstand mit der Lichtstärke ändert.
Diesen LDR schaltet man mit Beinchen 1 an +5V, Beinchen 2 geht an irgendeinen analogen Eingang des (hier) NANO.
Ebenfalls von den A-Eingang noch einen 2. Widerstand (normal) an Minus/Masse. Damit hast du einen Spannungsteiler gebastelt, der je nach Helligkeit die Spannung am A-Eingang zwischen irgendwas mehr als 0V und weniger als +5V ändert.

Diese Sannung kannst du nun mittles analogRead() in eine Variable einlesen. Wer Wert wird dann irgendwo zwischen 0 und 1023 liegen - der Eingang hat einen 10-Bit Ad-Wandler.
Je nach Dimensionierung (Werte) des Spannungteilers und Lichtintensität ändert sich das Spannungsverhältnis/der Bereich.

Nun diesen Wert mit einer Konstanten vergleichen und festlegen, wann es hell / dunkel wird.
Fettich.
Wichtig ist nur, das eine s. g. Schalthystere berücksichtigt wird. D.h., die Vergleichwerte für ein und ausschalten müssen ein wnig auseinanderliegen - sonst flackerts !
Also z.B. "dunkel" bei 111 und "hell" bei 777.
Zwischenstufen gehen logo auch (bei 444/555 nur Cockpit an/aus).

To young to die - never to old for rock'n roll

TERWI

Ergänzung:
Ein passender LDR wäre der TYP LDR-07.
Gibts bei Rechelt eektronik und kostet 1,10€

Der LDR-07 hat bei 10 Lux 4-11 KOhm, bei 100 Lux ca. 2 KOhm. (LDR an + wie oben)
Wenn du als 2. R einen 4,7 KOhm schaltest (diesen an Masse), erhälst du folgende var. Spannungsteiler:

Hell:    ~ 2K + 4,7K -> ~ 3,5V -> ~ 720 (oder mehr, wenn heller)
unkel: ~10K + 4,7K -> ~ 1,6V -> ~ 325 (oder weiger, wenn dunkler)
To young to die - never to old for rock'n roll

TERWI

Noch ne Ergänzung:

Du hast mich sicherlich völlig missverstanden.
Ich habe gar nichts irgendwie abwertend gemeint oder ähnlich.
Im Gegenteil: Ich bewundere Filigran-Bastler wie dich.
To young to die - never to old for rock'n roll

biberlecram

Guck dir mal meinen Sketch an. Ich will ja jetzt, dass der LDR den Taster ersetzt. Nur wie bekomme ich das hin? Der LDR soll einfach einen Programmwechsel hervorrufen.

TERWI

Hmmm, mit dem Taster schaltest du ja deine "Beleuchtungssequenz" in der LOOP immer eine Pos. weiter (prgNr++;)
Den Taster kannst du logo nicht mit dem LDR ersetzen.

Wenn ich das so richtig erkenne, sind deine Programme 1-4 die gleichen wie 5-6, mit dem Unterschied, das bei 5-8 Logo + Innenbeleuchtung dazu kommen.
#0 macht gar nix ?
Eigentlich müsstet du mit der folgenden Änderung nur noch von 0 bis 4 schalten ?!

Allerdings blicke ich nicht wirlich durch die Beschreibung deiner Programmliste mit zugehöriger Auflistung der Lampen und der Schaltfolge in deinem Array - wann wird was denn nun wann hell ?
Das passt irgendwie nicht zusammen ..... oder ?!

Lampe 8 ist Kabine und 9+10 ist Logo ? Die gehen nur bei Programm 5-8 an ? (Also wenn dunkel ?!)

Du müsstest jetzt einfach nur in prgwechsel(byte nr) zusätzliche Abfragen einbauen, ob Programm 5-8 gewählt ist, ob grade Lampe 8, 9 oder 10 abgefragt/geschaltet wird und ob es dunkel oder hell ist.

Um deine "Programmstruktur" beizubehalten, müsste prgwechsel(byte nr) in etwa so aussehen:
Code: [Select]

void prgwechsel(byte nr)
{
  Serial.print("prgNr: ");
  Serial.print(prgNr);
  Serial.print("  IOs:");
  for (byte j = 0; j < anzahlLeds; j++)
  {
    byte val = programme[nr][j];   // Wert HIER holen
    if ((nr >= 5) && (nr <= 8))    // Programm 5 - 8 ?
    {
      if ((j <= 8) && (j <= 10))    // Lampe 8 - 10 ?
      {
        val = istDunkel;           // true/1, sonst false/0
      }
    }
    digitalWrite(LED_AUSGAENGE[j], val);  // LED schalten
    Serial.print("  ");
    Serial.print(programme[nr][j]);
  }
  Serial.println();
}

In der LOOP() brauchst dun noch eine Abfrage des LDR-Spannungsteilers.
Dazu noch 2 Konstanten für Tag / Nacht und die globalen var "istDunkel" und "lux".
In etwa so:
Code: [Select]

word lux = 0;
boolean istDunkel = false;
const   wirdDunkel = 400:
const   wirdHell  = 500;
void loop()
{
  lux = analogRead(0);     // LDR-Teiler abfragen
  if (lux <= wirdDunkel)   // Vergleichen 1.
  { istDunkel = true);     // ... Licht an
  if (lux >= wirdHell)     // Vergleichen 2. 
  { istDunkel = false);    // ... Licht aus
  // ggf. hier Ausgabe der Daten via SERIELL zu testen
  ....
}


Die Werte für "wirdDunkel" und "wirdHell" hängen von den Spannungsteiler-Werten und der Beleuchtungsstärke am LDR ab und müssen experimentell ermittel werden.
Könnte passen bei LDR-07 mit 4K7
Das doppelte IF deswegen, damit es eine Hyterese gibt - sonst flackerts im Rumpf an der Lichtschwelle.

Das ist nicht getestet, nur so nach Gefühl -> ausprobieren !
 

To young to die - never to old for rock'n roll

biberlecram

Das mit den LEDs stimmt schon, allerdings funktioniert alles so wie es sein soll (komischer weise :D )
Das die Programme gleich sind und nur die Innenbeleuchtung dazukommt, stimmt auch. Habe mir überlegt den Programmwechsel per Taster raus zu lassen und wirklich nur zwischen zwei Stadien wechse. DH es gibt 4 kleine Programme. ZB Navigationslichter an, LDR erkennt Nacht > Innenbeleuchtung wird dazu geschaltet. Sonst nichts. Je nach Parkposition oder wenn das Flugzeug auf dem Taxiway steht wird halt  ein anderes Programm auf den Nano drauf geladen. Habe heute schon die ersten LEDs in mein aktuelles Projekt "A350 LH" eingabaut. Dieser soll auf dem Taxiway stehen, d.h. Nav, Logo, Beacon und taxilights an zusätzlich sollen bei dem dann unabhängig vom LDR die Motoren laufen >Micromotoransteuerung. Bin gespannt wie es weiter gehtz. Ich probiere deine Vorschläge morgen mal aus ;) Vielen Dank schonmal!

TERWI

Dann viel Erfolg und halt uns auf dem laufenden.
To young to die - never to old for rock'n roll

agmue

Ausgehend vom Sketch in #0 habe ich den lichtempfindlichen Widerstand ergänzt:

Code: [Select]
// http://forum.arduino.cc/index.php?topic=395411.msg2721251#msg2721251
// Lichtsteuerung Modellflugzeug (Standmodell)

// Programm zur Lichtsteuerung Flugzeug
// Programme:
//  0 - Cold and Dark
//  1 - Day: NAV
//  2 - Day: NAV/Beacon
//  3 - Day: NAV/Beacon/Taxi
//  4 - Day: NAV/Beacon/Taxi/Landing/Strobes
//  5 - Night: NAV/Logo/Innenbeleuchtung
//  6 - Night: NAV/Logo/Innenbeleuchtung/Beacon
//  7 - Night: NAV/Logo/Innenbeleuchtung/Beacon/Taxi
//  8 - Night: NAV/Logo/Innenbeleuchtung/Beacon/Taxi/Landing/Strobes

// Lampenauflistung:
//        Bezeichnung         Farbe           Position                              I/O bei Programm                              Pin
//                                                                             0    1    2    3    4    5    6    7    8
// --------------------------------------------------------------------------------------------------------------------------------------
//   1  - NavLicht            rot         blended winglet - left               O    I    I    I    I    I    I    I    I           2
//   2  - NavLicht            grün        blended winglet - right              O    I    I    I    I    I    I    I    I           2
//   3  - NavLicht            weiß        blended winglet - left               O    O    I    I    I    O    I    I    I           3
//   4  - NavLicht            weiß        blended winglet - right              O    O    I    I    I    O    I    I    I           3
//   5  - NavLicht            weiß        APU exhaust door                     O    O    I    I    I    O    I    I    I           3
//   6  - NavLicht            weiß        body - left                          O    O    O    O    O    O    I    I    I           4
//   7  - NavLicht            weiß        body - right                         O    O    O    O    O    O    I    I    I           4
//   8  - Innenbeleuchtung    weiß        Cabin                                O    O    O    O    O    I    I    I    I           5
//   9  - LogoLicht           weiß        elevator - left                      O    O    O    O    O    I    I    I    I           6
//  10  - LogoLicht           weiß        elevator - right                     O    O    O    O    O    I    I    I    I           6
//  11  - rotating Beacon     rot         body - up                            O    O    I    I    I    O    I    I    I           7
//  12  - rotating Beacon     rot         body - down                          O    O    I    I    I    O    I    I    I           7
//  13  - Taxischeinwerfer    weiß        front gear                           O    O    O    I    I    O    O    I    I           8
//  14  - Taxischeinwerfer    weiß        main gear left                       O    O    O    I    I    O    O    I    I           8
//  15  - Taxischeinwerfer    weiß        main gear right                      O    O    O    I    I    O    O    I    I           8
//  16  - Landescheinwerfer   weiß        wing - left                          O    O    O    O    I    O    O    O    I           9
//  17  - Landescheinwerfer   weiß        wing - right                         O    O    O    O    I    O    O    O    I           9
//  18  - Strobe              weiß        blended winglet - left               O    O    O    O    I    O    O    O    I           10
//  19  - Strobe              weiß        blended winglet - right              O    O    O    O    I    O    O    O    I           10


const byte LED_AUSGAENGE[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10}, taster = A0, blitzLed = 8, blitzLed2 = 5;
const byte eingang = A1;            // lichtempfindlicher Widerstand
bool aktTaster, altTaster, blitz, blitz2;
#define TagNachtOffset 4
#define SCHWELLE 512                // Schwelle Tag/Nacht
byte prgNr;                         // aktuelles Programm
int sensorWert;
const unsigned int blitzZeiten[] =  {110, 1100, 110, 1100};                                                      // {50, 50, 50, 400}; Airbus Rotating Beacon   {110, 1100, 110, 1100}; Boeing Rotating Beacon
const byte anzahlBlitzZeiten = sizeof(blitzZeiten) / sizeof(blitzZeiten[0]);
byte blitzZeitenNr;
unsigned long aktMillis, blitzMillis;

const unsigned int blitzZeiten2[] = {120, 1100, 120, 1100};
const byte anzahlBlitzZeiten2 = sizeof(blitzZeiten2) / sizeof(blitzZeiten2[0]);
byte blitzZeitenNr2;
unsigned long blitzMillis2;

// hier werden die Programme definiert
const byte anzahlProgramme = 9, anzahlLeds = sizeof(LED_AUSGAENGE);
const boolean programme[anzahlProgramme][anzahlLeds] = {
  {0, 0, 0, 0, 0, 0, 0, 0, 0},
  {1, 0, 0, 0, 0, 0, 0, 0, 0},
  {1, 1, 0, 0, 0, 1, 0, 0, 0},
  {1, 1, 0, 0, 0, 1, 1, 0, 0},
  {1, 1, 0, 0, 0, 1, 1, 1, 1},
  {1, 0, 0, 1, 1, 0, 0, 0, 0},
  {1, 1, 1, 1, 1, 1, 0, 0, 0},
  {1, 1, 1, 1, 1, 1, 1, 0, 0},
  {1, 1, 1, 1, 1, 1, 1, 1, 1}
};

void prgwechsel() {
  Serial.print("Sensorwert = " );
  Serial.println(sensorWert);
  Serial.print("prgNr: ");
  Serial.print(prgNr);
  Serial.print("  IOs:");
  for (byte j = 0; j < anzahlLeds; j++) {
    digitalWrite(LED_AUSGAENGE[j], programme[prgNr][j]);  // LED schalten
    Serial.print("  ");
    Serial.print(programme[prgNr][j]);
  }
  Serial.println();
  blitz = digitalRead(LED_AUSGAENGE[blitzLed]);
  blitzZeitenNr = 0;
  blitzMillis = aktMillis;
  blitz2 = digitalRead(LED_AUSGAENGE[blitzLed2]);
  blitzZeitenNr2 = 0;
  blitzMillis2 = aktMillis;
}

void setup() {
  Serial.begin(9600);
  Serial.println("Anfang");
  pinMode(taster, INPUT_PULLUP);
  for (byte j = 0; j < anzahlLeds; j++) {
    pinMode(LED_AUSGAENGE[j], OUTPUT);
  }
  prgwechsel();  // Anfangsstatus -> alles Aus
  aktTaster = digitalRead(taster);
  altTaster = aktTaster;
}

void loop() {
  aktMillis = millis();
  sensorWert = analogRead(eingang);

  if (sensorWert > SCHWELLE + 12)  // Nacht
  {
    if (prgNr <= TagNachtOffset && prgNr > 0)
    {
      prgNr += TagNachtOffset;
      prgwechsel();
    }
  }
  if (sensorWert < SCHWELLE - 12)    // Tag
  {
    if (prgNr > TagNachtOffset && prgNr > 0)
    {
      prgNr -= TagNachtOffset;
      prgwechsel();
    }
  }

  altTaster = aktTaster;
  aktTaster = digitalRead(taster);
  if (!altTaster && aktTaster) {
    delay(30);
    prgNr++;
    prgNr = prgNr % anzahlProgramme;
    prgwechsel();
  }
  if (blitz && (aktMillis - blitzMillis >= blitzZeiten[blitzZeitenNr])) {
    digitalWrite(LED_AUSGAENGE[blitzLed], !digitalRead(LED_AUSGAENGE[blitzLed]));
    blitzMillis = aktMillis;
    blitzZeitenNr++;
    blitzZeitenNr = blitzZeitenNr % anzahlBlitzZeiten;
  }
  if (blitz2 && (aktMillis - blitzMillis2 >= blitzZeiten2[blitzZeitenNr2])) {
    digitalWrite(LED_AUSGAENGE[blitzLed2], !digitalRead(LED_AUSGAENGE[blitzLed2]));
    blitzMillis2 = aktMillis;
    blitzZeitenNr2++;
    blitzZeitenNr2 = blitzZeitenNr2 % anzahlBlitzZeiten2;
  }
}
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

TERWI

.... und; Funktionierts ?
(mglw. blöde Frage, aber .....)
To young to die - never to old for rock'n roll

Go Up