DIY Difusor Aromático Zigbee (CC2530 + PTVO + Home Assistant)

by fjtechlab_home in Circuits > Remote Control

151 Views, 0 Favorites, 0 Comments

DIY Difusor Aromático Zigbee (CC2530 + PTVO + Home Assistant)

Copilot_20260803_212628.jpg
00_difusor_caja_cara_delantera.jpg
11_cable_usb_C.jpeg
14_cc2530_trasera.jpg

Los ambientadores automáticos comerciales suelen funcionar con pilas y únicamente permiten seleccionar unos pocos intervalos fijos de pulverización. Aunque cumplen su función, carecen de conectividad y de opciones avanzadas de automatización y control.

En este proyecto he convertido un ambientador aromático de botes de 250 ml en un dispositivo inteligente con comunicación Zigbee. Gracias a un microcontrolador CC2530, el difusor puede integrarse en Home Assistant (HA) mediante Zigbee2MQTT y realizar una descarga exactamente cuando yo quiera.

Además, el sistema deja de depender de pilas desechables, ya que ahora se alimenta mediante un cargador USB de 5VDC, reduciendo el mantenimiento y evitando el reemplazo periódico de baterías.

La modificación no respeta el funcionamiento original del difusor, se controla directamente el motor mediante un MOSFET IRLZ44N que se alimenta durante aproximadamente 500 milisegundos. Pero lo que sí mantenemos es su mecánica original (motor, engranajes, pulsador y carcasas).

En este caso se ha utilizado un difusor automático de la marca ILERSPRAY pero se puede utilizar cualquier otro. He utilizado esta marca porque sus difusores funcionan perfectamente con los botes de recambio de 250 ml de la famosa marca que rima con John Wick. 😁

También se ha tenido en cuenta que toda la electrónica y el motor estén en la parte superior para que todo sea más accesible.

También, como ejemplo añadido, se ha realizado con éxito en un difusor automático y botes de recambio de la marca hacendado.

Una gran ventaja añadida a todo este proyecto es que este dispositivo funciona como router de nuestra malla Zigbee dando más estabilidad a nuestra red.

Características del proyecto:

  1. Control mediante Zigbee.
  2. Compatible con HA y Zigbee2MQTT.
  3. Alimentación permanente mediante USB de 5VDC.
  4. Elimina el uso de pilas.
  5. Sustituye la electrónica original, manteniendo las partes mecánicas y el motor del difusor.
  6. Activación remota desde HA.
  7. Permite crear automatizaciones completamente personalizadas.
  8. Se crea otro dispositivo que funciona como router en nuestra red Zigbee.


¿Cómo funciona?

El CC2530 permanece conectado a la red Zigbee esperando órdenes desde HA o del pulsador.

Cuando se recibe el comando de pulverización, una de sus salidas activa un MOSFET. Este MOSFET alimenta al motor original del ambientador durante un instante y se realiza la descarga.

Ese tiempo es suficiente para que el motor original complete una pulverización. Una vez realizada esta breve descarga, el MOSFET desconecta nuevamente la alimentación y el dispositivo vuelve a su estado de espera.

Este método tiene una gran ventaja: no es necesario añadir un mecanismo interno complicado, ni imprimir piezas adicionales, lo que hace que la modificación sea sencilla, fiable y fácilmente reversible.

Video descarga difusor aromático: https://youtube.com/shorts/6anCdlRA6ck


Integración con HA

Una vez emparejado mediante Zigbee2MQTT, el difusor aparece como un nuevo dispositivo dentro de HA.

Desde ese momento puede activarse manualmente desde el panel de control o mediante automatizaciones.

Algunos ejemplos de uso son:

  1. Pulverizar cada mañana a una hora determinada.
  2. Activarse cuando se detecta movimiento en una estancia.
  3. Pulverizar después de apagar el extractor del baño.
  4. Activarse cuando toda la familia sale de casa.
  5. Deshabilitar las pulverizaciones durante la noche o cuando está activa la alarma.
  6. Crear un botón específico para realizar una descarga manual.


¿Por qué Zigbee y no WiFi?

Aunque este proyecto podría haberse realizado utilizando WiFi, Zigbee ofrece varias ventajas para dispositivos de domótica como este. Su consumo energético es muy reducido, la comunicación es totalmente local (sin depender de Internet), la integración con Home Assistant mediante Zigbee2MQTT es rápida y fiable, y además este difusor actúa como router Zigbee, ayudando a ampliar la cobertura de la red para otros dispositivos compatibles. Todo ello convierte a Zigbee en una solución especialmente adecuada para automatizaciones domésticas.

