Flugzeug Lichtschaltung (Tag/Nacht) mit Fotowiderstand

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

@biberlecram

Will halt jetzt nur den Taster da raus

.... gönne dir mal ein Bewustsein-erweiterndes Getränk o. ä. und ließ noch mal alles von vorne.
Insbesondere meine letzten Postings mit dem Code-Beispiel für den LDR.
Oder die Hinweise schon früher, deine Modelle "fernzubedienen" (siehe Posting #34 zuletzt)

Den "Taster raus" (Ein-/Aus-/Umschalten der Modi der Modelle zu Parken, Taxi, ... !?) wirst du "SO" nicht eleminieren können.
Entweder per Kabel, Magnet, InfraRot-FB, WiFi/Wlan oder sonstwie...

Zwar könntest du jedem Modell eine eigene, zeigesteuerte Programmierung betreff er Beleuchtung & Co verpassen - aber Ein- und Ausschalten must du ALLE immer noch per Hand.
Dito Weiterschalten der Modi per Hand per Flieger.
.... das solls ja wohl nicht sein, dass du da auf dem Runway rumkrabbelst und "Klick" machst .....

Das geht we gesagt auch anders.

agmue:

byte prgNr = 1;                         // aktuelles Programm

AHHH das habe ich doch als im Quellcode gesucht :'D
Dann kann ich einfach alles so lassen wie es ist und dann einfach je nach Position des Flugzeuges die Programmstartnummer anpassen. GENIAL!

Jetzt kommt das beste: Kriegst du es noch hin in diesem Quelltext zwei Micromotoren anzusprechen, die in den Programmen 2,3,4,6,7,8 Laufen? Könnte man das vllt sogar als const byte bei den LED_AUSGAENGE einfach hinzufügen, heißt ja nur so viel wie:" der Pin bekommt strom". Habe auch eine H-bridge für je einen Micromotor.

TERWI:
@biberlecram....

Zwar könntest du jedem Modell eine eigene, zeigesteuerte Programmierung betreff er Beleuchtung & Co verpassen - aber Ein- und Ausschalten must du ALLE immer noch per Hand.
Dito Weiterschalten der Modi per Hand per Flieger.
.... das solls ja wohl nicht sein, dass du da auf dem Runway rumkrabbelst und "Klick" machst .....

Das geht we gesagt auch anders.

Aus jedem Flugzeug wird ein Usb Kabel rauskommen. Das splitte ich auf sodass die einzelnen Litze am Hauptfahrwerk runtergehen und so als "Bremshydraulikschläuche" am Modell ihren Platz einnehmen. Hin und Her schalten muss ich nicht, da AGMUE das richtig gut gemacht hat :slight_smile: wie bereits in #43 geschrieben, setzte ich je nach Position des Flugzeuges, eine andere Programmstartnummer ein. Und damit hat sich das mit den "nicht fahrenden erstmal". Bei dem fahrenden bin ich von deiner Idee mit der Funkübertragung per Infrarot überhaupt nicht abgetan. Ich werde mich mal schlau machen, was sich da an Möglichkeiten bietet (Von wo aus sende ich, was verwende ich alles (Antenne, Sender etc.), Akku, Bugradsteuerung).

Aus jedem Flugzeug wird ein Usb Kabel rauskommen

Wird ..... nicht wirklich "Chick" und / oder besonders elegant gelöst.
"Hübscher Modellbau" sieht anders aus.

OK - 2 Drähte zur Spannungsversorgung (pro Modell) lösen das Prob je eines erforderlichen Akku's
... und man kann alles hardwaremäßig zentral ausschalten, aber ...

Ich stelle mir aber mal grade einen USB-HUB für 140 Modelle vor ................... :sunglasses:
Abgesehen von Strom ..... ist das ..... ähmmmm ..... viel verdrahterei.

Was zur Hölle hast du gegen eine einfache Fernbedienung - z.B. per IR ?
... mit der du per Simple-Klick alle deine Modelle nicht nur ein- & ausschalten, sondern auch in ihren Stati bedienen kannst

....... ey gugge, doh fliescht glaich aihner lohs !! :grin:

... oops