hnyzcj 发表于 2014-5-19 10:45:42

第十六课智能家居初步——光控、温控模型实验

本帖最后由 hnyzcj 于 2014-11-23 13:00 编辑

智能家居初步——光控、温控模型实验作者:陈杰教学目标知识与技能:1.    使用1602B液晶屏、BMP180传感器、光敏电阻、风扇、LED、电机驱动板、Arduino 构建智能家居系统初步。2.    掌握BMP180的正确连线及库文件的调用,通过BMP180感知气压、温度值,。3.    计算获得的气压值和温度值,在液晶屏上显示出来。过程与方法:1.分功能区域独立连线,养成良好的连线习惯。2.测试程序,查看实验结果,并能根据结果排查错误原因(连线、程序)情感态度价值观:    构建实际模型,联系生活、创意设计、普及应用。教学重点:掌握BMP180传感器正确的物理连线,并与其它电气元件合理使用主控板上的插口。教学难点:仔细正确完成该控制系统的物理电路连线。实验器材:Arduino主控板、L298P电机驱动板、1602B、电机风扇、光敏电阻、LED、220欧电阻、10K欧电阻、面包板、导线若干、Arduino Ide 1.04【教学过程】1.情景引入前面的课程中我们已经学习了不少东西,从最初的LED、电阻到现在使用的各种类型的传感器,电机等等。大家可能有些迫不及待,我们能不能用这些东西做个复杂的项目呢?那么今天给大家介绍一个稍微复杂的项目。智能家居初步——光控温控实验模型。如图1
图1首先我们对该项目的功能分析如下:1.   可以实时感知当前的气压、温度值,并在液晶屏上显示出来。2.   随着光线强弱的变化,室内LED灯随之变化,当光线强时,灯灭;光线弱时,灯亮。3.   温度如果超过27摄氏度,风扇开启对室内进行降温;低于27度停止工作。本课所需器材为:Arduino主控板、L298P电机驱动板、1602B液晶屏、BMP180传感器、光敏电阻、电机风扇、LED、220欧电阻、10K欧电阻、面包板、导线若干设计意图:案例引入,器材准备。2.新知讲授对于今天的模型中所使用到的器材,只有BMP180大气压力模块传感器是新东西,其他的器件都是前面课程内容中已经介绍过的,如果你已经忘记记得看看前面的课程内容吧。先来看看BMP180大气压力模块传感器吧。(1.)认识BMP180大气压力模块BMP180大气压传感器是一款廉价的精密气压、温度传感器,使用I2C通讯协议,使用方便,arduino驱动方案推荐使用BMP085驱动库 大气压测量传感器主要有两种应用环境,一种是测量高度,我们从海平面上山的情况下,空气压力会不断减小,这意味着我们测量气压的变化就能确定我们的高度。另外就是可以预测天气,气象上经常会说的“压力系统”就是气压。其相关电气指标如下所示。压力传感器范围:300-1100hPa(对应海拔9000米 至 -500米)分辨率:0.03hpa/0.25米温度传感器范围:-40℃ +85℃ ±2℃误差值I2C数据接口3.3V/5V双电平方案
图2使用注意:由于BMP180采用的I2C数据接口方式的传感器,而不同Arduino主控板所提供的I2C是不同的,所以各位在使用该模块时一定要弄清楚后,再接线哦。我可是曾经为此纠结了很长时间哦!(2.)调用BMP180驱动库BMP180的驱动库并不是arduinoIDE内置的,所以我们需要先下载驱动,下载库文件并且解压缩释放到<你的arduino主目录>/libraries/下,重新启动arduino IDE即可正常调用此库。(注意BMP180的驱动库是以BMP085来代替的,大家不要有什么误解哦!)下载地址:程序调用驱动库,在IDE代码窗口程序(3.)连接线路本实验的按功能模块我们可以把它划分为三路功能区域:显示区域、光控区域、温控区域。显示功能区域主要涉及了液晶屏,在前面课程已经介绍了,忘记的可以自己回头再复习一下参看案例15液晶屏。光控区域连线请参看案例12光敏电阻。温控区域涉及了BMP180和电机风扇,电机风扇的电路连接主要正负极不要接反哦,否则你的风扇就是对后面吹风。BMP180接线一定要注意你的主控板,不同的主控板接口是不同的。本次实验使用的是OCROBOT MANGO II板,其I2C 接口是A4 A5,其他如2560 或其它板请参考主板标示连接。BMP180连线方式为:VCC——+5V控制板,GND——GND控制板,SDA——A4,SCL——A5。该系统全部图3。