Alimentación por USB

Uno de los cambios más importantes del proyecto es eliminar completamente las pilas.

El difusor pasa a alimentarse mediante un cargador USB estándar de 5VDC, consiguiendo un funcionamiento continuo sin necesidad de sustituir baterías y reduciendo el mantenimiento.

Conclusión

Con una modificación relativamente sencilla es posible transformar un difusor aromático tonto convencional en un dispositivo inteligente completamente integrado en un sistema de domótica.

El proyecto mantiene intacto el motor y engranajes originales del fabricante, añade conectividad Zigbee y permite controlar cada pulverización desde HA, adaptando el funcionamiento del difusor exactamente a las necesidades de cada usuario.

Supplies

01_difusor_cara_delantera.jpg
11_cable_usb_C.jpeg
14_cc2530_con_antena_externa.jpg
14_cc2530_con_antena_inerna.jpg
14_cc2530_trasera.jpg
18_mosfet_irlz34n.png
36_cargador_movil.png
44_AMS copia.png
brida pequeña.jpg
cables_colores_26AWG.jpg
cc_debugger_zigbee.jpeg
Pinzas de cocodrilo.jpg
placa_interfaz_cc_debugger_zigbee.jpeg
soldador.jpg

MATERIALES:

1 X difusor aromático para botes de 250ml ILERSPRAY

1 X cable corto de USB-C hembra a USB-C macho (en este caso podremos suprimir la parte del conector USB-C macho y tener los cables pelados directamente) https://s.click.aliexpress.com/e/_c3hvQ3wT

1 x módulo inalámbrico CC2530 Zigbee SZ1V5 (existe la opción de antena integrada o antena externa) https://es.aliexpress.com/item/4000748110119.html?spm=a2g0o.order_list.order_list_main.252.2e24194d1sOvaR&gatewayAdapt=glo2esp

1 X MOSFET IRLZ44N https://s.click.aliexpress.com/e/_c3FqtN7V

2 X regulador voltaje AMS1117-3.3V (a partir de ahora llamaremos AMS1 para alimentación CC2530 y AMS2 para alimentación motor) https://s.click.aliexpress.com/e/_c3ITjJ1Z

1 X cables de colores (poca sección 26 AWG ) https://s.click.aliexpress.com/e/_c3u4Hun1

1 X brida pequeña https://s.click.aliexpress.com/e/_c3Xj6B6j

1 X cargador USB (al menos 25W) https://s.click.aliexpress.com/e/_c4daub6b

1 X gancho plástico pared autoadhesivos (opcional) https://s.click.aliexpress.com/e/_c44Dc4t1


HERRAMIENTAS:

1 X PC

1 X programador CC Debugger https://s.click.aliexpress.com/e/_c3VomUMj

1 X placa de expansión Zigbee/cc2530 https://s.click.aliexpress.com/e/_c3pI3LDv

1 X soldador estaño (con punta fina) https://s.click.aliexpress.com/e/_c3I4cZWb

1 X estaño https://s.click.aliexpress.com/e/_c3wvZqsF

5 X cables DuPont macho-hembra(esto es opcional pero muy recomendable a la hora de unir provisionalmente los cables para cargar el firmware) https://s.click.aliexpress.com/e/_c4TSGQqf

5 X cables con puntas de cocodrilo (esto es opcional pero muy recomendable a la hora de unir provisionalmente los cables para cargar el firmware) https://s.click.aliexpress.com/e/_c4U6k1YB

Preparación Del CC2530

CC2530 y cables.jpg

El primer paso consiste en soldar los cables al módulo CC2530.

Realiza las siguientes conexiones:

  1. Rojo ---------→ +3VDC
  2. Negro -------→ GND
  3. Azul ---------→ P2.1 (entrada pulsador)
  4. Verde -------→ P2.2 (salida al MOSFET)
  5. Amarillo ----→ RESET (esta conexión será momentánea y únicamente se utilizará durante la carga del firmware)

Configuración Del Firmware Con PTVO

settings.jpg
expert.jpg
Icono difusor aromático.png

Ahora configuraremos el firmware utilizando PTVO configurable firmware. https://ptvo.info/

Yo he utilizado la versión 1.9.3.1

