“(SKU:SEN030001)DS18B20温度传感器”的版本间的差异

来自YwRobot Studio Wiki
跳转至: 导航搜索
(创建页面,内容为“DS18B20 ==简介== 基于DS18B20的数字温度传感器,可以用来对环境温度进行定量的检测。DS18B20数字...”)
 
样例代码
 
第22行: 第22行:
 
===样例代码===
 
===样例代码===
 
<pre style="color:blue">
 
<pre style="color:blue">
 +
#include <OneWire.h>
 +
#include <Wire.h>
 +
#include <LiquidCrystal_I2C.h>
  
 +
LiquidCrystal_I2C lcd(0x27,16,2);
 +
OneWire  ds(10);
  
 +
void setup() {
  
 +
  lcd.init();
 +
  lcd.backlight();
 +
  lcd.setCursor(0,0);
 +
  lcd.print("DS18B20 Texting...");
 +
  Serial.begin(9600);
 +
}
  
</pre>
+
void loop(void) {
 +
  byte i;
 +
  byte present = 0;
 +
  byte type_s;
 +
  byte data[12];
 +
  byte addr[8];
 +
  float celsius, fahrenheit;
 +
 
 +
  if ( !ds.search(addr)) {
 +
    Serial.println("No more addresses.");
 +
    Serial.println();
 +
    ds.reset_search();
 +
    delay(250);
 +
    return;
 +
  }
 +
 
 +
  Serial.print("ROM =");
 +
  for( i = 0; i < 8; i++) {
 +
    Serial.write(' ');
 +
    Serial.print(addr[i], HEX);
 +
  }
  
 +
  if (OneWire::crc8(addr, 7) != addr[7]) {
 +
      Serial.println("CRC is not valid!");
 +
      return;
 +
  }
 +
  Serial.println();
 +
 +
  // the first ROM byte indicates which chip
 +
  switch (addr[0]) {
 +
    case 0x10:
 +
      Serial.println("  Chip = DS18S20");  // or old DS1820
 +
      type_s = 1;
 +
      break;
 +
    case 0x28:
 +
      Serial.println("  Chip = DS18B20");
 +
      type_s = 0;
 +
      break;
 +
    case 0x22:
 +
      Serial.println("  Chip = DS1822");
 +
      type_s = 0;
 +
      break;
 +
    default:
 +
      Serial.println("Device is not a DS18x20 family device.");
 +
      return;
 +
  }
  
 +
  ds.reset();
 +
  ds.select(addr);
 +
  ds.write(0x44,1);        // start conversion, with parasite power on at the end
 +
 
 +
  delay(100);    // maybe 750ms is enough, maybe not
 +
  // we might do a ds.depower() here, but the reset will take care of it.
 +
 
 +
  present = ds.reset();
 +
  ds.select(addr);   
 +
  ds.write(0xBE);        // Read Scratchpad
 +
 +
  Serial.print("  Data = ");
 +
  Serial.print(present,HEX);
 +
  Serial.print(" ");
 +
  for ( i = 0; i < 9; i++) {          // we need 9 bytes
 +
    data[i] = ds.read();
 +
    Serial.print(data[i], HEX);
 +
    Serial.print(" ");
 +
  }
 +
  Serial.print(" CRC=");
 +
  Serial.print(OneWire::crc8(data, 8), HEX);
 +
  Serial.println();
 +
 +
  // convert the data to actual temperature
 +
 +
  unsigned int raw = (data[1] << 8) | data[0];
 +
  if (type_s) {
 +
    raw = raw << 3; // 9 bit resolution default
 +
    if (data[7] == 0x10) {
 +
      // count remain gives full 12 bit resolution
 +
      raw = (raw & 0xFFF0) + 12 - data[6];
 +
    }
 +
  } else {
 +
    byte cfg = (data[4] & 0x60);
 +
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
 +
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
 +
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
 +
    // default is 12 bit resolution, 750 ms conversion time
 +
  }
 +
  celsius = (float)raw / 16.0;
 +
  fahrenheit = celsius * 1.8 + 32.0;
 +
  lcd.setCursor(0,1);
 +
    lcd.print("Tep:        C");
 +
    lcd.setCursor(5,1);
 +
    lcd.print(celsius);
 +
    delay(200);
 +
}
 +
 +
 +
 +
</pre>
  
 
==更多==
 
==更多==

2016年5月9日 (一) 09:36的最新版本

DS18B20

简介

基于DS18B20的数字温度传感器,可以用来对环境温度进行定量的检测。DS18B20数字温度传感器是美国DALLAS公司生产的一总线数字温度传感器。其测温范围 -55℃~+125℃,固有测温分辨率0.5℃,支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温,测量结果以9~12位数字量方式串行传送。 DS18B20数字温度传感器与Arduino专用传感器扩展板结合使用,可以非常容易地实现与环境温度感知相关的互动效果。

产品参数

  • 尺寸:23*20mm
  • 重量:4g
  • 芯片:DS18B20
  • 电压:3.3V、5V
  • 端口:数字双向单总线
  • 温度范围:-50℃- +125℃
  • 平台:Arduino、单片机、ARM、树莓派

使用教程

DS18B20LINE.jpg

样例代码

#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);
OneWire  ds(10);

void setup() { 

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("DS18B20 Texting...");
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
  
  delay(100);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  lcd.setCursor(0,1);
    lcd.print("Tep:        C");
    lcd.setCursor(5,1);
    lcd.print(celsius);
    delay(200);
}



更多

[YWRobot产品资料下载]

购买 YWRobot商城购买链接