图3
设计意图:介绍Arduino物理电路连接,为后面正确实验效果奠定基础,提示要点避免错误接线。
(5.)烧录程序
程序代码如下:
/*======通用I2C驱动库调用======*/   
#include <Wire.h>                     
/*========BMP085气压计库调用=====*/   
#include <Adafruit_BMP085.h>            
Adafruit_BMP085 bmp;                     
/*==========LCD库调用 =======*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 10, 5, 4, 6, 2); //定义传输IO口,可根据实际情况调整IO口
int a =100;
void setup() {
Serial.begin(9600);;
lcd.begin(16, 2);         // 定义显示屏类型,目前定义为1602 每行16个字符共2行
bmp.begin();               //初始化气压计
pinMode(13,OUTPUT);
pinMode(11,OUTPUT);
pinMode(8,OUTPUT);
pinMode(12,OUTPUT);
pinMode(3,OUTPUT);
pinMode(9,OUTPUT);
pinMode(17,OUTPUT);
pinMode(18,OUTPUT);
pinMode(19,OUTPUT);
}

void loop() {
lcd.clear();//LCD清空屏幕

/*=====数据采集=====*/
float temp = bmp.readTemperature();    //读取温度数据 (BMP180)
long pa = bmp.readPressure();          //读取气压数据 (BMP180)
float hpa = pa /100.0 ;                //将Pa换算成hPa


/*=====显示内容=====*/      
lcd.print("Atm:");   
lcd.print(hpa);
lcd.print("hPa");   //显示第一行内容,当前气压值
lcd.setCursor(0, 1);         //换行到第二行开始位置
lcd.print("TEMP:");      //显示第二行内容,当前温度值
lcd.print(temp,1);       //保留温度的1位有效小数
lcd.print("C");
delay(1000);   //控制屏幕刷新速度,每10秒跟新一次
if (temp>22)   //低温区的温度值设置、以及led显示
{

digitalWrite(8, LOW);       //松开电机A的制动
digitalWrite(11, HIGH);      //采用全功率输出
digitalWrite(13, HIGH);   //设置方向为正向
   }
else               
{
digitalWrite(8,HIGH);       //松开电机A的制动
digitalWrite(11,LOW);      //采用全功率输出
digitalWrite(13,LOW);   //设置方向为正向
}

int n =analogRead(A3);            //读取模拟口A0数值
Serial.println(n);
if (n<= a )//对光线强度进行判断,如果比我们的预设值大就点亮LED否则就关闭
{ digitalWrite(3,HIGH);   
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
    }
else
if (n<= a+100 )//对光线强度进行判断,如果比我们的预设值大就点亮LED否则就关闭
{
digitalWrite(3,HIGH);   
digitalWrite(9,HIGH);
digitalWrite(12,LOW);
//设置方向为正向
}
else

if (n<=a+200)
{
digitalWrite(3,HIGH);   
digitalWrite(9,LOW);
digitalWrite(12,LOW);
}
else
{
   digitalWrite(3,LOW);   
digitalWrite(9,LOW);
digitalWrite(12,LOW);   //设置方向为正向
}
}
将上述代码复制到IDE窗口中,先编译,如果无误后,再上传烧录至控制板中。完成后可以测试实验结果。

三.课堂练习
师:
1.找个2560的主控板,来连下BMP180,找找它的SDA和SCL接口在什么地方。
2.本实验中我们使用的LED、电机风扇都是小功率的电机,和现实生活还有差距。如果我想使用Arduino控制家用电器的电灯,风扇……如何解决?

四.学习总结
1.学习使用BMP180感测当前气压值和温度值。
2.通过液晶屏、电机风扇与BMP180结合使之成为一个闭环自动控制系统
3.对于复杂项目的连线,采用分区连线的方式。



五、课后反馈
1.本项目因为连线较为复杂,学生完成效率不高,究其原因,很大部分在于连线上的错误,虽然在课上提示学生按功能区域分开连线,但学生出错率还是很高。
2.程序的错误,本次实验的程序,我没有事先给学生,而是让学生通过前面课程中的程序进行自己修改编写。结果编译通过的只有1组。其原因在于初次接触复杂项目程序时,对程序语法混淆。

Rockets 发表于 2014-5-19 18:06:28

是否可以接玩一部分线,完成一部分的程序,阶段性的调试和实际情况比较像,另外也能有成就感。

hnyzcj 发表于 2014-5-19 18:13:09

这个案例是前面几个案例的综合,对于分部分案例,前面有。

Rockets 发表于 2014-5-22 17:49:46

了解了,那试验结果说明还是太难吗?

hnyzcj 发表于 2014-5-23 09:20:03

难和容易是相对的,有的学生还是能做出来的。

yizilong 发表于 2014-9-6 20:10:41

请问BMP085气压计库在哪可以下载呀?:)
页: [1]
查看完整版本: 第十六课智能家居初步——光控、温控模型实验