|
本帖最后由 coolguy 于 2012-10-16 05:03 编辑
喜欢电子和摄影,原来也拍过水滴,手动拍摄,成功率很低。最近看到网上有种快门控制器,有点启发,就想自己也做一个。开始想用时间继电器做,但是功能太单一,不是很满意。后来发现了arduino,觉得用它做这个控制器太合适了!前天淘宝订了块uno和一些配件,东西还没到。这两天就先写程序了。
我的设想:分为三个模式:1、单滴水滴模式,只拍摄一滴水滴下落。2、两滴水滴模式,拍摄两滴水滴碰撞。3、循环拍摄模式:间隔固定时间不断拍摄,用于拍摄星轨之类需要长时间曝光的,多次曝光后电脑合成。
通过光电接近开关获取水滴下落信号,用一个绕线电位器控制快门延迟时间,以捕捉水滴不同形态。
程序都是照着网上教程改的,没啥编程基础......
现在有几个问题:
1、两滴水滴模式我设想的是对水滴信号记数,数字大等于2的时候触发快门,但是用vbb模拟的时候总不正常,没啥编程基础,不知道程序错在哪里,请坛里的高手们帮忙修改一下。
2、目前模式切换我使用了两个接口,感觉有点浪费,如果再加上模式显示用去的接口,估计接口都不够用了......本来是想设置一个按钮,按一下是模式一,按两下模式二,依次类推,但是不知如何实现?
贴上程序,高手们莫笑:D - /*
- 作者:coolguy
- 时间:2012年10月16日
- IDE版本号:1.0.1
- 作用:通过光电接近开关控制相机快门,电位器控制快门延时
- */
-
- void setup()
- {
- pinMode(2,INPUT); //将2号数字口设置为程序开关
- pinMode(3,INPUT); //感应器信号输入
- pinMode(4,INPUT); //将4号数字口设置为一滴水滴模式
- pinMode(5,INPUT); //将5号数字口设置为两滴水滴模式
- pinMode(13,OUTPUT); //感应器电源
- pinMode(12,OUTPUT); //快门信号输出
- }
- void loop()
- {
- int mod1= digitalRead(4); //一滴水模式
- int mod2= digitalRead(5); //两滴水模式
- int dropNum=0; //水滴数量
- int dropState = digitalRead(3); //感应器信号
- int n = analogRead(A0); //读取A0模拟口的数值(0-5V 对应 0-1204取值)供快门延迟时间
- int power =digitalRead(2); //创建一个变量power,将4号数字口的状态采集出来赋值给他。
- if (power==HIGH) //判断power是否为高电平,如果是执行下面的语句,不是则跳过。
- {
- if(mod1==HIGH){
- digitalWrite(13,HIGH); //感应器供电
- if(dropState==HIGH){ //水滴通过
- delay(n); //快门延迟0-1204ms
- digitalWrite(12,HIGH); //触发快门
- digitalWrite(13,LOW); //感应器断电
- }
- }
- else if(mod2==HIGH){
- digitalWrite(13,HIGH); //感应器供电
- if(dropState==HIGH){ //水滴通过
- dropNum++;
- if(dropNum>=2){
- delay(n*1000); //快门延迟
- digitalWrite(12,HIGH); //触发快门
- digitalWrite(13,LOW); //感应器断电
- }
- }
- }
- }
- }
复制代码
每次触发快门之后都切断光电开关的电源。我的想法是拍摄完一张后需要回放照片并做些调整,如果光电开关一值通电的话会不会一直在耗电?如果使用电池供电的话还是能省就省吧,干脆就切断供电了~~不知道这样频繁切断供电对光电开关的寿命有没有影响??
模式三还没写~~ |
|