Emo 是一款基于树莓派4做的个人伴侣机器人,集时尚与创新于一身。它不仅仅是一款机器人,更是一个活生生的存在,与其他机器人不同,它拥有独特的个性和情感。
硬件部分
树莓派 4B
微雪 2 英寸 IPS LCD 显示屏(240×320 分辨率)
SG90 型舵机×2
MG90 型舵机
16 路 12 位 PWM 舵机驱动板
801S 震动传感器模块
单路 TTP223 触摸传感器模块
8 Ω 0.5 W 扬声器模块
PAM8403 双声道立体声音频放大器模块
5 x 7 cm 双面通用 PCB 原型板
40 针 2.54 mm 直插式排针排母连接器(分离式针座)
304 不锈钢 CSK 沉头十字螺栓 M2×10
M3 x 10 mm CHHD 螺栓螺母套件
M3 x 20 mm CHHD 螺栓螺母套件
B-30-1000 电路板飞线(有 PVC 绝缘外层)
2mm 厚亚克力板
软件部分
Autodesk Fusion 360
Microsoft VS Code
工具部分
多功能螺丝刀
电烙铁
无铅焊锡丝
电路板焊接固定夹具
助焊剂
多功能剥线钳
热胶枪
设计理念
我们使用 Autodesk Fusion 360 来设计 Emo 机器人,其中融合了实体和自由形式的建模技术。

为了简化打印过程,我们将机器人的主体分成几个部分,方便用螺钉组装。

我们精心考虑了电源的位置,将它置于底座上,并为电源线的自由移动预留了充足的空间。为了提高机器人运动的稳定性,我们还特意使车身与底座轻微接触。

3D 打印
我们选择 PLA 作为 3D 打印材料,并单独打印每个组件,但这需要花费较长时间。

为了提升底座的耐用性,我们将底座的填充密度设置为 40%,而其他部分则为 20% 。
现在我们已经打印完所有零件,下面请跟着我的步伐开始组装吧!
注:3D 图纸及代码文末下载。
组装底座
首先,我们将 Micro USB 模块安装在底座上,这将作为机器人的供电接口。
我们将 SW-420 震动传感器放在靠近 USB 模块的位置上,它可以侦测到机器人周围产生的任何振动。
底座部分由以下三根导线组成:VCC、GND 和震动传感器的输出导线。
最后,我们使用 M3 x 10 mm 螺栓将盖子牢牢地固定在底座上。至此我们完成了底座部分的组装。
组装头部
为了让机器人头部具有触控能力,我们采用了一款紧凑型电容式触摸传感器,并将其完美地嵌入到指定区域中。

机器人头部的核心部分是一块微雪的 2 英寸 IPS 显示屏,它承担着传达机器人情感的重要任务。我们使用黑色支架和少量热熔胶将这块显示屏牢牢地固定住。
为了实现音频播放功能,我们机器人在头部左侧集成一枚 8 Ω 0.5 W 扬声器,并搭配 PAM8403 放大器,对树莓派中的声音进行放大。

接着,我们使用 M3 x 15 mm 螺钉将头部下半部分牢牢地固定在机器人的身体上。然后连接之前组装好的头部上半部分,最终完成整个头部的组装。
组装身体
在机身部分,我们安装了三个舵机:两个用于手部的 SG90 型舵机,以及一个用于身体旋转的 MG90 型舵机。为了方便地控制这些舵机,我们采用了 PCA9685-16 通道舵机驱动器。
为了确保稳定性,我们还使用 M2 号螺母和螺栓将 MG90 型舵机固定在机身前部。
我们把 PCA9685 模块放在同一区域,这样能有效地平衡重力。
现在我们开始组装机器人手部。只需把 SG90 型舵机安装到两端,并把它牢牢地固定在舵轴上,就完成了。
我们采用带有排母的原型板来连接树莓派,这种方法比使用导线连接更为高效。同时,通过焊接,我们能保证各个元件正确连接,从而最大程度地降低导线缠绕的可能。
为节约空间,我们使用手机充电器上的公头 USB Type-C 板为树莓派供电。音频传输方面,我们采用了 TRS 音频插孔。
最后,我们用螺栓把树莓派固定在机身背部,至此完成了电源部分的安装。

此外,我们在正面采用了 2 mm 厚透明亚克力板,这可以掩盖住外盖和 LCD 模块之间的缝隙。

编程
接着,我们开始编写生成情感的代码,其中舵机运动和动画是核心部分。为了实现这些复杂的功能,我们采用 Python 的 multiprocessing 包,这使机器人能够同时执行多个任务,从而提高运行效率。

值得一提的是,我们使用 Adobe After Effects 软件制作动画,并将其导出为图像序列,这使得它更易于集成到整个系统中。
调试
完成编程后,为确保机器人正常运行,我们需要对所有组件进行测试。
首先安装所需依赖:
pip install adafruit-blinka adafruit-circuitpython-servokit
进入代码文件夹(Code),并执行以下命令启动程序:
python3 final.py
现在你的 Emo 机器人已经开始运行了!当你对他说一些话时,他会分析您的语气并在屏幕上显示相应的表情。