基于【立创·梁山派开发板】智能窗帘项目 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

专业版 基于【立创·梁山派开发板】智能窗帘项目

简介:通过GD32设计一个智能窗帘项目

开源协议: Public Domain

(未经作者授权,禁止转载)

已参加:立创·开发板电子设计训练营

创建时间: 2023-08-21 21:33:47
更新时间: 2023-10-12 11:15:54
描述
# 设计要求与指标 **技术要求** (1)雨滴传感器模块:用于检测雨滴; (2)光线强度传感器模块:用于检测光线强度; (3)红外接收模块,用于遥控控制; (4)步进电机模块:用于窗户窗帘驱动。 **技术指标** (1)可以通过红外遥控与语音设置是否打开自动模式; (2)在自动模式下,当光照强度很高时,自动展开窗帘;当光照强度很低时,自动关闭窗帘; (3)在自动模式下,当检测到大量雨滴时,自动展开窗帘,此优先级比光照检测高; (4)在任何时候,可以通过红外遥控或语音命令展开与关闭窗帘,并关闭自动模式; (5)主控芯片接收到数据后,驱动电机运转,现实智能窗帘窗户系统。 # 一、雨滴与光照检测 1. ## 雨滴检测原理 雨滴传感器常见的工作原理是通过检测水滴的导电性来判断是否下雨。它是利用两个电极之间的电导性变化来测量水滴的存在。这两个电极之间会有一个空气间隙,正常状态下是断路状态。当水滴接触到电极上时,水滴的导电性会导致电流通过水滴形成电流回路,从而改变电极之间的电阻值。通过测量电阻值的变化,就可以判断是否有水滴存在。 2. ## 雨滴传感器接口设计 雨滴传感器常见的工作原理是通过检测水滴的导电性来判断是否下雨。它是利用两个电极之间的电导性变化来测量水滴的存在。这两个电极之间会有一个空气间隙,正常状态下是断路状态。当水滴接触到电极上时,水滴的导电性会导致电流通过水滴形成电流回路,从而改变电极之间的电阻值。通过测量电阻值的变化,就可以判断是否有水滴存在。 当有雨滴时,雨滴传感器因为雨滴导电,导致两个电极短路,相当于按键按下。 因此我们可以测量雨滴传感器的电压变化就可以知道是否有雨滴。 扩展板雨滴传感器接口如下: 我们需要给雨滴传感器的一极接正,一极接负,才可以产生回路测量电压变化。但是当传感器的雨滴过多时会导致两极彻底短路。为了防止雨滴传感器彻底短路,需要增加一个电阻R1作为负载,防止3.3V直接接入GND,形成电源短路。 3. ## 光照检测原理 扩展板的光照检测功能是通过光敏电阻进行识别。光敏电阻是一种特殊的电阻器,它随着光照强度的升高,电阻值会迅速降低,其在无光照时,几乎呈高阻状态,因此暗时电阻很大。 市场上最常见的用于检测光照的模块就是以光敏电阻作为主要识别器件。它的原理图见右方,原理图中的U2.1是一个电压比较器。当电压比较器的2脚电压大于3脚电压时,1脚输出低电平;当电压比较器的2脚电压小于3脚电压时,1脚输出高电平;R3为光敏电阻,当光敏电阻周围环境很亮时,其阻值会变小,**AO**的电压也会变小;当光敏电阻周围环境很暗时,其阻值会变大,**AO**的电压也会变大;因此通过调整R4滑动电阻的阻值,就可以调整DO输出的灵敏度。 4. ## 光照传感器接口设计 我们将模块原理图简化,直接使用一个分压电阻加上一个光敏电阻即可。 # 二、步进电机驱动 1. ## 步进电机介绍 步进电机是将电脉冲信号,转变为角位移或线位移的开环控制电机,又称为脉冲电机。步进电机组成最主要的就是转子和定子部分。 * 定子,就是由电流控制磁场方向,通电时就会产生磁力; * 转子,被定子环绕在中间受定子磁场变化产生转动(下方示意图中转动的指针) 通过给定子通电,产生磁力,将转子吸附过来,那转子就会转一小格;通过给定子连续的通电,就可以实现让转子转动。 在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。当步进驱动器**接收到一个脉冲信号**时,它就可以驱动步进电机按设定的方向**转动一个固定的角度**。因此: * 可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的; * 可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的; * 可以通过控制绕组通电顺序,达到控制电机正反转的目的。 2. ## 步进电机的转动 我们采购的是二相四线式步进电机,二相指的是有两个线圈,四线指的是每一个线圈有两根线。其中A+与A-为一相,B+与B-为一相 要让它转动起来,需要给线圈连续通电。而转动方式有四拍方式、八拍方式。 四拍方式的转动顺序:【A+】->【B+】->【A-】->【B-】。 八拍方式的转动顺序:【A+】->【A+B+】->【B+】->【B+A-】->【A-】->【A-B-】->【B-】->【B-A+】。 使用磁性电机,电流越大,磁力越强。虽然直接使用开发板的GPIO去控制步进电机也可以,但是会有损坏开发板引脚的风险。因此我们需要考虑一个合适的步进电机驱动。 3. ## 步进电机硬件驱动设计 案例使用L9110S作为步进电机的驱动,在其数据手册中有应用电路。我们根据数据手册的说明,进行设计即可。 其中BAK控制X4引脚的电平输出;FOR控制X3引脚的电平输出。图中的电机A,接入步进电机的一相即可。按照思路则需要两个L9110S才可以驱动二相四线步进电机。 # 三、红外接收驱动 1. ## 红外线协议介绍 在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光。红外线通信的例子我们每个人应该都很熟悉,目前常用的家电设备几乎都可以通过红外遥控的方式进行遥控,比如电视机、空调、投影仪等,都可以见到红外遥控的影子。这种技术应用广泛,相应的应用器件都十分廉价,因此红外遥控是我们日常设备控制的理想方式。 2. ## **红外线的通讯原理** 红外光是以特定的频率脉冲形式发射,接收端收到到信号后,按照约定的协议进行解码,完成数据传输。在消费类电子产品里,脉冲频率普遍采用 30KHz 到 60KHz 这个频段,**NEC协议的频率就是38KHZ**。 这个以特定的频率发射其实就可以理解为点灯,不要被复杂的词汇难住了,就是控制灯的闪烁频率(亮灭),和刚学单片机完成闪烁灯一样的意思,只不过是灯换了一种类型,都是灯。 接收端的原理: 接收端的芯片对这个红外光比较敏感,可以根据有没有光输出高低电平,如果发送端的闪烁频率是有规律的,接收端收到后输出的高电平和低电平也是有规律对应的,这样发送端和接收端只要约定好,那就可以做数据传输了。 红外线传输协议可以说是所有无线传输协议里成本最低,最方便的传输协议了,但是也有缺点,距离不够长,速度不够快;当然,每个传输协议应用的环境不一样,定位不一样,好坏没法比较,具体要看自己的实际场景选择合适的通信方式。 3. ## NEC协议介绍 NEC协议是众多红外线协议中的一种(这里说的协议就是他们数据帧格式定义不一样,数据传输原理都是一样的),我们购买的外能遥控器、淘宝买的mini遥控器、电视机、投影仪几乎都是NEC协议。 像格力空调、美的空调这些设备使用的就是其他协议格式,不是NEC协议,但是只要学会一种协议解析方式,明白了红外线传输原理,其他遥控器协议都可以解出来。 NEC协议一次完整的传输包含: 引导码、8位地址码、8位地址反码、8位命令码、8位命令反码。这里我们主要讲解如何接收红外发送端发送的NEC协议内容 **引导码:** 由9ms的低电平+4.5ms的高电平组成。 **4个字节的数据:** 地址码+地址反码+命令码+命令反码。 这里的反码可以用来校验数据是否传输正确,有没有丢包。 > **重点: NEC协议传输数据位的时候,0和1的区分是依靠收到的高、低电平的持续时间来进行区分的。这是解码关键。** 数据发送0码:0.56m低电平+ 0.56ms的高电平。 数据发送1码:0.56ms低电平+1.68ms的高电平 所以,收到一个数据位的完整时间表示方法是这样的: 收到数据位0: 0.56m低电平+ 0.56ms的高电平 收到数据位1: 0.56ms低电平+1.68ms的高电平 **还有一个重复码,它是由一个 9ms 的低电平和一个 2.5ms 的高电平组成**。当一个红外信号连续发送时,可以通过发送重复码的方式快速发送。 4. ## 红外接收硬件接口设计 **红外线接收头模块输出电平的原理:** 红外线接收头感应到有红外光就输出低电平,没有感应到红外光就输出高电平。因此,我们只要检测OUT端,是否输出低电平,就可以知道是否有接收到红外数据。 这里选择接入PF7,没有什么特殊要求,使用普通的GPIO即可 5. ## **四、语音识别驱动** 6. ## 语音模块介绍 HLK-V20是海凌科电子针对大量纯离线控制场景和产品推出的高性能**纯离线语音识别模块**,可广泛且快速的应用于智能家居、各类智能小家电、86盒、玩具、灯具、工业、 医疗、物联网、汽车、安防与照明等需要语音操控的产品。 **HLK-V20支持150条本地指令离线识别,可自由定制唤醒词、命令词与应答播报词,具有丰富的外围接口**。 > 离线语音识别指的是只能识别固定命令词条,不需要连接网络。 > 购买链接:*[AI智能语音模块V20 海凌科离线语音开关控制 语音识别控制开发板](https://detail.tmall.com/item.htm?_u=62t4uge5fe3d&id=624187674417&spm=a1z09.2.0.0.65622e8dcBIkxT)* 模块的命令词、播报词等配置,可以通过在线配置平台进行配置,因篇幅过长,另起了一份文档,具体语音产品的配置案例见下方链接。 *[海凌科语音识别模块的语音固件创建与下载](https://dri8c0qdfb.feishu.cn/docx/LQkZd74b7o8aEHxAGzbcGvHynle?from=from_copylink)*

