发作品签到
标准版

#第六届立创电赛#离线语音识别-凉习智能风扇“小橘子”

工程标签

4.5k
0
0
0

简介

它叫小橘子,是一个住在老风扇里的新时代小精灵。它能让老风扇听懂“新”声音,一个指令,一句话,言出必达。基于离线语音识别的智能风扇。

简介:它叫小橘子,是一个住在老风扇里的新时代小精灵。它能让老风扇听懂“新”声音,一个指令,一句话,言出必达。基于离线语音识别的智能风扇。

开源协议

GPL 3.0

创建时间:2021-07-14 20:53:22更新时间:2021-08-11 16:59:57

描述

先不描述了,先上图!^.^

 

* 1、项目功能介绍


 

基于启英泰伦离线语音模组CI-C22GS02S的凉习智能风扇LX02,改造家里的老风扇,动嘴不动手

        • 通过语音识别技术,无须联网即可”动动嘴“实现开关机、档位控制。
        • 同时它还保留了实体按键,可以完美改造家里的老风扇。
        • 按键下面搭配了插件的LED灯,可以根据原有的按键高低调整,
        • 3个档位对应实现亮灯,方便识别当前档位;
        • 值得一提的是,通过合理选择LED限流电阻,LED灯在夜晚也并不刺眼,睡觉也不会受到影响。

,叫小橘子,是一个住在老风扇里的新时代小精灵。它能让老风扇听懂”新“声音,一个指令,一句话,言出必达。还搭载了儿时听到小铃声,在休闲乘凉之际重温孩提时光。还有几个幽默小功能哦,亟待您的发现~

基本参数:

类型:4键3档; 0 1 2 3

安装尺寸:键间尺寸18mm

供电:AC220V

 

*2、项目属性


项目首次公开。是原创。项目未曾在其他比赛获奖。项目未在学校参加答辩。

注:请说明项目是否首次公开;项目是否为原创;项目是否曾经在其他比赛中获奖,若有获奖则叙述获奖详情;项目是否在学校参加过答辩。

* 3、开源协议


GPL3.0

*4、硬件部分


4.1、3个继电器IO

采用模块的PWM3\PWM4\PWM5作为继电器控制端(RLY_C1、2、3)。主控这里记得引出MCLK引脚,这个是烧录程序必备的。

4.2、4个按键IO

模组CI-C22GS02S(C2759836)本来IO口引出的不多,有两个串口,真正运行时本项目用不上串口。故想把它作为按键IO来使用,通过查询它的手册 :模组CI-C22GS02S 发现可行

管脚号 管脚名称 I/O类型 IO驱动能力 IO上电默认状态 功能定义
……          
6 RX0  IO,T+U 4mA IN,T+U 1.UART0_RX  2.GPIO1_7
7 TX0 IO,T+U 4mA IN,T+U 1.UART0_TX  2.GPIO2_0
……          
10 TX1 IO,T+U 4mA IN,T+U 1.UART1_TX  2.I2C0_SCL 3.GPIO3_0
11 RX1 IO,T+U 4mA IN,T+U 1.UART1_RX  2.I2C0_SDA 3.GPIO3_1

串口0和串口1的管脚都支持普通IO口的功能,故可以用作检测按键输入。引脚上使用TX1作为0档开关按键,RX1作为1档开关,TX0作为2档开关,RX作为3档开关。

4.3、继电器驱动

采用NUD3105(C14894)作为继电器的驱动,这个驱动芯片内部自带了MOS、限流电阻、反向的二极管等,可以很好驱动继电器且不影响MCU,极大的节省了多个元器件。非常适合我们手工撸板的DIY玩家。

4.4、PCB分区

由于风扇外壳的部分很小,按键和继电器在一块上面的话,外壳就放不下了,只好把板子分为两个部分,拿到板子后裁开两块,飞线连接。这样比较好适配风扇的外壳。

沿虚线剪开

基本完成的

裁开的板子

 

 

*5、软件部分


附件有本案的修改好的SDK,可以直接下载烧录,完美复制拥有你的“小橘子”,想要个性化修改的小伙伴继续往下看,希望可以帮到你。

5.1继电器部分:

5.1.1、初始化继电器io

