from machine import Pin, ADC
from time import sleep
import math
# Ініціалізація компонентів
adc = ADC(Pin(26))
actuator_led = Pin(16, Pin.OUT)
# Константи для розрахунків
U_3V3 = 3.3 # Напруга живлення
R_10K = 10000.0 # Опір постійного резистора (10 кОм)
GAMMA = 0.7 # Гамма-параметр фоторезистора
R10 = 50000.0 # Опір фоторезистора при 10 лк (50 кОм)
print("Алексєєнко Д.В., Лабораторна робота №2")
while True:
# Зчитування 16-розрядного значення з АЦП
u16 = adc.read_u16()
# Перетворення значення АЦП в напругу (U_LDR)
u_ldr = U_3V3 * u16 / 65535
# Обчислення опору фоторезистора (R_LDR)
try:
if U_3V3 - u_ldr <= 0: # Уникаємо ділення на нуль або від'ємне число
r_ldr = float('inf')
else:
r_ldr = R_10K * u_ldr / (U_3V3 - u_ldr)
# Обчислення освітленості (L) в люксах
val = (R10 * (10**GAMMA)) / r_ldr
lux = val**(1 / GAMMA)
print(f"Напруга: {u_ldr:.2f} V, Опір: {r_ldr/1000:.2f} kOhm, Освітленість: {lux:.2f} лк")
# 5. Логіка керування світлодіодом
# Ввімкнути, якщо освітленість менше 10 лк
if lux < 10:
actuator_led.value(1)
else:
actuator_led.value(0)
except (ValueError, ZeroDivisionError) as e:
# Обробка можливих математичних помилок
print(f"Помилка обчислень: {e}")
actuator_led.value(0)
sleep(1)