嵌入式期末大作业——家用智能晾衣杆

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)手动切换

当点击切换按钮后,程序将进入到手动控制模式中,同时将晾衣杆收回,此时晾衣杆将不再检测天气状况:

在这里插入图片描述

当点击退出按钮后,程序将返回自动感应模式中,此时晾衣杆将继续检测天气状况。

六、系统总结

=======================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值