2. ## 语音识别模块硬件设计 该语音识别模块是可以由我们自由设计命令词的,可以通过在线配置平台进行配置。配置完成之后会生成一个语音识别固件,我们要将固件下载到模块里,通过模块的B6,B7引脚进行下载。所以下方通过排针的方式引出了B6,B7引脚方便我们下载。**还需要注意的是,在下载固件时,要先将模块断电。待下载工具识别到模块之后,再给模块通电,才可以正常下载。这个通断电操作,由原理图中的SW1开关进行控制。** # **思路整理:**~~~~ 1.几个模块的驱动代码并进行验证 2.应用代码:了解技术指标 (1)可以通过红外遥控与语音设置是否打开自动模式; (2)在自动模式下,当光照强度很高时,自动展开窗帘;当光照强度很低时,自动关闭窗帘; (3)在自动模式下,当检测到大量雨滴时,自动展开窗帘,此优先级比光照检测高; (4)在任何时候,可以通过红外遥控或语音命令展开与关闭窗帘,并关闭自动模式; (5)主控芯片接收到数据后,驱动电机运转,现实智能窗帘窗户系统。 (1)自动模式: 通过获取ADC检测的值,比较判断雨滴或者光照的阈值,执行打开窗帘、关闭窗帘的动作 注意优先级的问题:当检测到大量雨滴时,自动展开窗帘,此优先级比光照检测高展开窗帘之后直接跳出 (2)展开、关闭窗帘: 1.如何实现打开窗帘与关闭窗帘呢? ——在写驱动代码的时候有过验证,即使相应的标志位置1即可使电机朝一个方向一直旋转。但有一个问题,电机会一直旋转,即滑块即使顶到头,电机也不会停止。 ——在硬件方面可以增加一个限位开关,当滑块移动到尽头时,使得电机停止下来。但是目前硬件没有限位开关 ——在软件方面,若想使电机旋转一会停下来,可以通过延时的方式。但若在关闭电机的时候突然接收到展开窗帘的命令,此时必须要执行完延时才能执行展开窗帘的函数,导致任务阻塞,故最好不要使用延时 2.该如何实现电机只转动一会,就停下来呢? ——当前步数:顺时针旋转,步数++ 逆时针旋转,步数-- ——通过获取当前步数来确定滑块的位置。便可以确定滑块从一端到另一端走了多少步,即最大步数 ——一上电后,电机默认的当前步数为0 ,所以应顺时针旋转,步数累加 3.电机复位 ——在确定好最大步数之后,验证当滑块走到尽头之后电机是否会停下来。 ——一上电,并不能确定步进电机究竟在那个位置,通过复位动作,可以确定滑块所在位置 4.编写步进电机展开与关闭窗帘函数 ——展开窗帘,逆时针旋转,步数-- 关闭窗帘,顺时针旋转,步数++ 5.为什么此时电机停不下来?且一直在通电 ——在写代码的过程中,要切记在表达式中混用带符号和无符号数,因为当无符号数和有符号的负数比较时,负数会发生位拓展 (3)红外命令 1.红外命令控制 ——在中断中获取红外命令之后,需要解析红外命令值,根据命令值执行相应的操作。通过验证发现bug,执行展开窗帘或关闭窗帘的红外命令之后,电机会一直旋转停不下来 ——当接收到展开、关闭窗帘的命令之后,执行完操作后,会清除命令码。若后续没有接收到其他命令,整个语句就相当于没了,此时电机一直在开机状态,电机的停止该怎么停呢?可以手动增加一个软件限位开关,通过限位判断使电机停下来,但是电机比较大,为了稳妥起见,再写一个使转子停止旋转的函数,来保证电机彻底停下来 2.此时,只有电机走到尽头才会停止,若窗帘展开到一半,又执行关闭的命令,发现即使滑块已经走到尽头,电机却无法停下来 ——若只展开窗帘,标志位置1,若此时又关闭窗帘,即在motor\_front\_flag为1的情况下,motor\_back\_flag也为1。那么电机该往哪个方向旋转便无法确定 ——因此,为了避免旋转方向不确定,需要手动增加另一个方向标志位的开关 3.如何实现红外控制自动模式? ——设置自动模式标志位 (4)语音命令
设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
序号 文件名称 下载次数
1

ea5b93d7ad68ed0b4726feee6e2088e4.mp4

2
2

1.1 测试.zip

6
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP