Hi,
my wife like to use essential oil in the house, but basic humidifier use a lot of water and increase the ambiant humidity in the room.
I notice also that the smell of the oil is not really intense.
So the idea, modify a cheap ultrasonic humidifier and create an oil diffuser without dealing with water.
The start, a cheap Donut humidifier 6$ on ebay.
http://www.ebay.com/itm/Donut-Shaped-Ultrasonic-USB-Humidifier-Air-Essential-Oil-Purifier-Aroma-Diffuser-/301652283655?hash=item463be09107:g:vrwAAOSwBahVbrHo
then, I decide to build a wood enclosure with a removable top for easy oil bottle changing and put everything together.

The top is maintain by 2 small magnet, and the ceramic caps just touch the top of the Bottle wick.



Regarding the Sketch, Its like a dimmer, V_status for the On/Off state, V_percentage for the frequency.
/**
 * The MySensors Arduino library handles the wireless radio link and protocol
 * between your home built sensors/actuators and HA controller of choice.
 * The sensors forms a self healing radio network with optional repeaters. Each
 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
 * network topology allowing messages to be routed to nodes.
 *
 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
 * Copyright (C) 2013-2015 Sensnology AB
 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
 *
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 */
//#################
// INCLUDE
//#################
#include <SPI.h>
#include <MySensor.h>
#include <Time.h>
//#################
// OPTION
//#################
#define DEBUG
#define MIN_DELAY  10   
#define MAX_DELAY  90 
bool  Diffuser_status;
uint8_t   Diffuser_Freq;
int delaytowait;
unsigned long lastUpdate;
int nbseconds = 0;
//#################
// CHILD ID
//#################
#define CHILD_ID_DIFFUSER 0
//#################
// PIN DEF
//#################
#define DIFFUSER_PIN A3
//#################
// VAR
//#################
MySensor gw;
//#################
// Messsage Settings
//#################
MyMessage IntensityMsg(CHILD_ID_DIFFUSER, V_PERCENTAGE);
MyMessage StatusMsg(CHILD_ID_DIFFUSER, V_STATUS);
void setup()
{
  gw.begin(incomingMessage, AUTO, false);
  pinMode(DIFFUSER_PIN, OUTPUT);
  digitalWrite(DIFFUSER_PIN, HIGH);
  //#################
  // Info
  //#################
  gw.sendSketchInfo("Difuser", "1.0");
  //#################
  // Send Presentation
  //#################
  gw.present( CHILD_ID_DIFFUSER, S_DIMMER );
  Diffuser_status = gw.loadState(5);
  Diffuser_Freq = gw.loadState(8);
  gw.send(StatusMsg.set(Diffuser_status ? true : false), true);
  gw.wait(200);
  gw.send(IntensityMsg.set(Diffuser_Freq),true);
}
void loop()
{
  unsigned long now = millis();
  gw.process();
  if (now - lastUpdate > 1000) {
    nbseconds++;
    lastUpdate = now;
  }
  float delaytowaittmp = ((MAX_DELAY - MIN_DELAY) / 100.0) * Diffuser_Freq;
  int delaytowait = delaytowaittmp;
  if ((Diffuser_status == true) && (nbseconds > delaytowait)) {
   
    digitalWrite(DIFFUSER_PIN, LOW);
    delay(100);
    digitalWrite(DIFFUSER_PIN, HIGH);
    delay(100);
    digitalWrite(DIFFUSER_PIN, LOW);
    delay(100);
    digitalWrite(DIFFUSER_PIN, HIGH);
    delay(100);
    nbseconds = 0;
  }else if(nbseconds > delaytowait)
  {
    nbseconds = 0;
  }
}
void incomingMessage(const MyMessage &message) {
  if (message.type == V_STATUS || message.type == V_PERCENTAGE) {
    int req_status = -1;
    int req_percentage = -1;
    if (message.type == V_STATUS)
    {
      req_status = message.getBool();
      Diffuser_status = req_status;
      gw.saveState(5, Diffuser_status);
    }
    if (message.type == V_PERCENTAGE)
    {
      req_percentage = message.getByte();
      Diffuser_Freq = req_percentage;
      gw.saveState(8, Diffuser_Freq);
    }
  }
}
Now, you can have good smell in every room for some dollars when you arrived from work, when you start cooking, when going to sleep or entering in your Bat Cave !