电子设计技术报告Word文件下载.docx
《电子设计技术报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子设计技术报告Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
温度和湿度采集模块采用DHT11模块,可以同时检测温度和湿度,温度用摄氏度表示,湿度用空气中实际水汽压与当时气温下的饱和水汽压之比的百分数表示;
无线传输模块采用ESP8266的无线WIFI模块。
2.2各模块具体实现
2.2.1控制器Arduino模块
Arduino是一款便捷灵活、方便上手的开源电子原型平台。
包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。
它构建于开放原始码simpleI/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。
主要包含两个主要的部分:
硬件部分是可以用来做电路连接的Arduino电路板;
另外一个则是ArduinoIDE,你的计算机中的程序开发环境。
你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。
我们采用Arduino模块是因为它具有很多优点:
1.跨平台ArduinoIDE可以在Windows、MacintoshOSX、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
2.简单清晰ArduinoIDE基于processingIDE开发。
对于初学者来说,极易掌握,同时有着足够的灵活性。
Arduino语言基于wiring语言开发,是对AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
3.开放性Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
4.发展迅速Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。
Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
2.2.2温湿度采集模块
温湿度采集模块我们采用DHT11模块。
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。
产品为4针单排引脚封装,连接方便。
图2DHT11与单片机的接线图
控制器Arduino模块读取DHT11的数据后通过无线WIFI网络传输至终端,并且根据读取的数值来判断是否开启电风扇。
当读取的温度值超过25摄氏度时,控制器Arduino模块则向电风扇发送开启命令;
当读取的湿度至超过60%时,控制器Arduino模块也向电风扇发送开启命令;
否则电风扇处于关闭状态。
2.2.3光强度采集模块
光强度采集模块我们采用GY-30模块。
GY-30模块是数字光强度检测模块,核心芯片采用ROHM原装BH1750FVI芯片。
BH1750FVI芯片是一种用于两线式串行总线(I2C总线)接口的数字型光强度传感器集成电路,该集成电路可以根据收集的光线强度数据来调整灯光的亮度,利用它的高分辨率可以探测较大范围的光强度变化(1~65535lx)。
GY-30模块供电电源为3~5V,光照度范围是0~65535lx,传感器内置16位A/D转换器直接数字输出。
方便的是,模块内部省略复杂的计算,省略标定,不区分环境光源,接近于视觉灵敏度的分光特性,可对广泛的亮度进行1lx的高精度测定。
图3GY-30模块引脚图
控制器Arduino模块读取GY-30的数据,根据读取的数值来判断是否开启LED灯。
当读取的光照强度值小于200时,控制器Arduino模块则向LED灯发送开启命令。
2.2.4无线传输模块
无线传输模块我们采用WIFI的ESP8266模块。
ESP8266是一款超低功耗的UART-WiFi透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi无线网络上,进行互联网或局域网通信,实现联网功能。
ESP8266封装方式多样,天线可支持板载PCB天线,IPEX接口和邮票孔接口三种形式;
ESP8266可广泛应用于智能电网、智能交通、智能家具、手持设备、工业控制等领域。
ESP8266硬件接口丰富,可支持UART,IIC,PWM,GPIO,ADC等,适用于各种物联网应用场合。
ESP8266模块支持STA/AP/STA+AP三种工作模式。
♦STA模式:
ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
♦AP模式:
ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
♦STA+AP模式:
两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
图4ESP8266模块引脚图
3.设计测试结果
综合以上内容,将各个模块连接到Arduino控制器上,并将每个模块实现的程序封装成函数,系统调用每个模块实现的函数。
将系统程序在ArduinoIDE上编译并上传至Arduino模块,即可达到本设计的要求。
4.部分模块实现程序
1.Arduino对温湿度模块控制程序:
#defineDHT11_PIN0
intfengshan=7;
//风扇接口
byteread_dht11_dat()
{
bytei=0;
byteresult=0;
for(i=0;
i<
8;
i++)
while(!
(PINC&
_BV(DHT11_PIN)));
delayMicroseconds(30);
if(PINC&
_BV(DHT11_PIN))
result|=(1<
<
(7-i));
while((PINC&
}
returnresult;
voidsetup()
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
pinMode(Buzzer,OUTPUT);
Serial.begin(9600);
Serial.println("
Ready"
);
voidloop()
bytedht11_dat[5];
bytedht11_in;
bytei;
PORTC&
=~_BV(DHT11_PIN);
delay(18);
PORTC|=_BV(DHT11_PIN);
delayMicroseconds(40);
DDRC&
dht11_in=PINC&
_BV(DHT11_PIN);
if(dht11_in)
Serial.println("
dht11startcondition1notmet"
return;
delayMicroseconds(80);
dht11_in=PINC&
if(!
dht11_in)
dht11startcondition2notmet"
return;
5;
i++)//获取40位温湿度数据
dht11_dat[i]=read_dht11_dat();
DDRC|=_BV(DHT11_PIN);
bytedht11_check_sum=dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
if(dht11_dat[4]!
=dht11_check_sum)//校验
DHT11checksumerror"
Serial.print("
Currenthumdity="
Serial.print(dht11_dat[0],DEC);
//显示湿度整数部分
."
Serial.print(dht11_dat[1],DEC);
//显示湿度小数部分
%"
temperature="
Serial.print(dht11_dat[2],DEC);
//显示温度整数部分
Serial.print(dht11_dat[3],DEC);
//显示温度小数部分
C"
if(dht11_dat[0]>
60)
digitalWrite(fengshan,HIGH);
else
digitalWrite(fengshan,LOW);
if(dht11_dat[2]<
26)
delay(2000);
2.Arduino对光强度模块控制程序:
#include<
Wire.h>
math.h>
intBH1750address=0x23;
bytebuff[2];
Wire.begin();
}
voidloop()
intj;
uint16_tval=0;
BH1750_Init(BH1750address);
delay(200);
if(2==BH1750_Read(BH1750address))
{
val=((buff[0]<
8)|buff[1])/1.2;
if(val<
200)
analogWrite(3,255);
else{analogWrite(3,LOW);
Serial.print(val,DEC);
[1x]"
delay(150);
intBH1750_Read(intaddress)
intj=0;
Wire.beginTransmission(address);
Wire.requestFrom(address,2);
while(Wire.available())
buff[j]=Wire.read();
j++;
Wire.endTransmission();
returnj;
voidBH1750_Init(intaddress)
Wire.write(0x10);