Arduinoベースの室内空気品質・快適度センサーキット
必要な部品と材料
![]() |
Arduino Nano R3 | × | 1 |
![]() |
DHT11 温湿度センサー(3ピン) | × | 1 |
| 空気品質センサー (MQ135) | × | 1 | |
| 0.96インチ I2C OLEDディスプレイ | × | 1 |
必要な工具と機器
![]() |
はんだごて |
![]() |
3Dプリンター (オプション) |
使用するアプリとオンラインサービス
![]() |
Arduino IDE |
プロジェクトについて
朝起きたときに十分な睡眠をとったはずなのに体がだるく感じることはありませんか?その原因の一つは、夜間に密閉された部屋の空気品質が悪化していることかもしれません。

このプロジェクトは、MQ135空気品質センサーで室内の空気品質を監視し、DHT11で温度と湿度を測定、OLEDディスプレイにデータを表示する低コストな空気品質モニターです。楽しく作れて実用的なプロジェクトです。
配線




接続:
- Arduino D2 → DHT11 出力
- Arduino A0 → MQ135 AO(アナログ出力)
- Arduino A5 → OLED SCL
- Arduino A4 → OLED SDA
プログラミング
以下のライブラリをインストールしてください:
- Adafruit_SSD1306.h
- Adafruit_GFX.h
- DHT.h
コードには2つの主要関数 sendSensor() と air_sensor() があります。
air_sensor(): MQ135からアナログ値を読み取り(gasLevel = analogRead(sensor);)、その値に基づいて空気品質を判定sendSensor(): DHTライブラリで温湿度を取得し、OLEDに表示


重要: air_sensor()関数のgasLevel閾値は、使用するセンサーに合わせてキャリブレーション(調整)が必要です。MQ135に5Vを供給し、きれいな環境で最低24時間通電させて「焼き込み」を行ってください。出荷時はセンサーが汚染されているため、この工程で自己浄化させ、より正確な値が得られるようになります。
焼き込み後、センサーを回路に接続し、屋外のきれいな空気の場所で適切な閾値を調整してください。
コード
Arduino Air Quality Monitor Arduino
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeMonoOblique9pt7b.h>
#include <DHT.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define sensor A0
#define DHTPIN 2
#define DHTTYPE DHT11
int gasLevel = 0;
String quality = "";
DHT dht(DHTPIN, DHTTYPE);
void sendSensor() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
display.setTextColor(WHITE);
display.setTextSize(1);
display.setFont();
display.setCursor(0, 43);
display.println("Temp :");
display.setCursor(80, 43);
display.println(t);
display.setCursor(114, 43);
display.println("C");
display.setCursor(0, 56);
display.println("RH :");
display.setCursor(80, 56);
display.println(h);
display.setCursor(114, 56);
display.println("%");
}
void air_sensor() {
gasLevel = analogRead(sensor);
if (gasLevel < 181) {
quality = " GOOD!";
} else if (gasLevel > 181 && gasLevel < 225) {
quality = " Poor!";
} else if (gasLevel > 225 && gasLevel < 300) {
quality = " Very bad!";
} else if (gasLevel > 300 && gasLevel < 350) {
quality = " Dangerous!";
} else {
quality = " Toxic";
}
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(1, 5);
display.setFont();
display.println("Air Quality:");
display.setTextSize(1);
display.setCursor(20, 23);
display.setFont(&FreeMonoOblique9pt7b);
display.println(quality);
}
void setup() {
Serial.begin(9600);
pinMode(sensor, INPUT);
dht.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(50, 0);
display.println("Air");
display.setTextSize(1);
display.setCursor(23, 20);
display.println("Quality monitor");
display.display();
delay(1200);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20, 20);
display.println("BY Abid");
display.display();
delay(1000);
display.clearDisplay();
}
void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();
}
カスタムパーツとエンクロージャ
プロジェクト用に設計した3Dプリント可能なエンクロージャです。3Dプリンターがなくても、段ボールなどで自作可能です。
回路図
製造プロセス
- Raspberry Piで構築する空気質・気象ステーション:InfluxDB & Grafana活用
- OpenSensorsで空気質を測定: ArduinoとPythonによるガイド
- DIY空気質モニター:コスト効率の良いEPA準拠検知器
- Heliumベースのソーラー駆動空気質センサー:設計と導入ガイド
- LoRaベースのスマートシティ大気質監視システム
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- スマート室内空気品質・廃棄物監視システム:Raspberry Pi/Arduino/NodeMCUでIOTA Tangle連携
- Bosch Sensortec、AI搭載BME688空気質センサを発表、ウイルス感染リスク低減へ
- ルネサス、組み込みAIで室内空気質センサープラットフォームを強化、臭気検出を向上
- 微小PM2.5・VOCセンサーがリアルタイム個人空気質モニタリングを実現
- 先進カーボンベースNO₂センサーが室内空気質モニタリングを強化




