工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

DSM501A粉塵センサーで作るArduino空気質モニター

必要な部品と材料

部品数量備考
Arduino Nano R31メインマイコン
DSM501A粉塵センサーモジュール1PM2.5/PM10検出対応
英数字LCD 16×2文字1HD44780互換
40mmファンキット1センサー内部の空気循環用
LED(汎用)5空気質レベル表示用(白・緑・黄・赤・青)
抵抗 221Ω1LCDコントラスト調整用
ポテンショメーター 10kΩ1LCD輝度調整用

必要な工具

使用アプリ・オンラインサービス

プロジェクト概要

空気質モニタリングは1980年代から確立された科学ですが、当時は技術的制約が大きく、装置は複雑で高価でした。しかし現代では、より精密で高速、小型、低コストなソリューションが実現しています。

本プロジェクトでは、Samyoung製「DSM501A」粉塵センサーを使用します。これは市場で最も安価なセンサーの一つで、AliExpressなどで数ドルで購入可能です。PM2.5およびPM10粒子の検出が可能です。

センサーのピン配置

DSM501Aのピン配置は以下の通りです(配線色は参考程度に)。

DSM501A粉塵センサーで作るArduino空気質モニター

回路構成

回路は非常にシンプルです。LEDダイオードはArduinoのアナログピンA1〜A5に接続し、コード内で出力として定義します。LCDディスプレイ(16×2文字、HD44780互換)にはPM10濃度(個/0.01cf)と空気質の5段階評価を表示します。

空気質レベル判定基準

PM10とPM2.5の両濃度はシリアルモニターでも確認可能です。汚染度合いに応じて対応する色のLEDが点灯するため、一目で状況が把握できます。

DSM501A粉塵センサーで作るArduino空気質モニター

重要なポイント

センサーの排気口にファンを取り付けて空気を吸引させると、不要なピーク値を大幅に抑制でき、測定精度が向上します。全体は電気設備用のプラスチックケースに収納しています。

今後の展開

今後、さらにいくつかの安価な粉塵センサーをテストし、比較結果を次のプロジェクトで公開予定です。

ソースコード

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int pin2 = 3;
int pin1 = 2;
unsigned long duration1;
unsigned long duration2;
unsigned long starttime;
unsigned long sampletime_ms = 30000; // サンプリング時間 30秒
unsigned long lowpulseoccupancy1 = 0;
unsigned long lowpulseoccupancy2 = 0;
float ratio1 = 0;
float ratio2 = 0;
float concentration1 = 0;
float concentration2 = 0;
int wLed = A1; // 白:Clean
int gLed = A2; // 緑:Good
int yLed = A3; // 黄:Acceptable
int rLed = A4; // 赤:Heavy
int bLed = A5; // 青:Hazard

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(wLed, OUTPUT);
  pinMode(gLed, OUTPUT);
  pinMode(yLed, OUTPUT);
  pinMode(rLed, OUTPUT);
  pinMode(bLed, OUTPUT);
  starttime = millis();
  lcd.begin(16, 2);
}

void loop() {
  duration1 = pulseIn(pin1, LOW);
  duration2 = pulseIn(pin2, LOW);
  lowpulseoccupancy1 += duration1;
  lowpulseoccupancy2 += duration2;

  if ((millis() - starttime) > sampletime_ms) {
    ratio1 = lowpulseoccupancy1 / (sampletime_ms * 10.0);
    concentration1 = 1.1 * pow(ratio1, 3) - 3.8 * pow(ratio1, 2) + 520 * ratio1 + 0.62;
    ratio2 = lowpulseoccupancy2 / (sampletime_ms * 10.0);
    concentration2 = 1.1 * pow(ratio2, 3) - 3.8 * pow(ratio2, 2) + 520 * ratio2 + 0.62;

    lcd.setCursor(0, 0);
    lcd.print("PM10 ");
    lcd.setCursor(6, 0);
    lcd.print(concentration1, 3);

    Serial.print("concentration1 = ");
    Serial.print(concentration1);
    Serial.print(" pcs/0.01cf - ");
    Serial.print("concentration2 = ");
    Serial.print(concentration2);
    Serial.print(" pcs/0.01cf - ");

    // LCD第2行クリア
    lcd.setCursor(0, 1);
    for (int i = 0; i < 16; ++i) lcd.write(' ');

    // レベル判定とLED制御
    if (concentration1 < 1000) {
      lcd.setCursor(4, 1); lcd.print("CLEAN");
      digitalWrite(wLed, HIGH); digitalWrite(gLed, LOW); digitalWrite(yLed, LOW);
      digitalWrite(rLed, LOW); digitalWrite(bLed, LOW);
    } else if (concentration1 < 10000) {
      lcd.setCursor(4, 1); lcd.print("GOOD");
      digitalWrite(wLed, LOW); digitalWrite(gLed, HIGH); digitalWrite(yLed, LOW);
      digitalWrite(rLed, LOW); digitalWrite(bLed, LOW);
    } else if (concentration1 < 20000) {
      lcd.setCursor(4, 1); lcd.print("ACCEPTABLE");
      digitalWrite(wLed, LOW); digitalWrite(gLed, LOW); digitalWrite(yLed, HIGH);
      digitalWrite(rLed, LOW); digitalWrite(bLed, LOW);
    } else if (concentration1 < 50000) {
      lcd.setCursor(4, 1); lcd.print("HEAVY");
      digitalWrite(wLed, LOW); digitalWrite(gLed, LOW); digitalWrite(yLed, LOW);
      digitalWrite(rLed, HIGH); digitalWrite(bLed, LOW);
    } else {
      lcd.setCursor(4, 1); lcd.print("HAZARD");
      digitalWrite(wLed, LOW); digitalWrite(gLed, LOW); digitalWrite(yLed, LOW);
      digitalWrite(rLed, LOW); digitalWrite(bLed, HIGH);
    }

    lowpulseoccupancy1 = 0;
    lowpulseoccupancy2 = 0;
    starttime = millis();
  }
}

回路図

DSM501A粉塵センサーで作るArduino空気質モニター

製造プロセス

  1. OpenSensorsで空気質を測定: ArduinoとPythonによるガイド
  2. Heliumベースのソーラー駆動空気質センサー:設計と導入ガイド
  3. Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
  4. スマートホーム連携向けマルチポジション温度センサーシステム
  5. K30 CO2センサで室内空気質をリアルタイム監視する
  6. Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
  7. DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
  8. Arduino、Yaler、IFTTTでWeb対応IoTゲージを構築する
  9. Arduinoで作る斥力式磁気浮上装置: シンプル回路とDIYガイド
  10. 高性能 Arduino 気象観測気球データロガーの製作ガイド
  11. 先進カーボンベースNO₂センサーが室内空気質モニタリングを強化