The CasaCam Project
by Ramón Kristian Arellano
I have a username and password, just let me in! [ENTER]
[what is it?]  [history]  [pictures]  [how it works]  [ingredients]  [give it a try]  


Oslo, Norway, February 7th, 2003

Yes, I'm a nerd!
I'm the kind of guy that uses time and money (not that much money) to set up a servo controlled camera inside my home. I'm the kind of guy that thinks it's cool to use five different technologies in order to see the inside of my livingroom from anywhere on the planet. I like words like J2EE, Streaming Video, Flash MX Communication Server and Remote Method Invocation. And that's not all! I'm also the kind of guy that wants to tell the whole world about it. At least every nerd out there willing to listen. So yes! I'm a nerd! Now let's get into the juicy details of the CasaCam project. Wohoo!

What is it?
The CasaCam is a Logitech QuickCam Pro 3000 mounted on two servos, one on top of the other, thus providing pan and tilt functionality. This means I can turn the camera 180 degrees both horizontally and vertically. If the camera is placed against a wall, it can practically see everything inside the room. The video from the camera is streamed to the a web page on the Internet, and I can also control the servos through that page. The page looks like this:



History

At some point in time I found out I wanted to use my computer to move something in the physical world. I found out how to control RC servos, i.e. small electrical motors designed for remote controlled airplanes and cars. But the servos alone didn't satisfy me. I wanted them to move something, and I came up with the controllable web cam idea. That still wasn't good enough. What's the point of moving a web cam with servos, when you can do it with your hands? It had to be done trough the Internet! That idea opened for a bunch of new ideas; burglar alarm, video surveillance, pet nanny, live videoconferences etc etc. Yes, now we have a project!

Currently I'm in the third phase of this project. When I first started I was grabbing pictures every 10 seconds using Sun's Media Framework and a Jakarta-Tomcat Web Server. Sadly it turned out to be a pain to use JSPs, session handling, automatic refreshing without cashing and the likes. So I turned over to the dark side: Microsoft IIS server and ASPs. I still needed a java program to talk to the serial port in order to turn the servos, but now the ASP's and the server talked through a database. That required three major technology components delivered by three different companies and a database as communication channel between them. I didn't like it.


Pictures
Click the thumbnails to see larger versions:

How it works
The latest solution uses Macromedia Flash technology to stream video. I still need Java for the servo control part, but it's done beautifully by having the Flash sliders make direct calls to an Enterprise Java Bean (over RMTP). This requires Flash Remoting Components and a J2EE server, but hey, you don't get anything for nothing. Besides, they are cool technologies.

This is how it works. On my stationary PC at home I have installed a JBoss J2EE server. This server contains an EJB that uses Sun's Communications API to open a connection to the serial port. On the serial port I have connected a servo controller chip called FT639 supplied by FerretTronics. This tiny thing can control up to five servos to the direction specified by the serial input. I have only two servos attached to it. For power supply I use a simple 220V AC to 4,5V DC transformer. This feeds both the chip and servos.

On top of the JBoss server I have installed Macromedia's Flash Remoting Components. This is a simple application, which installs as a EAR (Enterprise Archive). With this on your J2EE server your Flash applications can speak directly to any EJB. The way the application works now every time someone moves the slide bars a call is made to the my CasaCam EJB on the JBoss server. This EJB then sends the new servo position to the servo controller chip, and the servos react.

To share the slider between simultaneous users (i.e. if several people are using the CasaCam, and one moves the slider, the slider moves in all user screens), I use Macromedias' Flash Communication Server MX. This is something Macromedia calls Shared Components, and it works like a charm. Why haven't people made games with this?! I also use the Communication server to publish the video stream from my computer to whoever opens the viewer application. The Communication server also installs on top of the JBoss server.

Here is a schema giving an overview of the technologies and how they are connected:


Ingredients
Here is a list of stuff you will need if you want to make your own casacam.

Hardware:
1. Web camera with USB connection. Preferably one with drivers included in Windows, which goes for most Logitech cameras.
2. Two RC servoes of any brand. They should be quite strong (torque
> 3 kg/cm). You can find such here.
3. A servo controller for minimum two servos. You won't find one in your local supermarket. I recommend using the FT639 with the FT639 circuit board from FerretTronics.
4. Serial cable, 9 pin. This one is easy, just grab the scissors and go to work on an old mouse that you probably have lying in your drawer. If you don't have an old mouse lying around, you're obviuosly not a nerd and should abort the project immediately.
5. Power supply. At first I used +5V directly from my desktop, but when I later wanted to work on my laptop I had to buy what they in Norway call a battery eliminator. It's simply a 220V AC to 4.5V DC converter. There's a picture of it here.
6. Depending on how you want your CasaCam to look you should have the necessary nuts, bolts, box, struts, bars, paint, tape, etc etc. I've made two versions. The first you can see at the top of this page. It only requires some sort of base to mount the first servo on, but it's sort of an ugly duckling. The latest version is a bit more streamlined, but it requires a bit more hardware. You can see detailed pictures further up.

Software:

1. Macromedia Flash MX, Flash Communication Server MX and Flash Remoting. You can get trial versions for all of these on the Macromedia site.
2. Your own J2EE server. There are bundle of free ones out there, just take a pick. I use JBoss.

3. Sun's Java Communications API for communication with ther servo controller through the serial port.
4. CasaCam.zip. This is all my code! Both Java and Flash. You can use it to guide you while your making your own.

Give it at try
OK, get this, the camera runs in my livingroom. I'm a nerd, not an exhibitionist! If I know you, or you have reason to believe I would give you access to look inside my home, send me an email. I might give you a user name and password, in which case you can give the CasaCam a try. To mail me, use the link at the top of the page.