The Illumination of The Nautilus

Thanks for the replies.

The model is not very large, with overall dimensions of roughly a foot long by 3-4 inches wide and about 8 inches tall. The Nautilus' interior has a rather small viewable area at around 3" x 3" x 4".

I have several 50 resistor packs in a wide range of values, more than enough blue and green LEDs from a starter Arduino kit that I'm using for the water, and as far as the effect of walking around the ship with a candle/lantern, I plan on using some of the MANY small LEDs I've harvested from broken LCD displays. (The harvested LEDs are mainly to satisfy George's desire to re-purpose anything he can keep out of a land fill)

I'm also using breadboards for the prototyping and will eventually upload the completed sketch to one of the Nano boards I bought.

The physical assembly (including soldering) is much more familiar to me than the coding part. I have assembled a variety of electronics kits over the past few years, but nothing needing programming until now.

After a HUGE 'Thank You' to johnwasser, here is the code I have so far, modified, by trial and error, to serve as the underwater look:

const int CHANNELS = 6;

const int LED_PINS[CHANNELS] = {3, 5, 6, 9, 10, 11};

// Note: There is no speed penalty to use multiply or divide in compile-time constants since the
// math is done by the compiler, not the microprocessor.
// Note: To avoid overflow warnings, constants that, multiplied together, won't fit in a signed integer 
// had to be marked "unsigned"
const unsigned int MIN_BRIGHTNESS[CHANNELS] = {3*256, 5*256, 10*256, 15*256, 10*256, 5*257};
const unsigned int MAX_BRIGHTNESS[CHANNELS] = {205U*256U, 103U*256U, 180U*256U, 210U*256U, 200U*256U, 240U*256U};

unsigned int CurrentBrightness[CHANNELS] =  {175U*256U, 60*256, 120*256, 100*256, 75*256, 200U*256U};
int FadeAmount[CHANNELS] = {19, 20, 22, 25, 23, 21};  // Slow the fades down by a factor of 85

// the setup routine runs once when you press reset:
void setup() {
  for (int i = 0; i < CHANNELS; i++) {
    pinMode(LED_PINS[i], OUTPUT);
  }
}

// the loop routine runs over and over again forever:
void loop() {
  for (int i = 0; i < CHANNELS; i++) {
    analogWrite(LED_PINS[i], CurrentBrightness[i]>>8);

    CurrentBrightness[i] += FadeAmount[i];

    // reverse the direction of the fading at the ends of the fade:
    if (CurrentBrightness[i] <= MIN_BRIGHTNESS[i] ||
        CurrentBrightness[i] >= MAX_BRIGHTNESS[i]) {
      FadeAmount[i] = -FadeAmount[i];
    }
  }

  // wait for one milliseconds to see the dimming effect
  delay(1);  // Speed the fades up by a factor of 90
}