基于行空板的开源“宠物”机器人——Tillu

本周分享一个基于行空板M10制作的开源“宠物”机器人——Tillu,其灵感来源于Otto机器人Tillu具备行走、跳舞等动态功能,配备了显示屏用于展示表情,还集成了麦克风、陀螺仪等传感器,支持语音识别和触摸交互。项目完整开源了3D打印文件和Python代码,小伙伴们可以通过Fusion 360修改设计,使用Mind+进行可视化编程。整个项目的成本控制合理,制作难度适中,非常适合想要入门机器人开发的创客们进行学习和实践。

基于行空板的开源“宠物”机器人——Tillu图58


特色功能
趣味表情:通过行空板显示屏,来帮助Tillu显示各种灵活可爱的面部表情;
行走、舞蹈:Tillu通过两条腿上的四个舵机来实现行走,或向前后左右的移动,甚至完成一系列连续的舞蹈动作,共计含有约10种行动模式;
触摸传感和语音指令:
内置触摸传感器,每当有人触摸Tillu的头部,它就会开始一些随机的动作;由于行空板M10内置的麦克风,它可以识别语音指令,每当你对它说“Tillu,dance”(Tillu,跳舞),它就会开启一段随机舞蹈。它还可以根据你的指令来向前、退后或左右转动或舞蹈。
外观方面,使用深灰色和橙色丝线为Tillu打造酷炫的双色外观;
其它方面,头部背壳的开孔设计方便充电和连接电脑扩展编程。
 

作者分享(视频,请至 原文查看)


材料清单

基于行空板的开源“宠物”机器人——Tillu图2


硬件
行空板M10
DF15MG舵机
2路18650电池座
Type-C L型公对母转接线 (行空板M10专用)
触觉按钮
触摸传感器
螺丝套件

软件
Mind+
Autodesk Fusion

其他
3D 打印机

项目过程
第一步:CAD和3D打印
组件导入:我导入了所有标准组件,如行空板M10、舵机,并手动测量了尺寸以创建电池管理板。
 

基于行空板的开源“宠物”机器人——Tillu图1


机器人主体设计:
头部外壳:设计用于稳固地承载重型电池和行空板。
主体(中心框架):作为结构支柱,连接头部和腿部,同时确保稳定性。
盖板:提升机器人的美观性。
腿脚:灵感来自Otto DIY机器人,确保流畅运动和平衡。
耳机设计:为增添趣味和酷炫外观而设计,赋予Tillu更多个性,
整个机器人的部件使用螺丝组装固定,项目作者在外壳背面设计了电源按钮和两个USB Type-C接口的插槽,一个用于电池充电,另一个用于行空板编程。

你可以在 Fusion 360 中打开模型,以根据您的要求对其进行修改。或者可以直接下载用于 3D 打印的 STL 文件
以下是要打印的部件:
Main.stl  
Cover.stl
Servo Housing Right.stl
Servo Cover Right.stl
Servo Cover Left.stl
Right Leg.stl
Left Leg.stl
Head Phone P1.stl
Head Phone P2.stl
Head Phone P3.stl


第二步:3D打印部件组装
1.组装外壳和面罩:
所需打印部件:Housing.stl(灰色)+ Visor.stl(橙色)
步骤:

  • 取机器人的头部外壳(Housing),找到用于安装显示屏(Visor)的插槽。
  • 将显示屏(Visor)插入头部外壳的对应插槽中。
  • 取少量快干胶将面罩固定到位,为了保持外观整洁,注意不要使用过量。


 

基于行空板的开源“宠物”机器人——Tillu图3



 

基于行空板的开源“宠物”机器人——Tillu图4



2.组装耳机:
所需打印部件:Head Phone P1.stl、 Head Phone P2.stl 、Head Phone P3.stl
步骤:

  • 双色打印: 如果你希望耳机部分呈现双色效果,可以选择更换丝线。在打印过程中暂停,更换耗材,以达到理想的效果。
  • 打印完成后,将四个耳机部件对齐组装:
  • 将耳机部件P2安装到耳机部件P1上。
  • 将两个耳机部件P3安装到位,完成耳机的设计。
  • 虽然这些部件设计为紧密贴合,但如果你需要额外的牢固性,可以适量使用胶水进行固定。


第三步:为舵机添加接线

基于行空板的开源“宠物”机器人——Tillu图5

舵机自带接线,但这些接线与行空板M10的接口不兼容。因此,需要对接线进行改造,以确保兼容性和正常连接。
行空板M10带有三个含PWM 信号的 GPIO 接口(P21、P22 和 P23),而在我们的项目中,需要连接四个舵机,为解决此问题,我们可以:

  • 给前三个舵机使用可用的 GPIO 引脚
  • 把第四个舵机的信号引脚直接焊接到行空板上的 P16 上
     

1.改造和添加接口:准备接线:取出行空板附带的两个双面三pin接线,将它们从中间剪开,得到四个独立的接线。保留三条接线用于连接舵机,另一个用于触摸传感器(在后续步骤中使用)。

2.连接舵机:
使用两组接线分别连接两个舵机。按照下图所示的极性和接线图进行连接:

  • 信号线(橙色)
  • 5V电源线(红色)
  • 地线(棕色)
     

确保接线的方向与接线图一致。

3.将两个舵机连接到一组接线上:
对于第三组接线:

  • 将两个伺服电机的地线和5V电源线连接到同一组接线上。
  • 将其中一个伺服电机的信号线连接到接线上。
  • 保持第二个舵机的信号线畅通;稍后将焊接到 P16 上。


检查所有连接,确保极性和接线图一致。

 

基于行空板的开源“宠物”机器人——Tillu图6



 

基于行空板的开源“宠物”机器人——Tillu图7


 

基于行空板的开源“宠物”机器人——Tillu图8

 第四步:扩展按钮以控制电源开关

 

基于行空板的开源“宠物”机器人——Tillu图9



 

基于行空板的开源“宠物”机器人——Tillu图10



 

基于行空板的开源“宠物”机器人——Tillu图11



 

基于行空板的开源“宠物”机器人——Tillu图12



项目设计中的电池座包含一个小按钮,用于控制Tillu机器人的电源开关。然而,由于外壳设计的原因,无法触摸到按钮,并且由于尺寸过小,实际使用时不够方便。为了解决这个问题,我们将通过添加一个外部触摸按键来扩展其功能。

所需材料:
触觉按钮、焊接器材、用于扩展连接的绝缘线
步骤:

  • 识别电池座上的微型内置按钮
  • 注意连接点(两个端子)
  • 将两根绝缘线连接到按钮端子,确保它们长度足够
  • 将外部按键的一端焊接到与连接图一致的相同端子上。


第五步:连接电池
 

基于行空板的开源“宠物”机器人——Tillu图13


 

基于行空板的开源“宠物”机器人——Tillu图14



在此步骤中,我们将使用电池座为行空板准备电源,并用同一个 USB Type-C 接口实现无缝编程。通过创建一个定制的扩展接线,我们将使电池组能同时为电路供电,并且可以访问行空板的Type-C 接口进行编程。

所需材料:
USB Type-C 延长线、电池座、焊接器材、电线(处理电力负责)
步骤:

  • 取一根USB Type-C延长线,在母头一端剥开绝缘层。
  • 找到G(GND,地线)和V(Vcc,电源)端子。
  • 将两根高质量的导线分别焊接到母头的GND和VCC端子上。
  • 将焊接好的导线另一端连接到电池座的GND和5V输出端子上。
  • 参考连接图以确保接线正确。
  • 使用热缩管或绝缘胶带包裹Type-C延长线上裸露的焊接部分,确保绝缘和安全。


 

基于行空板的开源“宠物”机器人——Tillu图15



 

基于行空板的开源“宠物”机器人——Tillu图16



第六步:触摸传感器接线
 

基于行空板的开源“宠物”机器人——Tillu图17

所需材料:
触摸传感器模块、兼容接线(来自步骤三)、焊接器材、跳线(按需使用)
步骤:
取步骤三中准备好的接线,根据上面的电路图,将接线焊接到触摸传感器的引脚上。
 

基于行空板的开源“宠物”机器人——Tillu图18

基于行空板的开源“宠物”机器人——Tillu图19


第七步:编程测试

基于行空板的开源“宠物”机器人——Tillu图21

如上图所示,连接所有舵机和触摸传感器以及在前期步骤中准备的Type-C电池组。暂时不要焊接第四个伺服电机的裸露导线。

基于行空板的开源“宠物”机器人——Tillu图20

运行Mind+,测试程序
下载并安装Mind+,在菜单中读取行空板,切换到Python模式,开始编程。(如何连接?点击查看行空板Mind+编程说明
从 Tillu GitHub 存储库下载提供的文件夹,解压缩后,将整个 Tillu 文件夹拖放到行空板的文件系统中,打开位于 Tillu 文件夹中的 forward.py 文件并运行该程序。
  • 将行空板从电脑上断开连接。
  • 打开电池模块的电源。
  • 行空板应该会开机启动。
  • 使用行空板上的导航按钮,在根目录中找到forward.py文件。
  • 在行空板上直接选择并运行该程序。
  • 舵机应该会响应,触摸传感器也应该能够正常接收输入。
     
提醒:在测试前,要确保电池座电量充足。另外,如果有组件没按预期触发运行,则需要检查连接和接线。


第八步:安装行空板支架

基于行空板的开源“宠物”机器人——Tillu图22

所需材料:
行空板M10、3D打印的行空板支架、3颗M3螺丝、电池座
步骤:
  • 将电池组的Type-C线通过支架上的预留槽连接到行空板上。
  • 将3D打印的行空板支架与行空板上的安装孔对齐。
  • 使用3颗M3螺丝将支架固定到行空板上。
 

基于行空板的开源“宠物”机器人——Tillu图24

基于行空板的开源“宠物”机器人——Tillu图23

基于行空板的开源“宠物”机器人——Tillu图25


第九步:安装触摸传感器
取触摸传感器,并在其背面涂抹少量胶水。
将触摸传感器安装到外壳主体上,用手按压几秒钟,直到胶水变干。

 

基于行空板的开源“宠物”机器人——Tillu图26

 
第十步:安装电池座
 

基于行空板的开源“宠物”机器人——Tillu图27

 
所需材料:
电池座、Type-C延长线、M2螺丝、螺丝刀
步骤:
  • 取第二根Type-C延长线,将其牢固地插入电池管理板。
  • 将电池组与外壳上预设的螺丝孔对齐。
  • 使用M2螺丝将电池组固定到外壳上。
 

基于行空板的开源“宠物”机器人——Tillu图28

 

基于行空板的开源“宠物”机器人——Tillu图29

 
第十一步:组装Tillu电机
 

基于行空板的开源“宠物”机器人——Tillu图30

 
所需材料:
2个舵机(髋部舵机)、M2螺丝、小型螺丝刀
说明:
由于舵机侧面的接线会与主体槽位的壳壁发生碰撞,导致舵机无法直接安装到主体槽位中。为了解决这个问题,我们需要暂时拆卸舵机外壳的一部分。
步骤:
  • 用螺丝刀拆下每个舵机底部盖板的螺丝。
  • 小心地将舵机的底部部分分离。
  • 先将舵机外壳的底部部分放入主体槽位中。
  • 将舵机与槽位对齐,并轻轻放置到位。
  • 当舵机位置正确后,重新将底部部分安装到舵机上。
  • 拧紧之前拆下的螺丝,确保舵机外壳牢固闭合。
  • 使用舵机配件包中的M2螺丝将舵机固定到主体上。
 

基于行空板的开源“宠物”机器人——Tillu图31

基于行空板的开源“宠物”机器人——Tillu图32

 
第十二步:组装Tillu的脚
 

基于行空板的开源“宠物”机器人——Tillu图33

基于行空板的开源“宠物”机器人——Tillu图34

 
所需材料:
2个舵机(连接到一个共用接线)、2个舵机外壳、2个舵机盖板、M2螺丝、速干胶
步骤:
  • 取出之前连接到一个共用接线的两个舵机,以及3D打印的脚部舵机部件。
  • 将每个舵机插入其对应的外壳中,确保舵机的方向与外壳结构对齐。
  • 使用舵机配件包中的M2螺丝将每个舵机固定到其外壳上。
  • 取出盖板,对齐轴心,轻轻按压将盖板扣合到外壳上。
  • 在盖板与外壳接触的边缘处涂抹少量速干胶,确保粘合牢固。
 

基于行空板的开源“宠物”机器人——Tillu图36

基于行空板的开源“宠物”机器人——Tillu图35

 
第十三步:组装Tillu的腿
所需材料:
3D打印的腿部部件、4个舵机摆臂、M2螺丝
步骤:
  • 取出舵机附带的4个舵机摆臂,按照提供的图片所示,将其中两个摆臂从中间剪开。
  • 将舵机摆臂与3D打印腿部部件上的设计槽位对齐,参考图片中的方向,确保摆臂位置正确。
  • 使用M2螺丝将每个舵机摆臂固定到腿部部件上。
 

基于行空板的开源“宠物”机器人——Tillu图37

 
第十四步:启用自运行(开机启动)功能
1.使用行空板上的导航按钮进入系统菜单。
2.启用自动启动功能:
导航到“服务切换” -> “自动启动”。
将选项切换为“启用”。
 

基于行空板的开源“宠物”机器人——Tillu图38


3.设置程序自动运行:
导航到“运行程序” -> “root/” -> “main.py”,选择“main.py”并运行一次。
 

基于行空板的开源“宠物”机器人——Tillu图39


手动运行程序后,该程序将被设置为开机时的默认运行程序。
关闭并重新启动行空板,确认main.py是否自动运行。
注意事项:
如果行空板已经安装到外壳中,导航按钮可能无法直接操作。在这种情况下,可以通过行空板的USB接口连接鼠标来完成这些步骤。

 

基于行空板的开源“宠物”机器人——Tillu图40

 

基于行空板的开源“宠物”机器人——Tillu图41

 

第十五步:将行空板安装到头部内壳
  • 取出已经预先安装到定制3D打印支架上的行空板。
  • 接入所有接线,包括:通过Type-C接口连接的电池组、3个舵机、触摸传感器。
  • 将第四个舵机的信号线焊接到行空板的P16引脚上。
  • 将行空板组件放置到位,对准外壳(头部)上的安装孔。
  • 使用M2螺丝将行空板组件牢固地固定到外壳上。
 

基于行空板的开源“宠物”机器人——Tillu图42

 

基于行空板的开源“宠物”机器人——Tillu图43

 

基于行空板的开源“宠物”机器人——Tillu图44

 

基于行空板的开源“宠物”机器人——Tillu图45


第十六步:主体组装
1.定位Type-C数据接口(用于编程和充电)
  • 找到外壳上的Type-C数据接口槽位。
  • 将Type-C接口小心地放入其指定槽位,并使用速干胶固定。
  • 用同样方式,定位充电接口并使用速干胶固定。
2.定位触控开关按钮:找到外壳上触控开关按钮的槽位,将按钮放入槽位,使用少量速干胶固定。
3.主体组装:
  • 取主体部件,小心地将其放置到外壳上。
  • 对齐螺丝孔位,将所有线缆整齐地收纳在外壳内,确保没有线缆被挤压。
  • 确保两条舵机腿部线缆从设计好的槽位中引出。
  • 使用5颗M2螺丝将主体固定到外壳上。
 

基于行空板的开源“宠物”机器人——Tillu图46

基于行空板的开源“宠物”机器人——Tillu图47

基于行空板的开源“宠物”机器人——Tillu图48



第十七步:封闭部件
取下外壳并将其与主体组件对齐,使用 3 个 M2 螺丝将外壳固定到主体组件上。

基于行空板的开源“宠物”机器人——Tillu图49

基于行空板的开源“宠物”机器人——Tillu图50

第十八步:完成总装
1.运行初始化脚本:
将行空板连接到电脑,运行initialize.py脚本。该脚本会将所有舵机调整到90°中立位,确保组装时正确对齐。

基于行空板的开源“宠物”机器人——Tillu图51


2.安装腿部:
取两条腿部部件,将它们安装到处于90°位置的舵机上,使用螺丝固定腿部。

基于行空板的开源“宠物”机器人——Tillu图52


3.安装脚部:
取出之前组装好的脚部舵机,将它们以90°位置安装到腿部上,用螺丝将脚部舵机固定牢固。

基于行空板的开源“宠物”机器人——Tillu图53


4.安装头部(耳机部分):
取出耳机部分(头部组件),小心地将其安装在机器人的头部。
现在所有部件都已组装完成,设备已通电并准备就绪,Tillu机器人可以开机了!

基于行空板的开源“宠物”机器人——Tillu图54


代码注释

基于行空板的开源“宠物”机器人——Tillu图55

 
1. 初始化
  • 导入模块:程序导入了多个模块:random、threading 和 time 用于随机化、多任务处理和计时。
  • 自定义模块:
       robot_control.py 用于控制舵机运动。
       facial_expressions.py 用于显示基于视频的表情。
      speech_text.py 用于语音命令识别。
      Pin 用于与硬件按钮交互。
  • 触摸传感器:初始化一个数字引脚(Pin.P24)作为输入触摸传感器。
  • 动作控制锁:使用线程锁(action_lock)确保同一时间只能运行一个动作(触摸或语音触发)。


2. 关键功能
2.1. random_movement_and_expression
该函数随机选择一个动作和一个表情,并执行这些动作5秒:
  • 随机化:从13个预定义的舞蹈动作(如dance1、dance2)中选择一个,选择一个表情(如angry、heart)。
  • 并行执行:使用线程同时执行动作和表情。
  • 时长管理:两个线程运行5秒后重置到中立状态(reset_positions 和 blink)。
2.2. touch_listener
持续监控触摸传感器,如果按下:
  • 确保没有其他动作正在运行(通过action_lock)。
  • 执行random_movement_and_expression。
2.3. voice_listener
持续监听麦克风的语音命令(listen_for_command):
  • 命令映射:
将识别的命令(如“前进”、“后退”、“Tillu跳舞”)映射到机器人功能,如forward()或random_movement_and_expression。执行命令时确保与正在进行的动作没有冲突。
2.4. cleanup
一个工具函数,用于重置机器人并停止正在运行的进程。

基于行空板的开源“宠物”机器人——Tillu图56


3. 主程序
main() 函数:
  • 以中立状态的眨眼表情开始。
  • 在单独的线程中启动touch_listener和voice_listener。
  • 持续运行,直到被中断(如按下Ctrl+C),此时调用cleanup函数。
4. 自定义模块
4.1. robot_control.py
通过舵机控制机器人的运动:
运动类型:
  • 基本运动(如前进、后退)。
  • 转向(左转、右转)。
  • 舞蹈(13个独特的动作,使用同步舵机运动)。
确保平滑过渡:
通过将舵机设置为休息位置(reset_positions)。
4.2. facial_expressions.py
使用Pygame显示动态表情:
  • 播放预录制的视频循环(如blink.mp4、angry.mp4)。
  • 确保资源正确清理。
4.3. speech_text.py
使用Google Web Speech API识别语音命令:包括噪声调整和错误处理,以提高识别流畅度。
5. 关键特性
交互性:用户可以通过触摸或语音触发动作。
并行执行:表情和运动可以同时进行。
可扩展性:通过扩展相应模块,可以添加新的动作或表情。
错误处理:处理无效语音命令,并确保动作之间的互斥性。
故障排除与自定义:
如果机器人的表现不符合预期,可能需要调整初始舵机角度以匹配你的机器人设置。这些角度定义了机器人的中立位置,并在robot_control.py的reset_positions函数中配置:
 
  
  1. servo_hip_right.write_angle(95)
  2. servo_hip_left.write_angle(85)
  3. servo_foot_right.write_angle(85)
  4. servo_foot_left.write_angle(100)
复制代码
可以尝试微调这些值以优化机器人的姿态和运动:
  • 增加或减少servo_hip_*的值以调整腿部角度。
  • 调整servo_foot_*的值以更精确地定位脚部。
提示:
测试时使用小幅度调整(例如±5度),并观察变化,以避免舵机过载或错位。
最终成果
Tillu 是一个兼具趣味性和挑战的的机器人项目,它结合了高质量的硬件、灵活的软件和定制的3D打印设计。行空板M10通过舵机实现精确的运动控制,而触摸传感器则为机器人增添了交互性。Tillu 机器人采用电池供电,便携性强,非常适合随时随地使用。
3D打印部件提供了设计灵活性,而 Mind+ 软件支持图形化编程和 Python 编程,适合不同水平的学习者。使用 Type-C 接口进行充电和编程,简化了设置和操作流程。这个项目提供了一个动手实践的学习体验,将编程、电子技术和设计融为一体,充满趣味性和吸引力。无论是个人使用、教学还是探索,Tillu 都为对机器人感兴趣的人提供了一个坚实的基础。

基于行空板的开源“宠物”机器人——Tillu图59

 
项目文件 请至原文下载
### 行空天气功能实现 行空(MicroPython开发的一种)可以用来创建一个简易的天气站,通过连接传感器来收集环境数据并显示出来。为了实现这一目标,通常会涉及到温度、湿度以及气压等参数的测量,并可能进一步扩展至风速和其他气象条件。 #### 获取气象数据的方法 一种常见的做法是从互联网上的API服务获取实时天气信息。这可以通过Wi-Fi模块使行空接入网络并向特定的服务端发送HTTP请求获得JSON格式的数据响应[^1]。例如OpenWeatherMap提供了免费的基础版API接口供开发者调用。 下面是利用`urequests`库向在线API发起GET请求的一个简单例子: ```python import urequests def get_weather(city_name, api_key): url = f"http://api.openweathermap.org/data/2.5/weather?q={city_name}&appid={api_key}" response = urequests.get(url) if response.status_code == 200: weather_data = response.json() main_info = weather_data['main'] temperature = main_info['temp'] - 273.15 # Convert Kelvin to Celsius humidity = main_info['humidity'] return {"temperature": round(temperature), "humidity": humidity} else: print("Failed to retrieve data") return None ``` 此段代码展示了如何构建URL字符串并通过`urequests.get()`方法执行查询操作;成功接收到服务器回复之后解析返回的内容提取所需的字段值。 #### 显示采集的信息 一旦获得了必要的天气详情,则可以在LCD屏幕上直观地展示这些数值给用户查看。假设已经安装了一个适合的小型显示屏驱动程序包,那么就可以编写如下所示的函数用于更新屏幕内容: ```python from machine import Pin, I2C from ssd1306 import SSD1306_I2C i2c=I2C(scl=Pin(5), sda=Pin(4)) oled = SSD1306_I2C(128, 64, i2c) def display_weather(temp,humi): oled.fill(0) oled.text('Temp:',0,0) oled.text(str(temp)+' C',0,10) oled.text('Humi:',0,20) oled.text(str(humi)+ ' %',0,30) oled.show() ``` 上述脚本初始化了OLED显示器对象,并定义了一项名为`display_weather`的过程负责设置要呈现的文字位置坐标及其具体内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值