
Action 2 Poor
简介
买不起DJI Action 2的我仿造了一台Action 2 Poor
简介:买不起DJI Action 2的我仿造了一台Action 2 Poor开源协议
:MIT
描述
简介
买不起DJI Action 2的我仿造了一台Action 2 Poor
硬件原理图
https://oshwhub.com/code504/action_2_poor_v1
软件源码
https://gitee.com/dma/action_2_poor
视频演示
https://www.bilibili.com/video/BV1ND4y1s7Hr
受立创编辑器限制,文章有删减,完整文章请前往gitee工程查看
写在前面
- 想买个便宜运动相机的、零基础的、纯外行之类的人不要看了,直接去买便宜的二手运动相机。
- 想要复刻的一定要考虑清楚,千万不要把它真的当成相机来用,视频中也展示过它的画质,这里我再次强调:它的画质很差!
- 本项目的学习意义大于使用意义,如果你以前没有做过这样的项目并能完整复刻下来,或者能在此基础上做二次开发,那么我相信你一定有巨大收获!
目录说明
- doc 为项目文档、图片、部分芯片的数据手册等。
- firmware 为编译好的固件,直接烧录就可以运行,例如uboot、kernel、rootfs等。
- hardware 为硬件相关内容,包括原理图、PCB、外壳模型等。
- software 为软件源码。其中 app 内为各个可独立运行的程序,包括 hello world、camera、功能测试程序等;ext_lib 为第三方库如 lvgl、libmpeg等;hisi_sdk 为海思官方sdk文件;patches 为我修改的u-boot和kernel代码;utils 内为本工程的一些未分类的通用代码。
PCB和原理图仅供参考,后续变更以 https://oshwhub.com/code504/action_2_poor_v1 为准,gitee工程内的PCB和原理图不再更新。
固件说明
本章节已删减
快速入门
零代码开发
针对不想写代码或不会写代码的人,这种方式风险极高,遇到问题很难定位。
准备工作
- 有焊接能力
- 有flash烧写工具
- 除被动型元件(电容、电阻等)以外的所有器件型号必须完全一致
- 特别说明:目前提供的固件触摸屏坐标范围是0到128,坐标原点在右下角,如果你的触摸屏不符合这个参数就必须修改源码
开发过程
- 焊接并组装
- 按【固件说明】章节的内容烧写camera_img目录下对应的固件,烧写完成后最好校验一遍
- 上电,如果运气好,2秒钟左右你会看到Logo,15秒左右会黑屏,紧接着白屏,22秒左右开机完成
- 如果没有开机、开机白屏、开机后卡死等,检查芯片是否焊接良好,如果确认焊接无误,大概率是芯片挂了
- 如需帮助请留下详细的故障描述以及完整的串口打印日志(波特率115200),特别是串口日志,非常重要!
二次开发
我默认你具备足够的软硬件开发经验,能独立解决开发中遇到的各种软硬件问题,一些基础性的东西例如设置uboot环境变量、编写CMake脚本、git常用命令、Linux常用命令等我默认你都会。
准备工作
- 有足够的C语言开发经验,具备一定Linux基础,有焊接能力
- 准备海思官方SDK,版本为 Hi3516EV200R001C01SPC012 (这东西是保密的,我不想给自己找麻烦,别找我、我没有、不知道,否认三连。【疯狂暗示:用各种搜索引擎搜索“Hi3516EV200R001C01SPC012”、“海思SDK”、“Hi3516EV200 SDK”等关键字,这里的各种搜索引擎包括但不限于百度、Bing、Google、网盘搜索、磁力搜索、各种论坛的内部搜索、某些购物软件的搜索栏、公众号等】)
- 按照海思SDK中的说明安装交叉编译工具链 arm-himix100-linux
- 如果你想要自己编译uboot、kernal、rootfs,请按照海思SDK中的相关文档搭建开发环境;如果不想编译上述内容,可以跳过这个步骤,直接用我提供的
- 拷贝海思官方SDK内的相关文件,本工程用到以下文件:
hisi_sdk 内用于存放海思官方sdk文件
拷贝必要文件到hisi_sdk目录内
编译说明
本章节已删减
运行程序
本章节已删减
硬件开发
硬件成本与采购渠道
如果你打算自己手工焊接,并且使用3D打印外壳,成本最低可以控制在300元以内,但如果你打算正反面全贴片并且使用CNC外壳,那么会直接飙升到一千元,总之就看你的钱包能不能承受得住。
为避免不必要的麻烦,详细内容以及采购渠道请查看 doc 目录中的《成本估算及采购渠道.xlsx》
打样参数
名称 | 层数 | 厚度 | 备注 |
---|---|---|---|
串口网口转接板 | 2 | 无要求,1.6mm即可 | 无 |
屏幕转接板 | 2 | 尽量薄,建议0.8mm | 无 |
副板 | 2 | 建议0.8mm | 有能力的最好做阻抗匹配 |
主板 | 4 | 建议1.0mm | 有能力的最好做阻抗匹配 |
串口与网口转接板
4块PCB中最简单的一块,就是把串口和网口引出来而已,方便调试。串口的作用还用说?网口主要是挂载NFS进行开发调试,不用网口也行,无非就是用SD卡烧写程序测试,但这样做效率太低,而且不能用GDB Server进行调试。
显示屏与触摸屏转接板
显示屏与触摸屏通过一块转接小板与主板连接,这样设计有两个原因:
- 主板没有多余的面积放置显示屏与触摸屏的接插件
- 当后期需要更换线其他型号显示屏或触摸屏时,只需重新画转接小板即可
转接板尽量薄一些,这样可以尽可能多得节省内部空间来放置更大容量的电池。这里转接板的厚度为0.8mm,是嘉立创能免费打样的最小厚度。
规格型号
触摸屏:1.54寸,主控FT6206,6PIN,IIC接口
显示屏:1.33寸,主控ST7789,12PIN,SPI接口
注意事项
- 市面上有很多儿童手表或智能手表的屏幕总成,理论上买这种屏幕是最好的,但我找了多家店铺屏并没有找到合适的屏幕,主要有以下几个原因:没有合适的尺寸;采用BTB接口的屏幕较多,母座难以手工焊接;最重要的一点,没有引脚定义,更不知道触摸屏和显示屏芯片的型号,大多店家只是代理商,他们只负责销售,不是他们不提供资料,是他们也没有资料。如果大家能找到合适的且有完整资料的手表屏幕总成,欢迎分享。(当我整理文档时网上已经可以买到一款1.69寸240x280的屏幕总成了,很多开源项目也在用这款屏幕,但很可惜长度长了一些,不然我就换用这款屏幕了)
- 显示屏优先选择1.33寸的(有的可能叫1.3寸),不推荐1.44寸和1.54寸。1.44寸的屏幕尺寸比较合适,但分辨率只有128x128,如果你一定要用这款屏幕,那么所有和显示先关的代码都要改,工作量可不小。1.54寸的屏幕显示区域和触屏区域完美重合,但很可惜显示屏的四个角会超出触摸屏一点点,如果显示屏边框是塑料,可以尝试用刀割一点点,如果显示屏是金属外壳就不太好办了。其次是留给触摸屏四周的边框太窄了,和外壳粘接比较困难,还有就是屏幕排线的位置也不太合适,排线距离边框太近,安装时外壳可能会过渡弯折排线导致屏幕损坏。所以我这里只能选用1.33寸的屏幕,这个显示屏和触摸屏之间有大约1.5mm的白边,不易处理,而且显示面积小,确实有点费眼睛。这两种种屏幕对比如下:
- 如果换了不同尺寸的显示屏,最好在代码中校准一下触摸屏和显示屏的坐标,比如我用的1.33寸显示屏比触摸范围小一圈,触摸的横纵坐标应该都减去一定值,具体内容看源码
- 最开始我打算用黑色的T7000手机屏幕维修专用胶水来粘接显示屏与触摸屏,正好黑色也可以遮挡白边,计划是将胶水涂在显示屏与触摸屏接触面的拐角处,并用胶水覆盖白边,这样粘接的好处是一旦发现触摸屏或显示屏有损坏等情况,除胶拆卸也比较方便。真正粘接前还专门在钢化玻璃贴膜和亚克力上试了试,发现胶水的流动性不强,我以为没问题,实际粘接时发现胶水会渗入屏幕之间,幸亏拆的快,不然这两块屏幕就有可能报废了。所以我最后用3mm宽的黑色的手机维修泡棉双面胶来粘的屏幕,这三边用黑色泡棉胶带呈L形粘贴屏幕边框和触摸屏。
- 如果不打算维修,或不考虑以后进行无损拆解等,可以考虑OCA光学胶,这也是理论上最理想的选择,因为现在几乎所有的手机屏幕都是用这种胶粘的,但实际情况是没有专业工具粘接必然有气泡残留,这胶的粘性还挺强,后期维修拆解困难,残留难以清除(看维修手机的视频就知道这胶有多难处理),所以也不推荐。如果你是个修手机的,手头正好有压屏机,那当我没说。我用两张报废的手机膜做测试,粘接后有气泡残留。
- 触摸屏的FPC排线很短,FPC座这里的小突起会压到触摸屏排线,需要把这里剪掉,推荐用指甲刀
副板
- 目前没有做回放功能,也没有提示音之类的,可以不焊接功放芯片。
- type-c有两对信号线,我的PCB中只连接了一对,不影响使用,何况我也没开发USB功能,如有需要请自行修改。
- USB信号线没做阻抗匹配,如有需要请自行修改。
- 充电芯片是TP4057,目前设置的充电电流大约为0.36A,且电源输入端加了分压电阻,芯片几乎不发热。如需调整充电电流请注意散热问题。
主板
- 在主板的Flash旁边预留了5V和GND焊盘,开发期间可以用这个焊盘供电,省去电池。也可以给副板的电池引线接上可调电源。
- 主板左下角和右下角螺丝孔旁边故意没有铺铜,外壳(尤其是CNC外壳)这里如果有弧度正好可以手动把这里磨成圆的。为什么不在PCB里面就做成圆的?因为懒。
- 主板上其他设计细节请查看原理图中的注释
- MIPI、ETH、USB信号线需要做阻抗匹配,但是我没做,能用就行。(其实是我不会)
- 主控我买的二手拆机摄像头,这种价格便宜但不包好坏,有的板子有明显的暴力拆解痕迹,这种芯片完全看运气。
谁呀这么倒霉?怎么这么多芯片都坏了?哎?你们别看我,这个倒霉蛋绝对不是我!我不知道,我没有狡辩,真的不是我!
FPC排线处理
- FPC排线的长度建议为3CM
- 为了节约PCB面积整个电路设计很紧凑,所有FPC连接器的位置都很靠边,而FPC加强筋又比较长,不方便弯折,所以需要减掉一些加强筋。
- 如果加强筋的金手指比较长,可以直接从加强筋前面减
- 如果加强筋的金手指比较短,需要从后面把加强筋和排线撕开,然后剪短(有的排线质量非常好,加强筋根本撕不开,可以适当加热辅助,如果还撕不开就换个渠道再买一些吧)
- 推荐使用指甲刀剪
剪加强筋之前
剪加强筋之后
撕加强筋
摄像头处理
摄像头的排线需要弯折,弯折后效果如下,保证摄像头正好在线框位置上,并使用双面胶粘牢
主控芯片焊接注意事项
- 一定要检查,有维修专用显微镜之类的最好,如果没有,最起码也要买个10倍的放大镜,引脚非常小,没有放大镜的话你的眼睛受不了。
- 有钢网可以直接用热风“木仓”一次性焊好,没有钢网先用热风“木仓”把底部焊盘焊好,再用烙铁焊接引脚(焊接老手直接用热风“木仓”搞定,根本不用烙铁补焊)。
- 焊接引脚没什么技巧,多多练习,熟练了就好,如果你能顺利手工焊接ESP32,那么焊接这个芯片相对来说也没那么困难。
以下是个人总结的手工焊接建议,仅供参加考
- 这个芯片的主要来源是拆机芯片,焊接前仔细清理引脚(如果能买到全新,忽略此条)
- 手工烙铁焊接不建议用锡膏,因为在芯片的边角处很容易残留未熔化的锡膏,可能埋下隐患,这些未熔化的锡膏用放大镜仔细检查就能发现,但肉眼基本看不见
- 烙铁头个人觉得用小刀头最合适,其次是小一字头,再其次是特尖头,马蹄头不考虑
- 助焊剂优先推荐BGA专用助焊剂,再其次是一些维修专用助焊剂;不推荐松香(残留多,不方便后期检查),千万不要用一些弱酸性或可能具有轻微导电性的助焊剂,这种助焊剂如果洗不干净隐患无穷
- 少加一点点助焊剂,一点点就行,烙铁头带适量焊锡,从左到右慢慢拖焊,经验丰富的老手用适量的助焊剂和焊锡拖焊一遍就能成功
- 焊接完成后一定要用放大镜仔细检查
这是购买的二手电路板没有拆下芯片之前的样子,焊接效果良好、锡球饱满
正常焊接后的效果如下,可以看到QFN侧面引脚都有锡
虚焊的效果如下,QFN侧面引脚没有锡
其他芯片焊接注意事项
- 当前使用的这颗硅麦需使用热风“木仓”焊接
- 焊接硅麦时特别要小心,任何助焊剂等物质不得进入麦克风的收音孔内(这是麦克风的手册中特别强调的内容)
- 洗板时也要注意,任何洗板水等物质不得进入麦克风的收音孔内(这也是麦克风的手册中特别强调的内容)
结构开发
3D打印外壳
- 首先排除树脂(如果是自己打印排除PLA),原因是不耐高温,三维猴提供的几种树脂材料的热变形温度差不多在60度左右(PLA的热变形温度也差不多是60度左右),相机工作时发热量巨大,会导致外壳变形。
- 优先选择尼龙,它的热变形温度接近100度左右,价格也不贵。
- 不差钱可以考虑工程塑料,也耐高温,价格比尼龙略贵。
- 至于不锈钢3D打印,价格几乎和CNC差不多,有土豪朋友可以试试,我的钱包伤不起。
CNC外壳
- 根据工艺不同价格约220到240左右。
- 目前我采用的工艺为:±0.10mm Ra3.2 喷砂-120目 普通阳极氧化-10-15μ-亮光
按键
- 按键采用iphone4、5、6的home键,价格在1到3元左右。
- 不要买6s及之后的按键,它有指纹,且价格更贵。
电源开关
想打印的就去打印,不想打印的找一小块塑料,自己用刀子刻一个也行(谁小时候没有刀子刻过铅笔呢?)
镜头膜
- 买随便买一个大疆Action2的镜头钢化玻璃膜就行
- 各家店的镜头膜尺寸不同,以我手头为例,就有29mm和28mm两种,强迫症自己去改模型,不是强迫症就凑合用吧
- 很多人不知道的是钢化膜内层其实还有一层膜,记得把它撕掉,然后再用透明双面胶(例如0.1mm到0.3mm厚PET双面透明胶)或胶水(例如UHU胶)什么的把它粘在外壳上
我手头的两种钢化膜尺寸
钢化膜内层的膜用小刀稍微使劲就能划出痕迹
再使点劲把膜划烂,撕掉就行,安全第一,注意别伤到手,也别把钢化玻璃弄碎了
外壳组装说明
先说一个很严重的问题:铝合金外壳会干扰电容屏,从电容屏的原理上讲,这是无法避免的。我尝试了加厚电容屏下胶带厚度,使电容屏尽量远离金属边框,但依然有干扰,所以最后无奈只能使用3D打印的边框,视频中也能看到,成品前面两个外壳用的是铝合金,后面屏幕边框用的是尼龙,外观有点丑。如果有行之有效的改善电容屏干扰的方法,欢迎与大家分享!
CNC外壳前期准备工作
- 对于CNC外壳定义装镜头玻璃的为前壳,中间的为侧壳(中壳),装屏幕的为后壳
- 使用透明环氧胶将前壳和侧壳粘在一起,前壳和侧壳要一次性粘接到位
- 粘接时必然会有部分胶水溢出,溢出的胶水需要及时处理,一旦胶水固化就难办了
- 个人经验,环氧胶的初步固化时间约5分钟(具体时长看说明书),涂胶后等个两分钟左右,这时胶水的流动性变差但有没有完全凝固,使用类似牙签之类的有一定硬度且不会划伤外壳的东西尽快把溢出的胶水扣掉
- 等待24小时完全固化后你就得到了一个外壳
CNC外壳相比与3D打印外壳少了一些如螺丝柱之类的结构,这样做的目的是为了降低加工费用,也许我这样设计的CNC外壳不够合理,欢迎提出改进意见。
其余步骤3D打印外壳的组装步骤和CNC外壳的组装步骤基本一致(定义上一步粘好的CNC外壳为前壳,装屏幕的为后壳)
- 对于CNC外壳,购买若干5mm高的m2螺丝柱,对照PCB的螺丝孔位置,使用环氧胶粘在前壳上,待胶水完全固化后再进行下一步
- 对于CNC外壳,如图所示,找一些小塑料块之类的东西粘在距离前边框3mm处,塑料块不要太高,以免碰到副板上的元件,这里的塑料块可以粘死(这一结构是为了辅助固定副板PCB,可参考3D打印的结构)
- 粘钢化膜
- home键和PCB上的按键之间大约有1mm的空隙,可以在home键后粘一小块硬纸板来填补间隙,或者贴片时选用高度为1.6mm的按键
- 使用胶带把home粘在外壳上,别粘死,主要目的是保证home键可以按得动,但又不会按几次以后就歪了
- 需要喇叭的,安装喇叭,3D打印外壳上预留有安装位置,CNC外壳就凭感觉差不多是这个位置就行
- 先插好副板的排线再将副板随开关帽一起装入外壳
- 对于CNC外壳,如图所示,找一些小塑料块之类的东西分别粘在USB插口处和SD卡插口处,塑料块高度约3mm,这里的塑料块不要粘死,除非你以后不打算拆开维修了(这一结构是为了辅助固定副板PCB,3D打印的外壳不需要这个结构,后壳上突出的柱子起相同作用)
- 先插好屏幕排线和副板排线,再将主板装入外壳并用螺丝固定
- 对主板上的所有器件用胶带做绝缘,仅露出主控
- 给主控粘铜箔胶带辅助散热(手机上的哪种石墨散热贴也行),注意铜箔胶带一定要粘到外壳上,目的是提高散热效率。3D打印外壳的散热效果肯定差,没办法
- 再次强调,主控的发热量比较大,不辅助散热的话温度会直接飙升到100度以上,手册中建议工作温度不要超过95度
- 使用宽度为3mm左右的双面胶把屏幕粘在后壳上
- 安装电池,连接屏幕排线
- 使用双面胶将后壳和前壳粘在一起,同样不要粘死,除非你以后不打算拆开维修了。注意到样机的左右边框有两个缺口吗?就是为了方便我自己从这里撬开屏幕进行后期维修预留的
- 大功告成
软件开发
本章节已删减
Q&A
能不能做的像 Action 2 一样长按开机、长按关机?
可以,方案都设计好了,但我没做(别问,问就是懒)。这里给出我的设计方案,有兴趣的话可以自己尝试,有更好的方案也欢迎讨论。
电源控制芯片用STC8G1K08A,DFN封装,一个IO用来控制MOS管,做为电源主控引脚,一个IO接按键,这个IO必须支持外部中断,一个IO接到Hi3516。
STC芯片内编程,主要功能为:
- 按键外部中断唤醒STC,不足5秒进入掉电模式,超过5秒控制MOS管导通使Hi3516开机
- 短按信号,例如单击、双击、2秒以内的长按原样传输给Hi3516,用来做拍照、拍摄等功能的控制
- 开机状态下长按5秒,控制MOS管截止,STC进入掉电模式
- 关机的逻辑可以优化一下,带来更好的使用体验。开机状态下长按5秒,将这个长按的信号也传输给Hi3516,Hi3516收到长达5秒的信号说明这是要关机,在屏幕上显示关机字样或关机动画,STC延时几秒后控制MOS管截止并进入掉电模式
能不能用 Hi3518EV300 替换?
可以,改硬件什么的就不说了,这里主要说明换芯片的优缺点。
对比:3518相比于3516去掉了eth功能和对应引脚改为电源管理相关功能和对应引脚,其余功能基本一致
优点:3518自带电源管理,不用外接其他芯片就能很方便地实现长按开关机功能,因为款芯片的定位就是消费级电子产品,而不是3516的消费级网络摄像机
缺点:没有eth,开发会有比较麻烦,比如你的程序不能通过网络挂载,这也就意味着你每次运行都要将程序拷到SD卡里,如果要用网络(比如使用gdbserver调试这种情况),那么你必须开发usb网卡驱动
能不能做视频回放?
当然能做,你看硬件上我都专门为回放功能预留了功放芯片和喇叭,为什么我没做呢?最重要的是开发工作量比较大,挺费头发的,其次这么小个屏幕看回放不难受吗,所以我就砍掉了这个功能?如果你有兴趣的话,可以按照以下方案自己开发。
首先 Hi3516EV200 没有硬件解码器,回放只能使用软件解码器,其次芯片的性能也有限,据我查到的资料,在某款架构和主频相似的芯片上,使用ffmpeg最高只能实现h264 640x360 12fps的解码。
结合屏幕刷新率的情况考虑,我设计的解码方案是再开启一路h264的编码器,编码出240x180 15fps的视频,将这个视频保存下来用做回放。这其中还有很多开发工作要做,比如调裁剪ffmpeg并交叉编译、开发GUI等,工作量还不小。
屏幕亮度能不能控制?
可以,屏幕背光引脚接在了PWM上,不过目前只有开关背光的功能,如有需要请自行开发。
如果我想开发wifi模块应该怎么做?
海思SDK内有一篇文档专门讲wifi的使用,芯片型号、编译方法写得很清楚。
为什么配置开发环境遇到了XXX的问题?
你真的按照海思SDK内的文档操作了吗?
文档中要求你下载的东西都下载了吗?
什么?你用的是CentOS?为什么不按照文档的要求用Ubuntu?
差不多得了,别太过分,你搁这儿十万个为什么呢?自己找答案去!
能不能用旧手机上拆下来的摄像头?
别闹,你是认真的吗?
我想要XXX功能,能不能帮忙开发?
别闹,自己动手丰衣足食!
能不能提供SDK的下载地址?
别闹,谁知道你是不是海思派来的卧底?
关于留言提问
- 留言第一句问“在吗”,绝对不回复
基本社交礼仪懂不懂?最简单的:表明身份(我是一名程序员;我是一名业余电子爱好者没有编程经验),表明目的(我想要复刻、我买不到元件、我遇到了问题、我发现你的代码有bug),详细说明(我买不到XXX,商品已经下架了;我遇到了问题,串口打印如下XXX;你的bug是XXX,复现的方法是XXX) - 提问描述不清的绝对不回复
举两个例子,你猜我会回复哪一种?1.不开机,帮忙看一下。2.不开机,卡在开机Logo,硬件检查过没问题,程序按照说明的方式烧录了,启动后卡在uboot了,uboot代码没有任何修改,尝试换过主控芯片、修改启动电阻、烧录原版镜像等方法都无效,flash型号为XXXX,uboot启动日志如下XXX - 能在文档中找到答案的问题大概率不回复
找不到是哪篇文档的我可以指引你去看,文档看不懂可以讨论,文档一个字都不看的你想干啥? - 关于技术讨论的尽力回复
存在的问题
关于月份日期的问题
设置时间日期是一个使用频率很低,但是开发却较麻烦的功能,月份天数不对的问题使用过程中注意就行,暂不修复。
录像开始的前几帧数据异常
确实存在这个问题,应该是第一个I帧前面丢失了PPS数据,会导致短暂的花屏,以后我也许会修吧。
程序退出时偶现段错误
调试过程中正常退出camera程序时有很小概率导致段错误,暂时没有抓到coredump,正常使用都是直接关机,目前而言这个问题暂不影响使用。
I2C时钟问题
目前I2C时钟为100KHz,MPU6050的数据量又稍微有点多,会导致I2C占用比较多的内核态CPU(大约20%),我原本想改到400KHz来提升通信效率,但按照海思文档修改后I2C直接没信号输出了,也不知道是哪里出了问题。
设计图

BOM


评论