桌面机器人
好久没有写博客了,今天有时间整理说说这学期的项目课。
项目灵感来自于稚晖君的电脑配件:https://www.bilibili.com/video/BV1ka411b76m
上学期,由于一些焊接问题,自制SOC失败,所以要使得产品有高性能的计算就必须要有上位机。
而现成的树莓派等上位机,体积仍然很大,很难集成到小型产品内部,所以上学期的项目课总体就做得很大。
受稚晖君的启发,采用USB外接高速Phy的方式通信,将所需图像以及其他数据,
通过通信的方式传到电脑,以电脑来作为计算的媒介。
想法很好,这样就可以将项目集成得很小,而且后续都是电脑开发,定制化程度高。
接下来简单回顾一下制作的过程。
USB通信
一开始,我是对USB通信完全没有了解的。
陷入了USB的HID(Human Interface Device)的路,后续才发现只需要采用虚拟串口就可以了。
更多的是电路焊接bug,各种虚焊识别不到。
不用钢网手涂锡膏,用风枪焊好后属于一种半虚不虚的状态,用久了就会虚,焊接能力还是不行
详细实现写在了这篇博客:https://www.bonbonn.shop/2022/04/10/stm32-usb-vpc-hs/
IIC舵机
通信调通之后,我就开始尝试复现稚晖君的舵机板
项目链接:https://github.com/peng-zhihui/ElectronBot/tree/main/1.Hardware/ServoDrive
但是我发现,需要从电机引两条线以及电位器引三条线焊到板子,最后成型的效果不是很美观,如下:
所以我就尝试修改板子的形状,使得板子能够像原舵机板一样,
将电机口和电位器口的位置对应到板子上,像插件一样集成到舵机内部。
第一次尝试把板子压缩到最小,从9.6 18.4 进一步优化成 9 17.6 (毫米制)。
最终实物焊接到舵机上的效果如下:
已经是较为满意的结果了,虽然还是大了一点点,舵机的盖子盖不上。
(不过最终因为IIC通信等一些问题,舵机板也没有最终被用上,代码也没在后续板上验证)
详细实现写在了这篇博客:https://www.bonbonn.shop/2022/07/20/iic-servo/
USB传图片
因为打算用python进行后续开发,所以通信也是用python。
虚拟串口很方便,方便在于你只需要当做一个串口使用即可,并且可以无视波特率。
通过图像位数转换后(博客链接:https://www.bonbonn.shop/2022/07/20/image-digit-conversion/ )
将数据传给单片机进行显示屏的显示即可。
思路很简单,但是实现起来就出现了一些问题。
比如图像数据太大,用uint8_t的数组存储图像数据,数组大小为240*240*2=115200
会出现raw溢出的现象,因为target中默认是0x1c000 即114688
需要把IRAW1调大,把IRAW2调小
又比如帧率不够,图像长宽均为240,总数据量为240*240*16=921600bit,单片机显示屏显示速率不够
(USB高速通信速率可以达到几十甚至几百Mbps,通信速率是肯定够的)
第一个优化的想法就是,传的数据是正方形的图片,但是显示只需要显示圆形区域,
不过代码优化后发现帧率还是不能满足实时性。
后来发现商家提供的显示屏显示代码是软件实现SPI,我换成了硬件实现SPI,速率瞬间就上去了。
动态表情
表情制作就不多说了,用PS绘制关键部位,然后用Ae制作动画,放一张眨眼关键帧图: