• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Датчик пыли DSM501A. Подключение его к Arduino, ESP32 и отправка показаний в Home Assistant по mqtt.

12 июня, 2022

Датчик качества воздуха DSM501A: http://alii.pub/6danbt

Esp32: http://alii.pub/6c9kzh

Arduino: http://alii.pub/6ahstu

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

Измерение качества воздуха довольно актуальная тема. Особенно в мегаполисах, где постоянно катаются машины, работают заводы.

Но измерение качества воздуха – еще обычно довольно дорогое удовольствие. И даже когда я собирал метеостанцию с полным спектром датчиков анализаторов воздуха у меня вышло около 5 тысяч рублей по цене. Об этом можете почитать тут:

Монитор качества воздуха и универсальный информер на ESP32 в ESPHome и Home Assistant.

И в этой статье поговорим об измерении PM2.5 частиц.

PM2.5 это воздушный загрязнитель, в состав которого входят как твердые микрочастицы, так и мельчайшие капельки жидкостей. И те, и другие размером примерно от 10 нм до 2,5 мкм. Другие обозначения и названия частиц РМ2.5: FSP (fine suspended particles), fine particles, fine particulate matter, мелкодисперсные взвешенные частицы, тонкодисперсная пыль.

Таблица загрязнения выглядит следующим образом:

Для измерения частиц PM2.5 я использовал в своей метеостанции датчик PMS7003  http://alii.pub/5z0s55 . Как его подключить к ESP32 и Home Assitant описано тут:

Добавление датчика PMS7003 измеряющего PM1 PM2.5 и PM10 частиц находящихся в воздухе подключенного к ESP32 в ESPHome и Home Assistant

Это классный датчик, но он дорогой. А у меня задумка сделать метеостанцию домашнюю как можно дешевле. И вот наткнулся на датчик пыли DSM501A (Dust sensor module) http://alii.pub/6danbt.

Технические характеристики датчика:

Мощность потребления: 0.5 Вт
Рабочее напряжение: 5 В
Рабочий ток: 100 мА
Ток открытой цепи: 106 мА
Диапазон рабочих температур: -20…85С
Интенсивность светового излучения: 1000 В/кВ.м, 25 град.

Этот датчик оптический. Своей оптикой он обнаруживает частицы от 2.5 um и ниже.

Когда обнаруживается частица, то отправляется импульс. Да, датчик импульсный. И чтоб снимать показания, нам нужно считать импульсы на выходе датчика ну и собственно по формуле их высчитывать.

Конечно могут быть и ложные срабатывания. И  так как на импульсы могут влиять разные наводки по питанию, то и питание должно быть с фильтрами, чтоб не давало наводок ( но это в идеале конечно). По этому данный датчик и дешевле в 10 раз по сравнению с датчиком PMS7001. Но 10 раз – это ощутимая разница, особенно если нам особо нет разницы показывает один 15 um, а другой 20um. Ведь эталонных значений мы все равно не узнаем.

Даташит на датчик DSM501A: https://roboparts.ru/upload/iblock/408/4086b1c01d3596e2d0060434d28a074b.pdf

Габариты датчика DSM501A следующие:

Распиновка датчика:

На цвет проводов не обращайте внимания. Так, как у меня цвета не совпадали с этой схемой. А порядок верный конечно же.

Не знаю по какой причине, но данный модуль не распространённый. Возможно из-за того, что он придирчивый к питанию и показывает немного отличающиеся значения.

Но для бюджетной метеостанции самое то ;-).

Для работы с датчиком я использую библиотеку: https://github.com/karser/KarserDSM501

Так-же продублирую ссылку на библиотеку у меня на диске, вдруг пропадет с githubа. https://disk.yandex.ru/d/JNU4kjjfVA7FvQ

Вот собственно пример из библиотеки, для работы с датчиком:


#define DUST_SENSOR_PIN_PM10  3  //Must be the pins that
#define DUST_SENSOR_PIN_PM25  2  //support interrupts

#define INTERVAL_COUNTDOWN 1000
#define INTERVAL_READ 30000

#include 
// ISRs forward declaration
void pm10_handleInterrupt();
void pm25_handleInterrupt();
// init pm10 and pm25 instances
KarserDSM501 pm10(DUST_SENSOR_PIN_PM10, pm10_handleInterrupt);
KarserDSM501 pm25(DUST_SENSOR_PIN_PM25, pm25_handleInterrupt);
// handle ISRs
void pm10_handleInterrupt() { pm10.handleInterrupt(); }
void pm25_handleInterrupt() { pm25.handleInterrupt(); }


unsigned long timer = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (!pm10.isReady() && (millis() >= timer + INTERVAL_COUNTDOWN)) {
    Serial.println("DSM501 warm up: " + String(pm10.getReadyCountdown()));
    timer += INTERVAL_COUNTDOWN;
  } else if (millis() >= timer + INTERVAL_READ) {
    timer += INTERVAL_READ;
    Serial.println("pm10: "+String(pm10.readPM())+" pm2.5: "+String(pm25.readPM()));    
  }
}

Так-же его скачать можно готовый тут (на случай, если при копировании выдает ошибку): https://disk.yandex.ru/d/c5l7k6LfrvVXQg

Тут их программы самое главное это пины к которым подключены выводы 10 и 2.5. Они должны поддерживать прерывание, иначе у Вас будут не верные показания.

После загрузки скетча, программа в мониторе порта будет отсчитывать 60 секунд и после этого будет присылать показания с датчика:

 

18:53:40.791 -> DSM501 warm up: 59
…
18:54:36.845 -> DSM501 warm up: 3
18:54:37.841 -> DSM501 warm up: 2
18:54:38.837 -> DSM501 warm up: 1
18:54:39.832 -> DSM501 warm up: 0
18:55:09.855 -> pm10: 21.39 pm2.5: 6.65
18:55:39.872 -> pm10: 20.31 pm2.5: 5.57
18:56:09.897 -> pm10: 28.64 pm2.5: 7.07
18:56:39.920 -> pm10: 17.89 pm2.5: 6.92
18:57:09.940 -> pm10: 25.84 pm2.5: 7.86
18:57:39.937 -> pm10: 23.35 pm2.5: 6.83
18:58:09.959 -> pm10: 29.80 pm2.5: 6.84
18:58:39.980 -> pm10: 18.68 pm2.5: 6.98
18:59:10.003 -> pm10: 27.84 pm2.5: 7.54

 

Итак, с этим вроде разобрались. Датчик все показывает, все хорошо. Но зачем нам этот датчик, если мы не можем смотреть график показаний и делать автоматизации на его значениях. По этому давайте его подружим с Home Assistant.

В ESPHome датчик не поддерживается ( наверное из-за того, что он не обрел популярность, а зря на мой взгляд). По этому будем отправлять данные по mqtt.

У меня есть мой дежурный скетч отправки показаний по mqtt. Я его беру и редактирую под разные датчики. Собственно его я взял и отредактировал под DSM501A. Он работает на ESP32.

Скачать скетч можно тут: https://disk.yandex.ru/d/TjsZSUx3lwR2tQ

Тут из Важных параметров -это:

 


#define WIFI_SSID "NETGEAR"
#define WIFI_PASSWORD "1214141141"

#define MQTT_HOST IPAddress(192, 168, 31, 145)
#define MQTT_PORT 1883

mqttClient.setCredentials("mqtt", "mqtt");

#define MQTT_PUB_TEMP "esp32/dsm501a/pm25"
 Где: #define WIFI_SSID "NETGEAR"
#define WIFI_PASSWORD "1214141141" 

Это SSID и пароль от Wi-Fi сети.

#define MQTT_HOST IPAddress(192, 168, 31, 145)

#define MQTT_PORT 1883

Это ip адрес  mqtt сервера и порт .

 

mqttClient.setCredentials("mqtt", "mqtt");

Это учетные данные к mqtt серверу у меня логин и пароль mqtt.

 

#define MQTT_PUB_TEMP "esp32/dsm501a/pm25"

Это топик куда будут отправляться данные.

 

Далее на самом сервере Home Assitsant в Configuration.yaml в блоке Sensor, добавим следующий блок:


sensor:
  - platform: "mqtt"
    name: "DSM501A"
    state_topic: "esp32/dsm501a/pm25"
    value_template: "{{ value }}"
    unit_of_measurement: "um"
    icon: "mdi:radiator"     

Собственно тут изменить только топик, из которого будем брать данные. Ну или оставить так как у меня.

После добавления этого блока в Configuration.yaml, нужно перезагрузить Home Assistant. И после перезагрузки у Нас появится сенсор с именем DSM501A.

И вот что получилось:

 

Это второй уже датчик в мою планируемую бюджетную метеостанцию домашнюю. Первый кандидат был AGS02MA и о нем можно прочесть тут:

Отправка данных в Home Assistant от датчика TVOC AGS02MA на ESP32.

 

Сonnecting DSM501A to ESP32 and Home Assitant

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·