必要なもの
前回と同じ。
- 220Ω抵抗×8
- 4桁7segLED(カソードコモン)(OSL40562-LB)
ダイナミック接続4桁高輝度青色7セグメントLED表示器 カソードコモン カソード共通接続: LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販
250円くらいで売られています。
- DHT11温湿度モジュール(Temperature and Humidity Sensor)[DFR0067]
DHT11温湿度モジュール(Temperature and Humidity Sensor): マイコン関連 秋月電子通商 電子部品 ネット通販
コード
/********************************************************************* Temperature and Humidity sensor *********************************************************************/ /* Copyright (c) 2012-2014 Wataru KUNINO http://www.geocities.jp/bokunimowakaru/ 参考: DHT11:http://www.geocities.jp/bokunimowakaru/ 7segLED:http://happy-arduino.blogspot.jp/2012/08/17_27.html http://cranberrytree.blogspot.jp/2013/05/arduino47led.html http://garretlab.web.fc2.com/arduino/introduction/beginning_with_7segment_led/ */ #define DHTport 17 // DHT_DATAポート番号(ANALOG 3) #define SD_CS 10 // SDカードCS端子(デフォルト=10) #include <MsTimer2.h> const static byte DHTtype= 11; // AM2302時はDHT=22にする // (#ifdefが使えないかった) //--- const int anode_pins[] = {9,8,11,3,4,5,6,7}; // アノードに接続するArduinoのピン const int led_4pins[] = {2,12,13,10}; int state=0; int state_1111[] = {0,0,0,0}; float hum=0.0,temp=0.0; byte dht11_dat[5]; byte dht11_check_sum; byte i; char Str[16]; //---- // DHT TSシーケンス byte DHTTSSeq(void) { byte dht11_in; // start condition // 1. pull-down i/o pin from 18ms digitalWrite(DHTport, LOW); pinMode(DHTport,OUTPUT); delay(200); pinMode(DHTport,INPUT); delayMicroseconds(20+40); // High 20us + Slave ACK 80us/2 dht11_in = digitalRead(DHTport); // 正常時 = LOW if(dht11_in){ Serial.println("dht start condition 1 not met"); return(1); } delayMicroseconds(80); dht11_in = digitalRead(DHTport); // 正常時 = HIGH if(!dht11_in){ Serial.println("dht start condition 2 not met"); return(1); } while( digitalRead(DHTport) ); // LOW待ち return(0); } // DHTデータ受信 byte read_dht11_dat(){ byte i = 0; byte result=0; for(i=0; i< 8; i++){ while( !digitalRead(DHTport) ); // High待ち delayMicroseconds(49); // 28us or 70us if( digitalRead(DHTport) ){ result |=(1<<(7-i)); while( digitalRead(DHTport) ); // wait '1' finish } } return result; } // DHT ACK void DHT_ACK(void) { while( digitalRead(DHTport) ){ delayMicroseconds(50); } } void setup() { //1~8番ピン デジタル出力へセット for (int i=0; i<=7; i++){ pinMode(anode_pins[i],OUTPUT); } for (int i=0; i<=3; i++){ pinMode(led_4pins[i],OUTPUT); } pinMode(DHTport,INPUT); Serial.begin(9600); Serial.print("DHT"); Serial.println(DHTtype,DEC); MsTimer2::set(15,led_start); } // 7segLED--- //LEDレイアウトを定義 boolean Num_Array[11][8]={ {1,1,1,0,1,0,1,1},{0,0,1,0,1,0,0,0},{1,0,1,1,0,0,1,1},{1,0,1,1,1,0,1,0}, {0,1,1,1,1,0,0,0},{1,1,0,1,1,0,1,0},{1,1,0,1,1,0,1,1},{1,1,1,0,1,0,0,0}, {1,1,1,1,1,0,1,1},{1,1,1,1,1,0,1,0},{0,0,0,0,1,0,0} }; boolean led_Array[4][4]={ {0,1,1,1},{1,0,1,1},{1,1,0,1},{1,1,1,0} }; //LED表示関数を定義 void NumPrint(int Number){ for (int w=0; w<=7; w++){ digitalWrite(anode_pins[w],Num_Array[Number][w]); } } void led_start(){ for (int j=0;j<4;j++){ for (i=0;i<4;i++){ digitalWrite(led_4pins[i],led_Array[j][i]); } NumPrint(state_1111[j]); delayMicroseconds(1000); } digitalWrite(led_4pins[3],1); } // 7segLED--- void loop() { DHTTSSeq(); for (i=0; i<5; i++) dht11_dat[i] = read_dht11_dat(); DHT_ACK(); dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3]; if(dht11_dat[4]!= dht11_check_sum){ Serial.println("DHT11 checksum error"); } /* 表示 */ temp = (float)dht11_dat[2]; Serial.print("DHT TEMP = "); Serial.print( temp , 1 ); Serial.print(" degC\n"); hum = (float)dht11_dat[0]; Serial.print("DHT HUM = "); Serial.print( hum , 1 ); Serial.print(" %\n"); int th[]={temp,hum}; for (int k=0;k<2;k++){ state=(int)th[k]%10000; state_1111[0]= (state) % 10; state_1111[1]= state /10 % 10; state_1111[2] = state /100 % 10; state_1111[3]= state /1000 % 10; MsTimer2::start(); delay(1000); MsTimer2::stop(); delay(1000); } }
- DHT11の処理方法は以下のサイトを参考にしました。
Arduino温湿度測定ロガー・湿度センサーの比較 by ボクにもわかる地上デジタル
- 割り込みを使って、温度と湿度を交互に表示しています。
あとでプログラムの整理をしようかな。→整理しました。
おわりに
次はプログラムの解説をします。
FabLife ―デジタルファブリケーションから生まれる「つくりかたの未来」 (Make: Japan Books)
- 作者: 田中浩也
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/09
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 314回
- この商品を含むブログ (17件) を見る