void relay_init(void)//PWM3-relay1-GPIO1_4 ,PWM4-relay2-GPIO1_5,PWM5-relay3-GPIO1_6

 {
    //以下代码控制GPIO输出模式
    Scu_SetDeviceGate((unsigned int)GPIO1,ENABLE);
    Scu_SetIOReuse(PWM3_PAD,FIRST_FUNCTION);
    Scu_SetIOPull(PWM3_PAD,DISABLE);
    Scu_SetIOReuse(PWM4_PAD,FIRST_FUNCTION);
    Scu_SetIOPull(PWM4_PAD,DISABLE);
    Scu_SetIOReuse(PWM5_PAD,FIRST_FUNCTION);
    Scu_SetIOPull(PWM5_PAD,DISABLE);
    gpio_set_output_mode(GPIO1,gpio_pin_4|gpio_pin_5|gpio_pin_6);

}

5.1.2、继电器电器控制函数,GPIO高低输出

void Relay1_OFF(void){gpio_set_output_level_single(GPIO1,gpio_pin_4,0);}   //输出低电平
void Relay2_OFF(void){gpio_set_output_level_single(GPIO1,gpio_pin_5,0);}  //输出低电平
void Relay3_OFF(void){gpio_set_output_level_single(GPIO1,gpio_pin_6,0);} //输出低电平

void Relay1_ON(void){gpio_set_output_level_single(GPIO1,gpio_pin_4,1);}   //输出高电平
void Relay2_ON(void){gpio_set_output_level_single(GPIO1,gpio_pin_5,1);}  //输出高电平
void Relay3_ON(void){gpio_set_output_level_single(GPIO1,gpio_pin_6,1);} //输出高电平

5.1.3、档位控制函数,调用如:Gear(0);//0档,关闭

void Gear(unsigned char GearNum)
{  

    if(GearNum==0){Relay1_OFF();Relay2_OFF();Relay3_OFF();}//注意要先关后开
    if(GearNum==1){Relay2_OFF();Relay3_OFF();Relay1_ON();}
    if(GearNum==2){Relay1_OFF();Relay3_OFF();Relay2_ON();}
    if(GearNum==3){Relay1_OFF();Relay2_OFF();Relay3_ON();}
}

 

5.2按键部分:

5.2.1、 按键清单list修改gpio_key.c内的 gpio_key_list[]

static gpio_key_info gpio_key_list[]=
{
    //按键一 OFF
    {4,I2C0_SCL_PAD,GPIO3,gpio_pin_0},
    //按键二  1档relay1
    {1,I2C0_SDA_PAD,GPIO3,gpio_pin_1},
     //按键三 2档relay2
    {2,UART0_TX_PAD,GPIO2,gpio_pin_0},
     //按键四 3档relay3
    {3,UART0_RX_PAD,GPIO1,gpio_pin_7},
};

5.2.2、添加中断处理程序,

由于4个按键中分属于不同的GPIOX组,故需要在ci112x_gpio.c文件中的void GPIO1_IRQHandler(void) 、void GPIO2_IRQHandler(void) 、void GPIO3_IRQHandler(void) 三个中断处理函数中添加以下函数:

ci_key_gpio_isr_handle();//GPIO按键处理函数

如:

/**
 * @brief GPIO1中断处理函数
 *
 */
void GPIO1_IRQHandler(void)
{
    ci_key_gpio_isr_handle();//GPIO按键处理函数
}

PS:我下载的SDK的未完成按键的DEMO部分,”ci112x_gpio.c“文件中未引用”ci_key.h“,会导致”ci_key_gpio_isr_handle();//GPIO按键处理函数“报1次警告,在开头添加头文件即可”#include "ci_key.h"

5.2.3、处理按键消息

在”user_msg_deal.c"内找到以下按键处理函数

void userapp_deal_key_msg(sys_msg_key_data_t  *key_msg)
{
    if(key_msg->key_index != KEY_NULL)
       {
           ci_loginfo(LOG_USER,"key_value is 0x%x ",key_msg->key_index);

           //按键被按下
           if(MSG_KEY_STATUS_PRESS == key_msg->key_status)
           {
               ci_loginfo(LOG_USER,"status : press down\n");
               if(key_msg->key_index ==4){Gear(0);}
               if(key_msg->key_index ==1){Gear(1);}
               if(key_msg->key_index ==2){Gear(2);}
               if(key_msg->key_index ==3){Gear(3);}
           }
       }

}

