Telescope Flat Field Panel

The Alnitak flat box for an 81mm scope (4.125" outside diameter), if they made one, would be expensive. The Flat-Man-Gen2, for OTAs up to 8-1/8", is $375.00. I'm not completely adverse to spending money, but I like doing it myself more than spending money.

Small telescope flat field panel
Flat Field Panel for a William Optics GT81 Scope

I built the flat fielder from the ellumiglow 5" kit. It ran $59.99 with a diffuser and power supply. The panel itself also can plug into the same power supply connector as the 14" panel in my LX600 flat fielder. That's what I'm doing. It uses the same controller, described below, as the 14".

The "body" parts are 8" x 10" x 5mm black foam core. The foam core is odd. It is covered not with paper, but with plastic like garbage bags are made from, only about 1/4 the thickness. The front is 2-pieces thick, and has a 4.125" diameter hole in the center. The panel and the frosted acrylic piece are sandwiched between the back and the two front pieces. I used 2 pieces on the front for better grab on the scope tube. Heavy duty Mylar packing tape holds it all together. Really professional.


A little box with an Arduino Nano and an IRLZ44N MOSFET allows the computer to control the light using the Pegasus Flatmaster INDI driver. I chose that one because it is simple and has only the features I need - it can turn the panel on and off, and it can set the brightness. I put the MOSFET gate on pin D3, and changed the PWM to 122Hz. The MOSFET acts as a low-side switch, toggling the ground to the inverter. Because the real Flatmaster requires it, the INDI driver sends a value of 20 for maximum brightness, and 255 for minimum brightness. There is a line of code in the Arduino app which converts that into 20 for minimum and 255 for maximum brightness. The INDI driver allows 0% to 100%, and the 5" panel will light up at around 3%. The 14" panel comes on at around 13%.

 * Pegasus FlatMaster clone using Arduino Nano and an EL panel
 * Commands:
 * ACK "#\n"
 * VER "V\n"
 * ENABLE "E:n\n" (E:0 = off E:1 = on)
 * LEVEL "L:nnn\n" (E:20 is brightest, E:255 is off)
#define CMD_ACK '#'
#define CMD_ENABLE 'E'
#define CMD_LEVEL 'L'
#define CMD_FIRMWARE 'V'
#define ACK_RESPONSE "OK_FM\n"
#define V_RESPONSE "1.0\n"
#define LIGHT_CTL 3

int brightness = 0;
bool enabled = false;
char inbuf[16];
int incursor = 0;
void setup() {
    // for PWM frequency of 122 Hz on D3 & D11.
    TCCR2B = TCCR2B & B11111000 | B00000110;
    pinMode(LIGHT_CTL, OUTPUT);
    analogWrite(LIGHT_CTL, 0);
    while (Serial.available()) {;
    memset(inbuf, 0, sizeof(inbuf));

void loop() {
    uint8_t ch;

    if (Serial.available()) {
        ch =;
        inbuf[incursor++] = ch;
        if (incursor == sizeof(inbuf)) {
            incursor = sizeof(inbuf) - 1;
        if (ch == 0x0a) {
          incursor = 0;
            // End character received.
            switch (inbuf[0]) {
                case CMD_ACK:
                case CMD_ENABLE:
                    enabled = (inbuf[2] == '1')?true:false;
                    if (enabled) {
                        analogWrite(LIGHT_CTL, brightness);
                    } else {
                        analogWrite(LIGHT_CTL, 0);
                case CMD_LEVEL:
                    brightness = 255 - atoi(inbuf+2) + 20;
                    if (enabled) {
                        analogWrite(LIGHT_CTL, brightness);
                    } else {
                        analogWrite(LIGHT_CTL, 0);

                case CMD_FIRMWARE:
            memset(inbuf, 0, sizeof(inbuf));


To make a set of flats, I set the brightness all the way down, and adjust the exposure time for the luminance filter to give around 32k ADU average. Then as I shoot the other filters, I adjust the brightness to get around 32k on average, leaving the exposure time as it is. The flats all use the same darks, so it saves me a lot of time - both imaging and processing.

Between the luminance and green filters nearly 100% of the usable range of the device is needed. If the filters were any more different, I would have to run one exposure time for the luminance and a different time for the color channels. Now, I have it down to 2 dark frames per session - one 2 seconds for the flats, and whatever for the image frames. I added ND3 + ND9 gel filters to dim the light and provide a longer exposure time.

Output at 2 Seconds