Flugzeug Lichtschaltung (Tag/Nacht) mit Fotowiderstand

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 ...... :slight_smile:

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)

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. :slight_smile:

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).

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)

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.

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.

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:

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:

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 !

Das mit den LEDs stimmt schon, allerdings funktioniert alles so wie es sein soll (komischer weise :smiley: )
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 :wink: Vielen Dank schonmal!

Dann viel Erfolg und halt uns auf dem laufenden.

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

// 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;
  }
}

.... und; Funktionierts ?
(mglw. blöde Frage, aber .....)

Soweit ich es getestet habe, bei mir schon. Bin gespannt, ob es auch beim TO tut, was er sich vorstellt.

Ah cool. Ich habe das hier gerade erst entdeckt :smiley: Probiere es gleich mal aus. Vielen lieben Dank schonmal :):slight_smile:

Wunderbar, das funktioniert :smiley: Richtig gut, freue mich. Jetzt muss ich dann nur noch 2 Micromotoren ansteuern und die da einfügen. :slight_smile: Mache während des Baues mal Fotos und Videos und lade das mal bei Youtube hoch, dann könnt ihr euch das Ergebnis angucken :slight_smile: Wer schon mal vorab was sehen möchte, kann meine alten Bauten auf meiner Homepage angucken. www.modellflughafen144.jimdo.com :slight_smile:

Das sieht ja sehr genial aus ! Die Hamburger Bastler weinen schon, oder ... :grin:

Helfe dir gerne bei deinem Airport-Projekt weiter (sebst Model-Flieger).
Ideen hast du sicher genug ... ich und andere hier bestimmt noch mehr.

Tipp - wie schon gegeben:
... den "Flieschern" noch ein One-Way-Remote mitgeben, damit du diese "steuern" kannst.

Z. B. ganz simpel ein/aus/um/weg-schalten durch eine Standard IR-Fenbedienung.
Auf "Sicht" kannst du damit passend programmiert an allen Fiegern simpel mit dem Arduino noch ein IR-Led gönnen und damit weiter nach Wunsch steuern.

Ist nicht wirklich aufwendig betreff Mechanik & Kosten. Proggen dauert aber halt ne Weile....

Mal unabhängig von der Schaltung ein großes Lob für Dein Engagement. Ich habe mir Deine HP mal angeschaut. Das ist schon beeindruckend, besonders für einen alten Lufthanseaten.

Gruß Tommy

Wenn Du mit dem Eingang keinen Taster verbindest, passiert auch nichts :wink:

TERWI:
Das sieht ja sehr genial aus ! Die Hamburger Bastler weinen schon, oder ... :grin:

Dem schließe ich mich an :grin:

Tommy56:
Mal unabhängig von der Schaltung ein großes Lob für Dein Engagement. Ich habe mir Deine HP mal angeschaut. Das ist schon beeindruckend, besonders für einen alten Lufthanseaten.

Gruß Tommy

Danke für all die netten Worte von euch :slight_smile: Wenn ihr wüsstet, wie viele Flugzeuge noch in den Kartons sind und warten gebaut zu werden und die alten jetzt schon gebauten werden nochmal general überholt und auch mit den Nanos ausgestattet :smiley: Lufthansa ist sehr stark vertreten :wink: Eine Flotte von 12 747-400 LH wird bestimmt ein gutes Bild am neuen Terminal geben :stuck_out_tongue: Hoffen wir mal, dass ich auch bald ein Mitglied der airline werde :wink: Will mich dieses Jahr mal als Pilot bewerben :slight_smile:

agmue:
Wenn Du mit dem Eingang keinen Taster verbindest, passiert auch nichts :wink:
Dem schließe ich mich an :grin:

Aber der Arduino wartet doch am Anfang des Programms auf eine Eingabe durch den Taster um von Programm 0 auf Programm 1 zu schalten und damit eigentlich erst zu "beginnen"

byte prgNr = 1;                         // aktuelles Programm