{"id":4461,"date":"2020-08-25T09:09:42","date_gmt":"2020-08-25T08:09:42","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=4461"},"modified":"2025-10-05T17:12:53","modified_gmt":"2025-10-05T15:12:53","slug":"adaptacion-a-iot-de-un-robot-de-limpieza-dirt-devil-e-integracion-en-home-assistant","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=4461","title":{"rendered":"Adaptaci\u00f3n a IoT de un robot de limpieza Dirt Devil e integraci\u00f3n en Home Assistant"},"content":{"rendered":"<p>Estos d\u00edas he estado juegueteando un poco con un viejo robot de limpieza dom\u00e9stico del Lidl, un Dirt Devil. Es un robot de limpieza bastante b\u00e1sico, con algo ya de tiempo a sus espaldas. No dispone de ninguna capacidad de integraci\u00f3n con sistemas de dom\u00f3tica, ni nada que se le parezca. Es m\u00e1s, ni siquiera tiene WiFi. Pero tiene algo interesante: su funcionamiento se basa en el uso de un chip etiquetado como RV285R, que controla toda una placa de circuitos integrados para realizar las funciones del robot: movimiento de los cepillos, ventilador de succi\u00f3n, detecci\u00f3n de golpes, sensores de vac\u00edo para que no se caiga por escaleras&#8230; El caso es que buscando un poco por Internet, encontr\u00e9 un par de p\u00e1ginas sumamente interesantes sobre c\u00f3mo reemplazar este chip por un sistema Arduino. As\u00ed que aprovechando que sigo de vacaciones, no pod\u00eda menos que dedicar algo de tiempo al asunto.<\/p>\n<p>De acuerdo a la informaci\u00f3n compartida por <a href=\"http:\/\/paijmans.net\/Dirtdevil\/dirtdevil.html\" target=\"_blank\">Paijmans<\/a>, el chip RV285R trabaja a 5 voltios, por lo que es posible hacerlo funcionar directamente en dispositivos Arduino. Con un trabajo de ingenier\u00eda inversa, fue capaz de obtener la informaci\u00f3n de a qu\u00e9 se dedican los pines del chip:<\/p>\n<figure class=\"wp-block-piwigo-gallery-single-image piwigo-single-image\"><a href=\"https:\/\/www.eniac2000.com\/piwigo\/picture.php?\/7538\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.eniac2000.com\/piwigo\/galleries\/albums\/20200824-dirtdevil\/rv285r-pinout.png\" alt=\"rv285r-pinout\" \/><\/a><figcaption><strong>rv285r-pinout<\/strong><\/figcaption><\/figure>\n<p>Yo he podido refinarlo un poco m\u00e1s, distinguiendo las funcionalidades de los pines:<\/p>\n<ul>\n<li>P50: Led azul, o de encendido<\/li>\n<li>P67: Detector de colisi\u00f3n (bumper)<\/li>\n<li>P66: Zumbador interno<\/li>\n<li>VDD: 5 voltios<\/li>\n<li>P65: Nada<\/li>\n<li>P64: Ventilador<\/li>\n<li>P63: Nada (Etiquetado como Reset por el fabricante)<\/li>\n<li>P51: Led rojo, o de indicaci\u00f3n de bater\u00eda baja<\/li>\n<li>P52: Motor de rueda izquierda, funcionamiento hacia delante<\/li>\n<li>P63: Motor de rueda izquierda, funcionamiento hacia atr\u00e1s<\/li>\n<li>VSS: Tierra<\/li>\n<li>P60: Nada (aunque sospecho que es detector de dep\u00f3sito lleno del robot)<\/li>\n<li>P61: Motor de rueda derecha, funcionamiento hacia delante<\/li>\n<li>P62: Motor de rueda derecha, funcionamiento hacia atr\u00e1s<\/li>\n<\/ul>\n<p>Una vez identificados los elementos del chip, era hora de abrir el robot. Se puede apreciar el chip en la parte central de la placa:<\/p>\n<figure class=\"wp-block-piwigo-gallery-single-image piwigo-single-image\"><a href=\"https:\/\/www.eniac2000.com\/piwigo\/picture.php?\/7532\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.eniac2000.com\/piwigo\/_data\/i\/galleries\/albums\/20200824-dirtdevil\/IMG_20200824_103439438-me.jpg\" alt=\"IMG 20200824 103439438\" \/><\/a><figcaption><strong>IMG 20200824 103439438<\/strong><\/figcaption><\/figure>\n<p>Aunque en Paijmans indican que es posible puentear cada una de las patas del chip y conectarlas directamente al arduino (ya que \u00e9ste tiene m\u00e1s fuerza en las se\u00f1ales que las que pasa el chip), en mi caso he optado por desoldarlo, y conectarle cables de prototipado. Aunque en un principio parec\u00eda una buena idea, al poner de nuevo las carcasas del robot, en mi caso saltaron un par de soldaduras de sus pistas, por lo que tuve que hacer trabajo extra de soldadura. Recomiendo soldar directamente al cable:<\/p>\n<figure class=\"wp-block-piwigo-gallery-single-image piwigo-single-image\"><a href=\"https:\/\/www.eniac2000.com\/piwigo\/picture.php?\/7534\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.eniac2000.com\/piwigo\/_data\/i\/galleries\/albums\/20200824-dirtdevil\/IMG_20200824_185905184-me.jpg\" alt=\"IMG 20200824 185905184\" \/><\/a><figcaption><strong>IMG 20200824 185905184<\/strong><\/figcaption><\/figure>\n<p>Una vez soldados los cables, el siguiente paso es el dispositivo Arduino. He optado por hacer uso de un Wemos D1 Mini Pro, de la familia de los ESP8266, ya que proporciona capacidades WiFi, y viene sin los bornes para los cables de prototipado, por lo que pod\u00eda soldar directamente los cables para ahorrar espacio. Para la l\u00f3gica del mismo me he basado en la creada por Conrad Vassallo (<a href=\"http:\/\/conradvassallo.com\/2019\/05\/02\/converting-a-cheap-vacuum-robot-into-iot\/\" target=\"_blank\">Converting a cheap Vacuum Robot into IoT<\/a>) en su proyecto de domotizaci\u00f3n, ya que est\u00e1 preparado para integrar directamente en un sistema de dom\u00f3tica Home Assistant.<\/p>\n<figure class=\"wp-block-piwigo-gallery-single-image piwigo-single-image\"><a href=\"https:\/\/www.eniac2000.com\/piwigo\/picture.php?\/7535\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.eniac2000.com\/piwigo\/_data\/i\/galleries\/albums\/20200824-dirtdevil\/IMG_20200824_185913934_HDR-me.jpg\" alt=\"IMG 20200824 185913934 HDR\" \/><\/a><figcaption><strong>IMG 20200824 185913934 HDR<\/strong><\/figcaption><\/figure>\n<p>Algunos comentarios:<\/p>\n<ul>\n<li>He tenido que hacer algunas modificaciones al trabajo de Conrad, ya que en el c\u00f3digo que comparte faltaba la parte de conectar a la red WiFi el ESP8266. Tambi\u00e9n he eliminado algunas librer\u00edas de las que no se hac\u00eda uso (EEPROM, Wire). Adem\u00e1s he tenido que adaptar los valores de detecci\u00f3n de bater\u00eda baja (m\u00e1s en el siguiente punto) para que se amoldara a mi caso.<\/li>\n<li>Conrad ha a\u00f1adido al proyecto base una idea interesante: un detector de voltaje de la bater\u00eda de 16v del robot. Usa para ello el pin A0 del ESP8266, que tiene capacidad para medir voltajes. Sin embargo, es necesario utilizar un conversor de voltaje para no quemar el disposito. Un simple <a href=\"https:\/\/ohmslawcalculator.com\/voltage-divider-calculator\" target=\"_blank\">divisor de voltaje<\/a> con dos resistencias funcionar\u00e1 bien, y esta informaci\u00f3n estar\u00e1 disponible para Home Assistant.<\/li>\n<li>Carga el c\u00f3digo antes de soldar los pines provenientes de la placa. Una vez soldados, ya no es posible cargar c\u00f3digo al Wemos a trav\u00e9s del puerto microUSB, ya que el pin D4 mete ruido. En mi caso, tuve que desoldar. Para evitar este problema ser\u00eda interesante a\u00f1adir actualizaci\u00f3n OTA, pero me temo que eso quedar\u00e1 para una nueva versi\u00f3n.<\/li>\n<\/ul>\n<p><figure class=\"wp-block-piwigo-gallery-single-image piwigo-single-image\"><a href=\"https:\/\/www.eniac2000.com\/piwigo\/picture.php?\/7537\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.eniac2000.com\/piwigo\/galleries\/albums\/20200824-dirtdevil\/pinout-wemos-mini-d1.png\" alt=\"pinout-wemos-mini-d1\" \/><\/a><figcaption><strong>pinout-wemos-mini-d1<\/strong><\/figcaption><\/figure><br \/>\n<strong>Esquema de conexiones del D1 Mini Pro. Atenci\u00f3n al uso del pin D4 para el env\u00edo de datos como puerto serie desde el Arduino IDE<\/strong><\/p>\n<p>Por \u00faltimo, queda la parte de Home Assistant. Con a\u00f1adir el siguiente c\u00f3digo a la configuraci\u00f3n, el sistema estar\u00e1 preparado para interactuar con el robot:<\/p>\n<p><code>vacuum:<br \/>\n  - platform: mqtt<br \/>\n    command_topic: \"vacuum\/command\"<br \/>\n    battery_level_topic: \"vacuum\/state\"<br \/>\n    battery_level_template: \"{{ value_json.battery_level }}\"<br \/>\n    charging_topic: \"vacuum\/state\"<br \/>\n    charging_template: \"{{ value_json.charging }}\"<br \/>\n    cleaning_topic: \"vacuum\/state\"<br \/>\n    cleaning_template: \"{{ value_json.cleaning }}\"<br \/>\n    docked_topic: \"vacuum\/state\"<br \/>\n    docked_template: \"{{ value_json.docked }}\"<br \/>\n    error_topic: \"vacuum\/state\"<br \/>\n    error_template: \"{{ value_json.error }}\"<br \/>\n<\/code><\/p>\n<p>El intercambio de informaci\u00f3n entre el robot y Home Assistant se realiza mediante MQTT. A continuaci\u00f3n se puede ver una captura de los datos intercambiados:<\/p>\n<figure class=\"wp-block-piwigo-gallery-single-image piwigo-single-image\"><a href=\"https:\/\/www.eniac2000.com\/piwigo\/picture.php?\/7536\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.eniac2000.com\/piwigo\/galleries\/albums\/20200824-dirtdevil\/mqtt-capture.jpg\" alt=\"mqtt-capture\" \/><\/a><figcaption><strong>mqtt-capture<\/strong><\/figcaption><\/figure>\n<p>\u00bfY el resultado? Espectacularmente bueno. Dejo un par de v\u00eddeos. El primero, con el robot a\u00fan abierto, y con una Victorinox haciendo de contrapeso, ya que si no, los sensores de vac\u00edo entran en funcionamiento:<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/doPdXuqKzNU\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>&#8230;y el segundo, ya con las carcasas colocadas, y probando algunas funcionalidades adicionales, como la limpieza espec\u00edfica en un punto concreto:<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/hCmKvf6iK9Y\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><strong>Fuentes:<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/paijmans.net\/Dirtdevil\/dirtdevil.html\" target=\"_blank\">Paijmans.net<\/a><\/li>\n<li><a href=\"http:\/\/conradvassallo.com\/2019\/05\/02\/converting-a-cheap-vacuum-robot-into-iot\/\" target=\"_blank\">Converting a cheap Vacuum Robot into IoT<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Estos d\u00edas he estado juegueteando un poco con un viejo<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[133,534,543,621,797,798,851,1134,1456,1778],"series":[],"class_list":["post-4461","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-arduino","tag-dirt-devil","tag-domotica","tag-esp8266","tag-home-ass","tag-home-assistant","tag-iot","tag-mqtt","tag-rv285r","tag-wemos-d1-mini-pro"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4461"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4461\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4461"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=4461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}