Una vez abierto el programa, accede a la pestaña Settings.

Settings:

  1. Board type: CC2530
  2. Device type: router
  3. Output 1:
  4. P2.2 (este es el pin del chip que elegiremos de salida para activar el MOSFET)
  5. Pulse switch (un pulso de un tiempo determinado)
  6. Pull-up
  7. Inversed (desactivado)
  8. Remember state (activado)
  9. Internal use (desactivado)
  10. Impulse (500 ms)
  11. Restore after power off (estado tras reinicio en OFF)
  12. Change to state after interval (OFF)
  13. Interval (1)
  14. Linked input (restart impulse timer)
  15. Input 2:
  16. P2.1 (este es el pin del chip que elegiremos de entrada para conectar el pulsador que trae el difusor aromático)
  17. GPIO
  18. Pull-up
  19. Inversed (desactivado)
  20. Link to out 1 (con esto conseguiremos vincular la entrada con la salida)
  21. Switch
  22. Long (desactivado)
  23. Double (desactivado)
  24. Toggle (desactivado)
  25. Bind command (ON/OFF)


Ahora seguimos con la pestaña Expert.

Expert:

  1. Manufacter ID (desactivado)
  2. Manufacter name (el nombre de nuestro proyecto por ejemplo)
  3. Model ID (nombre del archivo del convertidor externo que generaremos)
  4. Icon (file or data URL) (elegiremos un icono para que aparezca representado nuestro dispositivo en Zigbee2mqtt, nota: no debe de tener mucho peso, NOTA: he adjunto una foto para el icono)
  5. Location desctiption (desactivado)
  6. Network security key (desactivado)
  7. Set default reporting interval (s) (ponemos en este caso 600 segundos para que cada ese tiempo establecido nos mande un reporte del estado del dispositivo)
  8. Disable configuring the interval remotely in run-time (desactivado)
  9. Disable periodic ON/OFF reports for SPIO outputs (desactivado)
  10. Enable watchdog timer (desactivado)
  11. Disable resetting of a device by a power ON/OFF cycle (desactivado)
  12. Update firmware's timestamp (activado)


Guardaremos el proyecto para futuras modificaciones en "file/save settings to a file", le damos un nombre y lo guardamos en una carpeta en formato "ini".

En el icono de la parte inferior hacemos clic en "SAVE" y le damos un nombre y lo guardamos en una carpeta en formato "hex", este es el archivo que nos interesa para cargar en el CC2530. Este será el firmware que cargaremos en el CC2530 en el siguiente paso.

Hacemos clic en el botón "Save custom converter" que está en la parte más derecha de la fila de "Model ID", le damos un nombre y lo guardamos en una carpeta en formato "js", este es el archivo que nos interesa para cargar como external_converters (ya que no es un dispositivo oficialmente soportado).

Aquí encontrarás más información sobre los external_converters: https://www.zigbee2mqtt.io/advanced/more/external_converters.html

Downloads

Conectar Los Dispositivos

40_placa_interfaz_cc_debugger_zigbee.jpg
41_placa_interfaz_cc_debugger_zigbee.jpg

Conecta el CC2530 a la placa de expansión Zigbee en sus correspondientes pines mediante los cables Dupont y/o los cables de cocodrilo.

  1. +3VDC CC2530 -------- cable rojo ------------→+3VDC placa expansión (un cable corto)
  2. GND CC2530 ---------- cable negro ----------→GND placa expansión
  3. P2.1 CC2530 ----------- cable azul ------------→P2.1 placa expansión
  4. P2.2 CC2530 ------ ---- cable verde -----------→P2.2 placa expansión
  5. RESET CC2530 -------- cable amarillo --------→RESET placa expansión (un cable corto)

La placa de expansión zigbee se alimentará mediante una conexión USB de 5 V.

Por ahora dejar el switch de alimentación de la placa de expansión zigbee apagado.

Conecta el CC Debugger entre la placa de expansión y el ordenador mediante la conexión USB de 5 VDC.

Cargar El Firmware Con SmartRF Flash Programmer

smartrf.jpg
39_smartrf_flash_programmer_ok.jpg
42_cc_debugger_zigbee.jpg

Ahora cargaremos el firmware en la placa CC2530 utilizando SmartRF Flash Programmer de Texas Instrument. https://www.ti.com/tool/FLASH-PROGRAMMER

