基于 STM32 的无线控制小桌宠

60 多年过去了,尽管辉光管已经停产,有很多工程师仍然对它情有独钟。我用 8 块液晶显示屏制作了一个拟辉光管时钟,感受复古元素的美感,表达对过去经典的敬意。

小桌宠是一款智能桌面机器人,它拥有在水平方向上的移动能力,并具备上下、左右、前后的运动能力,可以在桌面上自由行走并做出简单的动作。这款智能桌面机器人既可用于教育和娱乐,也可作为简单的办公辅助工具。

打开网易新闻 查看更多图片

演示视频

本项目旨在设计一款成本低、结构简单的无线控制小桌宠。我充分利用现有的材料,并采用简单的机械设计,结合微控制器和无线通信模块,致力打造一款经济实惠、易于制作和维护的智能桌面机器人。该小桌宠不仅是一款富有趣味的娱乐设备,更是一个能够展示无线通信和微控制技术的实用项目。

在设计中,机身承载框被设计作为躯干,用于收纳 PCB 和 SG90 舵机的多余线路。此举可提升整体结构的稳定性,并确保外观整洁。通用四肢件在 SG90 舵机普通摆臂的基础上进行仿生设计,使其具备上下、左右、前后的独立运动能力,并可在水平方向移动。

电源方面,我采用了 18650 电池(见图 1),输出电压为 3.7V,并采用了 TP4056 充电模块(见图 2)进行充放电管理。主控芯片选用了意法半导体 F1 系列的 STM32F103C8T6模块(见图 3),该模块采用 ARM Cortex-M3 32 位 RISC 核 心, 运行频率可达 72MHz,具备丰富的外设接口,易于 PCB 布局与焊接,并支持多种低功耗模式,广泛用于嵌入式系统。

图 1 18650 电池

打开网易新闻 查看更多图片

图 2 TP4056 充电模块

打开网易新闻 查看更多图片

图 3 STM32F103C8T6 模块

此外,我还采用了 nRF24L01 无线通信模块(见图4),作为一款低成本、低功耗的 2.4GHz 无线收发器,该模块适用于中短距离无线通信。在用户交互方面,我采用了 0.96 英寸 OLED显示屏(见图 5),为小桌宠提供生动的表现力,此模块适用于对功耗有限制的小型电子设备,具备优秀的显示效果和易用的通信接口。舵机部分我选择了 SG90 舵机(见图 6),这种体形小巧、价格低廉的舵机能够在小型机械结构和电子设备控制中提供经济、方便的解决方案。

打开网易新闻 查看更多图片

图 4 nRF24L01 无线通信模块

打开网易新闻 查看更多图片

图 5 0.96 英寸 OLED 显示屏

打开网易新闻 查看更多图片

图 6 SG90 舵机

在系统的调试方面,我添加了LED 和微动按键,这些部件能够便于进行调试。

材料清单见附表,基本工具、耗材如电烙铁、焊锡丝等则不再进行介绍。

打开网易新闻 查看更多图片

机械结构

外观设计

通过多次测试,我确定整个机器的外观大小为 62.9mm×99mm×99mm。这一大小经过精心改良,旨在满足小桌宠设计的需求。受限于电池大小、主控模块大小以及舵机大小,目前我难以对此设计进行进一步改进。

PCB设计

我使用了立创 EDA(专业版)作为 PCB 设计工具,这是一款易于上手的 PCB 绘制软件,其模块化设计可以充分利用主控模块。同时,这样的设计也进一步降低了复刻和维修的难度。值得一提的是,本设计并未使用主控模块的全部引脚,并且主控模块可拆卸,以避免在项目搁置时主控模块闲置。电路布局和 PCB 外观如图 7 所示。

打开网易新闻 查看更多图片

图 7 电路布局和 PCB 外观

建模过程

PCB 设计完成后,我根据 PCB大小进行外壳设计,并使用 PLA 材料通过 3D 打印技术打印外壳。PLA 材料在保证结构强度的同时,进一步降低了制造成本。考虑到舵机的大小和走线,我对外壳进行了适当的下挖设计,以确保舵机的安装,外壳模型如图 8 所示。

打开网易新闻 查看更多图片

图 8 外壳模型

接下来,进行通用四肢件的设计,我参考了市面上的 4 足仿生机器人。我计划在模型关节处采用 120°固定关节的设计方式,通过编程解决行走和姿态控制的问题。考虑到 4 个通用四肢件的方向存在差异,我采用挖空设计,以便后续打印。最终的通用四肢件模型如图 9 所示,提供了更好的机械稳定性和灵活性,为小桌宠的运动提供了更多可能。

打开网易新闻 查看更多图片

图 9 通用四肢件模型

电路设计

我设计的整体电路如图 10 所示。

打开网易新闻 查看更多图片

图 10 整体电路

程序设计

我选择 C 语言作为主要编程语言, 并 在 Keil 5 中 进 行 开 发, 通 过Keil 5 编译小桌宠的程序,采用 STLink 仿真烧录器进行烧录。开发过程基于 STM32 标准库展进行,这一设计具备高度的可移植性,使得未来项目的开发更加便捷。

在算法部分,我借鉴了 4 足机器人步态数据,以行走步态(见图 11)为蓝本,并根据行走步态的格式进行编写。通过控制舵机在不同相位下的不同旋转角度,小桌宠顺利实现了行走步态。

打开网易新闻 查看更多图片

图 11 行走步态

我通过 final.h 对所有使用的程序进行封装。这种做法不仅增强了程序的安全性,还有助于更好地管理各个模块,提高了程序的可维护性和复用性,从而使程序更加稳定和易于扩展。

final.c 包含对各个模块的定义,并负责校准舵机角度。通过硬件仿真,可以识别并解决舵机误差,确保舵机能够按预期运行,具体如程序 1 所示。

打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片

程序 2 介绍了前进步态函数,为了确保能够实时响应操作,我精确设计了各项函数的延迟。这一步骤的实施有助于确保小桌宠能够在各种情况下做出即时而准确的反应,从而增强了其互动性和稳定性。

打开网易新闻 查看更多图片
打开网易新闻 查看更多图片

程序 3 主要负责 nRF24L01 模块通过 SPI 协议进行通信,用于接收控制信号。这一模块确保小桌宠能够可靠地接收并解析来自遥控器或其他控制设备的指令,从而实现对小桌宠的灵活操控。

打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片

程 序 4 负 责 舵 机 PWM 控 制 信号的初始化和占空比。在该模块中,我 将 舵 机 控 制 周 期 设 定 为 20ms,占 空 比 设 定 为 2.5%~12.5%, 对 应0°~180°,以便进行模块化编写。

打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片

程序 5 负责控制板载 LED,实现所需的各种 LED 效果。在实际演示中,仅在自检时向 LED 发送全亮指令,以确保其正常工作,这一设计能够为小桌宠的不同状态提供视觉指示,并进一步增强其交互性。

打开网易新闻 查看更多图片

程 序 6 是 OLED 显 示 函 数, 通过 I2C 协议通信,以实现用户交互。这一模块的设计使得小桌宠能够通过OLED 显示屏向用户展示各种信息和状态,提升用户体验。

打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片
打开网易新闻 查看更多图片

结语

最 后, 我 把 机 械 结 构、PCB、电池等部件进行组装,然后上电并烧录编译好的程序。通过与任意使用nRF24L01 模块的遥控器进行通信,我可以发送指令,实现对小桌宠的无线控制。大家可以扫描文章开头的二维码观看演示视频。现在可以好好欣赏智能小桌宠(见图 12)啦!

打开网易新闻 查看更多图片

图 12 智能小桌宠