Overview
This DC 5V Ultrasonic Mist Maker module turns water into a fine cool mist using a 108 kHz piezo atomizer disc. It's the heart of small humidifiers, plant misting systems, ambient mood lighting effects, fog machines for displays, and DIY foggers for terrariums. Just sit the atomizer in water, plug the module into 5V (USB or VCC pin), and it produces a continuous plume of mist.
The module has an on-board touch switch for standalone use, plus a PH2.0 connector for the atomizer disc. The control IC handles the 108 kHz drive automatically; there's no PWM or signal generation to do on a microcontroller. To control it from an Arduino, ESP32, Raspberry Pi, or Pico, switch the 5V supply through a transistor or relay — the module turns on when power is applied.
Compared to evaporative humidifiers, ultrasonic mist makers produce mist almost instantly, run on much lower power, and don't get hot. They do need clean water and good airflow above the disc to avoid hot spots and mineral build-up.
At a Glance
Specifications
| Parameter | Value |
| Operating Voltage | DC 5V |
| Operating Current | ~300-400 mA (peaks ~500 mA at startup) |
| Atomizer Drive Frequency | 108 kHz |
| Mist Output Rate | ~30 mL per hour (typical) |
| Power Input | Micro USB or solder pad VCC/GND |
| Atomizer Connector | PH2.0 2-pin (matches included disc) |
| On-board Control | Tactile / touch switch (toggle) |
| Auto Shutoff | When water is empty (atomizer impedance change) |
| Recommended Water Depth | 15-50 mm above the atomizer |
| Operating Temperature | 0 - 40 degC |
| Module Dimensions | ~50 x 28 mm |
| Atomizer Disc Diameter | 20 mm |
Pinout Diagram
Wiring Guide
Arduino - Switch with a Logic-Level MOSFET
The mist maker has no signal pin — it just runs whenever it has power. Use an N-channel logic-level MOSFET (e.g. IRLZ44N, AO3400) to switch the GND side of the module from a microcontroller pin.
| Connection | Goes To |
|---|---|
| Mist maker VCC | 5V supply (+) |
| Mist maker GND | MOSFET Drain |
| MOSFET Source | Power supply GND (and Arduino GND) |
| MOSFET Gate | Arduino D3 (with 100k pull-down to GND) |
ESP32 - Switch with a Logic-Level MOSFET
Same MOSFET trick as Arduino. The ESP32's 3.3V GPIO is enough to fully turn on a logic-level MOSFET like the AO3400 or IRLZ44N.
| Connection | Goes To |
|---|---|
| Mist maker VCC | External 5V supply (+) |
| Mist maker GND | MOSFET Drain |
| MOSFET Source | Common GND |
| MOSFET Gate | GPIO 5 (with 100k to GND) |
Raspberry Pi - Switch with a 5V Relay
A small 5V relay module is the simplest way for a Pi user. The Pi's GPIO drives the relay's IN pin, and the relay switches the 5V power to the mist maker.
| Connection | Pi / Relay |
|---|---|
| Relay VCC | Pi 5V (Pin 2) |
| Relay GND | Pi GND (Pin 6) |
| Relay IN | GPIO 17 (Pin 11) |
| External 5V (+) | Relay COM |
| Mist maker VCC | Relay NO (normally open) |
| External 5V (-) | Mist maker GND |
Raspberry Pi Pico - Switch with a Logic-Level MOSFET
The Pico's 3.3V GPIO can drive a logic-level MOSFET. Use an external 5V supply (USB charger or VBUS from the Pico's USB) to feed the mist maker.
| Connection | Goes To |
|---|---|
| Mist maker VCC | Pico VBUS (5V from USB) |
| Mist maker GND | MOSFET Drain |
| MOSFET Source | Pico GND |
| MOSFET Gate | GP15 (with 100k to GND) |
Code Examples
Arduino - Mist for 5 Seconds Every Minute
// DC 5V Mist Maker - cycle on/off via a MOSFET on D3
// 5 seconds on, 55 seconds off (a "puff" every minute)
const int mistPin = 3;
void setup() {
pinMode(mistPin, OUTPUT);
digitalWrite(mistPin, LOW);
}
void loop() {
digitalWrite(mistPin, HIGH); // turn the mist maker on
delay(5000);
digitalWrite(mistPin, LOW); // turn it off
delay(55000);
}
ESP32 - Web-Controlled Mist Toggle
// ESP32 - Toggle the mist maker from a tiny web page
// Wire MOSFET gate to GPIO 5
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const int mistPin = 5;
bool misting = false;
WebServer server(80);
String page() {
String s = "<html><body><h1>Mist Maker</h1>";
s += "<p>Status: " + String(misting ? "ON" : "OFF") + "</p>";
s += "<a href=\"/on\">[ON]</a> <a href=\"/off\">[OFF]</a>";
s += "</body></html>";
return s;
}
void setup() {
Serial.begin(115200);
pinMode(mistPin, OUTPUT);
digitalWrite(mistPin, LOW);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
Serial.println(WiFi.localIP());
server.on("/", []() { server.send(200, "text/html", page()); });
server.on("/on", []() { misting = true; digitalWrite(mistPin, HIGH); server.send(200, "text/html", page()); });
server.on("/off", []() { misting = false; digitalWrite(mistPin, LOW); server.send(200, "text/html", page()); });
server.begin();
}
void loop() { server.handleClient(); }
Raspberry Pi (Python + Relay)
#!/usr/bin/env python3
# Toggle the mist maker through a 5V relay on GPIO 17 (Pi)
# Many relay modules are active-LOW: LOW = ON, HIGH = OFF
import RPi.GPIO as GPIO
import time
RELAY = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY, GPIO.OUT, initial=GPIO.HIGH) # start OFF
try:
while True:
GPIO.output(RELAY, GPIO.LOW) # mist ON
time.sleep(5)
GPIO.output(RELAY, GPIO.HIGH) # mist OFF
time.sleep(55)
except KeyboardInterrupt:
GPIO.cleanup()