Ultrasonic essential Oil diffuser



  • 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.

    0_1456867650174_20160301_220334.jpg

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

    0_1456867796260_20160301_220513.jpg

    0_1456867820284_20160301_220905.jpg

    0_1456867846543_20160301_220937.jpg

    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 !


  • Admin

    Wow, I didn't see that actuator coming. 🙂



  • ...think we need a new sensor type: V_ESSENTIAL_OIL_DIFFUSER 😆


  • Hero Member

    @fifipil909 That's outstanding work!

    I never knew these ultrasonic essential oil diffusers existed.

    for version 2 you need to add a sensor for when the oil is depleted!

    What sort of current does the ultrasonic humidifier demand?



  • The enclosure is very nice too.
    Hand made ?



  • @gregl yes, I think about add a level indication by using a simple ldr and a led, shouldn't be complicated to archeve.

    regarding the ceramic caps, a lot of them you can find on ebay use 40 Vac at 1.6Mhz. so not so easy and finding a 8:1 transformer working at this frequency to make a small DC to AC converter is not that easy.

    after some search, I find some other caps like exactly the same there is on this "donut" humidifer. they are working at a much low frequency, 113khz to be exact.
    http://fr.aliexpress.com/item/20mm-113KHz-ultrasonic-atomizer-transducer-atomizing-part/32273063940.html?spm=2114.44010308.4.177.0Amsoy
    Regarding the voltage, I found some caps working at 5vpp but the donut caps seems to working arround 50v.
    I don't have any idea how they boost the voltage to that pick.

    here is some scope:

    Mofset Gate :
    0_1456920546860_IMG_006.BMP

    Caps input:
    0_1456920582586_IMG_001.BMP
    the sinus wave it's really durty, but seems to be enough to vibrate the caps.

    donut IC :
    0_1456920732712_20160302_130545.jpg

    0_1456920737957_20160302_130603.jpg

    if someone have some idea of what is this black component on the right side. seems to be the one that boost the voltage up to 60v.

    @tripy yes everything handmade. my friend carpenter help me to glue together some piece of wood plate like this : http://planete-bois.com/plans-de-travail/28-plan-de-travail-chene-lamelle-colle-aboute.html I manage the rest with a router and a drill press.


  • Hero Member

    "what is this black component on the right side"
    id say its a simple transformer. how many leads go into it? ( photos a bit blurry )


  • Hero Member

    @fifipil909 I assume the black component is a coil. There are many simple circuits which can generate a high voltage with a coil/ transformer or capacitors and diodes.
    0_1456991504666_upload-5eaa06af-25c0-46e1-8e68-4a66872cecf1 Some noisy examples



  • There is 3 leads.
    I did try to make better pic.

    0_1457093736469_20160304_131257.jpg
    0_1457093740253_20160304_131331.jpg



  • Wow... you're resourceful persion. i want build this but it difficult for me 😄



  • Hi,

    It's hard to say right now.
    It can be interesting to know how do you control the On/Off.

    Those Ceramic caps don't like to be used without any liquid and can be damaged very quickly if there are dry.
    But normally there is a build in switch off circuit if no liquid is detected.

    Can you tell me more how to you modify the electronic to control it with Mysensors ?


 

339
Online

7.9k
Users

8.7k
Topics

93.6k
Posts