Arduinoを使って温湿度計&水温計 改造
一つ目の温湿度計はLCDが4列あり、もう一列何か表示したくなって
気圧センサーを購入。
買ったのはこれ。
ちっちゃ。
それとむき出しではイマイチなのでケースを製作する。
塗装前なのでカッコ悪い。
ケースに入れてエージングしてみると、LCDの熱の影響なのか温度が
高くなっている。
とりあえずスケッチで差分を補正するのと、湿度の数字が低く表示されるのも
係数かけて修正。
スケッチは以下の状態。
*******************************
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#define DHTPIN 3
#define DHTTYPE DHT11
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
int cnt=0;
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
LiquidCrystal_I2C lcd(0x3F,16,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup() {
//Serial.begin(9600);
//Serial.println("DHT11 test!");
dht.begin();
// Start up the library
sensors.begin();
if(!bmp.begin())
{
/* There was a problem detecting the BMP085 ... check your connections */
Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");
while(1);
}
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("SYSTEM START");
delay(3000);
}
void loop() {
int h = dht.readHumidity();
int t = dht.readTemperature();
float wt = sensors.getTempCByIndex(0);
h=h*1.6; //湿度の補正 1.6倍
t=t-2; //温度の補正 ケース内のLCDの影響で2度ほど高くなっている
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
//Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
//Serial.println("DONE");
// Serial.print("Temperature for the device 1 (index 0) is: ");
//Serial.println(sensors.getTempCByIndex(0));
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("ROOM TEMP: ");
lcd.print(t);
lcd.print(" *C ");
//print water temp
if(wt<25){
if(cnt==0){
lcd.setCursor(0,2);
lcd.print("WATER TEMP:");
lcd.print(sensors.getTempCByIndex(0));
lcd.print("*C ");
lcd.setCursor(0,3);
lcd.print("WARNIG!");
cnt=1;
}else{
cnt=0;
}
}else{
lcd.setCursor(0,2);
lcd.print("WATER TEMP:");
lcd.print(sensors.getTempCByIndex(0));
lcd.print("*C");
// float atpress;
sensors_event_t event;
bmp.getEvent(&event);
// atpress = bmp.getEvent(&event);
if (event.pressure){
/* Display atmospheric pressue in hPa */
// Serial.print("Pressure: ");
// Serial.print(event.pressure);
// Serial.println(" hPa");
lcd.setCursor(0,3);
lcd.print("AT PRESS:");
//lcd.print(atpress);
lcd.print(event.pressure);
lcd.print("hPa");
}else{
lcd.setCursor(0,3);
lcd.print("AH Sensor error");
}
}
delay(1000);
}
*******************************
で、こんな感じになった。
それと忘れないうちに配線図をアップしておく。