pimoroni-pico/micropython/examples/plasma_stick/thermometer_pico.py

65 wiersze
1.8 KiB
Python

import plasma
from plasma import plasma2040
import machine
import time
"""
Reads the internal temperature sensor on the Pico W...
... and changes the LED strip an appropriate colour.
"""
# Set how many LEDs you have
NUM_LEDS = 50
BRIGHTNESS = 1.0
# The range of readings that we want to map to colours
MIN = 10
MAX = 30
# pick what bits of the colour wheel to use (from 0-360°)
# https://www.cssscript.com/demo/hsv-hsl-color-wheel-picker-reinvented/
HUE_START = 230 # blue
HUE_END = 359 # red
# WS2812 / NeoPixel™ LEDs
led_strip = plasma.WS2812(NUM_LEDS, 0, 0, plasma2040.DAT)
# Start updating the LED strip
led_strip.start()
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535) # used for calculating a temperature from the raw sensor reading
# The Pico's temperature sensor is not super accurate and readings jump around
# lets do some averaging to avoid annoying flashing
n = 0
temperature = 20 # a dummy value to fill the array
temperature_array = [temperature] * 10 # average over 10 readings (5 secs)
while True:
# read the sensor
# the following two lines do some maths to convert the number from the temp sensor into celsius
reading = sensor_temp.read_u16() * conversion_factor
temperature = 27 - (reading - 0.706) / 0.001721
# add the most recent reading to the array
if n >= len(temperature_array):
n = 0
temperature_array[n] = temperature
n += 1
temperature_average = sum(temperature_array) / len(temperature_array)
print(f"""
Average temperature: {temperature_average:.2f} °C
""")
# calculates a colour
hue = HUE_START + ((temperature_average - MIN) * (HUE_END - HUE_START) / (MAX - MIN))
# set the leds
for i in range(NUM_LEDS):
led_strip.set_hsv(i, hue / 360, 1.0, BRIGHTNESS)
time.sleep(0.5)