Search Suggestions
Arduino 读取 Sensirion SHT15 数字温度湿度传感器

Arduino 读取 Sensirion SHT15 数字温度湿度传感器

TONYLABS 27 Jan, 2014
  • 66
  • 0

了解 Sensirion 品牌:

[caption id="attachment_117" align="alignleft" width="220"]

Sensirion

 Sensirion[/caption] Sensirion 传感器公司位于瑞士的苏黎世,是一个飞速发展的高新技术企业。它生产的数字式温湿度传感器、微差压传感器、气体流量计、气体流量控制器、液体流量控制器等产品均采用了领先世界的CMOSensR专利数字传感技术,其产品以其卓越的品质成为世界温湿度传感器领域新的赢家....Sensirion 传感器芯片为客户在全球激励竞争的市场提供了无泄可击的优势:低价位,高精度和卓越的稳定性。 官方网站:http://www.sensirion.com.cn [caption id="attachment_118" align="alignnone" width="400"]

SHT10 Sensor Photo

 SHT10 Sensor Photo[/caption]

图解:

​ [caption id="attachment_119" align="alignnone" width="400"]

Arduino 连接 SHT1x 传感器

 Arduino 连接 SHT1x 传感器[/caption]

使用封装库调试方法:

#include #define dataPin  10   // DATA #define clockPin 11   // SCK SHT1x sht1x(dataPin, clockPin); void setup() {    Serial.begin(9600);    Serial.println("Starting up"); } void loop() {    float temp_c;    float temp_f;    float humidity;   // Read values from the sensor    temp_c = sht1x.readTemperatureC();    temp_f = sht1x.readTemperatureF();    humidity = sht1x.readHumidity();    //@Print the values to the serial port    Serial.print("Temperature: ");    Serial.print(temp_c, DEC);    Serial.print("C / ");    Serial.print(temp_f, DEC);    Serial.print("F. Humidity: ");    Serial.print(humidity);    Serial.println("%");    delay(2000); }  

Github: https://github.com/practicalarduino/SHT1x

不使用封装库的方法:

  int SHT_clockPin = 3;  // pin used for clock int SHT_dataPin  = 2;  // pin used for data void setup(){  Serial.begin(9600); // open serial at 9600 bps } void loop(){  //@these can take a bit to get the values (100ms or so)  float temperature = getTemperature();  float humidity = getHumidity();  Serial.print(temperature);  Serial.print(" | ");  Serial.println(humidity); } float getTemperature(){  //Return Temperature in Celsius  SHT_sendCommand(B00000011, SHT_dataPin, SHT_clockPin);  SHT_waitForResult(SHT_dataPin);  int val = SHT_getData(SHT_dataPin, SHT_clockPin);  SHT_skipCrc(SHT_dataPin, SHT_clockPin);  return (float)val * 0.01 - 40; //convert to celsius } float getHumidity(){  //Return  Relative Humidity  SHT_sendCommand(B00000101, SHT_dataPin, SHT_clockPin);  SHT_waitForResult(SHT_dataPin);  int val = SHT_getData(SHT_dataPin, SHT_clockPin);  SHT_skipCrc(SHT_dataPin, SHT_clockPin);  return -4.0 + 0.0405 * val + -0.0000028 * val * val; } void SHT_sendCommand(int command, int dataPin, int clockPin){  // send a command to the SHTx sensor  // transmission start  pinMode(dataPin, OUTPUT);  pinMode(clockPin, OUTPUT);  digitalWrite(dataPin, HIGH);  digitalWrite(clockPin, HIGH);  digitalWrite(dataPin, LOW);  digitalWrite(clockPin, LOW);  digitalWrite(clockPin, HIGH);  digitalWrite(dataPin, HIGH);  digitalWrite(clockPin, LOW);  // shift out the command (the 3 MSB are address and must be 000, the last 5 bits are the command)  shiftOut(dataPin, clockPin, MSBFIRST, command);  // verify we get the right ACK  digitalWrite(clockPin, HIGH);  pinMode(dataPin, INPUT);  if (digitalRead(dataPin)) Serial.println("ACK error 0");  digitalWrite(clockPin, LOW);  if (!digitalRead(dataPin)) Serial.println("ACK error 1"); } void SHT_waitForResult(int dataPin){  // wait for the SHTx answer  pinMode(dataPin, INPUT);  int ack; //acknowledgement  //need to wait up to 2 seconds for the value  for (int i = 0; i < 1000; ++i){    delay(2);    ack = digitalRead(dataPin);    if (ack == LOW) break;  }  if (ack == HIGH) Serial.println("ACK error 2"); } int SHT_getData(int dataPin, int clockPin){  // get data from the SHTx sensor  // get the MSB (most significant bits)  pinMode(dataPin, INPUT);  pinMode(clockPin, OUTPUT);  byte MSB = shiftIn(dataPin, clockPin, MSBFIRST);  // send the required ACK  pinMode(dataPin, OUTPUT);  digitalWrite(dataPin, HIGH);  digitalWrite(dataPin, LOW);  digitalWrite(clockPin, HIGH);  digitalWrite(clockPin, LOW);  // get the LSB (less significant bits)  pinMode(dataPin, INPUT);  byte LSB = shiftIn(dataPin, clockPin, MSBFIRST);  return ((MSB << 8) | LSB); //combine bits } void SHT_skipCrc(int dataPin, int clockPin){  // skip CRC data from the SHTx sensor  pinMode(dataPin, OUTPUT);  pinMode(clockPin, OUTPUT);  digitalWrite(dataPin, HIGH);  digitalWrite(clockPin, HIGH);  digitalWrite(clockPin, LOW); }   规格书下载: Sensirion SHT1x Humdity Sensor


相关商品

Arduino Mega 2560

Arduino Mega 2560

190.00
Arduino 101

101能通过USB或者外部电源接口供电。两者同时供电时,电路能自动进行切换。外部电源接口可以接交流转直流的适配器供电,也可以使用电池供电。电源相关引脚如下:

190.00
Arduino Uno R3

101能通过USB或者外部电源接口供电。两者同时供电时,电路能自动进行切换。外部电源接口可以接交流转直流的适配器供电,也可以使用电池供电。电源相关引脚如下:

75.00

订阅并保持联系

输入您的电子邮箱即可在第一时间获得 TONYLABS 资讯