这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » [Let'sDo第3期]DIY电子测光表-成果贴

共1条 1/1 1 跳转至

[Let'sDo第3期]DIY电子测光表-成果贴

菜鸟
2024-11-29 21:15:24     打赏

    再次态度表态:坛子里大佬很多,对小白的我很友好,只要花些时间还是很好学习。

从坛子里断断续续 ,不间断的代码堆积和逻辑整合终于完成了粗糙的模型功能,嗨~谁叫我菜呢,不过还好我喜欢折腾下

过程贴中完成了光强读取,剩下就是配置计算公式的数组,包括两个配置变量,一个传感器读取值参数:第一个是光圈变量,另外一个是ISO变量,最后就是传感器LUX值。通过网上学习和总结最终的快门结算公式类似如下:

result = (math.pow(N, 2) * 250) / LUX * ISO

print(result)

代码

    km1 = (math.pow(my_f_guangquan_daxiao[f_guangquan_daxiao_lest_state_num],2)*250) / ((guangxian.lux + 0.000001) * my_iso[iso_lest_state_num])
    #print("快门值为=",km1)

按键配置通过不断轮询进行选择参数,红按钮选择光圈大小,蓝色按钮选择iso配置

while True:
    current_time = time.localtime()                    # 定义时间方法
    formatted_time = "{:02d}:{:02d}:{:02d}".format(current_time.tm_hour, current_time.tm_min, current_time.tm_sec)

    #print("%.2f Lux" % guangxian.lux)                 # 向控制台打印lux数据

        # 蓝色按键控制iso值
    anjian_lan_state = anjian_lan.value               # 获取蓝色按键当前按键状态
    if anjian_lan_state != last_anjian_lan_state:     # 检测到按键状态改变
        #time.sleep(debounce_delay)            # 进行延时消抖
        anjian_lan_state != anjian_lan.value           # 再次获取按键状态确认
        if anjian_lan_state != last_anjian_lan_state:  # 如果状态确实改变了
            if anjian_lan_state == False:         # 按键按下(变为低电平)
                led.value = True                  # 为led赋值高电平,让led亮起
                print("蓝键按下了")
                iso_lest_state_num += 1                 # iso列表索引加1,选择下一个元素
                if iso_lest_state_num == len(my_iso):  # 判断是否未达到列表末尾
                    if iso_lest_state_num >= 7:
                        iso_lest_state_num = 0
                        print("清空iso_lest_one_num列表的位置计数,重新开始")
                print("当前iso数字为:",my_iso[iso_lest_state_num],"在列表的第",iso_lest_state_num,"位")

            else:                                     # 按键松开(变回高电平)
                print("蓝键被松开了")
                # 可添加按键松开相关操作代码
                led.value = False                      # 取消led亮起状态
    last_anjian_lan_state = anjian_lan_state  # 更新上一次按键状态记录



    anjian_hong_state = anjian_hong.value               # 获取红色按键当前按键状态
    if anjian_hong_state != last_anjian_hong_state:     # 检测到按键状态改变
        #time.sleep(debounce_delay)            # 进行延时消抖
        anjian_hong_state != anjian_hong.value           # 再次获取按键状态确认
        if anjian_hong_state != last_anjian_hong_state:  # 如果状态确实改变了
            if anjian_hong_state == False:         # 按键按下(变为低电平)
                led.value = True                  # 为led赋值高电平,让led亮起
                print("红色键按下了")
                f_guangquan_daxiao_lest_state_num += 1  # f 光圈列表索引加1,选择下一个元素
                if f_guangquan_daxiao_lest_state_num == len(my_f_guangquan_daxiao):  # 判断是否未达到列表末尾
                    if f_guangquan_daxiao_lest_state_num >= 7:
                        f_guangquan_daxiao_lest_state_num = 0
                    print("清空f_guangquan_daxiao_lest_state_num列表的位置计数,重新开始")
                print("当前光圈大小为:",my_f_guangquan_daxiao[f_guangquan_daxiao_lest_state_num],"在列表的第",f_guangquan_daxiao_lest_state_num,"位")

            else:                                     # 按键松开(变回高电平)
                print("红色键被松开了")
                # 可添加按键松开相关操作代码
                led.value = False                      # 取消led亮起状态
    last_anjian_hong_state = anjian_hong_state  # 更新上一次按键状态记录
    
    button_state = button.value               # 获取当前按键状态
        if button_state != last_button_state:     # 检测到按键状态改变
        #time.sleep(debounce_delay)            # 进行延时消抖
        button_state = button.value           # 再次获取按键状态确认
        if button_state!= last_button_state:  # 如果状态确实改变了
            if button_state == False:         # 按键按下(变为低电平)
                led.value = True              # 为led赋值高电平
                
                print("\nboot按键被按下了")                   # 输出信息
                # 这里可以添加按键按下后要执行的具体操作代码,比如切换显示组等
                button_kz += 1                          # button_kz boot按键控制计数加1
                print("这是按下的第",button_kz,"次")
                #motor_servo.throttle = -1
                kacha()
                if button_kz != 0:                    # 如果boot按键的计数控制不等于0
                    display.root_group = group_2      # 切换到显示组2
            else:                                     # 按键松开(变回高电平)
                print("boot按键被松开了")
                # 可添加按键松开相关操作代码
                #button_kz = 0                         # 清空boot按键计数控制
                motor_servo.throttle = 0
                led.value = False                      # 取消led亮起状态

舵机部分因为很少接触,参考大佬和一些资料,简单的控制代码

pwm = pwmio.PWMOut(board.D10, frequency=50) # 给D10口设置pwmio输出50m赫兹
motor_servo = servo.ContinuousServo(pwm)
motor_servo.throttle = 0                # 取值范围 -1 ~ 1,负1正转,正1逆时针旋转

def kacha():                            # 定义一个舵机按快门的动作
    motor_servo.throttle = -1
    time.sleep(0.54)
    motor_servo.throttle = 1
    time.sleep(0.48)
    motor_servo.throttle = 0

最后的效果图片 快门KM, F 光圈 DJ 电机控制次数,对应快门按钮执行

c5686375d2784179005db13db500446.jpg

视频地址如下:

通过百度网盘分享的文件:67-Thirsty Lizzy.mp4

链接:https://pan.baidu.com/s/1SNyH38f4cATQXFfAGQWZAA 

提取码:oi3o 

年底了突然工作比较忙,先争取完成基础功能,等过完年底不忙了继续研究下蓝牙无线控制部分的代码。

感谢电子产品世界EEPW和digikey 平台,让我有机会接触软件部分的控制,开启新的世界。常来论坛,常来常新~






关键词:      传感器 成果    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]