エンジニアリング

へたれエンジニアが車中泊用に温度・湿度・一酸化炭素計測器をArduinoで作った(MQ-7 AM2302)

この記事で作成したものはあくまでもホビー用です!

実際に使う際は販売されている商品を平行に使うなどをして、万が一に備えてください。

どーも まる@へたれ です。

前回の記事でも書きましたが来シーズンは車中泊メインに考えてます。
そこで車中泊の時の車内の状態を可視化したいなぁと思い自作しようと思いました!


ざっくりの仕様

こんな感じにしようと思います。

  1. 計測は温度・湿度・一酸化炭素
  2. 一酸化炭素は規定値を超えると「危ない!!」ということを知らせるためにブザーを鳴らす
  3. 車の中はネットワークにつながってないので物理ディスプレイで表示

材料はこんな感じ

Arduino・・・マイコンボード 今回は互換基盤で安く購入しました(購入価格:1200円)

AM2302・・・温度・湿度センサー(購入価格:300円くらいで秋月で買った)

MQ7・・・・・臭気センサー※匂いと一酸化炭素が測れる(購入価格:790円くらい)

LCD3WIRE board・・・・みんラボさんのLCDボード、3本のピンで接続出来るから配線が楽ちん(購入価格:1500円くらいだった)

なんかよくわからんブランドのブザー(購入価格:300円くらい)

配線をしてみましょう

いろいろなWebサイト様を見ながら、配線をしてみました。
時間がある時にfrizingを使って配線スケッチを起こそうと思います。

結構カオスな配線になりました。

Arduinoのスケッチを描きましょう

スケッチはこんな感じで書きました。
MQ-7は一酸化炭素をppmに変換するライブラリが無いとすごい難しい計算式(少なくても僕は理解できませんでした・・)が必要になるので、安易な僕はライブラリを導入しました。

ppmが30ppmを超えたらブザーを鳴らすようにしてます ※1
同じように30ppmを超えたらディスプレイにWARN!を表示 ※2

#include "DHT.h"
#include "MQ7.h"

#include <LiquidCrystal3.h> //LCDモニタ
#define DHTPIN 7     // AM2302 input
#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define analogMQ7 A0


//MQ7
MQ7 mq7(A0, 5.0);
int MQ7sensorValue = 0;

const int spk_pin = 13;
const int DIN_PIN_BUTTON = 5; //ディスプレイ
const int AOUTpin = 0;
const int DOUTpin=8;


// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);


/*LCDモニタ */
LiquidCrystal lcd(2, 3, 4);

void setup() {
  lcd.begin(16, 2); //LCD
  lcd.setCursor(0, 0);
  lcd.print("hello");
  lcd.setCursor(0, 1);
  lcd.print("loading..");
  tone(13,262,2000) ;


  //MQ7
  pinMode(analogMQ7, INPUT);
  
  
  pinMode( DIN_PIN_BUTTON, INPUT_PULLUP );
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
  dht.begin();

  
}

void loop() {

  delay(2000);
  //MQ-7
  //ライブラリを利用 https://github.com/swatish17/MQ7-Library
  float ppm = mq7.getPPM();
  //analogWrite(analogMQ7, HIGH);
  //MQ7sensorValue = analogRead(analogMQ7); 
  //Serial.print("CO PPM: ");
  //Serial.println(MQ7sensorValue);
  Serial.print("PPM: ");
  Serial.println(ppm);
  /* ppm値参考
   *  現状30ppm超えたらアラートにしている
   *  35ppm  8h滞在の最大許容濃度
   *  200ppm 2-3h で軽い頭痛
   *  400ppm 2.5-3.5hで強い頭痛
   *  800ppm 2hで湿疹
   *  1600ppm 2hで死ぬ
   */

   if(ppm >= 30) { 
      tone(13,2523,7000) ;//※1
   }
  
  int value; 
  value = digitalRead( DIN_PIN_BUTTON );
  Serial.println( value );

  
  
  //温度センサ周り
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  
  /* 表示 */
  float hi = dht.computeHeatIndex(f, h);
  Serial.print("Humidity: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.println("");
  lcd.setCursor(0, 0);
  if(ppm >= 30) {
    lcd.print("WARN!   PPM:"+ (String)ppm);
  } else {
    lcd.print("Clean   PPM:"+ (String)ppm); //※2
  }
  
  lcd.setCursor(0, 1);
  lcd.print("TE:" +String(t)+" HU:" + String(h));

  
}

最後は安易に仕上げましょう

自分用で使うだけなので、キッチンにあったタッパーにぶち込み、はんだ付けが面倒だったので配線が抜けそうな部分だけグルーガンで留めました。

実際に動かしてみました!

こんな感じで臭気を近づけるとけたたましい不快な音が鳴りました!

最後に

電子工作で日常生活をちょっと豊かにする遊び・・・楽しいっすなぁ。