空気室なら知ってるけど、空気質ってあんまり聞かない / 使わない言葉ですね。意味わかるけど。
ずっと前にaitendoで衝動買いしてそのまま忘れていました(空気質センサモジュール [MQ135-4P])。それにしても空気質。指標はいろいろありますが、いったい何を測定してくれるのでしょうか。とりあえず、この手のものとしては秋月で売っているTGS2450が電子工作界ではおなじみだと思います。
秋月のサイトから |
ただしTGS2450は結構気難しいというかヒーターの電圧や加圧時間を間違えるとすぐに焼損することで有名です。私も使ったことがあります(懐かしい記事はこちら)。
でも、こっちの空気質センサーは、モジュールになっていて電源5vをかければ0-4vで空気の質がわかる、というシロモノです。
ということで、使ってみました。
<追記 2016-03-18> 90mAも消費するだけあって、動作させたままだと結構暖かくなります。放射温度計で測ったところ、一番暖かい場所で51度でした(室温24度)。お使いになる時はこのことを覚えておいてください。
■構成■
毎度おなじみESP-WROOM-02のTOUTをアナログ入力として使います。TOUTは1v入力なので、空気質センサーの出力は分圧してから使います。接続はこれだけです。空気質センサのDoutは使いません。なお、空気質センサーは100mA近い電流を消費するので、小さなUSBシリアルだと電流容量不足になります。
ESP-WROOM-02 | USBシリアル | 半固定抵抗 | 空気質センサ |
5v | Vcc | ||
Vcc | 3.3v | ||
Gnd | Gnd | 1 | Gnd |
Tx | Rx | ||
Rx | Tx | ||
Tout | 2 | ||
3 | Aout |
■調整方法など■
分圧には10kΩの半固定抵抗を使いました。ぶっつけ本番でいきなりToutにつなぐとESP-WROOM-02をぶち壊す可能性が高いので、最初はブレッドボードの上で半固定抵抗の1を5v、3をGndに接続し、2とGndの間の電圧をテスターなどで測定しながら抵抗のツマミをまわし、約1.2vになるように調整します。
空気質センサーの出力が4vなのだから5vで調整するとしたらフルスケール1.25vなのですが、少し余裕を見ます。なお、半固定抵抗の1と3は対称なので、調整後に組み込む際に間違えないようにします。私の場合はツマミのついている側を1に決めています。
先日のSCL/SDA同様、こういう決め事を作っておくと事故を防ぐことができます。
…と、数多くの事故にまみれてきた私が言うのだから説得力があります。
…いや、無いのか。
■ソフトウェア■
毎度おなじみの秒単位簡易リングバッファで1分間の平均値を取ってThingSpeak.comへ送っています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ESP_AIR_Sensor by k.kurahashi 2016-02-23 | |
// | |
#include <Time.h> | |
#include <ESP8266WiFi.h> | |
#include <WiFiClient.h> | |
extern "C" { | |
#include "user_interface.h" | |
} | |
// | |
// Wifi | |
// | |
const char *ssid = "*************"; | |
const char *password = "*************"; | |
WiFiClient client; | |
// | |
// data bufffer | |
// | |
int prevSecond; | |
int prevMinute; | |
int ring[60]; | |
// | |
// Setup | |
// | |
void setup() { | |
Serial.begin(115200); | |
// | |
// Wifi | |
WiFi.begin ( ssid, password ); | |
Serial.println("Started"); | |
// init buffer | |
for (int i = 0; i < 60; i++) ring[i] = -1; | |
// init second window | |
prevSecond = second(); | |
prevMinute = minute(); | |
} | |
void loop() { | |
char buffer[50]; | |
int sec = second(); | |
if (prevSecond != sec) { | |
int v = system_adc_read(); | |
ring[sec] = v; | |
sprintf(buffer, "read[%d]=%d", sec, v); | |
Serial.println(buffer); | |
int min = minute(); | |
if (prevMinute != min) { | |
long sum = 0; | |
int n = 0; | |
for (int i = 0; i < 60; i++) { | |
int aData = ring[i]; | |
if (aData != -1) { | |
sum += aData; | |
n++; | |
} | |
} | |
if (n > 0 && WiFi.status() == WL_CONNECTED) { | |
int value = sum / n; | |
sprintf(buffer, "%d", value); | |
String postStr = "&field1=" + String(buffer); | |
send(postStr); | |
Serial.print("Send="); | |
Serial.println(postStr); | |
} | |
prevMinute = min; | |
} | |
prevSecond = sec; | |
} | |
delay(10); | |
} | |
void send(String inPostStr) { | |
String apiKey = "**********************"; | |
Serial.print("Connecting..."); | |
if (client.connect("184.106.153.149", 80)) { // api.thingspeak.com | |
Serial.print("Connected...."); | |
String postStr = apiKey + inPostStr + "\r\n\r\n"; | |
client.print("POST /update HTTP/1.1\n"); | |
client.print("Host: api.thingspeak.com\n"); | |
client.print("Connection: close\n"); | |
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); | |
client.print("Content-Type: application/x-www-form-urlencoded\n"); | |
client.print("Content-Length: "); | |
client.print(postStr.length()); | |
client.print("\n\n"); | |
client.print(postStr); | |
Serial.println("posted."); | |
} | |
client.stop(); | |
} |
■計測結果■
計測結果ですが、ほぼ無臭のフロンガスのエアダスターに対しては1mぐらい離れたところで使っても反応があります。無水アルコールにもわりと敏感ですね。私が「ハーッ」て息を吐きかけると、てきめん、数字が上がるので心が傷つきます。![]() |
[19]で息を吹きかけました。 |
ThingSpeak.comでの計測値はこんな感じ。
さて。加齢臭にはどうなのか。知りたいような知りたくないような。明日、換気状態で出勤して値はどう変わるのか。追ってご報告申し上げたいと思います。
…私が寝ている間に62まで下がりました。04:15ごろ起床。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。