STM32+红外模块控制格力空调:从硬件到代码的完整方案

简介:这份资源面向嵌入式开发初学者与智能家居DIY爱好者,提供基于STM32微控制器驱动红外模块控制格力空调的完整工程实践。内容围绕STM32的GPIO推挽输出、定时器PWM波形生成、NEC红外编码与解码、协议适配及示波器调试等关键环节展开,帮助读者理解从红外信号发射到空调响应的完整链路。压缩包共226个文件,约8.35MB,以32个c源文件、34个h头文件、42个crf中间文件、44个o目标文件及uvprojx、uvoptx等Keil工程文件为主,另含hex烧录文件、map映射表与少量说明文档,工程结构完整可直接编译。目前已有890人学习下载。读者可借此掌握STM32定时器与GPIO协同控制红外发射的编程思路,理解格力空调遥控编码的解析方法,并参考调试与测试流程排查信号不一致问题,对物联网与智能家居项目开发具有实际参考价值。

1. 从遥控器堆里抢回控制权:STM32+红外模块控制格力空调的完整方案

家里空调遥控器又找不到了,沙发上、床头柜、茶几底下翻个遍,最后在冰箱顶上摸出来——这种场景做嵌入式的人都懂。与其继续忍受这种玄学找遥控器,不如直接上STM32加红外模块,把空调控制权收进自己手里。这套方案要解决的核心问题很明确:用一颗STM32做主控,搭配红外发射和接收模块,实现格力空调的开关、温度调节、模式切换和风速控制,同时预留扩展接口,方便后续接入温湿度传感器做自动控温。适合正在做嵌入式毕设、课设的学生,也适合想拿这个当智能家居入门项目的开发者。整套方案从硬件选型到红外协议解析再到代码落地,全部可以照着复现。

2. 需求拆解与技术选型:为什么是STM32加红外而不是直接换智能空调

2.1 功能需求与非功能需求

先把需求拆清楚,不然后面写代码全是坑。功能层面,这套系统需要做到:红外发射控制空调开关机、温度加减、模式切换(制冷/制热/送风/除湿)、风速调节(自动/低/中/高)、扫风开关;红外接收用于学习原遥控器码值,省去手动查协议表的麻烦;串口输出调试信息,方便排查问题;预留I2C或单总线接口,后续接温湿度传感器。非功能层面,红外载波频率必须稳定在38kHz,误差超过2kHz空调就可能不响应;按键响应延迟控制在200ms以内;系统连续运行不重启,看门狗必须开。

通常的做法是先把格力空调的红外协议码值抓出来,再决定用哪种发射方案。格力空调红外编码遵循NEC格式的变体,引导码是9000us低电平加4500us高电平,逻辑0是560us低加560us高,逻辑1是560us低加1690us高,载波38kHz。这些参数在写发射代码时直接决定空调认不认你的信号。

2.2 主控与红外模块选型对比

主控选STM32F103C8T6,原因很直接:72MHz主频足够跑红外时序,定时器资源丰富,一个TIM输出PWM做38kHz载波,另一个TIM做微秒级延时,GPIO随便找个推挽输出接红外发射管驱动电路。比起用Arduino,STM32的定时器精度更高,红外时序不容易翻车。

红外发射模块用常见的IR LED加三极管驱动电路,接收用VS1838B一体化接收头。这里有个选型细节:VS1838B输出是反相的,接收到38kHz信号时输出低电平,空闲时输出高电平,写解码代码时电平判断别搞反。发射管驱动三极管选S8050,基极电阻1k,集电极接红外LED串限流电阻,典型值100Ω到220Ω之间,具体看LED正向压降和STM32的3.3V供电。

模块型号关键参数作用
主控STM32F103C8T672MHz,64KB Flash红外编解码、逻辑控制
红外接收VS1838B38kHz,输出反相学习原遥控器码值
红外发射IR LED + S8050940nm,100mA峰值发射控制信号
调试接口CH340GUSB转TTL串口打印调试信息

2.3 格力红外协议的关键参数

格力空调红外码由引导码、35位数据码和结束码组成。数据码包含开关位、模式位、温度位、风速位、扫风位和校验位。温度编码不是直接二进制,而是偏移编码,比如16度对应0x00,17度对应0x01,一直到30度对应0x0E。模式编码:制冷0x00,除湿0x01,送风0x02,制热0x03。风速编码:自动0x00,低0x01,中0x02,高0x03。这些码值在写发射函数时直接填进去,不用再猜。

