読者です 読者をやめる 読者になる 読者になる

ArduinoとAM2302を使って温湿度センサを作る

Arduino 電子工作

以前satzzさんから教えて貰った内容の忘備録。久々に同じものを作ろうと試みたら結構時間がかかってしまったので。

使用するのはArduino Uno と温湿度センサAM2302

両方とも秋葉原で買える。AM2302はeBayなんかを使うと半額程度で調達できるみたい。

配線

データシートを見たら書いてあるけど、せっかくなのでFritzingを使って配線図をおこしてみた。 使うのはArduino、AM2302、ジャンパーピン、10Kオーム抵抗などなど。

f:id:kazutaka83:20150322150609p:plain

プログラム

参考にしたのは以下。

qiita.com

今回使っているAM2302は専用のライブラリがあるのでダウンロードしてArduinoのライブラリフォルダに叩き込んでおく。これを知らなかったので、センサが謎の3を吐き出す装置に成り下がってた。

ダウンロードのやり方はgitから

$ git clone https://github.com/adafruit/DHT-sensor-library /Applications/Arduino.app//Contents/Resources/Java/libraries/DHT

Arduinoのライブラリフォルダは環境に依存するので調べてください。ここらへんで言ってるArduinoは機器名称じゃなくてArduino IDEこれを指してる。

コードはとりあえずsatzzさん作のものをそのまま使う。

#include <DHT.h>
#define DHTTYPE DHT22
#define DHT22_PIN 7
DHT dht(DHT22_PIN, DHTTYPE);

void setup() {
  pinMode(DHT22_PIN, INPUT);      
  Serial.begin(9600);
}

char ch[10];
char ct[10];

void loop()
{
  float h  = dht.readHumidity() ;
  float t  = 5.0/9.0*(dht.readTemperature(true)-32.0); // fahrenheit -> celsius
  dtostrf(h, 6, 2, ch);
  dtostrf(t, 6, 2, ct);

  String postData = "{humidity:";
  postData.concat(ch);
  postData.concat(",temperture:");
  postData.concat(ct);
  postData.concat("}");

//  Serial.print("POST /api/measurements HTTP/1.1\r\n");
//  Serial.print("Content-Length: " + String(postData.length()) + "\r\n\r\n");
  Serial.println(postData);

  delay(1000);

}

これでArduinoから書き込んで、シリアルポートを読みだしてやると温度湿度がとれるはず。

f:id:kazutaka83:20150319235352p:plain