当前位置: 首页 > ai >正文

6.空气质量检测和语音播报

目录

 传感器

传感器分类

数字量传感器

模拟量传感器

电压型模拟量传感器

电流型模拟量传感器

接收不同数字电平信号

KQM6600 简介

获取数据手册

关注手册的内容

KQM660硬件层

​编辑 KQM协议层

语音识别和语音播报模块

SU03T作用

SU03T简介​编辑

SU03T硬件层

SU03T固件制作

​编辑SU03T协议层

代码

KQM

SU03T


传感器 

传感器分类

        数字量传感器和模拟量传感器 

数字量传感器

        数字信号:只有 0 和 1 

        关注:接口(UART,单总线,IIC,SPI...) 

模拟量传感器

        模拟型传感器:模拟信号(电压,电流) 

电压型模拟量传感器

        如果电压太大,就需要硬件电路缩小 

        如果电压太小,就需要硬件电路放大 

电流型模拟量传感器

        电流:(4--10mA)串联高精度的采样电阻,把电流转化成电压,然后再通过 ADC 采集 

接收不同数字电平信号

        各种电平: 

        TTL 232 485 USB 

        TTL 232 485 本质上都是串口电平,但是电平规范不一样 

        TTL:单片机的串口,ESP8266,KQM6600 这些串口接口一般都是 TTL 电平 

        电脑接 TTL 电平的数据

232:232 芯片,将 TTL 电平转化为 232 电平

485 电平:TTL 通过 485 芯片,转换成 485 电平

 USB 电平:TTL 通过 CH340 将 TTL 电平转换成 USB 电平

 

KQM6600 简介

获取数据手册

        官网  立创商城   供应商要   百度

关注手册的内容

 (1)供电电压

(2)确定接口

        ① 数字接口 

                IIC SPI UART 单总线 

        ② 模拟接口 

                电压型 电流型 

KQM660硬件层

 KQM协议层

        校验和:保证双方数据数据传输的准确: 

        自己计算的校验和要和对方传递的校验和一致,表示数据没有问题

语音识别和语音播报模块

SU03T作用

        实现语音播报

SU03T简介

SU03T硬件层

        SU03T 的串口烧录:SU03T 的 B6 B7 两个引脚串口烧录 

        SU03T 的通信引脚:SU03T 的 B2 B3

SU03T固件制作

SU03T协议层

9600 8 N 1
开机播报小智我来了
退出有需要再叫我 
SU03T --> 单片机
开灯 AA 55 00 01 55 AA
关灯 AA 55 00 02 55 AA
室内温度 AA 55 00 03 55 AA
单片机 --> SU03T
播报室内温度 AA 55 01 9A 99 99 99 99 19 37 40 55 AA 
AA 55 固定头
01 消息号
9A 99 99 99 99 19 37 40 消息内容
55 AA 固定尾
通信 TX B2 RX B3
下载 TX B7 RX B6

代码

KQM

