嵌入式期末大作业——家用智能晾衣杆
目录
- 嵌入式期末大作业——家用智能晾衣杆
- 前言
- 一、项目介绍
- 1.项目背景
- 2.项目构思
- 二、系统设计
- 1.系统概述
- 2.设计思路
- 3.设计草图
- 三、硬件设计
- 1.硬件模块介绍
- 2.硬件系统的Fritzing模型图
- 四、软件设计
- 1.晾衣杆自动感应
- 2.晾衣杆手动切换
- 3. 天气预报
- 五、使用说明
- 1.实物图展示
- 2.操作流程
- 六、系统总结
前言
昨天早上我的物联网大作业也成功验收了。所以从昨天开始,我大学四年与之相关的课程到此结束。
从数字逻辑到嵌入式再到物联网,每段历程都应该记录一下吧=_=
所以今天腾空把上学期的期末大作业给做一个记录
老样子,实验报告和代码等放文末自取吧
废话不多说,正文开始!
一、项目介绍
1.项目背景
随着我国社会经济水平的发展,当前人们的生活逐渐追求个性化、自动化,对家用器件要求的档次越来越高,生活家居人性化、智能化的要求使控制技术在智能家居电子产品中得到了广泛应用,它不仅优化了人们的生活方式和居住环境,而且方便人们有效地安排时间和节约各种能源。伴随着高智能家居的快速发展,晾衣工具的智能化发展明显落后于其他家用器具智能化发展,现在已经引起社会的较大关注。
当下固定且单一的晾衣杆,无法对天气和其他外界因素做出反应。对于现在城市中的大多数人来说,每天的工作压力巨大,白天的时间几乎都不在家,当天气变化时不能及时把衣服收回和晒出,对城市生活造成较大不便。
设计背景:
2.项目构思
设计开发一种能够自动感应天气变化和手动控制晾衣杆的智能晾衣杆。晾衣杆可以选择自动模式和手动模式:
自动模式下,晾衣杆可以感应天气的变化来进行晾衣,雨天时,自动收回,晴天时,自动晒出;
手动模式下,停止晾衣杆自动检测,人们可以通过按钮来控制衣杆。
二、系统设计
1.系统概述
本项目旨在基于Arduino和树莓派,模拟开发一个简易的家用智能晾衣杆。在家用智能晾衣杆中,用户可以根据自身的需要,切换手动和自动两个模式。首先是自动模式下,在自动模式中,用户无需对晾衣杆进行操作。晾衣杆可以根据对当前光照的强度进行检测,来判断外边是否天气晴朗。同时,晾衣杆将检测外界的湿度,来检测外界是否下雨。
总结四大状况如下:
1.当外界光照亮,且没有下雨时,晾衣杆将会自动晒出;
2.当外界光照亮,但是下雨了,晾衣杆将会自动收回;
3.当外界光照暗,但是没下雨时,晾衣杆将会收回;
4.当外界光照暗,同时下雨了,晾衣杆将会收回;
在手动模式下,晾衣杆不再自动感应外界状况。用户可以通过按钮来使晾衣杆晒出和收回。
同时,在个人小屋中,增设了天气预报功能,显示屏将会把最近的天气实时显示出来,来方便用户进行判断。
综上,本系统的主要功能是:
1.晾衣杆自动感应天气
2.晾衣杆手动控制
3.天气预报
2.设计思路
(1)家用智能晾衣杆软硬件设计:
(2)家用智能晾衣杆流程图:
3.设计草图
房屋模型屋顶设计图
房屋模型大体设计图
衣物设计图
三、硬件设计
1.硬件模块介绍
(1)SSD1306 OLED 显示模块:
端口连接:
功能:用于显示天气状况和风力大小。
(2)光敏传感器模块:
端口连接:
功能:用于检测房屋外光线强度,来决定晾衣杆的收回和晒出。
(3)雨滴传感器模块:
端口连接:
功能:用于检测房屋外是否下雨,来决定晾衣杆的收回和晒出。
(4)按钮:
连接:通过检测输出引脚的电压来检测线路连接和断开。
功能:用于切换晾衣杆的工作模式和控制晾衣杆的晒出和收回。
(5)舵机:
端口连接:
功能:用于控制晾衣杆的转动。
2.硬件系统的Fritzing模型图
四、软件设计
软件设计对应系统主要的3个功能进行设计。分别是:晾衣杆自动感应,晾衣杆手动切换和天气预报。
1.晾衣杆自动感应
利用光敏传感器和雨滴传感器来检测外界光照和湿度。当外界光照亮度达标,并且没有下雨时,程序会控制舵机旋转,从而使晾衣杆晒出。
代码实现:
设置变量L表示检测亮度,变量R表示检测雨滴。当外界亮度超过160且雨滴值为0时,模拟了晴天下天黑的情况,晾衣杆自动收衣服;
pinMode(A0,INPUT);
pinMode(pinBtn,INPUT);
pinMode(A1,INPUT);
pinMode(pinBtn2,INPUT);
int L = analogRead(A0); //L表示亮度
int rainfall = analogRead(A1); //降水量
L和rainfall接收亮度和降水量信息。
#include <Servo.h>
Servo yj;
Servo是一个舵机驱动库,可以创建一个舵机对象。
yj.attach(7); //舵机7号引脚
attach(pin)方法可以绑定舵机和引脚。
if(L>160 || rainfall <= 40){
yj.write(15); //天黑收衣服(舵机转到0度)
}
else{
yj.write(105); //天亮晒衣服(舵机转到90度)
}
判断亮度和降水量后,write(tangle)方法可以将舵机旋转到需要的角度。
2.晾衣杆手动切换
利用按钮来实现退出和进入循环,从而实现自动和手动的切换。
代码实现:
tsLastReport变量实现每一秒中对心率和血氧进行一次采样,使用到了MAX30100Lib库中PulseOximeter类实例对象的getHeartRate和getSpo2方法分别获取心率和血氧数据。
if(digitalRead(pinBtn)==HIGH){
yj.write(15); //强制收回
delay(1000);
while(1){
if(digitalRead(pinBtn2)==HIGH){ //再次按下脱离强制收回
break;
}
}
当强制收回按钮按下后,自动收回,并进入循环。
取消收回按钮后,根据环境自动调节舵机。
3. 天气预报
Python:
requests:
此处的respsonse=requests.get(url)方法,可以从url的目标网址得到一个响应,用result=response.json()的方法可以将json格式的数据转换成字典,最后用daily提取出需要的信息,url的接口可以参看心知天气的API。
serial:
serial是python的串口通讯库。
其中ser = serial.Serial(‘/dev/ttyACM0’,9600)查看树莓派接口得知串口为‘/dev/ttyACM0’,并设置传输速率为9600。ser.write(string),该方法可以向串口传递字符串数据,但接收时是单字节的,需要在arduino循环相加。
Arduino:
<Adafruit_SSD1306.h>:
该库依赖于<SPI.h><Wire.h><Adafruit_GFX.h>,将他们导入后,设置屏幕的主从关系,片选信号和数据,时钟信号等引脚后,就设置好屏幕的驱动。
初始化屏幕
使用全局变量weather数组提取出字符串里的天气信息数据格式为
[a:b :c:d:e:f:],其中a、b和d、e为今天和明天的日夜间天气,c、f为风速等级。
天气对应的接口对应心知天气的天气图,可以下载后:调整尺寸->调整透明度->用画图工具保存为单色位图->提取出点阵信息(如我用的zimoV2.2软件),将点阵信息,存到数组里,根据weather的信息,调用display.drawBitmap()方法就能打印出对应的天气了。
display.clearDisplay()清楚屏幕缓存的信息;
display.setTextSize(uint8_t s)设置字体大小s;
display.setTextColor(WHITE)设置字体颜色;
display.setCursor(uint8_t x,uint8_t y),设置光标位置,以左上角为(0,0);
display.println(String str),打印字符串str;
drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color),在(x,y)处作图,bitmap为static const unsigned char PROGMEM数组的格式;
display.display()方法会把内容推到显示屏上。
五、使用说明
1.实物图展示
(1)模型正面图
(2)模型背面图
(3)模型内部图
2.操作流程
(1)天气预报
如图所示,天气预报信息将会显示在OLED屏上。当树莓派启动时,将会显示开机界面。
此时树莓派开始请求天气数据,显示屏显示“Please Wait”
当树莓派成功请求到数据后,将传给Arduino,并实时显示和更新数据。显示的数据包括今天和明天中,日间和夜间的天气状况。
(2)自动感应
在自动感应功能下,晾衣杆将会根据天气来决定晒出和收回。
当外界光线状况好,且没有下雨时,晾衣杆将晒出:
当外界光线状况差,晾衣杆将收回:
当外界光线状况好,但是降雨量达到标准后,晾衣杆将收回:
当外界光线好,同时降雨量没有达到标准时,晾衣杆暂时不收回:
(3)手动切换
当点击切换按钮后,程序将进入到手动控制模式中,同时将晾衣杆收回,此时晾衣杆将不再检测天气状况:
当点击退出按钮后,程序将返回自动感应模式中,此时晾衣杆将继续检测天气状况。
六、系统总结
系统优点:
完全实现了晾衣杆自动和手动两种模式的运行,实现了晾衣杆智能化,并且代码上优化了不同模块之间的衔接,使得模型响应速度快,准确度高。
系统缺点:
系对天气的检测量种类少,在对天气感应的灵敏度和准确度上有待提高。在arduino上获得的天气数据和舵机的转动不能统一,即不能有效利用系统内的信息。
改进想法:
加入更多的器件来提高模型对天气的预计准确度,并且设计吹干和伸缩的功能,来提高用户体验感。