In my new dorm this year [2007], I live in a 6 person apartment. We all have our own rooms, plus bathrooms and a common area. We all get along great, but sometimes it's hard to keep track of who's in the room, what everyone's plans are, and other such details. So I decided we should have some kind of central computer, or kiosk, where we could list our status and where we are, leave messages and announcements for each other, and other cool things.
My idea for this system came about from the proximity cards we use. Georgia Tech recently acquired new dorm buildings, and we use proximity RFID cards to access the complex and our individual buildings. The apartment doors still use traditional keys, but we still need to have our ID cards with us to get in the building. Since we always have to have our ID's, it'd be cool if we used the cards at some kind of kiosk so it would know when we are leaving or entering. I got one of the readers on eBay for pretty cheap, but it would take me a while to figure out. More about the RFID system in an upcoming article.
Then one day while scouring eBay, I found a 15“ LCD touch screen monitor with USB for $200, This was a fairly cheap price, but the best part was that it had the “or best offer” part, and the seller had 57 available. Surely I could get one for cheaper. I made an offer for $100, and he counter-offered at $125. The monitor was in perfect shape and included all cables. The only downside was that it had no plastic bezel and was used. Still, these things retail for well over $300, AND it included a Dell height-adjustable mount. For $125, I was sold. This would be our kiosk.
Instead of using ID cards with a regular monitor and regular keyboard, the touch-screen is all I needed. I had a spare, small computer I could use, and the LCD was in remarkable shape. Despite the fact that it was used and lacked a plastic bezel, the monitor was very high quality. It had a bright, defect-free screen, and it was covered with a strong glass touch panel. It's designed for high usage, and doesn't get smudged easily.
I bought a cheap computer desk at Ikea to actually hold the kiosk. It's a basic desk, but has a nice bottom shelf where I placed the computer. On the top of the desk is only the LCD monitor and a pair of speakers. I placed it in our tiny hallway by the door and it fit perfectly. It was a convenient location and also was a central place we could put keys, papers, etc.
I decided to write the software in VB6. Even though I've been touching on some new languages lately, VB6 made the most sense because this would mostly be a GUI application, and there wouldn't be that much “functional” code (plus it's my most comfortable language).
I first had to figure out how the software would control the kiosk using the touch screen. The Windows accessibility on-screen keyboard wouldn't work (it's far too small to use with fingers), and I didn't want to give access to control keys, so I decided to create an entirely self-sustained program. I simply wanted a space for announcements, space for an on-going chat, and a list of everyone in the room. The list of people would have a neat graphic that would change color based on their status - Here, Not Here, or Busy. It should list their name, status, estimated time of return (shortened to ETR), and a timestamp for when their status changed last. For the best effect, and for simplicity, I made the interface in Photoshop and would just place labels and images over top these images. Here's the main interface image that I created in photoshop:
Nice, clean, and simple. My roommates suggested using some kind of a code to update user status. We agreed that excess security was not needed, because the use of the kiosk was already “honor-based” already, i.e. the kiosk would be useless if people did not properly update their status. So I created a small window with the numbers 0-9, set up like a phone. The user enters a 4 digit code to reach the user status update window. It was at this point the kiosk adopted a Deus Ex sound scheme. If you've ever played Deus Ex, you know that you are constantly entering numeric codes. Well, this window is designed to look, behave and sound similar to those keypads from the game. The number codes are the same (they are DTMF tones similar Touch-Tone phones, although the frequencies do not match with normal Touch-Tone frequencies) as the game. The DENIED and GRANTED effects and sounds are also the same. Essentially what I'm trying to say is that it is cool as hell. It's not real security, but it's enough, and it's fun to use. I ended up using other Deus Ex throughout the rest of the program.
There's also an admin window which is reserved for me, and it uses a 5 digit security key. From here I can exit the program (this is the only way to exit the program - it protects my computer), lock the screen (it turns on the PageMac Corporation Screensaver), or turn on Admin Mode. Admin Mode disables all security codes, so that I can access any part of the system for quick adjustments. I usually only use this to update someone's status if they forgot.
As you can see, it's very simple. It's entirely optimized for the touch-screen monitor, which has a resolution of 1024×768. I opted to have no window management. Therefore, only one window can be active at a time, *except* when the on-screen keyboard is up, in which case the layout will be adjusted so that the windows are not overlapping. Windows cannot be moved. To enforce this, I created an extra form that is entirely black. When the form is loaded, it resizes itself to 1024×768, makes itself 10% transparent, and disables itself. As you might know, a “disabled” window cannot be clicked on or recieve focus. The result is the active windows is on top and will have full brightness, while everything behind it is dimmed out. If you try and click (or “tap”) outside of the active.window, the program will just beep with the Windows “default” sound.
This is a very effective tool because I can create as many of these “black forms” as I want, so if I want to keep piling up windows, I can, and windowss further back just get darker in the background. As long as I remember to manage forms properly in the code (i.e. make sure to unload “black forms” when the active window is closed”), it works out well. However, the disadvantage to this is you cannot bring in outside control. When I work on the kiosk on my laptop, which has a larger resolution than 1024×768, and I change windows while a “black form” is up, then alt-tab back, I will mess up the Z-Order of the windows, and the interface might get stuck. This isn't a problem as long as the resolution isn't bigger than 1024×768, another application doesn't steal focus, and a keyboard isn't hooked up and someone hits alt-tab. With the kiosk, which has controlled hardware, this is not an issue.
The next step for this kiosk is obvious - implement a system to use the RFID card readers for our ID cards. I want to be able to scan my ID card at the kiosk, and have it automatically bring up my status window. This will bypass the numeric code, though the option to use the touch screen will still be there. Additionally, there will be a timer to automatically invert user status when the card is scanned. Here and Busy will change to Not Here, and Not Here will change to Here. If no buttons are pressed during the countdown, the status will update and return to the main window. So, I could scan my card as I am walking out of the room, and the kiosk would automatically change my status. Or, after I scan it, I could add a specific message, like when I will return.
Read more about how I used an RFID reader with a microcontroller.
My roommates and I love the kiosk. Especially now that I have installed a card reader and guest support, it is very easy to do. You just have to walk by the kiosk with your ID in your pocket and it will read the card, and automatically set your status. You can also add guests that will appear under your name, and they can even use their own ID cards to log in. Not to mention, it's very useful to add announcements and random chat. The best part, however, is just knowing who's in the room and who's not!