Una vez abierto el programa, al conectar el programador CC Debugger debe de detectarse automáticamente y aparecer en el cuadrante del centro.

Además el led del CC Debugger debe de aparecer encendido en rojo.

Encendemos ahora el switch de alimentación de la placa de expansión zigbee.

Pulsamos el botón que posee el CC Debugger y el led debe de pasar a color verde, esto significa que existe comunicación exitosa entre el CC Debugger y el CC2530. Si este led no se pusiera en verde puede ser por diferentes causas, la más lógica es que el cableado de comunicación (cables DuPont de colores y/o cocodrilos) esté mal conectado (importante el cable al pin de reset).

Presionamos el icono con los 3 puntitos que aparece en la derecha de la línea de "Flash image". Elegimos el archivo antes creado con la extensión "hex".

Presionamos el botón inferior "Perform actions" y observamos como se carga nuestro firmware al CC2530.

Desconectamos el cableado del CC2530 de nuestra placa de expansión Zigbee.

Conectaremos Al CC2530 El AMS1117-3.3Vdc

cc2530_ams1117-3_3.jpg
cc2530_ams1117-3_3_cables_nombres.jpg
ams1117_nombres.jpg

Pegamos el AMS1117-3.3Vdc (AMS1) en la parte superior derecha del CC2530, con un poco de cianoacrilato puede valer, haciendo coincidir muy cerca con la patilla del GND de los 2 dispositivos.

Soldamos un cable rojo para la alimentación de 5VDC a la patilla de entrada positiva del AMS1.

El mismo pequeño cable rojo que antes usamos para cargar el firmware ahora lo utilizaremos para hacer un pequeño puente entre la patilla positiva de salida de 3VDC del AMS1 al pin de 3VDC del CC2530.

Soldamos un pequeño puente con cable negro desde la patilla GND del AMS1 al GND del CC2530 (o directamente con estaño, si la distancia lo permite).

Ya tenemos que tener también soldados (utilizados para cargar el firmware) un cable largo para el GND (negro), un cable largo para el P2.1 (azul) y un cable largo para el P2.2 (verde).

Desmontar El Difusor Aromático

04_difusor_cara_abierta_delantera.jpg
2 tornillos carcasa exterior.jpg
cableado antiguo.jpg
3 tornillos motor.jpg

Abrimos la tapa frontal del difusor que da acceso a la ubicación del bote aromático.

Quitamos los 2 tornillos de estrella de la tapa de la electrónica y el motor.

Cortamos el cableado antiguo que va a la electrónica a la altura de los conectores. Los 2 hilos blancos que van al pulsador, los hilos blanco y amarillo que van al motor y los hilos rojo y negro de la alimentación de las pilas.

Podemos desechar también sin problemas los terminales metálicos de las pilas para los bornes positivo y negativo.

Quitamos los 3 tornillos que sujetan al motor y al mecanismo de descarga. Apartamos hacia un lado todo esto y desechamos la placa electrónica.

Esquema Del Conexionado

IMG_20260808_195517.jpg

El conexionado será el siguiente.

Una alimentación de 5VDC que alimenta a las entradas de los 2 AMS1117-3,3VDC.

El primer AMS1 alimenta al CC2530 con 3VDC y el segundo al motor con 3VDC.

El pin P2.1 permite la detección de la actuación del pulsador.

El pin P2.2 permite la actuación del MOSFET que cierra el circuito al AMS2 para la alimentación del motor.

Cable De Alimentación

27_cable_usb_exterior.jpg
27_cable_usb_interior.jpg
IMG_20260717_202033.jpg

Hacemos un pequeño orificio de M4 en la trasera de la carcasa e introducimos los cables de alimentación de 5VDC.

Colocamos una presilla por la parte interior de la caja al cable de alimentación de 5VDC junto con los cables del pulsador y cortamos el sobrante.

Nuevo Controlador

23_cc2530_irlz34n.jpg
24_cc2530_irlz34n.jpg
mosfet_irlz34n_patillas.jpg
IMG_20260717_201846.jpg
IMG_20260717_202332.jpg
IMG_20260717_202338.jpg

Introducimos el CC2530 y el MOSFET en el interior de la caja ahora que tenemos bastante sitio al haber quitado la electrónica.

Tanto el MOSFET como el CC2530 lo podemos pegar con un poco de cianoacrilato o con silicona caliente.

En la patilla de la izquierda del MOSFET soldamos el cable verde del pin P2.2 del CC2530.