void KQM_R_Buff_Clear(void)
{memset(Kqm.R_Buff, 0, sizeof(KQM_R_Buff_Length));Kqm.R_Length = 0;
}//处理函数
void KQM_Handle(void)
{uint8_t Data_CS = 0;if(Kqm.R_Idle == 1){//1数据接收完成Kqm.R_Idle = 0;if(Kqm.R_Buff[0] == 0x5F)//地址码正确{Data_CS = Kqm.R_Buff[0] + Kqm.R_Buff[1] + Kqm.R_Buff[2] + Kqm.R_Buff[3] + Kqm.R_Buff[4] + Kqm.R_Buff[5] + Kqm.R_Buff[6];if(Data_CS == Kqm.R_Buff[7])//校验通过{Sensor.VOC = ((Kqm.R_Buff[1] << 8) + Kqm.R_Buff[2] * 0.1);//Sensor.VOC = ((kqm.R_Buff[1] * 0x100) + kqm.R_Buff[2] * 0.1); 1<<8--->2^8=256//Sensor.VOC = ((kqm.R_Buff[1] * 256) + kqm.R_Buff[2] * 0.1);Sensor.CH20 = ((Kqm.R_Buff[3] << 8) + Kqm.R_Buff[4] * 0.01);Sensor.CO2 = ((Kqm.R_Buff[5] << 8) + Kqm.R_Buff[6]);printf("VOC=%.1f,CH20=%.2f,CO2=%d\r\n", Sensor.VOC, Sensor.CH20, Sensor.CO2);}else{printf("校验不正确!!!\r\n");}}else{printf("地址码不正确!!!\r\n");}KQM_R_Buff_Clear();}//不能放在这里,因为数据还没接收完就被清除了//KQM_R_Buff_Clear();
}

SU03T

//处理函数
void SU03T_Handle(void)
{if(Su03t.R_Idle == 1){//1数据接收完成Su03t.R_Idle = 0;if(Su03t.R_Buff[0]==0xAA&&Su03t.R_Buff[1]==0x55&&Su03t.R_Buff[4]==0x55&&Su03t.R_Buff[5]==0xAA)//帧头帧尾正确{switch(Su03t.R_Buff[3]){case 0x00:break;case 0x01:LED1_ON();LED2_ON();LED3_ON();LED4_ON();break;case 0x02:LED1_OFF();LED2_OFF();LED3_OFF();LED4_OFF();	break;case 0x03:Relay_ON();break;		case 0x04:Relay_OFF();break;case 0x05:Su03t.S_Buff[0]=0xAA;Su03t.S_Buff[1]=0x55;	Su03t.S_Buff[2]=0x02;Su03t.S_Buff[3]=0x00;Su03t.S_Buff[4]=0x00;	Su03t.S_Buff[5]=0x00;		Su03t.S_Buff[6]=0x00;Su03t.S_Buff[7]=0x00;	Su03t.S_Buff[8]=0x00;Su03t.S_Buff[9]=0x37;Su03t.S_Buff[10]=0x40;	Su03t.S_Buff[11]=0x55;		Su03t.S_Buff[12]=0xAA;SU03T_SendBuff(Su03t.S_Buff,13);break;case 0x06:Su03t.S_Buff[0]=0xAA;Su03t.S_Buff[1]=0x55;	Su03t.S_Buff[2]=0x03;Su03t.S_Buff[3]=0x00;Su03t.S_Buff[4]=0x00;	Su03t.S_Buff[5]=0x00;		Su03t.S_Buff[6]=0x00;Su03t.S_Buff[7]=0x00;	Su03t.S_Buff[8]=0x00;Su03t.S_Buff[9]=0x37;Su03t.S_Buff[10]=0x40;	Su03t.S_Buff[11]=0x55;		Su03t.S_Buff[12]=0xAA;SU03T_SendBuff(Su03t.S_Buff,13);break;case 0x07:Su03t.S_Buff[0]=0xAA;Su03t.S_Buff[1]=0x55;	Su03t.S_Buff[2]=0x04;Su03t.S_Buff[3]=0x00;Su03t.S_Buff[4]=0x00;	Su03t.S_Buff[5]=0x00;		Su03t.S_Buff[6]=0x00;Su03t.S_Buff[7]=0x00;	Su03t.S_Buff[8]=0x00;Su03t.S_Buff[9]=0x37;Su03t.S_Buff[10]=0x40;	Su03t.S_Buff[11]=0x55;		Su03t.S_Buff[12]=0xAA;SU03T_SendBuff(Su03t.S_Buff,13);break;case 0x08:_uart_PlayDouble(18.1,1);break;default:break;				}}else{printf("帧头帧尾不正确!!!\r\n");}SU03T_R_Buff_Clear();}//不能放在这里,因为数据还没接收完就被清除了//SU03T_R_Buff_Clear();
}
http://www.xdnf.cn/news/5409.html

相关文章:

  • Nginx 源码安装成服务
  • Python与矢量网络分析仪3671E:自动化测试(Vscode)
  • 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程
  • 红黑树的线程安全的做法
  • 黑名单中的随机数-leetcode710
  • sunset:Solstice靶场
  • 动态规划之背包问题总结(Java)
  • 微服务架构-限流、熔断:Alibaba Sentinel入门
  • TIME - MoE 模型代码 4——Time-MoE-main/run_eval.py
  • 前端密码加密:保护用户数据的第一道防线
  • 《微服务设计》笔记
  • CSS:盒子阴影与渐变完全解析:从基础语法到创意应用
  • MySQL数据库容灾设计案例与SQL实现
  • 数据库的脱敏策略
  • 深入浅出之STL源码分析6_模版编译问题
  • 【Tools】git使用详解以及遇到问题汇总
  • 传感器:从单一感知到智能决策的跨越
  • Java基础(异常2)
  • MCP:重塑AI交互的通用协议,成为智能应用的基础设施
  • 【js基础笔记] - 包含es6 类的使用
  • C++(9):位运算符进阶版
  • 变换炉设备设计:结构优化与工艺集成
  • 使用vue3-seamless-scroll实现列表自动滚动播放
  • 中空电机在安装垂直轴高速电机后无法动平衡的原因及解决方案
  • 26考研——中央处理器_指令流水线_流水线的冒险与处理 流水线的性能指标 高级流水线技术(5)
  • LintCode第4题-丑数 II
  • java笔记06
  • Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
  • 频率学派和贝叶斯学派置信区间/可信区间的区别
  • spark算子介绍