がじぇっとるねさす

ホビーとエレクトロニクスを繋げるサイト

アイテム

GR-COTTON 特設

温湿度センサー(HDC1000)

概要

温湿度センサー(HDC1000)をGR-COTTONに接続して温湿度を測ってみます。

login

準備

GR-COTTON、USBケーブル(マイクロBタイプ)、HDC1000モジュールの3つを準備します。
GR-COTTONにはピンソケット、HDC1000モジュールにはピンヘッダーを取り付ける必要があります。
HDC1000の購入についてはこちら(秋月電子通商Web)
ピンソケットの購入についてはこちら(秋月電子通商Web)

login

下図のようにHDC1000モジュールを、GR-COTTONに接続します。

login

GR-COTTONの裏面にある白いジャンパーが3V3、USB側にします。BATT側にある場合は引き抜いて、USB側に差し込んでください。

login

 

温湿度をシリアルモニターに表示する。

1秒毎に温湿度センサーから読み込んだ値をシリアルモニターに表示するサンプルです。


#include <Arduino.h>
#include <Wire.h>

#define HDC1000_ADDRESS 0x40
#define HDC1000_RDY_PIN 2
 
#define HDC1000_TEMPERATURE_POINTER     0x00
#define HDC1000_HUMIDITY_POINTER        0x01
#define HDC1000_CONFIGURATION_POINTER   0x02
#define HDC1000_SERIAL_ID1_POINTER      0xfb
#define HDC1000_SERIAL_ID2_POINTER      0xfc
#define HDC1000_SERIAL_ID3_POINTER      0xfd
#define HDC1000_MANUFACTURER_ID_POINTER 0xfe

#define HDC1000_CONFIGURE_MSB 0x10 /* Get both temperature and humidity */
#define HDC1000_CONFIGURE_LSB 0x00 /* 14 bit resolution */

void getTemperatureAndHumidity(float *temperature, float *humidity) {
  unsigned int tData, hData;
 
  Wire.beginTransmission(HDC1000_ADDRESS);
  Wire.write(HDC1000_TEMPERATURE_POINTER);
  Wire.endTransmission();
  while (digitalRead(HDC1000_RDY_PIN) == HIGH);
  Wire.requestFrom(HDC1000_ADDRESS, 4);
  while (Wire.available() < 4);
 
  tData = Wire.read() << 8;
  tData |= Wire.read();
 
  hData = Wire.read() << 8;
  hData |= Wire.read();
 
  *temperature = tData / 65536.0 * 165.0 - 40.0;
  *humidity = hData / 65536.0 * 100.0;
}

//*********************************************************
void setup() 
{
  setPowerManagementMode(PM_STOP_MODE); // use stop delay

  //Initialize Serial and I2C communications
  Serial.begin(9600);
  Wire.begin();
  pinMode(HDC1000_RDY_PIN, INPUT);
  
  //Put the HDC1000 IC into the correct operating mode
  Wire.beginTransmission(HDC1000_ADDRESS);
  Wire.write(HDC1000_CONFIGURATION_POINTER);
  Wire.write(HDC1000_CONFIGURE_MSB);
  Wire.write(HDC1000_CONFIGURE_LSB);
  Wire.endTransmission();

}
//------------------------------------------------------
void loop() 
{
  float temperature, humidity;
 
  getTemperatureAndHumidity(&temperature, &humidity);
  Serial.print("Temperature = ");
  Serial.print(temperature);
  Serial.print(" degree, Humidity = ");
  Serial.print(humidity);
  Serial.println("%");
  Serial.flush();
 
  delay(1000);

}
     


温湿度をPicalico Reader用に表示する。

GR-COTTONのタッチセンサーに触れるごとに、温度と湿度を可視光通信で表示します。
スマートフォンアプリのPicalico Readerで可視光通信を読み取ることができます。

login


#include <Arduino.h>
#include <Wire.h>
#include <PicalicoClass.h>

Picalico pica(LOW); // set LED to active high

#define HDC1000_ADDRESS 0x40
#define HDC1000_RDY_PIN 2

#define HDC1000_TEMPERATURE_POINTER     0x00
#define HDC1000_HUMIDITY_POINTER        0x01
#define HDC1000_CONFIGURATION_POINTER   0x02
#define HDC1000_SERIAL_ID1_POINTER      0xfb
#define HDC1000_SERIAL_ID2_POINTER      0xfc
#define HDC1000_SERIAL_ID3_POINTER      0xfd
#define HDC1000_MANUFACTURER_ID_POINTER 0xfe
 
#define HDC1000_CONFIGURE_MSB 0x10 /* Get both temperature and humidity */
#define HDC1000_CONFIGURE_LSB 0x00 /* 14 bit resolution */

void getTemperatureAndHumidity(float *temperature, float *humidity) {
  unsigned int tData, hData;
  
  Wire.beginTransmission(HDC1000_ADDRESS);
  Wire.write(HDC1000_TEMPERATURE_POINTER);
  Wire.endTransmission();
  while (digitalRead(HDC1000_RDY_PIN) == HIGH);
  Wire.requestFrom(HDC1000_ADDRESS, 4);
  while (Wire.available() < 4);
  
  tData = Wire.read() << 8;
  tData |= Wire.read();
  
  hData = Wire.read() << 8;
  hData |= Wire.read();
  
  *temperature = tData / 65536.0 * 165.0 - 40.0;
  *humidity = hData / 65536.0 * 100.0;
}

//*********************************************************
void setup() 
{ 
  setPowerManagementMode(PM_SNOOZE_MODE, 0, 800); // use snooze
  //Initialize Serial and I2C communications
  Wire.begin();

  //Put the HDC1000 IC into the correct operating mode
  Wire.beginTransmission(HDC1000_ADDRESS);
  Wire.write(HDC1000_CONFIGURATION_POINTER);
  Wire.write(HDC1000_CONFIGURE_MSB);
  Wire.write(HDC1000_CONFIGURE_LSB);
  Wire.endTransmission();
 
}
//------------------------------------------------------
void loop() 
{
  float temperature, humidity;
  static bool g_mode = 0;
  
  analogRead(A6); // into snooze mode, wait for touch.
  pica.attach(22, 23, 24);
  getTemperatureAndHumidity(&temperature, &humidity);
  if(g_mode == 0){
    pica.writeTemperature((int)temperature); // write temperature into picalico
  } else {
    pica.writePercent((int)humidity); // write temperature into picalico
  }
  delay(10000); // operate 10sec
  g_mode = !g_mode;
  pica.detach();
   
}
     


 

share