【Espruino】NO.10 数字温度传感器DS18B20

http://blog.csdn.net/qwert1213131/article/details/28845147

本文属于个人理解,能力有限,纰漏在所难免,还望指正!

【小鱼有点电】

【Espruino中文社区】

DS18B20是很常用的数字温度传感器,供电范围为3.0V到5.5V,测温范围为-55~+125℃,在-10~+85℃范围内精度为+-0.5℃,每个器件都有唯一的64为序列号存储在内部存储器中,因此在一根总线上可以挂载多个器件,且独特的单线接口方式,使得DS18B20与微控制器连接时仅需一条口线即可实现微控制器与DS18B20的双向通讯,不过,需要注意的是,DS18B20的中间引脚DQ需要连接一个4.7K欧姆电阻到电源引脚。

在开发板上,我们将DQ引脚连接到引脚B1,开发时我们需要用到OneWire类。Espruino的OneWire API函数与Arduino的OneWire库很相似,操作流程如下:

var ow = new OneWire(pin);
var device = ow.search()[0]; // 获取器件ID
if (device===undefined) print("No OneWire devices found");
ow.reset();
ow.select(device);
ow.write(42);
var result = ow.read()

对于DS18B20,官方已经提供了相关模块,可以直接调用,非常方便,具体操作如下:

var ow = new OneWire(B1);
var sensor = require("DS18B20").connect(ow);
setInterval(function() {
  console.log(sensor.getTemp());//1s打印一次温度值
}, 1000);

需要注意的是第一次获取的温度值是不正确的需要舍弃。如下图红框所示:

DS18B20支持四种温度转换分辨率,9、10、11、12位。设置状态在掉电情况下依旧会保存下来。

获取下当前温度分辨率,使用函数getRes(),得到结果为12;

sensor.getRes();

若要设置分辨率为9,则使用函数setResearch(res),其中res的值必须为9、10、11、12当中的一个;

sensor.setRes(9);

我们除了可以让测量值显示在终端上,还能让其在LCD上显示,代码如下:

//DS18B20
var ow = new OneWire(B1);
var sensor = require("DS18B20").connect(ow);
//Sharp Memory LCD
SPI1.setup({ sck:B3, mosi:B5, order: "lsb", baud: 1000000 });
var g = require("MemoryLCD").connect(SPI1, B4/*SCS*/, C12/*EXTCOMIN*/,128/*width*/, 128/*height*/);
//在LCD上显示温度
function showTemp(){
  g.clear();
  g.setFontVector(32);
  g.drawString("Temp.",0,0);
  g.drawLine(0,40,g.getWidth(),40);
  g.drawLine(0,41,g.getWidth(),41);
  g.drawLine(0,42,g.getWidth(),42);
  g.setFontVector(20);
  g.drawString(sensor.getTemp(),20,45);
  g.flip();
}
//1s更新频率
setInterval(showTemp, 1000);

画个带曲线的温度传感器,示例如下:

var ow = new OneWire(B1);
var temp = require("DS18B20").connect(ow);
clearInterval();
SPI1.setup({ sck:B3, mosi:B5, order: "lsb", baud: 1000000 });
var g = require("MemoryLCD").connect(SPI1, B4/*SCS*/, C12/*EXTCOMIN*/,128/*width*/, 128/*height*/);
var history = new Int8Array(g.getWidth());
function onTimer() {
  // 获取温度
  var t = temp.getTemp();
  for (var i=1;i<history.length;i++)
    history[i-1] = history[i];
  history[history.length-1] = t;
  // 函数,温度转化为lcd的y坐标
  var tempToY = function(t) { return 50-t; };
  // 画图
  g.clear();
  g.moveTo(0,tempToY(history[0]));
  for (i=1;i<history.length;i++)
    g.lineTo(i,tempToY(history[i]));
    g.setFontVector(10);
  g.drawString("Temp:",0,64);
  g.setFontVector(16);
  g.drawString(t,40,64);
  // 显示到LCD上
  g.flip();
}
setInterval(onTimer, 500);//500ms更新一次数据

【Espruino】NO.10 数字温度传感器DS18B20

时间: 2024-08-07 00:07:34

【Espruino】NO.10 数字温度传感器DS18B20的相关文章

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧

苹果iWatch或存多个型号 整合超过10种传感器

华尔街日报日前援引知情人士的话报道称,苹果正在计划推出一款拥有多个版本的智能手表,并会在今年秋天将其发布.据报道,苹果的这款设备将整合超过10种不同的传感器,其中包括用于追踪健康和健身数据的.据知情人士爆料,苹果希望去解决外界对于现有智能手表最大的批评,那就是这类设备的功能和智能手机并没有什么不同. 在上个月发布的新应用健康当中,苹果展现出了自己在健康和健身追踪方面的兴趣.这款应用可以将可穿戴设备收集到的数据集中在一起,但苹果目前并没有这样一款设备来体现该应用的能力.不过健康应用的出现也让外界更

Android基础入门教程——10.11 传感器专题(2)——方向传感器

Android基础入门教程--10.11 传感器专题(2)--方向传感器 标签(空格分隔): Android基础入门教程 本节引言: 在上一节中我们中我们对传感器的一些基本概念进行了学习,以及学习了使用传感器的套路, 本节给大家带来的传感器是方向传感器的用法,好的,开始本节内容~ 1.三维坐标系的概念: 在Android平台中,传感器框架通常是使用一个标准的三维坐标系来表示一个值的.以本节 要讲的方向传感器为例子,确定一个方向也需要一个三维坐标,毕竟我们的设备不可能永远 都是水平端着的吧,安卓给

Lesson01:W-A_51单片机实训板介绍(旧博客迁移)

一.开发板介绍 单片机实训板是以Atmel公司的AT89S52单片机为核心的实验板,主要资源包括以下部分: 1.输入单元--四个独立按键/十六个矩阵按键(通过短路帽跳线选择),一个PS2键盘/鼠标接口 2.输出单元--八位LED发光管/四位动态扫描数码管/1602液晶(共用P0口),蜂鸣器,继电器 3.存储单元--SPI串行存储器AT93C46,I2C串行存储器AT24C02 4.实时时钟--DS1302(SPI接口) 5.数字温度传感器--DS18B20(单总线接口) 6.串行ADC--TLC

Arduino传感器连载之温度测量篇

来源:http://www.hzhike.com/School/2016/201607/20160711100131.html 温度是我们经常接触到的物理量,能够被我们所直观的感受得到,例如天气凉了需要增添衣物,吃的食物太烫需要吹一吹,同时也需要对温度精确的测量,例如人类的正常体温是37.5℃,一个大气压下纯水沸腾时的温度是100℃,都需要我们去做实验来找出其中的科学.下面我们将详细讲解几种常用的温度传感器,并利用Arduino来实现温度的测量,包括热敏电阻.LM35.DS18B20.DHT11

DS18B20

DS18B20驱动 [ 2012-5-14 12:01:00 | By: 吴师傅 ]   14 推荐 一.概述 DS18B20是一种单总线数字温度传感器.測试温度范围-55℃-125℃,温度数据位可配置为9.10.11.12位,相应的刻度值分别为0.5℃.0.25℃.0.125℃.0.0625℃,相应的最长转换时间分别为93.75ms.187.5ms.375ms.750ms.出厂默认配置为12位数据,刻度值为0.0625℃,最长转换时间为750ms.从以上数据能够看出,DS18B20数据位越低.

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

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

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

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

「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验三十九:DS18B20单总线数字温度传感器模块 DS18B20 是世界第一片支持"一线总线"接口的温度传感器,