Arduinoを使って温湿度計&水温計 改造

 

一つ目の温湿度計はLCDが4列あり、もう一列何か表示したくなって

気圧センサーを購入。

買ったのはこれ。

Amazon CAPTCHA

 


f:id:woosan900rr:20160828134850j:image

ちっちゃ。

 

それとむき出しではイマイチなのでケースを製作する。

塗装前なのでカッコ悪い。


f:id:woosan900rr:20160828134935j:image

ケースに入れてエージングしてみると、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);


DHT dht(DHTPIN, DHTTYPE);

 

 

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);

 
}

*******************************

で、こんな感じになった。

f:id:woosan900rr:20160828134952j:image

 

それと忘れないうちに配線図をアップしておく。

 f:id:woosan900rr:20160903204817p:plain