Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PersimM3_柿饼M3模块
柿饼_PersimmonUI
红外_IR_infrared
0.1元成本柿饼派实现红外控制空调了
发布于 2021-07-19 12:28:36 浏览:1527
订阅该版
[tocm] ### 柿饼派实现红外红控制 - 突发奇想,柿饼派如果可以控制红外设备,是不是很方便,但是发现只有空调控制UI界面,没有输出设备,感觉缺少点什么,动手干!  - 查阅资料发现,柿饼派只剩下一个引脚,PE10了,这个引脚还不支持PWM,苍天啊,大地呀,不会这样子吧。  - 不死心,再找找,看到市面有种手机通过耳机孔实现红外控制,觉得挺神奇,查阅资料发现,原来是音频模拟发射38k载波。  - 能否通过我们的柿饼派喇叭输出口外接一个0.1元的红外发射二极管。  - 详细实现过程,及代码见第二季,你的点赞是我的动力... ## 柿饼派实现红外红控制第二季 ### 38K载波实现方法 - 下图是常见的红外遥控NEC协议,比较关心的是560us那段38K载波的实现。每个脉冲是一个560us长的38kHz载波脉冲(大约21个周期)。一个逻辑“1”需要2.25毫秒来传输,而一个逻辑“0”只需要一半的时间,即1.125毫秒。建议载波占空比为1/4或1/3。  - 分析有几个因素注意。 - 1 因为红外载波频率38K,理论上要求采样率至少是38K的2倍76k,查阅资料,发现柿饼M3的DAC支持的采样率8k-192k。为了保证效果,选择192K采样率。或许会好奇地小伙伴问,为什么不配置标准的38K的整倍数采样率呢?其实我也想啊,但这是个CODEC,寄存器只有4BIT配置,只有16种固定好的采样率,供我们选配而已。为了保证输出红外发射足够的距离,将音量配置99。虽然这样做有点夸张。配置DAC的代码如下所示。  ```c struct rt_audio_caps caps = {0}; snd = rt_device_find("sound0"); rt_device_open(snd, RT_DEVICE_FLAG_WRONLY); /* 设置采样率、通道、采样位数等音频参数信息 */ caps.main_type = AUDIO_TYPE_OUTPUT; /* 输出类型(播放设备 )*/ caps.sub_type = AUDIO_DSP_PARAM; /* 设置所有音频参数信息 */ caps.udata.config.samplerate = 192000; /* 采样率 */ caps.udata.config.channels = 1; /* 采样通道 */ caps.udata.config.samplebits = 16; /* 采样位数 */ rt_device_control(snd, AUDIO_CTL_CONFIGURE, &caps); caps.main_type = AUDIO_TYPE_MIXER; caps.sub_type = AUDIO_MIXER_VOLUME; caps.udata.value = 99; rt_device_control(snd, AUDIO_CTL_CONFIGURE, &caps); ``` - 2 载波的560us时间长度计算方法。目前采用了192k采样率,也就是1ms内有192个采样点,很容理解吧?那么560us就是0.56ms,算了一下, `192*0.56=107`大约有107个采样点,`192k/38k=5.052631...`,大约是5倍左右的样子,表示大约5个采样点表示38k载波的一个周期。于是定义一个数组,并且赋值32767,-32768,因为这样的数值可以使DAC可以输出比较陡峭的方波,最后通过rt_device_write写入soud0设备中,大约重复写入`107/5=21`次,每个脉冲是一个560us长的38kHz载波脉冲(大约21个周期)。即可实现长度560us的载波了,是不是很简单? ```c int16_t pcm[5]={32767,32767,32767,-32768,-32768}; for(int i=0, i<21; i++) { rt_device_write(snd, 0, pcm, sizeof(pcm)); } ``` - 3 逻辑1之后大约有`2.25-0.56=1.69ms`空载波区,意思这部分时间段没有发送38k载波,怎么实现呢,很简单,写入‘0’就可以了。实现代码如下。 ```c int16_t pcm[5]={0,0,0,0,0}; for(int i=0, i<21; i++) { rt_device_write(snd, 0, pcm, sizeof(pcm)); } ``` - 4 输出的波形,细心的小伙伴发现没有,空载波区电平1/2电压,这样有个好处,红外LED不分正负极啦。是不是很方便呢?  - 5 目前的测试是在海尔空调测试的,如果小伙伴比较关心海尔空调的协议,请你留言告诉我。我会更新一下这部分的实现方法以及代码。 - 6 如果小伙伴这个红外控制不想写代码实现,其实还有个简单的办法,我们可以制作一个wav文件,比如命名turn_on_25.wav,turn_off.wav,使用wavplayer播放,这样就可以0代码实现控制空调了。是不是感觉很酷? 如果你想听一下红外的声音,请点击 [ac_turnon_38k.wav](https://oss-club.rt-thread.org/uploads/20210721/56f6c86e214c93a6eaf238adf9b8a3e1.wav) - 7 实操测试的视频。顺便告诉大家,柿饼派M3加入激动人心的语音识别啦,离线控制空调了,如果小伙伴需要关心语音这方面的情况,那请你给我点个赞吧!你的点赞是我更新第三季的动力哦! 视频地址请点击 https://m.bilibili.com/video/BV1iV411H7AX
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
achinwoo
这家伙不懒,啥都会写
文章
5
回答
13
被采纳
2
关注TA
发私信
相关文章
1
【PersimmonUI柿饼学习营】+ A Byte of China + 环境搭建&20W年薪广告
2
【柿饼学习营】+werrysuzhen+20W年薪作业
3
【PersimmonUI柿饼学习营】+ meetwit + 20W年薪广告&lesson01
4
【PersimmonUI柿饼学习营】+ DaZhou + 20W年薪作业+视频有彩蛋
5
【PersimmonUI柿饼学习营】+ DMY+ lesson01 20W年薪广告
6
【PersimmonUI柿饼学习营】+ Bigmagic+20W年薪广告&day01
7
【PersimmonUI柿饼学习营】+ chowguohua+年薪广告
8
【柿饼学习营】+werrysuzhen+脚本及事件学习
9
【PersimmonUI柿饼学习营】+ DaZhou+ 手把手教你做计算器
10
【PersimmonUI柿饼学习营】+ A Byte of China + 2048游戏
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部