查看: 2205|回复: 0

37种传感器(三十)DS18B20模块+Stduino Nano&UNO

[复制链接]

53

主题

55

帖子

431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
431
发表于 2020-7-22 17:06:47 | 显示全部楼层 |阅读模式
StduinoUno/Nano-37种传感器(三十DS18B20数字温度传感器
关键词:51stm32arduinostduino单片机StduinoUno/Nano-37种传感器(三十DS18B20数字温度传感器
关键词:51stm32arduinostduino单片机stduino UNO&NanoDS18B20
说明:
1DS18B20是由 DALLAS 半导体公司推出的一种的单总线接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。stduino UNO&NanoDS18B20
说明:
1DS18B20是由 DALLAS 半导体公司推出的一种的单总线接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。
30-DS18B20-展示图.jpg
单总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-55+125℃,精度为±0.5℃。现场温度直接以单总线的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9-12 位的数字值读数方式。它工作在 3~5.5V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在 EEPROM 中,掉电后依然保存。
DS18B20的操作步骤如下:
1.初始化单总线对象;
2.搜索单总线上的仆从设备,并返回其ROM地址;
3.ROM地址进行处理,包括CRC校验、判断芯片类型,无误后进行下一步;
4. 读取温度,具体过程包括:
  4.1 复位,向DS18B20 发温度转换命令(0X44
  4.2 重置,发读取存储命令(0XBE
  4.3 对连续校正的两个字节数据进行转换。
5. 将温度通过串口打印


具体寄存器说明,功能指令以及 ROM 指令参考DS18B20 数字温度传感器

实验目的:
在本例中,我们将利用 DS18B20模块测定温度。
器材:
Stduino UNO / Nano; 杜邦线;数字温度传感器(DS18B20 )模块
电路连接: 30DS18B20电路连接.png
代码:
  1. #include <Arduino.h>
  2. #include <OneWire.h>


  3. OneWire  ds(10);  // 选择I/O,实例化对象

  4. void setup(void) {
  5.   Serial.begin(9600);
  6. }

  7. void loop(void) {
  8.   byte i;
  9.   byte present = 0;
  10.   byte data[12];
  11.   byte addr[8];
  12.   float celsius, fahrenheit;

  13.   if ( !ds.search(addr)) {
  14.     Serial.println("No more addresses.");
  15.     Serial.println();
  16.     ds.reset_search();
  17.     delay(250);
  18.     return;
  19.   }

  20.   Serial.print("ROM =");
  21.   for( i = 0; i < 8; i++) {
  22.     Serial.write(' ');
  23.     Serial.print(addr[i], HEX);
  24.   }

  25.   if (OneWire::crc8(addr, 7) != addr[7]) {
  26.       Serial.println("CRC is not valid!");
  27.       return;
  28.   }
  29.   Serial.println();

  30.   // 利用ROM最低8位判断是否属于DS18B20系列,以及具体的种类
  31.   switch (addr[0]) {
  32.     case 0x28:
  33.       Serial.println("  Chip = DS18B20");
  34.       break;
  35.     case 0x22:
  36.       Serial.println("  Chip = DS1822");
  37.       break;
  38.     default:
  39.       Serial.println("Device is not a DS18x20 family device.");
  40.       return;
  41.   }

  42. //4读取温度,具体过程包括:
  43. //4.1复位、向DS18B20发温度转换命令(0X44)
  44.   ds.reset();            
  45.   ds.select(addr);
  46.   ds.write(0x44, 1);        // 开始温度转换, 并保持电源接通单总线

  47.   delay(1000);   

  48. //4.2复位、发读取存储器命令(0XBE)
  49.   present = ds.reset();      
  50.   ds.select(addr);   
  51.   ds.write(0xBE);         // 读取暂存器

  52.   Serial.print("  Data = ");
  53.   Serial.print(present, HEX);
  54.   Serial.print(" ");
  55.   for ( i = 0; i < 9; i++) {           // 将暂存器里的九字节数据存储给data
  56.     data[i] = ds.read();
  57.     Serial.print(data[i], HEX);
  58.     Serial.print(" ");
  59.   }
  60.   Serial.print(" CRC=");          //CRC校验
  61.   Serial.print(OneWire::crc8(data, 8), HEX);
  62.   Serial.println();

  63.   // 4.3对连续读出的两个字节数据进行转换。

  64.     int16_t raw = (data[1] << 8) | data[0];//由于最终结果是16位整形数据,因此被存储为“int16_t”类型

  65.   // 通过data第四字节判断保留的温度数据位数,将多余的位数置0
  66.     byte cfg = (data[4] & 0x60);
  67.     if (cfg == 0x00) raw = raw & ~7;  // 9位, 93.75 ms
  68.     else if (cfg == 0x20) raw = raw & ~3; // 10位, 187.5 ms
  69.     else if (cfg == 0x40) raw = raw & ~1; // 11位, 375 ms
  70.                                  // 默认为12位,不需要处理,转换时间750 ms

  71.   celsius = (float)raw / 16.0;  //将数据转化为实际温度,即把数据乘以0.0625
  72.   fahrenheit = celsius * 1.8 + 32.0;  //摄氏度转华氏温度

  73.   //4.4串口打印
  74.   Serial.print("  Temperature = ");
  75.   Serial.print(celsius);
  76.   Serial.print(" Celsius, ");
  77.   Serial.print(fahrenheit);
  78.   Serial.println(" Fahrenheit");
  79. }
复制代码





实验效果:
如串联监视器所示,现在的温度位 34.50 ℃。
30-ds18b20效果图.png





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

Stduino 零基础入门课程系列(五) 实验三:按键输入
Stduino 零基础入门课程系
Hello!各位同学大家好~上节课我们利用管脚输出高低电平信号,控制LED的亮灭,那么我
Stduino小白练习第六弹--按键控制串口通信
Stduino小白练习第六弹--
2020/01/08 星期三 作者:Astilbe 问题:我们如何通过按下按键来传输固定的信息给PC呢
37种传感器(二十九)MPU6050陀螺仪模块+Stduino Nano&UNO
37种传感器(二十九)MPU6
StduinoUno /纳米37种传感器(二十九)六轴 MPU陀螺仪模块关键词: 51 ; stm32 ; ar
stm32 最小系统 小蓝板 LED闪烁灯(三),无需刷Bootloader
stm32 最小系统 小蓝板 LE
关键词:stm32 小蓝板 STM32F103C8T6 Stduino IDE Stduino Nano LED闪烁灯 通过Stduin
Stduino IDE软件下载专区
Stduino IDE软件下载专区
Stduino IDE软件下载专区 Windows版:7月29号发布1.01, 现可
今天在文涛老大的帮助下我的stm32zet6终于把simlpefoc库跑起...
今天在文涛老大的帮助下我
[md]首先本身是刚刚从MDK转到arduino过来的新人,只因为要完开源的simplefoc,期间由
连接ADS1292模拟前端芯片,使用SPI库,导致串口不输出数据
连接ADS1292模拟前端芯片
[md]连接ADS1292模拟前端芯片,使用SPI库,导致串口不输出数据 ![QSJSBEZF83I8C907%$
©2001-2018  Stduino官网  Powered by©Discuz!   ( 皖ICP备17011998号 )
快速回复 返回顶部 返回列表