Arduino DS18B20温度检测

一.实物图

注:电阻选取4.7k欧

二.事例代码

注:先下载Onewire库到arduino libraries目录下,然后就有例子

#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)

void setup(void) {
  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(1000);     // 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
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t 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);
    // at lower res, the low bits are undefined, so let‘s zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 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;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

  

三.串口读取数据

时间: 2024-10-31 12:18:53

Arduino DS18B20温度检测的相关文章

Arduino LM35温度检测

一. arduino代码以及串口收到的显示数据 二.实物图 #绘制电路图

Cubieboard1显示DS18B20温度信息到LED

Cubieboard1的内核已经支持w1温度传感器DS18B20 (依赖的内核选项和模块包括dallas's 1-wire support, gpio_sunxi, w1_sunxi, w1_gpio, w1_slave_therm ). 下图的DIY是在8位8段LED显示模块上同时显示当前时间和气温的实验. jarry大侠在很久前的帖子(http://forum.cubietech.com/forum.php?mod=viewthread&tid=474)中介绍了DS18B20在cubiebo

DS18B20温度计算

DS18B20温度计算 高8位的前五位是                          符号位 高8位的后三位 与 低八位的前四位 共同组成 整数部分 低八位的后四位                            小数部分     原文地址:https://www.cnblogs.com/wyx19980617/p/9982144.html

基于FS4412的DS18B20温度采集编程实现(1-时序分析)

作者:秦老师,华清远见嵌入式学院讲师. 一.DS18B20简介 DS18B20是常用的数字温度计.DS18B20数字温度计提供9至12位(可配置)温度读数,表明该设备的温度. 信息通过单总线接口被发送到DS18B20或从DS18B20发出,因此从中央微处理器到DS18B20只有需要一个线(和地线). 读,写和进行温度转换所需要的电源,可以由数据线本身来提供,无需外部电源. 由于每个DS18B20含有唯一的序列号,多个DS18B20可以挂载在一条单总线上.这允许在许多不同的地方,放置温度传感器.

单片机练习 - DS18B20温度转换与显示

DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点.因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计.DS18B20 产品的特点: (1).只要求一个I/O 口即可实现通信.(2).在DS18B20 中的每个器件上都有独一无二的序列号.(3).实际应用中不需要外部任何元器件即可实现测温.(4).测量温度范围在-55 到+125℃之间; 在-10 ~ +8

基于 Arduino 的温度+湿度传感器

虽然根本不懂电路,但经过查阅资料,总算是实现了.在这里做一个记录,以免忘记. 开发环境 硬件 Arduino uno r3 开发板,点我看Arduino各版本的比较,uno的第3个版本,也是目前市面上用于学习最多的板子,意大利原版的价格是20欧,淘宝山寨板的价格是20元左右. 温度湿度传感器,型号DHT11,几块钱,淘宝上都有. 杜邦线,1块钱10根(注意分公母,区别是插还是被插). 针排,1块钱很多根,结合杜邦线连接板子和传感器. USB线,特制的,方口的一头接板子,另一头接电脑(供电和调试)

温度检测系统

功能设计 温度传感器读取环境数据,通过无线发送模块发给MCU,上位机显示温度数据.设计要求:发送平台由两块LR44纽扣电池供电,每块电池电量160mAH:每隔24个小时(测试时间是15s)检测一次温度数据并发送给上位机,要求发送平台在不发送时进入低功耗模式,实现低功耗设计. 器件选择 STM32L151C8T6 + LM75BD + NRF24L01 电路图 1. 发送模块电路原理图 2. 发送模块电路PCB图 3D: 3. 接收模块电路原理图 4.发送模块电路PCB图 3D: STM32CUB

基于FPGA的nrf24l01与ds18b20温度采集与发送接收

配套FPGA开发板(含该设计的工程代码):https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-4676525296.4.6e8950ed57YPhv&id=17848039135 发送模块整体设计 主要分为三个模块: 18B20温度采集top_mode. 数码管温度显示seg. 24L01发送模块nrf24l01_control和send_function. 整体结构图: 接收模块整体设计 主要分为两个模块: 数码管温度显示seg. 24L0

基于ARM-LINUX的温度传感器驱动(DS18B20) .

DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等.主要根据应用场合的不同而改变其外观.封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合.耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域. 技术性能描述 1. 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口