« ドアフォンの故障(此方の声が相手に聞こえない) | Main | Arduino NANO, DHT11 を使い、湿度によりPower制御する »

02/03/2018

Arduino NANO-DHT11-OLED_Display を使って温度表示

Img_20180202_202410 Arduino NANODHT11を使って湿度と温度を計測し、それをOLEDディスプレイに表示する方法をメモしておく。
OLEDディスプレイへの表示は、Arduino Unoでは問題無く表示出来ていたのだが、中華製NANOでは表示できなかったので注意点を書いておく。
DHT11を使った湿度と温度の計測に関しては、数多くの記事をネット上に見る事が出来、私もその事例に倣ってブレッドボード上に組み立てた。


Img_20180202_203019 私が使ったOLEDディスプレイでは、Unoを使って組上げたものでは問題無く表示できるのに、同じように組み立てたNANOを使ったケースでは、全く表示出来なかった。(電源が入っていない感じ。)
電圧の違い(5V/3.3V)なのか、OLEDディスプレイ本体が壊れてしまったのか・・・と思ったり、ブレッドボード上でレイアウトやピン位置等、ジャンパーピンを何度も差し替え、長時間悩んだ。


ディスプレイの電源は、これまでNANOからブレッドボード上を経由して供給していたが、NANOのピン傍からジャンパーケーブルを使って直接OLEDディスプレイに接続してみたら、表示するようになった。ブレッドボード内に問題が有るのかな?これについては、未だ調査していない。ディスプレイの表示には、送り込んだデータが左に2pixほどずれて表示されるが、表示はするようになったので、部品異常では無いかもしれない。

(2018/02/03 20:13 OELDディスプレイに電源が入らない原因が分かった!

Img_20180203_200922 ブレッドボードには長手方向の途中で電源ラインが分断しているものが有って、そのためにOLEDディスプレイに電源が供給されなかったことが判明。僕はそこに目が行き届かなかった・・・。先ほど気づいたので、左に写真を添付しておく。写真の電源線の部分を見て欲しい。部品が乗ったブレッドボードの方では、赤と青の線が途中で切れている。)




OLEDディスプレイは5Vで動作し、SDA(A4ピンへ接続)、SCL(A5ピンへ接続)してI2Cインターフェースを介してNANOと通信する。

尚、私が参考にしたブログのURLは、
https://t93093.wordpress.com/2017/07/31/temperature-humidity-monitor-using-arduino-nano-dht11-0-96-inch-128x64-i2c-oled/


Dht11oled_display 回路は簡単なので、fritzingで描いて・・・、
sketch も下記に添付しておく。
ディスプレイ上で左側起点の最初の文字の表記位置を5pix分だけ右にシフトさせているが、これは画面表示が2pixほど左にずれて表示されるための私の暫定的な対応策である。



《sketch》

// DHT11センサーから湿度と温度を読み取り、128X64 I2C OLEDで表示する

#include "DHT.h"
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

#define DHTPIN 2     // データピンをD2へ

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// DHT11の pin 1 (正面左側) NANOの +5Vへ
// DHT11の pin 2(正面左から2番目、データピン)NANOの D2 且つ 10kΩ経由で +5Vへ
// Connect pin 4 (正面右側) NANOの GNDへ

DHT dht(DHTPIN, DHTTYPE, 6);

char str[10];

void drawTest(void) {
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr( 5, 20, "Measurements");  // 画面表示が 2pixほど右にシフトしているため
}

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT11 test!");
 
  dht.begin();
  u8g.firstPage();  
  do {
    drawTest();
  } while( u8g.nextPage() );
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("DHTセンサからのデータ読取りに失敗しました!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  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.print(f);
  Serial.print(" *F\t");
  
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  
  // picture loop
  u8g.firstPage();  
  do {
    u8g.setFont(u8g_font_helvB08);

    u8g.drawStr( 5, 15, "Humidity:");
    u8g.drawStr( 80, 15, dtostrf(h, 5, 2, str));
    u8g.drawStr( 112, 15, "%");
    
    u8g.drawStr( 5, 30, "Temperature:");
    u8g.drawStr( 80, 30, dtostrf(t, 5, 2, str));
    u8g.drawStr( 112, 30, "\260C");
    
    u8g.drawStr( 80, 45, dtostrf(f, 5, 2, str));
    u8g.drawStr( 112, 45, "\260F");
    
    u8g.drawStr( 5, 60, "Heat index:");
    u8g.drawStr( 80, 60, dtostrf(hi, 5, 2, str));
    u8g.drawStr( 112, 60, "\260F");
    
  } while( u8g.nextPage() );
}

« ドアフォンの故障(此方の声が相手に聞こえない) | Main | Arduino NANO, DHT11 を使い、湿度によりPower制御する »

Comments

Post a comment

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

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/540128/66351707

Listed below are links to weblogs that reference Arduino NANO-DHT11-OLED_Display を使って温度表示:

« ドアフォンの故障(此方の声が相手に聞こえない) | Main | Arduino NANO, DHT11 を使い、湿度によりPower制御する »

October 2018
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

無料ブログはココログ