查看: 8927|回复: 5

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

[复制链接]
本帖最后由 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
家居.jpg
图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双电平方案
QQ图片20140519104417.jpg
图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。
开启风扇.jpg

图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  NPC

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

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

使用道具 举报

hnyzcj  超级版主
 楼主|

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

这个案例是前面几个案例的综合,对于分部分案例,前面有。
回复 支持 反对

使用道具 举报

Rockets  NPC

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

了解了,那试验结果说明还是太难吗?
回复 支持 反对

使用道具 举报

hnyzcj  超级版主
 楼主|

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

难和容易是相对的,有的学生还是能做出来的。
回复 支持 反对

使用道具 举报

yizilong  初级技师

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

请问BMP085气压计库在哪可以下载呀?:)
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail