项目
基于FreeRTOS的智能家居系统
(1)基于STM32硬件平台搭建控制系统,使用USART/IIC等通信协议实现模块间通信。
(2)包括语音模块、WIFI模块、温湿度传感器、电机等。
(3)移植FreeRTOS实现多任务调度,支持语音控制、APP控制。
步进电机是通过脉冲信号来进行控制,每输入一个脉冲信号,步进电机前进一步。步进电机旋转的步距角,是在电机结构的基础上等比例控制产生的,如果控制电路的细分控制不变,那么步进旋转的步距角在理论上是一个固定的角度。在实际工作中,电机旋转的步距角会有微小的差别,主要是由于电机结构上的固定有误差产生的,而且这种误差不会积累。
步进电机的相电流及磁场,遵循安培右手螺旋定律,由电能产生磁场能量,控制电机相电流,就能使电机定子的磁极方向发生反转,二相磁场的变化相配合,进而产生电机的旋转。
如果电流方向发生变化,磁极的方向也会发生变化,步进电机的电流流过定子产生磁场的过程叫做励磁。
通常所说的二相步进电机,电机转子的旋转,包含不同磁极的磁场相斥和相吸实现的。如下图所示,A相产生N极磁场吸引转子的S极,B相产生S极磁场吸引转子的N极,使定子产生旋转的动力。如果改变A、B相定子线圈的电流方向,电机会产生另一步的旋转。连续改变A、B相定子线圈的电流方向,电机会产生连续的旋转。
IIC总线的数据传送
IIC总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(地址通过物理接地或者拉高),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。
也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。
主设备往从设备中写数据。数据传输格式如下:
淡蓝色部分表示数据由主机向从机传送,粉红色部分则表示数据由从机向主机传送。写用0来表示(高电平),读用1来表示(低电平)。
主设备从从设备中读数据。数据传输格式如下:
在从机产生响应时,主机从发送变成接收,从机从接收变成发送。之后,数据由从机发送,主机接收,每个应答由主机产生,时钟信号仍由主机产生。若主机要终止本次传输,则发送一个非应答信号,接着主机产生停止条件。
主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:
在多主的通信系统中,总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其它的节点发送控制字节和传送数据。但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。
USART
串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式,如SPI通信、USART通信、EEPROM通信等。简单讲,串口通信实现了上位机(PC)与下位机(如STM32)之间的信息交互。
上位机(PC)通过串口调试助手等实现数据的接收和发送;
下位机(STM32)通过printf()、getchar()等函数实现字符或字符串的接收和发送。
串口设置的一般步骤可以总结为如下几个步骤:
1)串口时钟使能 GPIO 时钟使能
2)串口复位
3)GPIO 端口模式设置
4)串口参数初始化
5)开启中断 并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6)使能串口
7)编写中断处理函数
串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。
数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、 1、 1.5或2个逻辑1的数据位表示。在数据包的起始位之后紧接着的就是要传输的据的长度常被约定为 5、 6、 7 或 8 位长。在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。
通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。 USART 就是对传输数据时的传输参数有具体规定。
USART 功能框图
①功能引脚②数据寄存器③控制器(发送器和接收器)④小数波特率生成
基于MediaPipe的人脸识别情绪辅助系统
(1)通过MediaPipe提取出人脸关键点三维坐标,计算人脸的特征量,如:人脸倾斜度、嘴角高度占上下嘴唇高度比、瞳孔占眼眶高度比等等。
(2)以特征量为分类依据,通过优化优先级的KNN算法进行分类识别。
(3)根据识别出用过当前不同的情绪状态提供相应的实时情绪帮助。
WebServer
(1)使用线程池+非阻塞 socket+epoll 的并发模型。
(2)使用状态机解析 http 请求报文,支持解析 get 请求。
(3)经 webbench 测试,可实现上万的并发连接数据交换。