注意:不同年份的格力空调红外协议可能有差异,建议先用接收模块把原遥控器的码值完整抓一遍,确认引导码和数据位定义后再写发射代码。

3. 硬件设计与红外收发电路:从原理图到PCB布局的落地细节

3.1 最小系统与红外发射电路

STM32最小系统包括晶振电路(8MHz外部晶振加两个20pF电容)、复位电路(10k上拉加100nF电容)、电源滤波(每个VCC引脚配100nF去耦电容)。红外发射电路的核心是PWM驱动。STM32的TIM3_CH1配置为PWM输出模式,频率38kHz,占空比1/3。为什么是1/3而不是50%?因为红外接收头对载波占空比不敏感,但1/3占空比能降低发射管功耗,延长寿命。PWM输出接三极管基极,三极管集电极串红外LED和限流电阻到3.3V。

// TIM3 PWM初始化,输出38kHz载波 void IR_PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // PB4复用为TIM3_CH1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 72MHz / 38kHz = 1894.7,取1895 TIM_TimeBaseStructure.TIM_Period = 1895 - 1; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 占空比1/3,比较值632 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 632; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, DISABLE); // 默认关闭,发射时再开 }

这段代码把TIM3配置成38kHz PWM输出,关键参数是Period和Pulse。Period值1895是根据72MHz主频除以38kHz算出来的,Pulse值632对应1/3占空比。发射时先使能TIM3,延时对应时长后再关闭,就能产生红外载波脉冲。

3.2 红外接收电路与电平匹配

VS1838B接收头有三个引脚:VCC、GND、OUT。OUT接STM32的GPIO输入,配置为上拉输入或浮空输入。接收头内部已经有滤波和放大,输出信号直接进MCU。这里有个容易忽略的点:VS1838B的输出电平是反相的,空闲时OUT为高,收到38kHz信号时OUT拉低。写解码代码时,捕获下降沿作为引导码起始,然后测量低电平和高电平持续时间来区分逻辑0和逻辑1。

接收电路不需要额外放大,但电源引脚必须加100nF和10uF电容滤波,否则空调遥控器靠近时容易误触发。PCB布局时接收头远离发射管,至少隔5cm以上,不然发射时的红外光会直接串到接收头,造成自收自发的死循环。

3.3 电源与抗干扰设计

整块板子用3.3V供电,红外发射瞬间电流可能冲到100mA以上,所以LDO选AMS1117-3.3时要注意散热,或者直接用5V输入加1117-3.3,输入输出都加10uF钽电容。红外LED的限流电阻根据供电电压算:如果LED正向压降1.2V,三极管饱和压降0.3V,3.3V供电时电阻取(3.3-1.2-0.3)/0.1=18Ω,但实际用100Ω到220Ω更安全,峰值电流控制在20mA到50mA之间,遥控距离够用就行。

提示:调试时如果空调没反应,先用手机摄像头对着红外LED看,发射时能看到紫色光点,说明驱动电路在工作。如果看不到,查三极管基极有没有PWM信号。

4. 软件架构与核心代码实现:红外编码、解码与空调控制逻辑

4.1 软件分层与主循环设计

软件分三层:硬件驱动层(PWM初始化、GPIO配置、定时器延时)、红外协议层(编码发射、解码接收)、应用层(空调状态机、按键处理、串口命令解析)。主循环不做阻塞延时,用定时器中断做微秒级延时,主循环里轮询按键和串口数据。空调状态用一个结构体保存,包括开关状态、温度值、模式、风速、扫风标志,每次发射前根据当前状态生成35位数据码。

