発売前から気になっていたのですが,先日やっと購入しました.
届いてみると,その小ささと美しさにビックリ.
![]() |
| 8pinoのパッケージ.美しいです. |
![]() |
| インフルエンザ感染予防目安温湿度計 この機能性に優れたカッコいい器械を8pinoで作ります |
/////////////////////////////////////////////////////
Concept
① 温度・湿度を計測
② 感染リスクを計算
③ LEDの色でリスクを表示
//////////////////////////////////////////////////////
8pinoで開発しやすいように,pinをハンダ付けしました.8pino自体よりもpinの方が大きいくらいですw
ブレッドボードにさすとこんな感じです.USBを直接繋ぎます.
とりあえず,赤青2色LEDを光らせてみます.(本当はRGB LEDを使いたかったんですが,pinの数がたらないので2色にしました・・・)今回使用したLEDはカソードコモンでしたので,カソードをGNDに接続して,8pinoのpin #1をLEDの赤anodeに,pin #4を青anodeに繋ぎます.本当は電流制限抵抗とか入れるべきなのでしょうが,横着してそのまま繋ぎます.ジャンパ線の色がむちゃくちゃなのは気にしないでください(涙
赤・青・紫(赤+青)がつきました.Lチカ成功です!!w
さて,LEDはついたので次は温度と湿度の測定です.
8pinoはI2C通信に対応しているので,I2Cの温湿度計が使えそうです.
今回はHDC1000搭載のモジュールを使ってみます.
![]() |
| HDC1000温湿度モジュール.小さいしデザインも好みなのでよく使います. |
容量絶対湿度[g/m^3]を求める→7 g/m^3以下なら危険(赤),7~11 g/m^3なら中程度(紫),11~ g/m^3なら低(青)となるようにLEDを光らせます.
#include <TinyWireM.h>
//温湿度センサモジュール
#define HDC1000_ADDRESS 0x40 //温度センサモジュールのアドレス(固定)
#define HDC1000_RDY 3 //温度センサモジュールのRDY pinを8pinoの3に繋ぐ
#define HDC1000_TEMPERATURE_POINTER 0x00
#define HDC1000_CONFIGURATION_POINTER 0x02
#define HDC1000_CONFIGURE_MSB 0x10 //0x10=00010000
#define HDC1000_CONFIGURE_LSB 0x00 //0x00=00000000
int ledR = 1; //LEDの赤Anode
int ledB = 4; //LEDの青Anode
float ab_hum; //容量絶対湿度[g/m3]
void setup() {
pinMode(ledR, OUTPUT);
pinMode(ledB, OUTPUT);
TinyWireM.begin(); //initialize I2C bus
delay(15); //HDC1000は電源on後15msec程度の待ち時間が必要
configure(); //HDC1000の初期設定
delay(10);
getTempAndHumid(&ab_hum);
}
void loop() {
if(ab_hum < 7){
analogWrite(ledR, 100);
delay(2000);
}else if(7 <= ab_hum && ab_hum < 11){
analogWrite(ledR, 100);
analogWrite(ledB, 150);
delay(2000);
}else{
analogWrite(ledB, 100);
delay(2000);
}
digitalWrite(ledR, LOW);
digitalWrite(ledB, LOW);
delay(1000);
}
void configure(){ //Setup the HDC1000
TinyWireM.beginTransmission(HDC1000_ADDRESS);
TinyWireM.send(HDC1000_CONFIGURATION_POINTER); //pointerを指定した後
TinyWireM.send(HDC1000_CONFIGURE_MSB); //2byte(つまり8bit 8bit)のデータを送信している
TinyWireM.send(HDC1000_CONFIGURE_LSB); //この場合 00010000 00000000 従って12bit目が1にセットされた。
TinyWireM.endTransmission(); //12bit目が1だと温度湿度の順に32bitデータを送信するモードになる
} //詳細はHDC1000のデータシートを参照
void getTempAndHumid(float *ab_hum){ //気温と相対湿度から容積絶対湿度を求める
float tem, hum; //temparature[deg], humidity(相対湿度)[%]
float sp_hum, p, wp, roh;
int tempData, humidData;
TinyWireM.beginTransmission(HDC1000_ADDRESS);
TinyWireM.send(HDC1000_TEMPERATURE_POINTER);
TinyWireM.endTransmission();
while(digitalRead(HDC1000_RDY) == HIGH){//HDC1000はデータ変換が終了するとRDY pinをHIGHにする
;
}
TinyWireM.requestFrom(HDC1000_ADDRESS, 4);
while(TinyWireM.available() < 4){ //温度湿度それぞれ2byteのデータが送られてくる;
;
}
tempData = TinyWireM.receive() << 8;
tempData |= TinyWireM.receive();
humidData = TinyWireM.receive() << 8;
humidData |= TinyWireM.receive();
tem = tempData / 65536.0 * 165.0 - 40.0; //温度と湿度に変換
hum = humidData / 65536.0 * 100.0;
//容積絶対湿度[g/m3]の計算
p = 6.1078 * pow(10, (7.5 * tem) / (237.3 + tem)); //飽和水蒸気圧[hPa] Tetens equation
wp = p * hum / 100; //水蒸気圧[hPa]
sp_hum = 622 * wp / (1013.25 - wp); //重量絶対湿度[g/kg] 大気圧を1013.25hPaとした
roh = 1.293 * 1 / (1 + tem / 273.15) * (1 - 0.378 * wp / 1013.25); //空気の密度[kg/m3]
*ab_hum = sp_hum * roh; //容積絶対湿度[g/m3]
}
8pinoはI2Cに対応しているのですが,Arduino標準のWireライブラリが使えないそうです.マニュアル通りTinyWireライブラリをダウンロードして使えました.使い方はWireライブラリの関数とほとんど同じです.
![]() |
| 動かしてみました.この時期はほぼ赤ですね(汗 |
Parts Lists
8pino x1 : https://www.switch-science.com/catalog/2108/
2色LED(赤・青)OSRB3132A x1 : http://akizukidenshi.com/catalog/g/gI-04079/HDC1000温湿度センサモジュール x1 : http://akizukidenshi.com/catalog/g/gM-08775/
Reference
8pino: http://8pino.strikingly.com/
TinyWireMライブラリ: https://github.com/adafruit/TinyWireM
HDC1000温湿度モジュールの使い方について: http://garretlab.web.fc2.com/arduino/lab/temperature_and_humidity_sensor/index.html
HDC1000温湿度モジュールの使い方について: http://garretlab.web.fc2.com/arduino/lab/temperature_and_humidity_sensor/index.html
Note
8pinoはスケッチの書き込みに癖があるみたいです.このあたりが8pinoはArduino互換というよりTrinket互換機といわれるゆえんでしょうか.8pinoはUSBをPCと繋ぐことで書き込みモードに移項します.書き込みモードになると,pin #1につながっているLEDが点滅します.点滅しているときが書き込み可能時間だそうです.この間にIDEの書き込みボタンを押せば書き込めます.公式サイトのマニュアルでは,書き込みボタンを押す直前・直後にUSBをつなげと書いてありますが,私の環境ではそこまでシビアにやる必要は無いです.ただ,なぜか書き込みモードにならなくなった8pinoがありますが・・・(壊れた?).









0 件のコメント:
コメントを投稿