En la patilla de la derecha soldamos el cable GND del CC2530, un cable blanco de uno de los hilos del pulsador y el negativo del cable negro de alimentación de 5VDC.

El otro de los hilos blancos del pulsador lo soldaremos al pin P2.1 cable azul del CC2530.

En la patilla central soldamos un pequeño cable negro.

Montamos el engranaje y el motor con sus 3 tornillos.

Soldamos la patilla de GND del AMS2 al negativo del motor junto con el cable negro de la patilla central del MOSFET.

La salida del AMS2 al positivo del motor con un cable rojo.

En la entrada del AMS2 soldamos el cable rojo de la alimentación del CC2530 y el positivo del cable rojo de la alimentación de 5VDC.

Montamos la carcasa sobre el motor y los 2 tornillos, asegurándonos de colocar el cable del pulsador en su ubicación correcta.

Zigbee2MQTT En HA

zigbee2mqtt.jpg
zigbee2mqtt_02.jpg
zigbee2mqtt_03.jpg
zigbee2mqtt_04.jpg
zigbee2mqtt_05.jpg

En nuestro HA abrimos nuestra aplicación de Zigbee2MQTT pulsando el botón azul de "Open web UI".

Desde Zigee2MQTT pulsamos en permitir nuevos dispositivos.

Alimentamos nuestro nuevo dispositivo con 5VDC (un cargador de móvil).

Con esto debería de empezar la entrevista con nuestro nuevo dispositivo, irán apareciendo mensajes de vinculación en verde si no existe ningún problema.

Si no comienza el emparejamiento automáticamente realizamos 3 ciclos de encendido/apagado de 2 segundos.

Una vez ha finalizado el proceso de vinculación, deshabilitamos el proceso de vinculación de nuevos dispositivos.

Salimos de la aplicación y le damos a detener a la aplicación.

Accedemos a la carpeta de convertidores externos de nuestro Zigbee2MQTT (\\"IP_de_HA"\addon_configs\zigbee2mqtt\external_converters) y pegamos el archivo "js" antes generado y iniciamos de nuevo la aplicación de Zigbee2MQTT.

Accedemos a la pestaña de registros de la aplicación podemos observar como al arrancar nuestra aplicación nos carga nuestro convertidor externo sin errores.

Una vez haya iniciado sin problemas abrimos de nuevo nuestra aplicación Zigbee2MQTT y buscamos nuestro nuevo dispositivo y entramos en él.

Le damos un nombre amistoso "Difusor aromático" y le decimos "Actualizar el ID de entidad de Home Assistant".

También le damos una pequeña descripción de nuestro dispositivo.

Si nos vamos a nuestra integración MQTT veremos como se ha integrado satisfactoriamente nuestro nuevo dispositivo con las entidades correspondientes.

La entidad switch es la que más nos interesa y es la que activa remotamente la descarga del difusor aromático.

Integración Con HA

zigbee2mqtt_06.jpg
tarjeta.jpg
ambientador.jpg

En la integración MQTT nos debe de aparecer el dispositivo llamado difusor aromático. Este dispositivo debe de tener entre muchas otras, la entidad switch, que realiza la descarga del difusor aromático.

Creamos un ayudante tipo contador "counter" con nombre "Contador pulsos ambientador", icono: "mdi:scent" valor mínimo: "0", valor máximo "5000", valor inicial "0" tamaño del paso "1" y dejamos marcado "Restaurar el último valor conocido cuando se inicia Home Assistant".

Creamos una automatización que cada vez que la entidad switch pase a "ON" se incremente en 1 la entidad contador antes creada.

Creamos otra automatización que cuando el contador llegue a 2500 pulverizaciones nos avise de que el bote se está gastado, este valor lo podéis cambiar según vuestra experiencia.

Creamos una tarjeta "type: picture-elements" con el siguiente código.

Soportación

Copilot_20260804_184547.jpg
Copilot_20260804_184726.png

Puedes colocarlo sobre la parte superior de cualquier mueble o mesa.

Yo en mi caso he aprovechado que tengo los techos de escayola, desde donde he escondido un cargador USB y mediante un pequeño agujero en la misma escayola he sacado el cable de USB-C.

Mediante un gancho plástico para pared autoadhesivo lo puedes colocar en cualquier lugar.

Además os dejo unos adaptadores para esquineras con 45º y 65º impresos en 3D.

https://www.thingiverse.com/thing:7392188