[作品提交] 【Follow me第二季第1期】任务2:监测环境温度和光线,通过板载LED展示舒适程度

eew_Ya3s2d   2024-8-1 13:30 楼主

大家好,我是郑工,尘世间一个迷途小工程师。

 

这两天家里有些事情,耽误了些时间,我们继续下一个任务,监控温度和照度。

 

首先是温度,我们先看看原理图

image.png  

 

可以看到原理还是比较简单的,就是一个热敏电阻,下拉一个10k电阻做分压,用ADC接口去读取这个口的电压就可以。

 

不过查资料之后,CircuitPython有个库adafruit_thermistor可以直接适配这种情况的温度读取。代码如下:

import adafruit_thermistor

# 模拟输入的管脚
pin = board.TEMPERATURE
# 热敏电阻的常温阻值
resistor = 10000
# 普通电阻的阻值
resistance = 10000
# 热敏电阻的阻值温度
nominal_temp = 25
# 热敏电阻的B系数
b_coefficient = 3950
# 还有最后一个参数,参数名为high_side,表示热敏电阻是否连接在上端,默认为True,可以不填

thermistor = adafruit_thermistor.Thermistor(
    pin, resistor, resistance, nominal_temp, b_coefficient)

后续只需要读取thermistor.temperature就可以获取的摄氏温度的值。

 

然后到照度值,我们先看看原理图

image.png  


原理也就是一个光电三极管下接一个10k电阻,当光照到光电三极管,会产生光电流,等效电阻减小,电压升高。初始化代码如下:

import analogio

# Adc的值为0-65535(16bit)
light = analogio.AnalogIn(board.LIGHT)

后续只需要查询light.value就可以获取adc的值,范围0-65535

 

后续代码根据获取的数值显示舒适程度,使用neopixel灯珠显示,初始化代码如下:

import neopixel

pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=.05, auto_write=False)
pixels.fill((0, 0, 0))
pixels.show()

后面的功能逻辑就是温度高为红色,温度低为蓝色,中间温度在这两个颜色之间切换

照度呢就是照度越低,灯珠数量越多,代表越舒服,越适合睡觉。

 

也是一个有些乱的逻辑,没有仔细深究。大家有什么想法可以跟我说说,我去改一下。以下是具体代码

index = 0
while True:
    # light value remapped to pixel position
    peak = simpleio.map_range(light.value, 500, 10000, 0, 10)
    # def map_range(
    # x: float,
    # in_min: float,
    # in_max: float,
    # out_min: float,
    # out_max: float) -> float:
    light_num = 10 - peak
    print('\n\n')
    print(f'time: {index}')
    index = index + 1
    print(f'light val:{light.value}')
    print(f'light num:{int(light_num)}')

    color = simpleio.map_range(thermistor.temperature, 10, 35, 0, 255)
    temp_color = (int(color) , 0, 255 - int(color))
    print(f'temperature:{int(thermistor.temperature)}')
    print(f'temp num:{color}')
    for i in range(10):
        if i <= light_num:
            pixels[i] = temp_color
        else:
            pixels[i] = (0, 0, 0)
    pixels.show()

    time.sleep(1)

使用了simpleio的map_range函数,这个函数会根据输入的数据,做出等级划分。

回复评论 (1)

跟着郑工学习监控温度和照度,,,

点赞  2024-8-2 07:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复