5.3烧录程序的方法:

(1)、下载附件的代码压缩包“CI1122.ZIP”

(2)、解压到纯英文路径的文件夹或直接解压到桌面

(3)、依次打开文件夹  “你的桌面\CI112X_SDK_V1.2.5\CI112X_SDK_V1.2.5\sample\internal\sample_1122\firmware ”

(4)、用TTL串口下载工具连接到板子DEBUG调试口

(5)、用短路帽短接板子上的BOOT端

(6)、检查线序,无误后将TTL串口下载工具插入电脑

(7)、打开“firmware”文件夹内的“打包升级.bat",选择固件升级

(8)、可以看到COM口已经自动识别,然后按下图打上各个选项。(仅更改了代码部分的,只勾选”擦除NV“)

(9)、拔掉板子和下载工具直接的GND杜邦线,然后再迅速插回(手动重启上电)即可进入烧录模式。约1-2min左右烧录完毕将会自动重启。进入正常运行

正在烧录 烧录完成

(10)、正常复原笔者的项目到这一步就结束了。

(11)、如果有自己的想法,个性化更改了代码。需要再eclipse内编译通过,观察到提示bin文件已生成即可。如下显示:

Finished building: sample_1122.bin
Finished building: sample_1122.siz
Finished building: sample_1122.lst
18:16:48 Build Finished. 0 errors, 0 warnings. (took 15s.27ms)

(12)、打开“firmware”文件夹内的“打包升级.bat",选择”固件打包“。在弹出的界面继续选择下方的”打包固件“,提示”固件已生成“

(13)、选择固件升级,重复8、9烧录程序

*如遇到未知问题,可以再详细看看厂家的指南:传送门——>固件合成及烧录

 

 

*6、BOM清单


详见右方BOM清单按钮

 

 

*7、大赛LOGO验证


* 8、避坑指南


(1)、首选避坑指南是厂家的新手指南 - 新手指南 (chipintelli.com)

(2)、软件代码入门也是厂家的SDK指南SDK概述 - 启英泰伦文档中心 (chipintelli.com),注意CI-C22GS02S模块的主控芯片是CI1122,看CI1122部分。

(3)、我下载的SDK V1.2.5的版本是未完成按键的DEMO部分的,”ci112x_gpio.c“文件中未引用”ci_key.h“,会导致ci_key_gpio_isr_handle();//GPIO按键处理函数报1次警告,在开头添加头文件即可”#include "ci_key.h"

(4)、添加按键的代码后会报RAM ROM不够的错,报的错误类似是:(这个错误困扰了我许久-_-)

ample_1122.elf section `.ro_data' will not fit in region `ROM'
section .data LMA [000000001ff21000,000000001ff2150f] overlaps section .ro_data LMA [000000001ff1d518,000000001ff210bf]

region `ROM' overflowed by 192 bytes

如下图:

厂家的BBS发帖后得到厂家大佬qinglin.li@chip回复:

原因:新增代码后,增加的代码量会超出flash分配的user code地址大小,会引起这类报错。

解决方法:使用编辑器打开SDK目录下文件\sample\internal\sample_1122\src\ci112x.lds,根据实际情况增加ROM_SIZE的大小,同时相对的减少ASR_USED_SIZE的大小。

 

ROM_SIZE      = 1024*(130+1+1+1);//上面+1
FHEAP_SIZE    = 1024*(81);
ASR_USED_SIZE = 1024*(283-1-1-1);//下面就-1,直到不报错
RAM_SIZE      = 1024*(18);
STACK_SIZE    = 0xC00;/*inclued in RW*/

 

* 9、演示您的项目并录制成视频上传


视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;

视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。

已发布,见附件。

 

* 10、注意事项


1、做好了后安装在老风扇里就可以了,但是一定要注意220V的危险!危险!危险

2、请遵守开源协议

3、转载参考请注明来源:立创开源平台https://oshwhub.com/Red_mt/li-xian-yu

4、案例仅供参考,笔者水平有限,多多包涵啦。目前实测可行不代表以后也实测可行

 

点个赞再走呗

 

 

设计图

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

BOM

暂无BOM

附件

序号文件名称下载次数
1
立创电赛:《离线语音识别-凉习智能风扇》-整体功能演示.mp4
253
2
CI112X_SDK_V1.2.5.zip
273
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

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

底部导航