LM35、DS18B20、三合一传感器
LM35、DS18B20、三合一传感器前几天的成都,就像蒸桑拿一样,出门都感觉自己像雪糕一样快化了。正巧身边有三种传感器,于是在空闲之余就分别用Air Quality Monitor(文中简称三合一传感器)、LM35、DS18B20传感器做了室内温度的测试。测试所需物品如下图图中所需物品的链接将会附于文末,可点击进入了解详情https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133508akpapaayaexb2f1c.jpg
LM35温度传感器https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133500mlxbjlplnuxppsbb.png
LM35是一种得到广泛使用的半导体温度传感器。其应用简单,有较好的线性度和较高的灵敏度。它可以随不同的温度变化产生不同的电压。LM35温度传感器电路连接图https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133501lx7w8m8cw8wtclu6.png室内环境温度为27℃(空调上的读数)。其测得的环境温度为27.34℃。(这是取了一个较平均的值,其温度范围基本是在27℃~28.2之间浮动)。因为室内空间较大,所以测得温度与实际温度有所差距。可能是随着空气的流动导致温度有所变化。
在咱们DF创客社区里的Arduino程序上是没有LCD显示的功能,在这里我加上LCD显示功能,虽然可以打开串口监视器,将波特率调整到9600,可以接收到传感器周围的具体温度,但不具备灵活性。让温度的读数显示在LCD上,可以更加直观的看见温度的读数。 LM35程序代码。
#include <Wire.h>
#include "DFRobot_RGBLCD.h"
DFRobot_RGBLCD lcd(16,2);//16 characters and 2 lines of show
void setup()
{
Serial.begin(9600);//Set Baud Rate to 9600 bps
lcd.init();
lcd.setRGB(0, 0, 255);
}
void loop()
{
uint16_t val;
double dat;
val=analogRead(A0);//Connect LM35 on Analog 0
dat = (double) val * (5/10.24);
Serial.print("Tep:"); //Display the temperature on Serial monitor
Serial.print(dat);
Serial.println("C");
delay(500);
//lcd.print("hello!");
//delay(1000);
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tep: ");
lcd.print(dat);
delay(1000);
// lcd.clear();
}
DS18B20温度传感器DS18B20传感器市面上最常见的温度传感器,它具有体积小,精度高。其连线也非常方便,经过封装后可以运用于多种场合,主要根据应用场合的不同而改变其外观,比如大棚测温,高炉水循环测温,锅炉测温,机房测温,洁净室测温,弹药库测温等各种非极限温度场合。DS18B20温度传感器电路连接图https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133454c6kmphjksszbj2bh.jpg
室内环境温度为27℃(空调上的读数)。其测得的环境温度为27.56℃。(这是取了一个较平均的值,其温度范围基本是在27.4℃~28.9之间浮动)。可能是随着空气的流动导致温度有所变化。https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133455y82gafzshjwlj4jj.jpg
读取温度程序代码段#include <OneWire.h>
#include <Wire.h>
#include "DFRobot_RGBLCD.h"
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
DFRobot_RGBLCD lcd(16,2);//16 characters and 2 lines of show
//Temperature chip i/o
OneWire ds(DS18S20_Pin);// on digital pin 2
void setup(void) {
Serial.begin(9600);
lcd.init();
lcd.setRGB(0, 0, 255);
}
void loop(void) {
float temperature = getTemp();
Serial.println(temperature);
delay(1000);
lcd.setCursor(0,0);
lcd.print("Tep: ");
lcd.print(temperature);
delay(1000);
delay(100); //just here to slow down the output so it is easier to read
}
float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius
byte data;
byte addr;
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr != 0x10 && addr != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data = ds.read();
}
ds.reset_search();
byte MSB = data;
byte LSB = data;
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
此段代码也是配合在LCD屏上显示温度。
大家看了上面这两款温度传感器的介绍,是不是觉得这个夏天还是有点看头呢。想必有很多朋友会觉得只能测温度玩玩不过瘾,那下面我们就再来一个较过瘾的传感器,它是一个可以同时监测空气PM2.5、PM10、甲醛浓度及温湿度的三合一传感器。正巧前两天朋友发了一份木板屋的设计文件,于是在淘宝上打了个样,做了一个环境检测房,如果大家对这个感兴趣,也是可以做一做的。做好环境屋后,可以检测一下自己居住的环境,当然想要检测数据和网上公布的数据一致的话,还需要到检测节点去,毕竟不在同一个地方,测试所得的数据,会有差距的。三合一传感器电路连接图
装配图木板屋和其它配件图https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133503d4oovofugsdfvqb8.jpg
装配图一https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133510zqodk0gd0ok6zggo.jpg
图二https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133510vjrbhg5nlplippvh.jpg
图三https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133511yzlc82r9irjvapij.jpg
图四https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133512wagdy8hz9494fdfl.jpg
图五https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133512pcuvtwk4wrcod114.jpg
在检测屋中,加了两块WS2812RGB LED灯,这样小房子看起来就比较温馨了。连接电路连接1https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133513jahbsb5zshbavfhl.jpg
电路连接2https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133509p6c06kwhgh416yyn.jpg
效果完成装配后,就准备上电进行检测了,下面是手机和检测的数据做的一个对比。https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133503s41srs7qsks11nrw.jpg
https://mc.dfrobot.com.cn/data/attachment/album/201708/10/133502g2l44smm521jsf5j.png
看完这些,有想做的朋友吗?想做就动起来吧:lol 顺便检测检测自己所居住的环境怎么样,是否超过了相关范围呢:O。 在热爆的天气里,我们可以用三合一的传感器测测周围环境的温湿度,如果您家刚装修不久,还可以用它测测是否甲醛超标等功能。用它来检测咱们周围的居住环境也是不错的选择呢。其
测试程序。#include <Wire.h>
#include "DFRobot_RGBLCD.h"
#include <Adafruit_NeoPixel.h>
char col;
char tempStr;
unsigned int PMSa = 0, FMHDSa = 0, TPSa = 0, HDSa = 0, PMSb = 0, FMHDSb = 0, TPSb = 0, HDSb = 0,
PMS = 0, FMHDS = 0, TPS = 0, HDS = 0, CR1 = 0, CR2 = 0;
unsigned int lcd_a = 0, lcd_b = 0, lcd_c = 0;
unsigned char buffer_RTT = {}; //The serial port receives the dataunsigned long last_lcd_time = 0, last_light_time = 0;#define PIN 8
#define NUMBER 2
DFRobot_RGBLCD lcd(16, 2);//RGB address; 16 characters and 2 lines of show
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMBER, PIN, NEO_GRB + NEO_KHZ800); //Lamp parameters
void setup()
{
Serial.begin(9600);
lcd.init();//Initialize LCD1602 RGB screen
strip.begin(); //Start the RGB light
lcd.setRGB(0, 255, 0); //Sets the initial backlight color of the screen
lcd.setCursor(0, 0 ); //Set the display from (0,0)
lcd.print("T:");//display "T:"
lcd.setCursor(9, 0 );
lcd.print("H:");
lcd.setCursor(0, 1 );
lcd.print("F:");
lcd.setCursor(9, 1 );
lcd.print("P:");
}
void loop()
{
lcd_a = random(256);//Read random values
delayMicroseconds(10);
lcd_b = random(256);
delayMicroseconds(10);
lcd_c = random(256);
if (millis() - last_lcd_time > 30000) //Change the display backlight every 3 seconds
{
lcd.setRGB(lcd_a, lcd_b, lcd_c); //Set the backlight color
last_lcd_time = millis();//Take system time
}
if (millis() - last_light_time > 500) //RGB lights bright colors
{
strip.setPixelColor(0, strip.Color( 255, 227, 132) ); //0, for the first RGB light; 255 for the R, 227 for the G, 132 for the B, can be adjusted
strip.setPixelColor(1, strip.Color( 255, 227, 132) );
strip.show();//RGB enable control, no such function, RGB light does not change state
last_light_time = millis();//Take system time
}
while (Serial.available() > 0) //Check whether there is serial data
{
for (int i = 0; i < 40; i++) //Read serial data
{
col = Serial.read();
buffer_RTT = (char)col;
delay(2);
}
Serial.flush();
//lcd.clear();
CR1 = (buffer_RTT << 8) + buffer_RTT;
CR2 = 0;
for (int i = 0; i < 38; i++)
CR2 += buffer_RTT;
if (CR1 == CR2) //check
{
PMSa = buffer_RTT; //Read PM2.5 high octet data
PMSb = buffer_RTT; //Read PM2.5 low octet data
PMS = (PMSa << 8) + PMSb; //PM2.5 data
FMHDSa = buffer_RTT; //Read the high octet data
FMHDSb = buffer_RTT; //Read the low octet data
FMHDS = (FMHDSa << 8) + FMHDSb; //Formaldehyde data
TPSa = buffer_RTT; //Read the high octet data
TPSb = buffer_RTT; //Read the low temperature 8-bit data
TPS = (TPSa << 8) + TPSb; //Temperature data
HDSa = buffer_RTT; //Read the humidity high octet data
HDSb = buffer_RTT; //Read low humidity eight bits of data
HDS = (HDSa << 8) + HDSb; //Humidity data
}
else
{
PMS = 0;
FMHDS = 0;
TPS = 0;
HDS = 0;
}
}
lcd.setCursor(2, 0 );
sprintf(tempStr,"%d%d.%d",TPS/100,(TPS/10)%10,TPS%10); //display temperature
lcd.print(tempStr);
lcd.write(0xdf); //display"°"
lcd.print('C'); //display"C"
lcd.setCursor(11, 0 );
sprintf(tempStr,"%d%d.%d",HDS/100,(HDS/10)%10,HDS%10); //display Humidity
lcd.print(tempStr);
lcd.print('%'); //display"%"
lcd.setCursor(2, 1 );
lcd.print((float)FMHDS/1000);//display formaldehyde in mg / m³ mg per cubic meter
lcd.print((int)FMHDS%10);
lcd.setCursor(11, 1 );
sprintf(tempStr,"%d%d%d",PMS/100,(PMS/10)%10,PMS%10);//displayDisplay PM2.5, ten, hundred units ug / m³ micrograms per cubic meter
lcd.print(tempStr);
}
以上三种传感器采用的主控板都是完全兼容Arduino UNO R3版本的DFRduino UNO R3,并使用更强大的ATmega16U2替代了8U2,以此获得了更快的转换速度和更大内存,让UNO R3版本在Linux或者Mac下不需要安装任何驱动程序。如果您对以上的温度传感器感兴趣,可以点击下面的链接进一步了解。注意:1、在使用DFRduino UNO R3主控板时,需要Arduino 1.0的驱动文件夹。我们已经测试过R3能够在老版本的IDE上编程。然而,在一台电脑上第一次运行R3,你将需要Arduino 1.0的驱动文件。如果你对新版本IDE变化感兴趣,请查看Arduino官网 Arduino 1.0的版本记录。2、温湿度、甲醛、PM三合一传感器串口与DFRduinoUNO R3主板连接,这样就需要先把程序下载在UNO主控板中,再进行装配。如果想方便自己再加一些传感器进行调试,也可以使用虚拟串口,但这样需要自己接线,不能直接通过配件插在DFRduino UNO R3板上。如果想直插的话,就需要有DFRobot Leonardo& Xbee R3这种下载串口与D0、D1不是同一个的主控板。传感器LM35温度传感器DS18B20温度传感器三合一温度传感器 电源7.4V 2500MA 锂电池9V/1000mA开关电源适配器主控板UNO R3DFRduino UNO R3(完全兼容Arduino UNO R3版本)扩展板IO 传感器扩展板 V7.1 显示屏GravityLCD1602 RGB Backlight ModuleRGB灯WS2812 RGB LED Module
很用心 还做了个房子
图片上传的好清楚!是什么工具压缩的? 好厉害
! luna 发表于 2017-8-11 17:59
图片上传的好清楚!是什么工具压缩的?
先上传到我的相册,然后再我的相册里选择需要的图片。 我去 正在找甲醛三合一 的相关资料 这就来了谢谢 楼主分享 本帖最后由 川山甲的壳 于 2017-8-21 09:33 编辑
昶平 发表于 2017-8-15 13:06
我去 正在找甲醛三合一 的相关资料 这就来了谢谢 楼主分享
不谢,随便用:lol:$ 厉害了 顶一个 厉害了 顶一个 厉害了,66666666666666
页:
[1]