缘由
有一个朋友问我可不可以帮他做一个尼康单反相机遥控快门,而且他提出了额外的设计要求,就是增加定时定量拍摄照片的功能,因为他是个园艺爱好者,希望拍摄植物生长过程的照片。根据他的要求,我设计了一个电路(见图10.1),可以设置要拍摄的张数和间隔的时间,使用4位的数码管进行显示,通过4个按键进行操作,并且有声音提示,有理光格式的红外遥控信号输出,还有继电器接口可以接入各式相机的快门线。
图10.1定时摄影装置原理
电路原理图如图10.2所示,主要使用了一片单片机进行控制,型号可以是AT89C或STC12CAD等,只要是51架构就可以。电源通过IN后进入LM被稳压成5V,为电路板提供5V电源。晶体使用12MHz,能使程序更精确地定时。电路使用4位的共阳极7段式数码管,位控制分别连接在三极管上,段控制连接在4-10线译码器74HC42上,不仅可以节约I/O口,还起到缓冲的作用,保护单片机不受损坏。5V继电器和蜂鸣器都是使用三极管控制的。4个按键和数码管的位控制共用I/O口。
这次制作中的程序编制最大特点就是使用了时间触发的嵌入式系统,这种系统原理是把需要执行的任务按所需要的周期时间来调度执行。程序使用中的定时器来定时计算时标,本程序设定的时标是10ms,也就是每10ms检查一次是否有任务需要执行。有的任务到了设定时间需要执行则执行该任务,有的任务没有到定时时间则在任务的时标变量中减去一个值,直到到达任务执行时间为止。在笔者提供的源代码中已包含了一个完整的时间触发系统,只要增加修改其任务子程序,就可以方便制作自己所需要的时间触发嵌入式系统。如在主函数main中,我们编写以下一段代码:
SCH_Add_Task(Key_GetCode,0,7);
意思就是把扫描按键的子程序Key_GetCode()加入到任务中,在间隔0个时标后执行,以后每隔7个时标(70ms)执行一次扫描按键子程序。
制作
此电路的制作并没有特殊要求,只需按电路图制作电路板,焊接好元件,把固件程序烧录到中就可以了。我使用了以前制作温度控制器的PCB制作这个电路,制作完成的成品如图10.3和图10.4所示。
图10.2电路原理图图10.3制作好的电路实物(正面)图10.4制作好的电路实物(背面)使用
这个电路的使用方法非常简单。开机默认的时间间隔是1min,拍摄张数是10张。电路启动后会显示0,这时可以按Enter键载入默认参数并运行,也可以按Model键进入设置。设置项有2项,分别为tset(时间间隔)和cset(拍摄张数),按Up和Down切换设置项,选择后按Enter进入设置,然后出现当前设置项的设置值。这时可以按Enter退回设置项选择或按Model退出设置模式,退出设置模式会马上加载设置好的参数并运行。
这个制作可以使用红外遥控信号输出(仅支持尼康的如下机型:D40、D40X、D50、D60、D70、D70s、D80、D90、D、D、Coolpix、、P)和使用继电器连接快门线。使用红外遥控信号输出时,只需要把红外发射二极管对着相机正面的接收窗口,然后把相机的快门控制方式拨到红外遥控模式,调整好焦距,就可以启动电路进行定时拍摄了。有一点需要注意的是,尼康的红外接收时间是可以设定的,超过设定时间仍没有信号被接收,则会自动返回标准快门控制方式。以尼康D70S为例,红外接收时间最长为15min,所以设置电路时间间隔时不可大于15min。图10.5所示为使用红外输出控制相机时的情景。
图10.5采用红外输出控制拍摄的场景使用快门线可以把拍摄的间隔时间设置到足够长,前提是要有一条合适你相机的快门线。以D70S为例,因其快门线的接口比较特殊,很难找到接头进行自制,不过在市场上有许多非原装的快门线,一条也就十几元,可以购买来用它作为连接线。图10.6所示为D70S的快门线,图10.7所示为其内部结构,图10.8所示为接头引脚定义。只要把A和GND短接,相机就会对焦,把A、B和GND短接就会释放快门。只要把A、B并联到继电器的常开触点,GND接到继电器的触点,就可以用电路控制相机了。实际使用发现,最好是用2个继电器,先短接A和GND,再短接A、B和GND(本文只提供1个继电器版本的程序)。
图10.6D70S的快门线图10.7快门线内部结构改进
此制作可以应用于一些特定的拍摄现场或特殊的设备控制。程序稍作修改就可以定时控制相机的B门曝光时间,实现精确时间控制的慢速摄影,也可以改做闪光灯控制等。该电路还可以直接作为周期性定时控制器使用。
图10.8快门线接头引脚定义