查看“温度传感器”的源代码
←
温度传感器
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== '''目的''' == 本教程将教大家使用DHT11温湿度传感器,结果通过虚拟USB串口打印显示出来。DHT11温湿度传感器是一款含有以校准数字信号输出的温湿度符合型传感器。 == '''设备''' == *'''[[ Microduino-CoreSTM32]]''' Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。 *其他硬件设备 **面包板跳线 一盒 **面包板 一块 **DHT11温湿度传感器 一个 **USB数据连接线 一根 **1K欧姆电阻 1 个 [[File:sensor_1.jpg|600px|center|thumb]] == '''原理''' == DHT11温湿度传感器外形以及引脚功能如下图所示,其中N.C.悬空。 [[File:sensor_2.jpg|600px|center|thumb]] '''DHT11数字温湿度传感器技术参数''' **供电电压: 3.3~5.5V DC **全量程标定,单线数字输出; **湿度测量范围:20%~90%RH(0-50℃温度补偿); **温度测量范围:0~+50℃; **湿度测量精度:±5.0%RH **温度测量精度:±2.0℃ **响应时间:<5s; **低功耗 ''' 数据传输格式 ''' DHT11的DATA线用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分。 *一次完整的数据传输为40bit,高位先出。 :*8bit湿度整数数据+8bit湿度小数数据 :*+8bi温度整数数据+8bit温度小数数据 :* +8bit校验和 数据传送正确时校验和数据等于“ 8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据” 所得结果的末8位。 [[File:sensor_3.jpg|600px|center|thumb]] 总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。 [[File:sensor_4.jpg|600px|center|thumb]] 总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。 [[File:sensor_5_1.jpg|600px|center|thumb]] [[File:sensor_5_2.jpg|600px|center|thumb]] 本教程的实验原理图如下图所示: [[File:sensor_6.jpg|600px|center|thumb]] == '''程序''' == <source lang="cpp"> #define DHT_PIN 2 // define the data exchange pin byte ERROR; //ERROR flag byte dht_dat[5]; //define a receive data buffer //the first byte is the mantissa of the humidity //the second byte is the fraction of the humidity //the third byte is the mantissa of the temperature //the fourth byte is the fraction of the temperature //the fifth byte is a checksum byte void setup() { pinMode(DHT_PIN,OUTPUT); digitalWrite(DHT_PIN,HIGH); //idle state is high of the data exchange pin } void loop() { ReadDHT(); //read the value of the humidity and the temperature switch(ERROR) { case 0: // normal condition SerialUSB.print("Current humidity = "); SerialUSB.print(dht_dat[0],DEC); SerialUSB.print("."); SerialUSB.print(dht_dat[1],DEC); SerialUSB.print(" % "); SerialUSB.print("temperature = "); SerialUSB.print(dht_dat[2],DEC); SerialUSB.print("."); SerialUSB.print(dht_dat[3],DEC); SerialUSB.println(" C"); break; case 1: SerialUSB.println("Error 1:DHT start condition 1 not met."); break; case 2: SerialUSB.println("Error 2:DHT start condition 2 not met."); break; case 3: SerialUSB.println("Error 3:DHT check error."); break; default: SerialUSB.println("Error 3:Unrecongnized code error."); break; } delay(3000); // Wait for 1 second (1000 milliseconds) } void ReadDHT() //initialize the DHT11 sensor { ERROR=0; byte dht_in; byte i; digitalWrite(DHT_PIN,LOW); delay(20); digitalWrite(DHT_PIN,HIGH); delayMicroseconds(40); pinMode(DHT_PIN,INPUT); dht_in=digitalRead(DHT_PIN); if(dht_in) { ERROR=1; return ; } delayMicroseconds(80); dht_in=digitalRead(DHT_PIN); if(!dht_in) { ERROR=2; return ; } delayMicroseconds(80); for(i=0;i<5;i++) { dht_dat[i]=read_dht_dat(); } pinMode(DHT_PIN,OUTPUT); digitalWrite(DHT_PIN,HIGH); byte dht_check_sum=dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3]; if(dht_dat[4]!=dht_check_sum) { ERROR=3; } } byte read_dht_dat() // read one byte data { byte i=0; byte result=0; for(i=0;i<8;i++) { while(digitalRead(DHT_PIN)==LOW) ; delayMicroseconds(30); if(digitalRead(DHT_PIN)==HIGH) { result|=(1<<(7-i));} while(digitalRead(DHT_PIN)==HIGH); } return result; } </source> '''程序说明:''' *ReadDHT()是初始化DHT11温湿度传感器函数,并读取了包含温湿度信息的5字节数据。该函数有点难理解,大家可以结合原理里面数据传输的格式来理解。 *read_dht_dat()是实际读取数据的函数,通过50us低电平后高电平点平的时间来判断数据是0还是1。 == '''调试''' == *步骤一:根据实验原理图连接好实物图。 [[File:sensor_7.jpg|600px|center|thumb]] *步骤二:复制程序到Maple IDE中编译程序。 *步骤三:下载程序,打开串口监视界面,观察数据。 *步骤四:在DHT11传感器附近增加湿度和提高温度,观察数据的变化。 == '''结果''' == 串口监视界面显示结果如下图所示。在给DHT11传感器附近加湿、升温后湿度和温度值明显增加。 [[File:sensor_8.jpg|600px|center|thumb]] == '''视频''' ==
返回至
温度传感器
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息