メインコンテンツに移動

GR-COTTON 特設:温湿度センサー(HDC1000)

概要

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

Cotton HDC1000シリアル

準備

GR-COTTON、USBケーブル(マイクロBタイプ)、HDC1000モジュールの3つを準備します。

GR-COTTONにはピンソケット、HDC1000モジュールにはピンヘッダーを取り付ける必要があります。

HDC1000の購入についてはこちら(秋月電子通商Web)

ピンソケットの購入についてはこちら(秋月電子通商Web)

cotton-sp-prepare-hdc1000

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

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

cotton-sp-prepare-hdc10002
cotton-sp-prepare2

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

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


#include <arduino.h>
#include <Wire.h>
 
#define SHT31_ADDRESS 0x40
#define SHT31_RDY_PIN 2
  
#define SHT31_TEMPERATURE_POINTER     0x00
#define SHT31_HUMIDITY_POINTER        0x01
#define SHT31_CONFIGURATION_POINTER   0x02
#define SHT31_SERIAL_ID1_POINTER      0xfb
#define SHT31_SERIAL_ID2_POINTER      0xfc
#define SHT31_SERIAL_ID3_POINTER      0xfd
#define SHT31_MANUFACTURER_ID_POINTER 0xfe
 
#define SHT31_CONFIGURE_MSB 0x10 /* Get both temperature and humidity */
#define SHT31_CONFIGURE_LSB 0x00 /* 14 bit resolution */
 
void getTemperatureAndHumidity(float *temperature, float *humidity) {
  unsigned int tData, hData;
  
  Wire.beginTransmission(SHT31_ADDRESS);
  Wire.write(SHT31_TEMPERATURE_POINTER);
  Wire.endTransmission();
  while (digitalRead(SHT31_RDY_PIN) == HIGH);
  Wire.requestFrom(SHT31_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(SHT31_RDY_PIN, INPUT);
   
  //Put the SHT31 IC into the correct operating mode
  Wire.beginTransmission(SHT31_ADDRESS);
  Wire.write(SHT31_CONFIGURATION_POINTER);
  Wire.write(SHT31_CONFIGURE_MSB);
  Wire.write(SHT31_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で可視光通信を読み取ることができます。


#include <arduino.h>
#include <Wire.h>
#include <PicalicoClass.h>
 
Picalico pica(LOW); // set LED to active high
 
#define SHT31_ADDRESS 0x40
#define SHT31_RDY_PIN 2
 
#define SHT31_TEMPERATURE_POINTER     0x00
#define SHT31_HUMIDITY_POINTER        0x01
#define SHT31_CONFIGURATION_POINTER   0x02
#define SHT31_SERIAL_ID1_POINTER      0xfb
#define SHT31_SERIAL_ID2_POINTER      0xfc
#define SHT31_SERIAL_ID3_POINTER      0xfd
#define SHT31_MANUFACTURER_ID_POINTER 0xfe
  
#define SHT31_CONFIGURE_MSB 0x10 /* Get both temperature and humidity */
#define SHT31_CONFIGURE_LSB 0x00 /* 14 bit resolution */
 
void getTemperatureAndHumidity(float *temperature, float *humidity) {
  unsigned int tData, hData;
   
  Wire.beginTransmission(SHT31_ADDRESS);
  Wire.write(SHT31_TEMPERATURE_POINTER);
  Wire.endTransmission();
  while (digitalRead(SHT31_RDY_PIN) == HIGH);
  Wire.requestFrom(SHT31_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 SHT31 IC into the correct operating mode
  Wire.beginTransmission(SHT31_ADDRESS);
  Wire.write(SHT31_CONFIGURATION_POINTER);
  Wire.write(SHT31_CONFIGURE_MSB);
  Wire.write(SHT31_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();
    
}

cotton-sp-picalico