A while ago, I set up a Minecraft server here in our house, so my oldest son could play Minecraft together with his friends. They love doing that, but without turning on the computer, there was no way of knowing if anyone else was on the server. Hence, this project! The idea is that this display will sit on the wall so my son can see immediately if any of his friends are playing Minecraft.
The display has two purposes, one is to show how many friends are currently online playing on our Minecraft server, the other to show the current time.
At the top of the display, there is an LED which is green if it has contact with the server, otherwise it is red (server is down, connection is bad, etc.). Below the LED is a 7-segment display showing the number of online players (1-9). If no one is online, the display goes blank – that makes it easy to see if anyone is online or not, even if you’re at the other side of the room.
At the bottom there is a display showing the current time. With a press of the yellow button the display will show year, month & day, and day of week (displayed as “d1″…”d7”, where d1 means Monday, d2 Tuesday and so on, since this is Europe, not the US 🙂 ). If the button is held down for a couple of seconds, the display will show its IP-address. This is good for troubleshooting the network, even though I’ve never had a problem.
On the side of the enclosure I put an on-off switch which turns the Minecraft part of the display on and off. Sometimes I think it might be a good idea not to show if anyone is online – if you’re doing
your homework at the computer, for instance.
The red button is a special feature! When pushed, there will be rain, thunder and lightning for thirty seconds. On the Minecraft server, that is. Not in real life.
On the inside
On the inside there is an Arduino Ethernet. A shift register controls the single-digit 7-segment at the top, and the bottom (time) display is a serial 7-segment display.
Every thirty seconds or so, the Arduino makes an http-get request to a (secret) webpage on my website. The webpage uses a webservice which I installed on a server I have set up in my house. The webservice, in turn, gets information from the minecraft server using a UDP-protocol (which is not official I guess, but quite well documented here, for instance). That page returns only the number of current online players. Nothing else. Just the number. That information is easily interpreted by the Arduino and displayed on the 7-segment display. If there are more than 9 players online, the 7-segment display will show 9 and a period (my way of displaying more than nine).
The time comes from an Internet Time Server (NTS) and is updated every couple of days, so I didn’t use a clock-module in this build. The time is automatically adjusted for my time zone (Sweden) and also automatically adjusts for daylight savings time (DST). It turns out, that was not as difficult as I initially thought it would be. All I needed to do was to add a little function that answers the question “is-it-DST-now?”. All that function needs to know is current month, date and day-of-week. And I already have that information from the time-library in the Arduino. So this thing always has the correct time!
Making it rain
This is done by making an http-get request to another (secret) webpage on my website. The page sends a command to the webservice which creates a file on the home server. I use a separate piece of software to check if such a file exists, and if it does it sends a command using the remote control function of the Minecraft server (“weather thunder 30”). I really love this function! To me it’s really cool to press a physical button on one device and by doing so having an impact on a virtual world. Awesomeness.
I used a simple black plastic project box here, made some holes for the LED, push buttons, the 7-segment display, the four-digit display and the on-off switch. And holes for Ethernet cable and power.