嘉立创产业服务站群
站内搜索
发作品签到
专业版

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

工程标签

1.4k
0
0
0

简介

智能窗帘V1.0

简介:智能窗帘V1.0
立创·开发板电子设计训练营

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2023-08-18 11:04:52更新时间:2023-11-01 02:34:25

描述

题目要求

基于梁山派的智能窗帘项目

题目分析

期望实现的功能

自动模式下
  1. 根据空气湿度判断是否开关窗帘(优先度高)
  2. 根据光照强度判断是否开关窗帘
自动/手动模式下
  1. 红外遥控控制
  2. 语音指令控制
    智能窗帘项目方案.png

原理图设计说明

(1)温湿度传感器模块:用于检测空气温湿度;
因为手边刚好只有这个DHT11温湿度检测模块,就使用它来代替雨滴检测模块啦,又省下了一笔支出。本项目中主要使用湿度的度数。
原理图:
屏幕截图 2023-10-14 211502.png
我的模块实物图是这个样子滴,如下图,应该市面上这种模块的实物都大差不差,代码应该可以通用。
IMG_20231014_211146_edit_1193173895258554.jpg
具体的移植方法及代码请参见下面链接中有关于DHT11模块的部分【立创·梁山派】模块移植手册
(2)光线强度传感器模块:用于检测光线强度;
本项目方案跟随官方案例使用了简化方案,即直接使用一个分压电阻加上一个光敏电阻。
原理图:
屏幕截图 2023-10-14 214009.png
(3)红外接收模块,用于遥控控制;
原理图:
屏幕截图 2023-10-15 130733.png
使用了一个红外接收头串联一个10KΩ贴片电阻。
屏幕截图 2023-10-15 183753.png
另外还需要配一个遥控器发送指令。
IMG_20231015_183644_1.jpg
(4)步进电机模块:用于驱动窗帘;
原理图:
屏幕截图 2023-10-15 130226.png
步进电机选择了与官方案例相同的二相四线步进电机和驱动芯片,用来显示。
步进电机实物图:
IMG_20231015_190709.jpg
步进电机驱动芯片:
屏幕截图 2023-10-15 190807.png
(5)语音识别模块,用于语音控制。
原理图:
屏幕截图 2023-10-15 132002.png
语音识别模块实物图:海凌科V20模块,具体使用方法及教程详情请参见:海凌科语音识别模块的语音固件创建与下载
屏幕截图 2023-10-15 191630.png
喇叭实物图:嗯,一个挺大的喇叭
屏幕截图 2023-10-15 191942.png
麦克风实物图:需要注意库存,官方例程的麦克风缺货,连夜修改了PCB,换了一款小点的麦克风,功能没有什么区别。
屏幕截图 2023-10-15 192018.png
拨码开关实物图:用于独立控制是否给语音控制模块供电,方便下载语音模块的SDK固件.
屏幕截图 2023-10-15 192047.png

PCB设计说明

注意事项:
画PCB时要注意电源线的宽度;电机部分的电路要注意电源线先经过电容再连接到电机驱动芯片上;为了美观走线时可以尽量走底层,或者藏起来。
屏幕截图 2023-10-15 135514.png

软件说明

部分代码说明:
本项目使用的是DHT11模块进行空气湿度的数值检测,所以雨滴传感器接口宏定义部分可以注释掉,添加了温湿度的阈值。另外温湿度及光照的阈值,需要自行在自己的环境中测试得出。

/*file:bsp_adc.h*/

#ifndef _BSP_ADC_H__
#define	_BSP_ADC_H__

#include "gd32f4xx.h"

/* 雨滴传感器接口  PF8  ADC2_IN6 */
#define BSP_RAINDROP_GPIO_RCU       RCU_GPIOF
#define BSP_RAINDROP_GPIO_PORT      GPIOF
#define BSP_RAINDROP_GPIO_PIN       GPIO_PIN_8

/* 光照传感器接口  PF6  ADC2_IN4 */
#define BSP_LIGHT_GPIO_RCU          RCU_GPIOF
#define BSP_LIGHT_GPIO_PORT         GPIOF
#define BSP_LIGHT_GPIO_PIN          GPIO_PIN_6

