首页器材频道烧机 > 动手派——DIY基于安卓、带GPS的相机遥控器

动手派——DIY基于安卓、带GPS的相机遥控器

色影无忌
hyqhyq
黑眼圈
2015-11-19

  相机GPS可以把位置坐标写到照片中,永远记录了你每张照片的拍摄地点,是一种很有价值的摄影附件。尤其对于那些经常旅游的拍摄者来说,更是不可或缺的装备。对于单反相机,很多品牌或型号都必须外接专用的GPS接收器才能记录位置信息。这个接收器现在有原厂、副厂和自DIY三种渠道可以得到。俺还是喜欢DIY,有成就感,倒是DIY一个什么样的GPS接收器需要思量!

 

  网上有很多品牌的相机GPS,价格相差很大,最低的大概270元左右,绝大多数都是单GPS定位功能,少数有电子罗盘,可以把拍摄的方向也记录在照片中。我看了一下,这些GPS接收器基本上都装在相机的热靴上,然后与相机的GPS接口连接。但有些相机的GPS接口跟快门、自动对焦等信号接口共用一个适配器,所以装了GPS接收器就不能再快门、遥控器等附件,比如尼康D800/D810就是这样的结构。有的GPS接收器把快门,对焦等接口引出来,在GPS接收器上再装一个适配器,虽然可以解决GPS信息和快门遥控共用的问题,但结构上显得臃肿,使用时相机上要装接收器和遥控器两个装置,也不方便。另外,现在大多数GPS接收器都使用了内置天线的GPS接收模块,增加了接收端的体积和功能耗,使用的体验不佳。所以,我想DIY一个集成了GPS接收器的遥控器,在发射端集成GPS接收模块,接收端功能尽量简单,便于小型化。最终我决定用安卓手机作为发射端,因为它集成了GPS定位功能,并且有蓝牙功能,很容易实现手机与相机的蓝牙通信。方案清晰了就开始准备啦,花了4个月的时间,从看书起,到写代码,调试,现在终于可以稳定工作啦。现在简要介绍它的结构和功能。

 

  一、适配器

 

  适配器是相机与外围设备通信的接口,我用的尼康D800,后来换成D810了,它们的适配器都是尼康标准的10Pin圆形适配器,各接口的定义如下:

 

 

  在我设计的遥控器中,与相机的联接需要五个端口,一个是GPS信号输入的端口,一个是快门接口,一个是对焦接口,另外两个分别是电源和地,因为是从相机取电的。在网上看到有的资料说相机的快门与信号是共用端口,这不是个好消息,如果这样,就不可能用简单的方案做出GPS定位和快门控制并行的装置。一直找到尼康相机10pin接口的详细定义后才如释负重,原来这本来就是两个独立的通道。

 

  点击无忌论坛原文《动手派----------DIY基于android的带GPS的相机遥控器》进行跟帖。

 

#p#

  二、发射器

 

  因为发射器直接选用安卓手机,所以,在手机上要用软件实现以下功能:

 

  1、用户对拍摄模式的选择和拍摄参数的设定。我设计的拍摄模式有4大类:单张拍摄、B门拍摄、连续拍摄(包括自动连续拍摄和自定义连续拍摄)、延时拍摄,其中,B门拍摄、连续拍摄和延时拍摄均可自定义拍摄参数,我想,这几种模式和参数应该能对付大多数拍摄场景了吧;

 

  2、接收GPS定位信息。在安卓中,获得位置信息很简单,但我的相机定位需要提供NMEA0183语句才能定位(NMEA0183的意思不明白可以度娘),这就稍微需要一点技巧,用采用安卓系统中GpsStatus.NmeaListener类的onNmeaReceived(long timestamp,String nmea)方法从手机的GPS组件中获得NMEA0183语句。 将以上NMEA0183语句的监听方法与requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)方法结合使用,这里还有一个小技巧,用手机接收的NMEA语句最后的那个换行符掉了,传到相机里只见GPS符号闪烁,就是不定位,后来发现是掉了这个,于是在每个语句的最后加了0X0A。

 

  3、信息处理。主要对接收到的GPS位置信息进行了优化,只传递对定位有效的NMEA0183语句,免得传递太多的冗余信息加大系统的信息处理量。信息优化后得到了一个意外的效果,就是定位速度要快多了,夏天的晴天空旷场地,冷定位10秒以下啦!是不是目前最快的哟,嘿嘿。

 

  4、信息传输。这个没什么好说的,选用的蓝牙透传模块HC-05,直接蓝牙与接收端握手成功后就可以传输啦。对于相机控制信息和GPS定位信息,我是采用的分时传输,在信息前面加上识别码,以便接收端能认出哪条是相机遥控信息,哪条是GPS定位信息。

 

  这个图是发射端工作时截屏,有功能键和NMEA显示:

 

 

#p#

  三、接收端

 

  我设计的接收器实际上是一个基于蓝牙的多核微处理器,它是先用蓝牙透传模块接收发射端的信息,然后用单片机对信息进行分别处理,共用了三个STC15L104W单片机,这种单片机只有8只脚,体积小,便宜,每个1.7元左右。当然,每个单片机都要装编写的功能代码。三个单片机一个是分路器,对蓝牙模块透传的信息进行识别,把相机控制信息和GPS定位信息分开,然后用不同的端口送到下级单片机。STC15L104W单片机虽然体积小,但它没有标准的串口,需要用定时器对普通口进行串口模拟,所以在分路器上采用了时分复用模拟串口技术,下一级微处理器分别是GPS定位信息的微处理器和相机控制微处理器,这两个微处理器是独立的,因而串行信息在通过分路器后就成为了并行,就是接收端是同时处理GPS信息和相机控制信息的,不会因为相机控制时占用CPU的时间而丢掉定位信息。这两个微处理器的功能是解码,把符合蓝牙传输协议的信息解码成相机能识别的信息和信号,然后通过适配器传到相机中。

 

  适配器和接收器我全手工做滴,焊工手艺比较渣,因为贴片封装的元件虽然小,但手工焊接太难,所以都选用的直插封装的元件,体积大一点,呵,但用起来还算稳定。看看图吧:

 

 

 

 

 

 

#p#

  上页中最后那张图是组装成功能后的样子,我是用魔贴把它固定在相机的背带上,这样不占用热靴,与相机的合体照在这里:

 

 

 

 

  DIY的过程就介绍到这里啦,有什么问题和建议可以讨论。随意搜了一下,貌似还没有同样功能、同样结构的商品化产品,所以申请了专利,说不准有人会对这东西感兴趣咧?

 

  在我看来,DIY就是玩的过程,玩相机不光有拍摄的乐趣,DIY这些外围设备也很有趣啊,而且还能学到东西,做这个前我只写过几行C的代码,没接触过单片机,没接触过android,做完这个后,对android不再陌生了,对单片机也熟悉了,再DIY其他的玩艺有基础了,呵。

 

DIY(835)
GPS(30)
遥控器(9)
猜你喜欢