[作品提交] 【得捷电子Follow me第3期】任务6:综合实践(分任务3:开灯提醒器)

Tristan_C   2023-11-12 21:46 楼主
任务6:综合实践(分任务3:开灯提醒器)
这个任务是要求完成监测环境光强度,如果光线太暗,通过屏幕和蜂鸣器提醒用户开灯,达到保护视力的效果。而我们有了前面几个任务之后,完成这个任务相对就比较简单了。
也就是在任务5的基础上,将温湿度的部分去除,再加入蜂鸣器的部分即可
首先是添加蜂鸣器
214511q6158j66f446kfhk.png
然后在下面增加光敏获取的照度值判断,当小于一定值时,蜂鸣器响起,并在OLED屏幕上显示Turn Light On的提示,而如果照度大于该值,则蜂鸣器关闭,且OLED不提示内容。
214511h0fqc1qq1y0y84wc.png
运行效果如下
当照度大于一定值
214511q9m1p1zsmp1vmtks.png
当照度小于该值
214511ai133ahowoc3mbbm.png
完整代码如下
from machine import Pin, SoftI2C, ADC, PWM
import ssd1306
import utime
import time

# Buzzer settings
buzzer_pin = Pin(5, Pin.OUT)
buzzer_pwm = PWM(buzzer_pin, freq=440, duty=0)  # 初始频率为440 Hz,初始占空比为0

i2c = SoftI2C(scl=Pin(7), sda=Pin(6))

oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

# 清空屏幕,并显示任务要求
oled.fill(0)
oled.text("Task 6-3", 0, 0)
oled.text("Light:", 0, 16)
oled.show()

# 光照部分
adc = ADC(Pin(2))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT)  #4095

while True:

    
    light_adc = adc.read()
    
    # 计算光照强度单位Lux
    light_lux = light_adc * 350 * 1.0 / 4095
    
    # 算出电阻值单位K
    light_res = (4095 - light_adc) * 10.0 / light_adc
    
    print("Light(lux):");
    print('{:.2f}'.format(light_lux))
    print("Light(K):");
    print('{:.2f}'.format(light_res))
    
    # 清除变化部分的内容
    oled.fill_rect(64,16,64,48,0) 
    oled.fill_rect(0,48,128,16,0)
    
    oled.text('{:.2f}'.format(light_lux), 64, 16)
    
    if light_lux < 66:
        print("We need to turn the light on\n");
        oled.text("Turn Light On", 0, 48)
        buzzer_pwm.duty(512)
    else:
        buzzer_pwm.duty(0)
        
    # 在此处更新显示
    oled.show()
    
    # 延时1秒
    time.sleep(1)

效果视频

task-6_3

 

回复评论 (1)

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来

点赞  2023-11-21 14:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复