16459| 5
|
[Arduino技术课程(高中)] 第十六课智能家居初步——光控、温控模型实验 |
本帖最后由 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组。其原因在于初次接触复杂项目程序时,对程序语法 混淆。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed