基于CircuitPython实现了光照度采集,并根据设置的ISO、光圈、快门等值计算出拍照需要的参数。可通过按键进行模式、参数设置及用舵机按快门操作,也可以通过wifi在手机或电脑显示相关参数并进行遥控。
程序开始对光传感器、舵机、按键、wifi、http服务及屏幕初始化后进入主循环程序
主循环程序首选采集光传感器数据,根据老师提供的公式经计算得到曝光度EV = round(2 + math.log(lux / 10) / math.log(2))
按下红色按钮后调用ChangeMode函数改变变量change_mode设置的三种模式1:ISO优先:2:AV光圈优先:3:TV快门优先模式。
按下蓝色按钮后调用Adjust函数进行参数调节,根据设置好的模式分别进入change_iso、change_av、change_tv函数调节相关参数,老师推荐查表方法进行参数设置,正好群里有大佬提供的tkinter演示代码中查表的方法直接学习过来。
ISO模式下,调用change_iso函数调节ISO值,根据ISO、EV、TV的值查表计算出光圈AV;
光圈优先模式下可以手动选择光圈大小,调用change_av函数查表计算出快门速度和ISO感光度,以获得正确的曝光,常用于控制景深深浅。
快门优先模式下选择快门速度后,调用change_tv查表计算出调整光圈大小和ISO感光度。适合捕捉快速运动的物体或制造特殊效果,如拖影。
红色与蓝色一起按下时调用Shoot函数操作舵机进行一次往复操作按下快门。
手机可控制时计划采用蓝牙或MQTT方式,但是本版本固件官方手册不支持蓝牙,MQTT搭建io.adafruit上参考太少,参考网上找到的大佬的通过网络控制WS2812B的代码进行修改。
电脑或手机浏览器输入 http://192.168.66.121:1080/client 访问控制网址,IP替换为控制台输出的IP
wifi控制部分通过websocket与网页交换数据。websocket.send_message函数将光强等测量及计算出的数据传送到网页进行显示。websocket.receive函数接收网页上的按钮的指令分别调用模式切换,参数调节及拍摄函数实现手机遥控功能。
Button0_Work这个代码为通过板子上的bool按钮切换WS2812B显示的颜色,与本次任务关系不大,可以将这个bool按钮改成作为拍照用。
【测光表成果】 https://www.bilibili.com/video/BV1cwzZYKEaz/?share_source=copy_web&vd_source=771c5bc0a24f31639a426bf66cb9e6c1
成果代码及所用到的库在附件里,代码中wifi替换成实际ID及密码
目录
https://forum.eepw.com.cn/thread/388125/1 [Let'sDo第3期]DIY一个电子测光表-成果贴
https://forum.eepw.com.cn/thread/388123/1 [Let'sDo第3期]DIY一个电子测光表-过程贴
https://forum.eepw.com.cn/thread/388122/1 [Let'sDo第3期]DIY一个电子测光表-开箱贴