Ardumote progress


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.

Advertisements

5 Gedanken zu “Ardumote progress

  1. Excellent work!

    I’m also a home automation enthusiast and author of a software platform I called „Project jaNET“.

    website: https://sites.google.com/site/projectjanet/
    facebook: http://www.facebook.com/pages/Project-jaNET/115581091842605

    Besides software, I have built a box (jBox) with arduino uno, RF receiver/transmitter, illumination sensor, temperature sensor, rfid and pir sensor. I also use an IP camera and a tablet and all of these components interconnects with my framework in order to provide me a basic decent home automation system (there some images on facebook).
    Concerning RF, I drop the lame custom library I used to control my outlets and swtched to your, RC Switch library.

    I’m a software engineer and I enjoy to share and work with people with similar interests, so if you see a chance to collaborate by any means, then please freely contact me. I’m open to any proposals.

    My best regards,

    John.

  2. Thanks for your „like“ on jaNET’s facebook page, I appreciate it 🙂

    I really enjoy your work and the approach of ardumote. I love to see others people projects with same interests. Perhaps some day we can form an open source community.

    Here is my simple mobile web UI for jaNET https://www.box.com/s/421fca24481215c063d5

    Where in Germany are you located? I like Germany a lot and I’ve some visits in the past.

    • Yeah, it’s really exciting to see there is a community of DIY home automation enthusiasts growing with lots of interesting projects.
      I had no time yet (I’m working full time as a software developer and I am married with two kids… I don’t have any spare time at all *lol*) to have a deeper look at jaNET but it seems pretty cool 🙂

      I live in Hamburg Altona http://www.google.de/maps?q=hamburg+altona

  3. Boa noite.
    Meu nome é Alexandre e gostei muito do seu projeto, porém estou com dificuldades para configurar o arduino. Não sei como inserir valores para acender e apagar lampadas. Pode me ajudar? Obrigado

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s