« 玄関先にある郵便受けが開いた回数を表示する | Main | Arduino Tank Robot »

07/09/2019

Arduino NANO を使って BME280 で計測し LCD(16x2) に表示する

Img_20190709_121953 Img_20190709_122102
Arduino NANO を使って BME280 で、温度・湿度・気圧を計測し、結果を LCD(16x2) に表示する。
当初、LCD(16x2)の使い方が分からないので、ブログの簡単な事例でトライアルしてみたが、正しいはずの Sketch で、エラー無くコンパイルされたのに、画面は真っ白のまま・・・何故なのだろうと調べた挙句、LCD裏面の可変抵抗を調整して画面の明るさを加減しないと、表示された文字が見えないという事が分かった。わかってしまえば簡単な事なのに・・・、それで表示問題は解決。

BME280 と LCD どちらも I2C で接続するにはどうすれば良いのか・・・と悩んでいたが、BME280 は SPI 接続し、LCD は I2C 接続する方法で試したら上手くできた。Arduino NANO との接続方法は、下記の Sketch の中に書き入れた。

LCD は2行表示なので、温度、湿度、気圧を同時に表示することは出来ない。 2行を使い3行分のデータを順にまわして表示するか・・・とも考えたが、Sketchが面倒なので、温度表示は固定し、湿度と気圧を 3秒毎に上書き表示するようにしてみた。1行分のデータを、それぞれめいっぱい使えば、上書き時に完全に置き換えが出来る。

シリアルモニターにも表示できるようにしておいた。

という事で、スケッチは下記のようにすれば、完成!

【注記】表示されている温度と湿度に関していえば、温度は2℃ほど高めに表示されるし、湿度は10%ほど低めに表示されるようだ。
 気圧に関しても正確な値を表示していないかもしれない。それぞれ補正出来れば良いのですが・・・

《Sketch》
// Even though the sketch is correct,
// the text can not be seen without adjusting the LCD contrast.
// BME280 --- Arduino NANO (SPI connection)
//      CSB --- D10
//      SDA --- D11
//      SDO --- D12
//      SCL --- D13
// LCD(16x2) --- Arduino NANO (I2C connection)
//         GND --- GND
//         VCC --- 5V
//         SDA --- A4
//         SCL --- A5

#include <Wire.h>
#include "SparkFunBME280.h"
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR  0x3F
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);  // I2C: 0x3F, 16x2 LCD
const int SPI_CS_PIN = 10;
BME280 sensor;

void setup() {
lcd.init();
lcd.backlight();
Serial.begin(115200);
Wire.begin();
sensor.beginSPI(SPI_CS_PIN);
}

void loop() {
Serial.print("Temp: ");
Serial.print(sensor.readTempC(), 2);
Serial.print(" °C, Humidity: ");
Serial.print(sensor.readFloatHumidity(), 2);
Serial.print(" %, Pressure: ");
Serial.print(sensor.readFloatPressure() / 100.0, 1);
Serial.println(" hPa");

lcd.setCursor(0, 0);
lcd.print("Temp. " + String(sensor.readTempC()) + " deg");
lcd.setCursor(0, 1);
lcd.print("Humid. " + String(sensor.readFloatHumidity()) + " % ");
delay(3000);
lcd.setCursor(0, 1);
lcd.print("Prs. " + String(sensor.readFloatPressure()/ 100.0) + " hPa");
delay(3000);
}

« 玄関先にある郵便受けが開いた回数を表示する | Main | Arduino Tank Robot »

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

« 玄関先にある郵便受けが開いた回数を表示する | Main | Arduino Tank Robot »

August 2019
Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Recent Trackbacks

無料ブログはココログ