#define BSP_ADC_RCU                 RCU_ADC2
#define BSP_ADC                     ADC2
#define BSP_LIGHT_ADC_CHANNEL       ADC_CHANNEL_4 
#define BSP_RAINDROP_ADC_CHANNEL    ADC_CHANNEL_6 

//雨滴阈值  越小说明雨越大
#define RAINDROP  60

//温湿度阈值 
#define HUM_MIN  60
#define HUM_MAX  75

//光照阈值  越小说明越亮
#define LIGHT_MIN  600
#define LIGHT_MAX  3900

void raindrop_and_light_config(void);
unsigned int get_adc_value(uint8_t  adc_channel_x);
#endif

测试代码直接写在了自动模式的函数里,方便在自动模式下通过串口接收数据观察数值变化,以及后续改动宏定义中的相关阈值。

void automatic_mode(void)
{
    uint16_t light_value = 0;
    uint16_t raindrop_value = 0;
    uint16_t temperature_value = 0;
    uint16_t humidity_value = 0;
    	
    DHT11_Read_Data();
    //读取温,湿度值
    temperature_value=Get_temperature();
    humidity_value=Get_humidity();
	
    //读取光照值
    light_value = get_adc_value( BSP_LIGHT_ADC_CHANNEL );

    //串口打印输出光照,温度,湿度值
    printf("light_value=%d\r\n",light_value);
    printf("temperature_value=%d\r\n",temperature_value);
    printf("humidity_value=%d\r\n",humidity_value);
	
    delay_1ms(1000);

    if( humidity_value >= HUM_MAX )
    {
        printf("湿度很高\r\n"); 
        //打开窗帘(高优先度)
        open_curtain();
        return;
    }
		
    //如果检测到光照很高
    if( light_value < LIGHT_MIN )
    {
        printf("光照强度很高\r\n");   
        //展开窗帘
        open_curtain();
       
    }
    
    //如果检测到光照很低
    if( light_value >= LIGHT_MAX )
    {
        printf("光照强度很低\r\n"); 
        //关闭窗帘
        close_curtain();
    } 			
}

项目中使用时钟频率为200MHz,需要在文件:"system_gd32f4xx.c"中将相关240MHz的宏定义注释掉,解开200MHz的注释

/* select a system clock by uncommenting the following line */
//#define __SYSTEM_CLOCK_IRC16M                   (uint32_t)(__IRC16M)
//#define __SYSTEM_CLOCK_HXTAL                    (uint32_t)(__HXTAL)
//#define __SYSTEM_CLOCK_120M_PLL_IRC16M          (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL        (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL       (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_168M_PLL_IRC16M          (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL       (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_200M_PLL_IRC16M          (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL        (uint32_t)(200000000)
#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL       (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_240M_PLL_IRC16M          (uint32_t)(240000000)
//#define __SYSTEM_CLOCK_240M_PLL_8M_HXTAL        (uint32_t)(240000000)
//#define __SYSTEM_CLOCK_240M_PLL_25M_HXTAL       (uint32_t)(240000000)

其他部分代码都与官方教程无太大区别,详情请参考官方教学。

实物展示说明

焊接完成的实物 be like:
(请忽略我不小心烤化了一小半的麦克风)

IMG_20231015_155308_edit_1222265476499427.jpg

焊接时的注意事项:我自己摸索的一些小规律,不知道对不对。**先焊一些较小的贴片元件(刀头和热风枪比较好用),再焊中等大小焊不太多的插件,最后焊最大最复杂的。**本项目的电机芯片的位置距离底层排母的排针较近,焊接时最好使用焊锡膏和热风枪来焊。另外,还要在此特别感谢一下李工,帮我找了好几天的bug,最后发现是电机芯片有个引脚没焊上。后面使用了热风枪和锡膏进行补焊。是的,麦克风就是那个时候烤化的,呜呜呜。

演示视频

欲知详情,点它点它:智能窗帘演示视频

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
窗帘finally.zip
10
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航