typedef struct { uint8_t power; // 0关 1开 uint8_t mode; // 0制冷 1除湿 2送风 3制热 uint8_t temp; // 16-30 uint8_t fan; // 0自动 1低 2中 3高 uint8_t swing; // 0关 1开 } AC_State_t; AC_State_t ac_state = {0, 0, 26, 0, 0}; // 默认26度制冷

结构体定义清楚后,所有控制逻辑围绕它展开。按键按下时修改对应字段,然后调用红外发射函数把新状态发出去。这种设计的好处是状态可追溯,串口打印出来一眼就能看出当前空调处于什么状态。

4.2 红外发射函数与格力码值生成

发射函数的核心是先把35位数据码拼出来,再按NEC时序逐位发射。格力空调的数据码格式:起始位加35位数据,其中包含温度、模式、风速、扫风和校验。校验位通常是前几位异或的结果,具体算法根据抓到的遥控器码值反推。

// 发射一个逻辑位,bit=0发560us低+560us高,bit=1发560us低+1690us高 void IR_SendBit(uint8_t bit) { IR_Carrier_On(); delay_us(560); IR_Carrier_Off(); if (bit) { delay_us(1690); } else { delay_us(560); } } // 发射完整的格力空调码 void IR_Send_AC(AC_State_t *state) { uint8_t data[5] = {0}; // 根据state填充data,具体码值映射略 data[0] = 0x08; // 开关和模式位 data[1] = state->temp - 16; // 温度偏移编码 data[2] = state->fan | (state->swing << 2); // ... 校验位计算 IR_Carrier_On(); delay_us(9000); // 引导码低电平 IR_Carrier_Off(); delay_us(4500); // 引导码高电平 for (int i = 0; i < 35; i++) { IR_SendBit((data[i / 8] >> (i % 8)) & 0x01); } IR_Carrier_On(); delay_us(560); // 结束码 IR_Carrier_Off(); }

这段代码里delay_us必须用定时器实现,不能用空循环,否则不同优化等级下延时不准。IR_Carrier_On和IR_Carrier_Off就是使能和关闭TIM3的PWM输出。发射完一帧后至少延时100ms再发下一帧,给空调接收头留处理时间。

4.3 红外解码与遥控器码值学习

解码用外部中断加定时器捕获。VS1838B输出接PA0,配置为下降沿触发中断。中断里记录定时器计数值,算出低电平和高电平持续时间,然后判断是引导码还是逻辑位。引导码的特征是低电平约9000us、高电平约4500us,逻辑0是低560us高560us,逻辑1是低560us高1690us。

void EXTI0_IRQHandler(void) { static uint32_t last_time = 0; uint32_t now = TIM_GetCounter(TIM2); uint32_t duration = now - last_time; last_time = now; if (duration > 8000 && duration < 10000) { // 引导码低电平 ir_bit_index = 0; memset(ir_data, 0, sizeof(ir_data)); } else if (duration > 400 && duration < 700) { // 逻辑0或逻辑1的低电平部分,等下一个中断判断高电平 } else if (duration > 1500 && duration < 1900) { // 逻辑1的高电平 ir_data[ir_bit_index / 8] |= (1 << (ir_bit_index % 8)); ir_bit_index++; } else if (duration > 400 && duration < 700) { // 逻辑0的高电平 ir_bit_index++; } EXTI_ClearITPendingBit(EXTI_Line0); }

解码代码的关键是状态机要清晰,别在一个中断里塞太多逻辑。通常的做法是中断里只记录时间戳和电平,主循环里做状态判断和码值解析。学习模式下把解析出的35位码值存到数组里,串口打印出来,对照格力协议表就能确认温度、模式、风速的编码位置。

4.4 串口命令与状态机控制

串口用来接收调试命令和输出状态。命令格式简单点,比如“P1”开机,“P0”关机,“T26”设26度,“M0”制冷,“F2”中风。解析函数用switch-case处理,收到命令后修改ac_state,然后调用IR_Send_AC发射。

void UART_Command_Handler(char *cmd) { switch (cmd[0]) { case 'P': ac_state.power = cmd[1] - '0'; break; case 'T': ac_state.temp = atoi(&cmd[1]); if (ac_state.temp < 16) ac_state.temp = 16; if (ac_state.temp > 30) ac_state.temp = 30; break; case 'M': ac_state.mode = cmd[1] - '0'; break; case 'F': ac_state.fan = cmd[1] - '0'; break; default: printf("Unknown command\r\n"); return; } IR_Send_AC(&ac_state); printf("State: P%d T%d M%d F%d\r\n", ac_state.power, ac_state.temp, ac_state.mode, ac_state.fan); }

状态机控制的好处是逻辑集中,后续加自动控温时只需要在定时器里读温湿度传感器,比较设定值后自动修改ac_state并发射,不用改红外协议层。

5. 避坑与常见问题排查:红外控制最容易翻车的五个点

5.1 空调没反应,但手机摄像头能看到红外光

现象:发射时红外LED亮,但空调不响应。原因通常是载波频率偏了。STM32的TIM3配置成38kHz,但实际输出频率受晶振精度和定时器分频影响,偏差超过2kHz空调就认不出来。解决:用示波器测PWM输出频率,或者用逻辑分析仪抓红外接收头的输出波形,确认引导码时长是否在9000us左右。如果偏了,调整TIM_Period值重新算。

5.2 接收头解码全是乱码

现象:串口打印的码值每次都不一样,或者全是0xFF。原因有两个:一是接收头电源没滤波,空调遥控器靠近时干扰大;二是解码中断里延时太长,错过了后续边沿。解决:接收头VCC并100nF加10uF电容,中断里只记录时间戳,解析放主循环。另外确认VS1838B输出是否反相,如果空闲时是低电平,说明接错了或者接收头坏了。

5.3 发射距离短,超过一米就没反应

现象:近距离能控,稍微远一点就失灵。原因通常是红外LED驱动电流不够。STM32的GPIO最大输出20mA,直接驱动LED亮度不够。解决:加三极管驱动,基极电阻1k,集电极串LED和限流电阻,峰值电流调到50mA到100mA。注意占空比别超1/3,否则LED发热严重。

5.4 连续发射时空调状态错乱

现象:快速按几次按键,空调状态和预期不一致。原因是红外发射没有帧间隔,空调接收头处理不过来。解决:每次发射后延时至少100ms,连续发射时在IR_Send_AC末尾加delay_ms(100)。另外状态更新和发射要原子操作,别在发射过程中改ac_state。

5.5 上电后系统跑飞或复位

现象:板子一上电就重启,或者运行几分钟后死机。原因通常是电源电流不够。红外发射瞬间电流大,LDO输出电容不够会导致电压跌落,MCU复位。解决:LDO输入输出都加10uF以上电容,红外LED的限流电阻别取太小,峰值电流控制在100mA以内。看门狗必须开,IWDG超时设1秒,主循环里定期喂狗。

6. 验收标准与答辩演示:怎么证明这套方案真的能控空调

6.1 功能验收清单与测试方法

验收不是跑通一个功能就算完,得按清单逐项过。下面这张表是我带项目时常用的验收模板,每一项都有明确的通过标准。

验收项测试方法通过标准
开关机串口发P1和P0空调响应开关,延迟小于1秒
温度调节串口发T16到T30空调温度逐度变化,无跳变
模式切换串口发M0到M3制冷、除湿、送风、制热均响应
风速调节串口发F0到F3自动、低、中、高均响应
红外学习按学习键后对准遥控器串口打印35位码值,与原遥控器一致
连续运行上电运行2小时不死机、不重启、状态不漂移

测试时注意每次只改一个变量,比如测温度时模式固定制冷,风速固定自动,避免多变量干扰判断。如果某项不通过,先查串口打印的状态值对不对,再查红外发射波形,最后查空调接收。

6.2 答辩演示的节奏与话术

答辩演示时间通常5到10分钟,节奏很关键。开场别讲原理,直接演示功能:串口发命令,空调滴一声响应,温度从26变到24,模式从制冷切到送风。演示完功能再讲架构,用框图说明STM32、红外发射、红外接收、空调之间的关系。最后讲扩展点,比如预留了I2C接口可以接SHT30温湿度传感器,后续做自动控温。

话术上有个技巧:主动说一个你踩过的坑。比如“最开始接收头没加滤波电容,解码全是乱码,后来在VCC并了100nF和10uF才稳定”。这种细节比背稿子更能让评委信服,说明你真的动手调过。

6.3 从演示到交付:我踩过的坑和固定习惯

第一次做这个项目时,我以为红外发射就是把GPIO拉高拉低,结果空调死活不响应。后来用逻辑分析仪抓波形,发现引导码只有2000us,远低于9000us,原因是delay_us用空循环实现,编译器优化后延时缩水了。从那以后我每次做红外项目,都强制走一遍:先用示波器确认38kHz载波,再用逻辑分析仪抓引导码时长,最后才写协议层代码。这个习惯帮我省了至少两天调试时间。

还有一次答辩前夜,连续发射测试时空调突然不响应了,查了半天发现是发射管限流电阻取太小,LED过热后光衰。换成220Ω电阻后连续发100帧都没问题。所以验收时别只测单次功能,连续运行测试必须做,至少跑2小时。

希望帮到你,这套方案从硬件到代码到验收都跑通过,照着做能少走不少弯路。

本文还有配套的精品资源,点击获取

相关新闻

rea监控分析组件:从统一事件模型到告警收敛的实战指南

rea监控分析组件:从统一事件模型到告警收敛的实战指南

深夜两点十七分&#xff0c;我盯着屏幕上滚动的告警流&#xff0c;第无数次按下刷新键。这不是什么特殊的日子&#xff0c;只是一个普通的线上值班夜。系统表现得很“正常”——业务指标平稳&#xff0c;日志没有报错&#xff0c;可监控大盘上那条细小的毛刺&#xff0c;却让我…

2026/10/21 5:01:00 阅读更多 →
5G接入控制机制详解:从统一接入控制到切片感知的参数配置与调优

5G接入控制机制详解:从统一接入控制到切片感知的参数配置与调优

1. 5G接入控制到底在控制什么第一次接触5G接入控制这个概念&#xff0c;很多人会把它和“能不能连上基站”混为一谈。实际上&#xff0c;接入控制要解决的问题比“连不连得上”精细得多。它管的是&#xff1a;在什么条件下允许一个终端发起接入、以什么身份接入、接入后能占用多…

2026/10/21 5:01:00 阅读更多 →
零基础转岗网络安全?十个简单实操任务助你快速入门

零基础转岗网络安全?十个简单实操任务助你快速入门

转岗网安&#xff0c;零基础&#xff0c;十个简单教程&#xff0c;避开复杂理论&#xff0c;轻松掌握核心技能——这话听起来很营销&#xff0c;但我可以负责任地告诉你&#xff0c;它确实是可以成立的。前提只有一条&#xff1a;你找对入门方向。很多人劝退转岗网安&#xff0…

2026/10/21 5:01:00 阅读更多 →

最新新闻

在NAS上用Docker部署YesPlayMusic:打造全家人使用的干净网易云音乐播放器

在NAS上用Docker部署YesPlayMusic:打造全家人使用的干净网易云音乐播放器

我把家里的NAS当成一个长期运行的“家庭服务器”来用&#xff0c;除了存照片、跑下载任务、备份手机相册之外&#xff0c;最近折腾的最值的一件事&#xff0c;是把第三方网易云音乐播放器YesPlayMusic部署了上去。现在全家任何一台设备&#xff0c;只要打开浏览器输入地址&…

2026/10/21 5:41:15 阅读更多 →
NFS服务端运维实战:从部署配置到性能调优与安全加固

NFS服务端运维实战:从部署配置到性能调优与安全加固

NFS服务端常用操作这件事&#xff0c;听起来无非是装个包、改一行exports、重启下服务。但真正把一台NFS服务端当作生产环境里的存储入口来维护时&#xff0c;你会发现协议的版本选择、用户权限映射、端口规划、线程数调整、异常挂载处理&#xff0c;每一项都有自己的门道。这份…

2026/10/21 5:41:15 阅读更多 →
.NET Core 3.1容器化部署实战:Docker镜像优化与K8s生产落地

.NET Core 3.1容器化部署实战:Docker镜像优化与K8s生产落地

1. 项目概述&#xff1a;为什么.NET Core 3.1 Docker这个组合至今仍值得深挖我第一次在生产环境把一个订单核验服务从Windows Server IIS迁到Linux容器里&#xff0c;用的就是.NET Core 3.1 Docker。那会儿是2020年中&#xff0c;团队里还有人质疑“微软的东西跑Linux靠谱吗”…

2026/10/21 5:41:15 阅读更多 →
基于LabVIEW的纯电动汽车电驱测试系统:从硬件架构到上位机设计

基于LabVIEW的纯电动汽车电驱测试系统:从硬件架构到上位机设计

简介&#xff1a;面向新能源汽车测试领域的PDF研究文献&#xff0c;基于Labview图形化编程环境&#xff0c;系统讲解纯电动汽车电力驱动测试平台的设计与实现&#xff0c;适合整车厂测试工程师、高校车辆工程与自动化专业师生用于方案论证与课题研究。内容覆盖电机控制器算法模…

2026/10/21 5:41:15 阅读更多 →
LangChain + 通义千问 RAG知识库问答实战:完整实现与关键调优

LangChain + 通义千问 RAG知识库问答实战:完整实现与关键调优

先说明一下我为什么非要写这个 003 号项目。做问答应用的人大概都有同一种痛&#xff1a;大模型生成能力强&#xff0c;但它的"知识"停留在训练时的那一刻。你问它团队内部制度、某份产品手册的具体条款、某个系统的配置要求&#xff0c;它能答&#xff0c;但答案不可…

2026/10/21 5:41:15 阅读更多 →
高校就业服务平台毕业设计:从需求拆解到权限管理实战

高校就业服务平台毕业设计:从需求拆解到权限管理实战

1. 项目概述与核心需求拆解毕业设计选题选到“基于WEB的高校就业服务平台设计与实现”&#xff0c;第一反应是什么&#xff1f;很多同学会下意识觉得&#xff0c;这不就是一个“招聘网站”吗&#xff1f;把职位挂出来&#xff0c;学生投简历&#xff0c;管理员审核&#xff0c;…

2026/10/21 5:40:15 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →