coolguy 发表于 2012-10-16 04:50:26

新手求助!!关于高速摄影的程序

本帖最后由 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);                //感应器断电
                                }
                        }

                }
}

}

每次触发快门之后都切断光电开关的电源。我的想法是拍摄完一张后需要回放照片并做些调整,如果光电开关一值通电的话会不会一直在耗电?如果使用电池供电的话还是能省就省吧,干脆就切断供电了~~不知道这样频繁切断供电对光电开关的寿命有没有影响??
模式三还没写~~

迷你强 发表于 2012-10-16 07:32:28

本论坛“沧海笑”就是玩水滴的达人,貌似他使用光耦触发快门线顺道控制电子阀的方式来控制的,成功率极高,你可以和他探讨探讨

沧海笑1122 发表于 2012-10-16 09:56:14

本帖最后由 沧海笑1122 于 2012-10-16 10:03 编辑

强哥过奖,达人不敢当,一起学习探讨。很高兴有水滴同好。

coolguy的思路和我一开始是一样的,就是利用遮断传感器+快门触发。看得出你也做出了很好的尝试。现在有两个问题需要提醒一下你。
1、如果我们能够精准地控制水滴的滴落,就不再需要遮断传感器(你用的光电开关)了。遮断传感器是第一代的思路,目前国内的高速宝1.0就是这个原理。
2、快门的思路本身没有问题,但是,玩不了水滴碰撞,换言之,水滴那种晶莹剔透的感觉,是逆光获得的,不能用快门得到。

怎么解决呢,
1、精准控制水滴的滴落,用的就是场效应管扩流模块+电磁阀,要几滴有几滴,要多大液滴都可以控制。
2、拍摄水滴溅落、碰撞,是在B门条件下,用逆光+柔光板,我们需要用光耦控制PC引闪,驱动闪光灯即可。
整个程序非常简单,由于最近太忙,一直没有分享,对不住大伙。
3、快门是不是就没得玩呢,也不是,可以玩正面的水滴滴落。

附一小图,供参考。

(此图是布光的示意,相机----水滴---柔光板----闪灯,来自互联网)



(此图是我用上述原理拍摄的双滴碰撞。)

沧海笑1122 发表于 2012-10-16 10:02:52

有了刚才的讨论,现在说说你的程序。
从你的程序看,你的想法是,通过传感器感知滴下来几滴,延时控制快门触发曝光。
我的建议:
1、修订思路,取消传感器,改用电磁阀控制水滴滴落。控制电磁阀,我用的是场效应管扩流模块,一块12元。
2、不用快门触发,改为PC引闪闪光灯,光耦即可。
可以留言继续探讨,我也在学习过程中,欢迎交流。

MicroCao 发表于 2012-10-16 10:05:12

mark 等报告

zhangdeyue1 发表于 2012-10-16 10:05:53

这个我也挺有兴趣的

沧海笑1122 发表于 2012-10-16 10:30:46

本帖最后由 沧海笑1122 于 2012-10-16 10:33 编辑

    补充一点,玩水滴其实门槛不高,医用输液器,一部相机就可以玩。我们的关注主要是成功率。
这是一个辩证的概念,成功率太低,就是碰运气、杀快门,会降低你对水滴拍摄的兴趣(快门也受不了对吧)。
成功率100%,把艺术创作完全等同于电子技术,又失去了一点乐趣。找个平衡吧,就产生了各种辅助拍摄装置。所以我前面给coolguy兄的建议,就是基于这个道理。

    成功率要高,一是供水,一是拍摄。
(1)供水这块要说简单就是输液器,根据风兄的建议,我也尝试过化学滴定管,供水的目的就是稳定地滴落,稳定地控制出水、且每一滴尽量落在一个落点上,那么上述的器材由于受到手的干扰,就很难精准,所以就采用了电磁阀。
(2)拍摄这块,B门+光耦+引闪,如果你熟练了,也不一定用B门,1.5S的快门也就够了,可以把快门线、电磁阀、引闪三个动作连续起来编程。

    arduino干这个活简直太合适了,我很推崇风兄的那句话,arduino就是一个传感器和执行元件的HUB,在水滴控制方面,它是典型的应用。

    近期我会把我的尝试整理出来,分享给大家,一起交流、提高。

coolguy 发表于 2012-10-16 21:15:53

非常感谢沧海兄的耐心讲解,很受启发!等沧海兄有空了一定要整个完整的教程出来让小弟学习学习~~
我之所以用快门触发主要还是考虑拍摄环境的问题。使用B门的话要求在一个比较暗的环境操作,这样在拍摄过程中要不停的开灯、关灯,调整器材很不方便。我用热靴接引闪器无线引闪,其实效果和使用B门+pc引闪应该是一样的。
但是沧海兄控制pc引闪有一个优点就是可以通过程序控制闪光灯连续多次闪光,这样在使用B门的情况下就能制造出多重曝光的效果,不知沧海兄有没有试过?
之前打算用医用输液器手动调整滴液的速度的:)电磁阀的好处是能精确控制水滴的频率,不知道沧海兄是怎么调整水滴的速度或者电磁阀和闪光灯之间的延时的?能不能具体说明一下?
遮断传感器的好处是应用范围广,只要更换不同距离的传感器就能拍摄诸如柠檬片入水甚至西瓜落地炸裂之类的场景:)
传一张手动拍摄的樱桃落水的pp:)

pierre 发表于 2012-10-16 22:05:12

关注{:soso_e113:}

沧海笑1122 发表于 2012-10-16 23:01:29

本帖最后由 沧海笑1122 于 2012-10-16 23:12 编辑

1、多重曝光可以通过多只闪灯不同引闪时间来实现。一只闪灯连续闪,我没试过,估计要受到闪灯回电时间的限制。
2、延时的调整,和你的思路是一致的,双滴使用四只线性电位器:一是水滴一的尺寸;二是水滴二的尺寸;三是两个水滴之间的间隔;四是引闪延时(双灯也用同一延时,你可以增加一个电位器分别调整)。
如果是三只电磁阀,就需要六只电位器。因为架台是固定的,出水口和器皿的相对位置也就固定了,那么液滴坠落的时间就可以算出来了,具体的实践中,也需要做笔记,积累几次就掌握了。
不同的液体(添加糖、明胶、瓜尔豆胶、甘油或牛奶)的时间参数是有差别的,也需要摸索。
3、一点建议,您这张漂亮,不过是逆光,应该更适合拍摄透明物体,拍摄樱桃,颜色就损失了。
4、关于B门,是这样的,正如我上午回复,如果熟悉了,你可以用1.5S的快门,全黑的环境也不是必须的,暗一些会好。
至于开灯关灯,我是用一个手电解决的。不过我最早看弘毅兄提供的那个老外的视频,就是把开灯、触发快门、引闪、关快门、开灯一起用编程实现的,其实也不麻烦。这样光线会不易受到干扰吧。
5、至于遮断传感器,我只是说水滴不必使用,其它的领域尽可发挥。{:soso_e100:}

coolguy 发表于 2012-10-17 01:57:53

本帖最后由 coolguy 于 2012-10-17 03:46 编辑

沧海兄的系统真是复杂......实在佩服!!
有个地方有些迷惑:如果环境相同,水滴的大小好像只跟液体的表面张力有关,如何通过电磁阀控制水滴的尺寸?

我只有一盏灯,这张照片拿来打背景了,热靴上有个引闪器,机内闪也就没法用了~~当时还试了几张侧逆光,樱桃的颜色有了,可是背景又不漂亮了......真是纠结。玩摄影还真是烧钱,随便一个配件就几百上千的......

coolguy 发表于 2012-10-17 03:14:39

本帖最后由 coolguy 于 2012-10-17 03:15 编辑

这个也是用arduino实现的,连接电脑调整参数:
http://www.dchome.net/forum.php?mod=viewthread&tid=1116680&ordertype=1

磁动力电子网 发表于 2012-10-17 08:57:29

看下我做的类似东西 http://www.cdle.net/thread-43738-1-1.html
http://www.cdle.net/thread-41763-1-1.html

沧海笑1122 发表于 2012-10-17 09:35:47

coolguy 发表于 2012-10-17 01:57 static/image/common/back.gif
沧海兄的系统真是复杂......实在佩服!!
有个地方有些迷惑:如果环境相同,水滴的大小好像只跟液体的表面 ...

控制电磁阀打开、吸合的时间,就是控制水滴的尺寸。

沧海笑1122 发表于 2012-10-17 09:36:56

coolguy 发表于 2012-10-17 03:14 static/image/common/back.gif
这个也是用arduino实现的,连接电脑调整参数:
http://www.dchome.net/forum.php?mod=viewthread&tid=1116 ...

对,我在做控制器时,借鉴了这篇文章,当然可以通过串口下发参数,但是需要携带笔记本电脑,所以就改成四只线性电位器了。
页: [1] 2
查看完整版本: 新手求助!!关于高速摄影的程序