It’s been over half a year since making the first announcement of ardumote. Now I’m actually using it myself at home to open doors and switching lights
Here you can see my arduino which is mounted to the wall next to the door in the corridor. As you can see there are two servomotors stucked to the door opener with double-faced adhesive tape. They mechanically push the buttons. I know I could have connect them directly with optocouplers but since I live in a rented flat and didn’t want to mess things up this seemed to be the best solution.

Now let’s have a look in detail. There is also a 433MHz transmitter and receiver connected, which allows me to use a simple remote as input device and operate low cost RC power sockets. I use a arduino mega cause the RCSwitch didn’t run together with the ardumote arduino library due to memory limitations and unfortunately I don’t have much hope by now to get it working on a arduino uno ever. Nevertheless there is a example sketch without RCSwitch for uno/duemilanove provided in the lib. I’ve also connected a LM35 temperature sensor cause I had one to spare.

All the input, output and communication devices are straightforward added in the sketch:
/*
http://www.ardumote.com
Copyright (c) 2012 Suat Özgür
http://opensource.org/licenses/MIT
Ardumote example sketch for Mega boards
Pin Device
2 433Mhz AM Receiver
4 Servo Motor
5 Servo Motor
42 Status LED (Recieve)
44 Status LED (Transmit)
46 Status LED (IRC Connection)
A1 433Mhz AM Transmitter
A10 Analog temperature sensor
*/
// ==== Basic configuration =====================================
#define ARDUMOTE_CONTROLLER_ID 123
#define ARDUMOTE_SHARED_SECRET "01234567890abcdef01234567890abcd"
#define STATUS_LED_RX 42
#define STATUS_LED_TX 44
#define STATUS_LED_IRC 46
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// ==== General Includes ========================================
[Snipped... a lot of includes. Find them in the lib examples]
// ==============================================================
void setup() {
// Init ethernet
Ethernet.begin(mac);
delay(1000);
// Init ardumote itself
ArdumoteMD5 myArdumote;
myArdumote.setup(ARDUMOTE_CONTROLLER_ID,
ARDUMOTE_SHARED_SECRET,
STATUS_LED_TX,
STATUS_LED_RX);
// Init maintenance modules (Do not remove)
SensorMaintenance s0;
s0.setup();
myArdumote.addSensorModule( &s0 );
ActorMaintenance a0;
a0.setup();
myArdumote.addActorModule( &a0 );
// Init ComModules
ComEthernetIRC c2;
c2.setup(STATUS_LED_IRC);
myArdumote.addComModule(&c2);
// Init sensors
SensorRCSwitch s1;
s1.setup("433Mhz RX", 0); // 433Mhz AM Receiver at Pin 2
myArdumote.addSensorModule( &s1 );
SensorAnalog s2;
s2.setup("Temperature", A10, 60); // LM35 Sensor Pin A10
myArdumote.addSensorModule( &s2 );
// Init actors
ActorRCSwitch a1;
a1.setup("433Mhz TX", A1); // 433Mhz AM Transmitter at Pin A1
myArdumote.addActorModule( &a1 );
ActorServo a2;
a2.setup("Servo 1", 5); // Servo motor at Pin 5
myArdumote.addActorModule( &a2 );
ActorServo a3;
a3.setup("Servo 2", 4); // Servo motor at Pin 4
myArdumote.addActorModule( &a3 );
// run
while (true) {
myArdumote.loop();
}
}
void loop() {
}
There is no business logic implemented in the arduino. It’s just about receiving and sending data to a webservice (aka “the cloud™”). There is a very simple ardumote protocol on top of IRC. I’ve chosen IRC because it’s also very simple, scalable and there are lots of ready to run stable IRC daemons around to use. XMPP would have been a cooler choice but as it deals with comparatively complex XML data, the atmega chips don’t have much resources at all and dealing with string operations in C++ is really pain in the a**… maybe somewhen in future
Of course good old HTTP would also be an alternative but as it’s stateless you need to deal with DynDNS and router configuration stuff to allow the webservice to connect back to the arduino. With IRC the arduino connects to the webservice and keeps being connected and beside that in this way the latency is shorter and the data volume without tons of headers is much smaller.
Let’s come to the ardumote webservice.

Beside your arduino with all that sensors and actors you can also add other controller types with input and output devices. For now that is a “virtual remote panel” with “virtual button” input devices to use as a browser or smartphone interface. There is already a android app to use these virtual remote panels in a convenient way.

A “webservices controller” controls onlineservices like Twitter, E-Mail or else and I’m already planing a android phone type controller so it would be possible to use the smartphone inputs (accelerometer, GPS, compass) and outputs (action bar notification, vibration), too. Ninjablocks might also be interesting in future.
Based on your input devices you can define events and actions with your output devices to be executed when the event occurs.
In this example I have my arduino controller in the corridor, a virtual remote panel with a “Haustür” (thats german for “front door”) button and a webservices controller with my Twitter account linked to it. Whenever I push the button on my phone, the front door opens, the light in the corridor is switched on and a tweet is sent to my Twitter account.

That’s all folks… well, for now. Next steps will be some bugfixing, pimping up the virtual remote panels and enhancing the android app.
Feel free to sign up, download and play around with ardumote and share your thoughts in the forum. But keep in mind it’s still alpha and not stable yet.