The eventual goal here is to create a large panel of indicators and controls for monitoring my entire fleet of computers. Bi-color LEDs, LCD panels, analog guages, etc. will show status information for servers, workstations, network devices, and everything else all in one place. At this early stage I have only a single 20×4 character LCD which displays information about my main workstation.

A daemon running on my PC collects system stats and sends LCD updates through an Arduino Duemilanove. The ATmega168 has plenty of I/O features including analog inputs and PCM outputs, so I expect it will be able to handle future expansion of the panel with a minimum of support devices. At present I use a shift register IC to drive the HD44780‘s 10 essential input signals with only 3 output pins on the microcontroller. 2 of these 3 signals can be shared with other LCD + shift register circuits, so additional LCDs can be added for the cost of one I/O pin apiece.

Here’s the code for the microcontroller and the PC-side daemon. In the future the daemon software will change significantly. The panel will be directly connected to a very low power PC of some kind, and systems represented on the panel will send some kind of UDP datagrams to this host machine. I may even abandon the custom hardware panel altogether and use a small LCD monitor, perhaps a USB display, with a desktop application rendering the various indicators and gizmos.