一、 前言:桌面上的“遥控器”焦虑

作为一名嵌入式开发者,我的桌面常年是这样的:显示器、键盘、鼠标、开发板,还有一个永远在嗡嗡响的小风扇。

我一直在寻找一个能摆在手边的“中枢控制器”。市面上有类似的产品,比如 Loupedeck 或者 Stream Deck,但它们要么价格昂贵,要么功能过于固化,无法让我这个“极客”随心所欲地定制。

于是,我决定自己造一个——SmartDesk V1

我的初衷很简单:做一个能控制一切的物理旋钮。​ 旋转它,能调节电脑音量,能帮我监控桌面环境的温湿度。

二、 需求拆解:它必须做到什么?

在项目动工之前,我给自己列了一份详细的需求清单。这不仅是为了理清思路,更是为了确保后续软硬件设计不跑偏。

1. 交互体验(HMI)

这是最核心的部分。我不想在屏幕上戳戳点点,我要的是物理反馈。

  • EC11 金属编码器:必须是带按压的那种。旋转调节数值,按下确认。这是最直觉的操作方式。

  • OLED 显示屏:0.96 寸足以。用来显示当前的模式、数值(比如音量百分比)或者传感器数据。

  • 快捷键:预留2个独立按键,用于切换模式或执行宏命令。

2. 硬件性能(Hardware)

基于 STM32F103C8T6 的选型,我规划了以下功能:

  • 主控:STM32F103C8T6。为什么选它?因为它便宜、好用,最重要的是原生支持 USB 全速设备。这意味着我不需要额外的 USB-TTL 芯片,就能直接模拟键盘、鼠标或 MIDI 设备。

  • 电源:Type-C 供电。板载 3.3V LDO(AMS1117)和 5V 直通,方便给外设供电。

  • 扩展能力:预留 PWM 接口控制风扇或电机,预留 I2C 接口接温湿度传感器(SHT30)和光照传感器(BH1750)。

3. 软件架构(Software)

这是我对自己的一次挑战。我不想只写一个 while(1)的裸机代码。

  • RTOS 加持:必须上 FreeRTOS。这样我可以把显示、按键扫描、USB 通信分成不同的任务,逻辑更清晰,后期维护也方便。

  • 低功耗设计:虽然是有线供电,但我希望它在闲置时能“安静”下来。利用 STM32 的 STOP 模式,配合 SI2303 MOS 管切断 OLED 和传感器的电源,实现超低功耗待机。

4. 物理形态(Mechanical)

  • 一体化设计:PCB 直接做成核心板,不需要底板。

  • 外壳友好:预留标准的 20mm EC11 轴长和开孔位置,方便后续 3D 打印或亚克力外壳。

三、 技术选型与难点预判

模块

选型

选型理由

预期难点

MCU

STM32F103C8T6

性价比之王,USB 外设齐全

USB HID 描述符配置较复杂

编码器

EC11 (20mm轴)

手感好,寿命长

正交解码的消抖逻辑

电源

AMS1117-3.3V

经典稳定

大电流下 LDO 发热问题

保护

1206 0.5A 保险丝

防止短路烧毁 USB 口

选型需匹配 5V 电路

系统

FreeRTOS

多任务调度

堆栈溢出、优先级反转

关于难点的预判

我知道 PCB 设计会是个坎。特别是 USB 的差分线,以及 GND 的铺铜。之前我在练手时遇到过自动布线导致的“天线效应”和 DRC 间距违规(0.05mm 被工厂驳回),所以这次我决定全程手动布线,并严格按照 6mil 的安全间距执行。

四、 项目目标与成果预览

我希望 SmartDesk V1 最终能达到这样的效果:

  1. 作为一个 PC 外设:旋转旋钮 = 调节 Windows 系统音量;按下旋钮 = 静音;

  2. 作为一个环境控制器:实时显示桌面温湿度和亮度。

  3. 作为一个学习平台:代码开源,工程规范,供大家参考。

五、 结语

这就是 SmartDesk V1 的起点。它不是最复杂的硬件,也不是最前沿的技术,但它承载了我从“使用者”转变为“创造者”的想法。

接下来的几篇文章,我会详细记录:

  • 如何用 立创 EDA​ 画出原理图和 PCB(以及我是怎么解决 DRC 报错的)。

  • 如何用 Keil MDK + 标准库​ 搭建工程,并移植 FreeRTOS。

  • 如何实现 USB HID​ 连接电脑,以及 低功耗​ 的实测数据。

如果你也对这个项目感兴趣,欢迎在评论区留言,或者去我的 GitHub 仓库关注进度。

GitHub 仓库:[等待更新...]

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