自作 Arduino PM10・温度・湿度センサーキット(COVID-19 対策にも)
必要な部品と材料
| 部品名 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| SDS018 PMセンサー(PM2.5/PM10) | 1 | レーザー散乱式、UART出力、内蔵ファン |
| DHT22 温湿度センサーモジュール | 1 | プルアップ抵抗・コンデンサ実装済み推奨 |
| OLED ディスプレイ I2C SSD1306(128×32) | 1 | |
| LED 3mm(緑、黄、赤) | 各1 | ステータス表示用 |
| 抵抗 390Ω | 3 | LED 直列用 |
| 抵抗 4.7kΩ、コンデンサ 100nF | 各1 | DHT22 用(モジュールに未実装の場合) |
| モバイルバッテリー(5V USB出力) | 1 | 電源用 |
| M3×16mm ネジ、M3×6mm ネジ | 4, 1 | ケース組立用、SDS018 固定用 |
| 3D プリントケース(PLA、橙色) | 1式 | 上部・下部パーツ、STL 提供 |
必要な工具と機器
- はんだごて、鉛フリーはんだ
- 3D プリンター
- ホットグルーガン
- コードレスドリル/ドライバー
アプリとオンラインサービス
- Arduino IDE
- ライブラリ:Adafruit SSD1306、DHT sensor library (Adafruit)
プロジェクト背景
PM10 と COVID-19 の関連性
イタリアの調査報道番組「Report」で、集約畜産(工場式畜産)から排出される大量のアンモニア・粒子状物質(PM10、PM2.5)が大気汚染を引き起こし、それがウイルスの「キャリア」となって感染拡大を助長する可能性が指摘されました。イタリア北部ロンバルディア州ではロックダウン中も工場・交通量減少にもかかわらず PM10 濃度が高止まりし、同州で感染者が集中した事実と合致します。
複数の研究で、PM がウイルスを吸着し、微小粒子が気流で長距離移動・長時間(数時間〜数週間)浮遊し続けること、湿度 40% 未満や 60% 超でウイルス生存率が上昇することが判明しています。
本デバイスの目的
PM10 濃度、温度、相対湿度をリアルタイム測定し、以下の 6 段階でリスクレベルを LED とディスプレイで通知。外出判断やマスク着用の目安にします。
| レベル | PM10 (µg/m³) | 湿度 | LED |
|---|---|---|---|
| 正常 | 0〜25 | 40〜60% | 全消灯 |
| 低リスク | 0〜25 | <40% または >60% | 緑点灯 |
| 低リスク | 26〜50 | 40〜60% | 緑点灯 |
| 警告 | 26〜50 | <40% または >60% | 緑+黄点灯 |
| 警告 | >51 | 40〜60% | 緑+黄点灯 |
| 危険 | >51 | <40% または >60% | 緑+黄+赤点灯 |
ハードウェア詳細
SDS018 PMセンサー
レーザー散乱原理で 0.3〜10µm の粒子濃度を測定。UART 出力、内蔵ファン、応答時間 <10秒、分解能 0.3µg/m³、CE/FCC/RoHS 認証取得。
ピン配置: 1:NC、2:1µm PWM、3:5V、4:2.5µm PWM、5:GND、6:RX、7:TX
Arduino Nano 接続: SDS018 の 5V→5V、GND→GND、TX(7)→ Nano RX(D0)
DHT22 温湿度センサー
3〜5V 動作、0〜100% 湿度(±2-5%)、-40〜80℃(±0.5℃)、0.5Hz サンプリング。
接続: VDD→5V、GND→GND、VDD-GND 間に 100nF、DATA-VDD 間に 4.7kΩ プルアップ、DATA→D2
OLED ディスプレイ(SSD1306、I2C)
128×32 ピクセル、白文字/黒背景、3.3〜5V 動作。
接続: VCC→5V、GND→GND、SCL→A5、SDA→A4
LED 接続
緑→D4、黄→D5、赤→D6(アノード)。カソード側に 390Ω 抵抗を直列接続し GND へ。
Arduino Nano ハードウェア改造(重要)
SDS018 の UART 出力を Nano のハードウェア RX(D0)で受信するため、USB-シリアル変換チップ(CH340/FTDI)との競合を避ける必要があります。基板上の RX 信号線に実装されている SMD 抵抗(写真赤矢印)を取り外し、垂直に立てて 2 線をハンダ付け、ピンヘッダー化。ジャンパーを挿すとプログラミングモード、抜くとセンサー通信モードになります。※抵抗を完全除去すると再プログラミング不可になるため注意。
電源
USB 経由でモバイルバッテリーから給電(5V)。Vin(7-12V)でも可。
ケースと組み立て
3D プリント製オレンジ PLA ケース(上部・下部 2 パーツ)。下部に Arduino Nano と SDS018、上部に DHT22、OLED、3 LED を配置。ホットグルーで固定。Mini-B USB 用開口部、LED 用 3 穴(φ3mm、マウントハードウェア使用時は φ5mm に拡張可)を設けています。組み立て手順写真 13 枚で詳細解説。
ファームウェア(Arduino スケッチ)
フローチャート概要
- 起動時:周辺初期化、LED 点灯テスト
- メインループ:
- 初回のみ 2 秒待機(DHT22 安定化)
- DHT22 読み取り → 温湿度をシリアル出力
- SDS018 読み取り(10 バイトフレーム、チェックサム検証) → PM2.5/PM10 算出 → シリアル出力
- PM10 と湿度の組み合わせでリスクレベル判定 → LED 制御
- ディスプレイ表示切替(
switchDisplayフラグで交互表示):- PM10 + 湿度(危険時は "Alarm!!!" 表示)
- PM2.5 + 温度
- ループ末尾で 2 秒待機
コード
#include
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int startDht = 0;
int switchDisplay = 0;
const int ledRed = 3, ledGreen = 4, ledYellow = 5;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(ledRed, OUTPUT); pinMode(ledGreen, OUTPUT); pinMode(ledYellow, OUTPUT);
dht.begin();
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { for(;;); }
display.clearDisplay(); display.setTextSize(2); display.setTextColor(SSD1306_WHITE);
// LEDテスト
digitalWrite(ledGreen, HIGH); delay(500);
digitalWrite(ledYellow, HIGH); delay(500);
digitalWrite(ledRed, HIGH); delay(500);
digitalWrite(ledGreen, LOW); digitalWrite(ledYellow, LOW); digitalWrite(ledRed, LOW);
delay(500);
}
void loop() {
// DHT22
if(!startDht) { delay(2000); startDht = 1; }
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) { Serial.println("DHT read failed"); return; }
Serial.print("Humidity: "); Serial.print(h); Serial.print("% Temp: "); Serial.print(t); Serial.println("°C");
// SDS018
uint8_t buf[10] = {0}; float pm25, pm10;
while(Serial.available() > 0) {
for(int i=0;i<10;i++) buf[i] = Serial.read();
if(buf[0]==0xAA && buf[1]==0xC0 && buf[9]==0xAB) {
uint8_t sum=0; for(int i=2;i<=7;i++) sum+=buf[i];
if(sum == buf[8]) {
digitalWrite(LED_BUILTIN, HIGH);
pm25 = ((buf[3]*256.0)+buf[2])/10.0;
pm10 = ((buf[5]*256.0)+buf[4])/10.0;
Serial.print("PM2.5: "); Serial.print(pm25); Serial.println(" ug/m3");
Serial.print("PM10: "); Serial.print(pm10); Serial.println(" ug/m3");
}
Serial.println("-----------------");
}
Serial.flush();
}
// LED制御(リスクレベル判定)
if(pm10 <= 25 && h >= 40 && h <= 60) { // 正常
digitalWrite(ledGreen, LOW); digitalWrite(ledYellow, LOW); digitalWrite(ledRed, LOW);
} else if(pm10 <= 25 && (h < 40 || h > 60)) { // 低リスク
digitalWrite(ledGreen, HIGH); digitalWrite(ledYellow, LOW); digitalWrite(ledRed, LOW);
} else if(pm10 > 25 && pm10 <= 50 && h >= 40 && h <= 60) { // 低リスク
digitalWrite(ledGreen, HIGH); digitalWrite(ledYellow, LOW); digitalWrite(ledRed, LOW);
} else if(pm10 > 25 && pm10 <= 50 && (h < 40 || h > 60)) { // 警告
digitalWrite(ledGreen, HIGH); digitalWrite(ledYellow, HIGH); digitalWrite(ledRed, LOW);
} else if(pm10 > 50 && h >= 40 && h <= 60) { // 警告
digitalWrite(ledGreen, HIGH); digitalWrite(ledYellow, HIGH); digitalWrite(ledRed, LOW);
} else { // 危険
digitalWrite(ledGreen, HIGH); digitalWrite(ledYellow, HIGH); digitalWrite(ledRed, HIGH);
}
// ディスプレイ表示
if(switchDisplay == 0) {
display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0);
if(pm10 > 50) display.print("Alarm!!!"); else { display.print("PM10:"); display.println(pm10); }
display.print("HR%:"); display.println(h);
display.display(); switchDisplay = 1;
} else {
display.clearDisplay(); display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); display.setCursor(0,0);
display.print("PM25:"); display.println(pm25);
display.print("T[C]:"); display.println(t);
display.display(); switchDisplay = 0;
}
delay(500); digitalWrite(LED_BUILTIN, LOW); delay(1500);
}
3D プリントファイル
回路図
Arduino Nano、SDS018、DHT22、OLED、3 LED、電源の配線図。
製造プロセス
- COVID-19がプラスチック業界の自動化を加速させた理由
- COVID-19が仕事の未来と自動化をどう再構築するか:新調査からの洞察
- COVID-19下で自動化が製造業のレジリエンスをどう加速したか
- COVID-19と戦後経済パラダイムの終焉
- パンデミック効果:COVID-19がブロックチェーンと暗号通貨イノベーションを加速する
- COVID-19が年間シッパーRFPを終わらせる:柔軟な契約フレート戦略へ
- Wayfair判決とCOVID-19:ポストパンデミック経済における免税販売業者の課題をナビゲート
- スキルギャップを埋める:ポストコロナ製造業のためのリスキリング・再教育戦略
- 製造業リーダー向けCOVID-19ガイダンスとリソース
- グラフェン技術でCOVID-19を5分以内に高精度検出
- SABICの循環型アプローチ:COVID-19下でのプラスチック包装、安全性、持続可能性