The main board and the Arduino are mounted directly behind the 7-segment display on a rear door that allows access to the full boards and the MicroSD card with the sound files. I added the acrylic windows so the boards would be visible, but unfortunately they are mostly hidden behind a rat's nest of cables.
The sound files are chosen by either the rotary switch or the file potentiometer depeding on the button pressed. The SOMO-14D reads sound files in the naming convention of "000#.ad4" so the rotary switch plays files 0001-0011. The file potentiometer is connected to an analog pin and mapped to an integer between 0012-0026. The files are stored on a 2GB MicroSD card which is accessible from the back panel so Cooper can change the sounds as he grows up.
I didn't want to have to reset the clock every time Zappo got unplugged so I decided to integrate a Real Time Clock. I used the DS1307 based board I bought off eBay (visible in lower right of main board). This clock is I2C based and only requires 2 pins on the arduino.
One of my favorite parts of Zappo has to be an old rotary switch I was given at a Maker's Faire. I have no idea what this thing was recycled out of but it includes 4 "digits" from 0-F and a fifth one that has words like: "data in", "data out", "shft out", "shft in", "off", etc. I use the "digits" to represent the alarm time in military time. Because the rotary switch can map to a digit that exceeds the range of a time digit anything greater than the range limit is mapped back to the highest value for that digit. The "text" switch I use for picking which sound file to play for the alarm ( "off" turns on the siren circuit instead of playing a file to allow custom alarm sounds ). This rotary switch is Binary-coded decimal (BCD) which means that each "digit" requires 4 pins to represent 1,2,4,8. That is a total of 20 pins required to read all 5 "digits" (the socket/resistors for the rotary switch are visible on the upper portion of the main board)
Due to the rotary switch's excessive requirements for input pins plus a large number of additional switches I quickly exceeded the number of I/O pins of the Arduino UNO ( 14 digital + 5 analog ). Rather than switch to an Arduino Mega for twice the price I decided to use bit-shift registers to increase the input/outputs. For output I used a single 74HC595 chip as described in the Arduino ShiftOut library. This gave me 8 outputs for the cost of only 3 pins of the Arduino. I used 4 daisy chained CD4021B chips as described in the Arduino ShiftIn library. This gave me 32 inputs for the cost of only 3 pins on the Arduino. (barely visible - hidden under the pile of green wires connecting the CD4021Bs to their switch sockets) In the end I used nearly all the inputs with the rotary switch, DIP switches, other switches and buttons.
For the time display I used a 7 Segment Backpack from AdaFruit Industries. This was amazingly simple! Like the real-time clock it is I2C based so it required no additional Arduino pins beyond the 2 already being utilized for the the RTC. I added a photoresister to an analog pin of the Arduino which maps to a brightness integer for the display. So as the light dims the 7 segment display dims with it.
The "siren" noisemaker is a hacked version of a 555 Police Siren circuit. It is stand-alone and the Arduino's only connection to it is power control via a MOSFET. The "frequency" potentiometer controls the resistance between the discharge pin (7) and trigger/threshold (2/6) pins of the first 555 timer. The "tone" potentiometer controls the same resistance for the second 555 chip. The "delay" potentiometer controls the resistance for a single capacitor between the first chip's output (3) pin and the control (5) pin of the second chip. The "dump" button bypasses the "delay" potentiometer forcing a quick dump of the capacitance which causes a sliding change in frequency. The circuit includes 2 fast, color-changing LEDs that backlight the frosted acrylic under the knobs. I wanted the siren to be used at anytime so the "siren" switch is a DPDT switch that switches the siren and mouth from the MOSFET controlled power directly to 9V turning them both on immediately.
The "head" circuits and "body" LEDS are turned off between 8PM and 8AM to allow Zappo to sleep so it doesn't bother Cooper while he is trying to sleep. The "siren" is turned on if it has been selected for the alarm sound and the alarm is active. The "mouth" is turned on whenever a sound file is played or the "siren" is activated.
The "mouth" is a simple "knight rider" LED chaser based on a 555 timer and CD4017 decade counter. The "mouth" uses edge lit acrylic to make it light up but still allow visibility to the circuit below. The LEDS are drilled into a 3/4 piece of acrylic with a "wave" pattern cut into it.
The fading LED on top of the head is Experiment 14 of Make: Electronics book that I had laying around. It is a Programmable Unijunction Transistor and a couple of capacitors.
The eyes are slow, color changing LEDs who's power is controlled by a small PIR sensor disguised as the "nose" connected to a transistor.
The "ears" are a sound-to-light circuit that I built from the schematic of a Velleman Kit I had used for another project ( cross-fading LED light show ). The circuit consists of an electret microphone disguised as the antenna on his head. The microphone is amplified through a series of transistors and eventually a transistor controlling power to 4 LEDs hidden behind ping-pong ball "ears".
The Arduino is delivered 9V from a standard 9V 1000mA wall-wart.