Raspberry Pi: логирование фоторезистора и система оповещений — низкопотребительный световой датчик на Python
Это руководство проведет вас через создание фотосенсора на базе Raspberry Pi, который логирует уровень освещенности и запускает оповещения. Идеально для мониторинга темных помещений вроде кладовок или шкафов для оборудования, или просто для отслеживания окружающего освещения.
Мы используем светодиоды в качестве индикаторов, но схему можно адаптировать для управления реле, зуммерами или даже сервисом уведомлений. Все, что нужно — Adafruit RPi Starter Kit — выгодный набор со всем необходимым — или вы можете собрать детали сами по списку ниже.
- 3 × 10 мм диффузных светодиода (красный, синий, зеленый)
- 1 × конденсатор 1 мкФ
- 1 × фоторезистор (фотоэлемент)
- 3 × резистора 560 Ом
- 1 × Pi Cobbler breakout
- 10 × перемыточные провода для макетной платы
- 1 × полноразмерная безпаяльная макетная плата
В отличие от типичного микроконтроллера, у Raspberry Pi нет встроенного аналого-цифрового преобразователя. Мы преодолеваем это, измеряя время заряда конденсатора через фоторезистор — недорогая RC-тайминговая техника, дающая надежные показания.
Предварительные требования
Программирование ведется на Python. Рекомендуется использовать дистрибутив Adafruit Occidentalis, включающий библиотеку RPi.GPIO и предварительно скомпилированные модули для Pi. Если предпочитаете минимальную настройку, просто установите RPi.GPIO через pip.
Поскольку схема потребляет очень мало тока, стандартного блока питания Pi достаточно. Для калибровки полезен переменный источник света (например, настольная лампа с регулируемой яркостью), чтобы увидеть реакцию датчика на разные уровни освещенности.
Шаг 1 – Сборка RC-схемы
- Установите Cobbler в макетную плату, убедившись, что ни один пин не касается одной шины питания — иначе рискуете закоротить Pi.
- Соедините пин 3,3 В с положительной шиной макетной платы, а GND — с отрицательной.
- Разместите фоторезистор в зазоре между двумя половинами макетной платы.
- Подключите одну сторону фоторезистора к шине 3,3 В, а другую — к пину 18 на Pi.
- Соедините конденсатор 1 мкФ от пина 18 к GND. Это завершает RC-сеть.
На этом этапе можно переходить к калибровке датчика.
Шаг 2 – Калибровка и тестирование
Запустите следующий скрипт на Python. Он непрерывно измеряет время заряда конденсатора через фоторезистор. Возвращаемое значение падает при увеличении интенсивности света.
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
RC_PIN = 18
def rc_time(pin):
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
time.sleep(0.1) # полный разряд конденсатора
GPIO.setup(pin, GPIO.IN)
count = 0
while GPIO.input(pin) == GPIO.LOW:
count += 1
return count
while True:
print(rc_time(RC_PIN))
time.sleep(0.5)
При изменении источника света вы увидите четкую числовую тенденцию: более высокие уровни света дают более низкие показания. Зафиксируйте несколько образцов в темноте и при типичном освещении, чтобы установить порог для запуска оповещений.
Шаг 3 – Реализация оповещений
С определенным порогом модифицируйте скрипт для включения/выключения светодиодов, логирования в файл или отправки уведомления по email или MQTT. Например, для мигания красного светодиода при повышении освещенности:
RED_LED = 17
GPIO.setup(RED_LED, GPIO.OUT)
while True:
level = rc_time(RC_PIN)
if level < THRESHOLD:
GPIO.output(RED_LED, GPIO.HIGH)
else:
GPIO.output(RED_LED, GPIO.LOW)
time.sleep(1)
Для более сложных сценариев рассмотрите интеграцию с Home Assistant, Node‑RED или пользовательским веб-сервисом на Flask.
Безопасность и лучшие практики
- Всегда дважды проверяйте подключение пинов перед подачей питания на Pi.
- Используйте питание 3,3 В для RC-сети; избегайте 5 В, которые могут повредить GPIO Pi.
- Держите емкость конденсатора низкой (1 мкФ), чтобы избежать длинных времен заряда, замедляющих скрипт.
- Документируйте данные калибровки; это упрощает устранение неполадок и будущие корректировки.
С этой настройкой у вас теперь есть надежный, низкопотребительный световой датчик, который логирует и реагирует на изменения освещенности. Не стесняйтесь расширять проект: добавляйте несколько датчиков, логируйте в базу данных или визуализируйте данные на веб-дашборде.
Производственный процесс
- Бесшовная MQTT интеграция: NodeMCU DHT22 сенсоры с Raspberry Pi 3 B+ как брокер
- Raspberry Pi управляемая аквапоника: гайд по сборке и код
- Логирование и график событий 24-В термостата с оптопарой и Raspberry Pi
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Бесшовный мониторинг температуры и влажности на Raspberry Pi с EzTemp
- Мониторинг температуры помещения на Raspberry Pi с графиками Gnuplot и email-алертами
- Как подключить однопроводный датчик температуры DS1820 к Raspberry Pi через GPIO
- Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
- Чтение аналоговых датчиков на Raspberry Pi без встроенного АЦП
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20