Цифровой датчик света — управление светодиодом по освещённости на Windows 10 IoT Core
Этот проект на Windows 10 IoT Core демонстрирует, как управлять светодиодом в реальном времени на основе показаний цифрового датчика света. Просто моня GPIO-пин, к которому подключён датчик, приложение переключает светодиод при появлении или исчезновении света.
Обзор проекта
Цель проста: когда есть окружающий свет, светодиод горит; когда темнеет — гаснет. Вся логика размещена в одном C#-файле без UI, что делает код лёгким и идеальным для быстрого прототипирования.
Демо результата проекта (заглушка изображения)
Настройка платы
Ниже приведена схема подключения. Номера пинов можно менять, если обновить код соответственно.
- Цифровой датчик света → GPIO #5
- Красный светодиод → GPIO #12
Самая интересная часть: кодирование!
Приложение содержит только одну страницу со всей логикой, что делает проект компактным.
Шаг 1: Создание UWP-проекта
- Откройте Visual Studio 2017 или 2015.
- Выберите Blank App (Universal Windows).
- Назовите проект DigitalLightSensorApp.
Шаг 2: Реализация логики
Откройте MainPage.xaml.cs и замените using-директивы на:
using Windows.UI.Xaml.Controls;
using Windows.Devices.Gpio;
Объявите члены для GPIO-пинов датчика и светодиода:
private GpioPin _sensorPin;
private GpioPin _ledPin;
Задайте номера GPIO-пинов:
private int _sensorGpioPinNumber = 5;
private int _ledGpioPinNumber = 12;
Создайте инициализацию, открывающую пины и устанавливающую их режимы:
private void Initialize() {
var gpioController = GpioController.GetDefault();
// Датчик — вход
_sensorPin = gpioController.OpenPin(_sensorGpioPinNumber);
_sensorPin.SetDriveMode(GpioPinDriveMode.Input);
_sensorPin.ValueChanged += HandleSensorLightDetectionChange;
// Светодиод — выход
_ledPin = gpioController.OpenPin(_ledGpioPinNumber);
_ledPin.SetDriveMode(GpioPinDriveMode.Output);
// Начальное состояние
HandleLightStatus();
}
Реакция на изменение датчика:
private void HandleSensorLightDetectionChange(GpioPin sender, GpioPinValueChangedEventArgs args) {
HandleLightStatus();
}
Переключение светодиода на основе чтения датчика. Высокое значение означает темноту, низкое — наличие света:
private void HandleLightStatus() {
if (_sensorPin.Read() == GpioPinValue.High) {
_ledPin.Write(GpioPinValue.Low); // Выключить LED
} else {
_ledPin.Write(GpioPinValue.High); // Включить LED
}
}
Вызовите Initialize в конструкторе страницы после InitializeComponent():
public MainPage() {
this.InitializeComponent();
Initialize();
}
Полный исходный код
using Windows.UI.Xaml.Controls;
using Windows.Devices.Gpio;
namespace DigitalLightSensorApp {
public sealed partial class MainPage : Page {
private GpioPin _sensorPin;
private GpioPin _ledPin;
private int _sensorGpioPinNumber = 5;
private int _ledGpioPinNumber = 12;
public MainPage() {
this.InitializeComponent();
Initialize();
}
private void Initialize() {
var gpioController = GpioController.GetDefault();
_sensorPin = gpioController.OpenPin(_sensorGpioPinNumber);
_sensorPin.SetDriveMode(GpioPinDriveMode.Input);
_sensorPin.ValueChanged += HandleSensorLightDetectionChange;
_ledPin = gpioController.OpenPin(_ledGpioPinNumber);
_ledPin.SetDriveMode(GpioPinDriveMode.Output);
HandleLightStatus();
}
private void HandleSensorLightDetectionChange(GpioPin sender, GpioPinValueChangedEventArgs args) {
HandleLightStatus();
}
private void HandleLightStatus() {
if (_sensorPin.Read() == GpioPinValue.High) {
_ledPin.Write(GpioPinValue.Low);
} else {
_ledPin.Write(GpioPinValue.High);
}
}
}
}
Приведённый код работает непрерывно, мгновенно реагируя на изменения освещённости.
Для дополнительных деталей обратитесь к документации Digital Light Sensor.
Производственный процесс
- Цифровые магнитные Холл‑сенсоры: основы, дизайн и автомобильные применения
- Как подключить однопроводный датчик температуры DS1820 к Raspberry Pi через GPIO
- Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
- Датчик слежения за линией на Raspberry Pi — простой детектор двери/линии KY‑033
- Интеграция барометрического датчика BMP180 с Raspberry Pi по I2C
- Подключение цифрового термометра DS18B20 1-Wire к Raspberry Pi — пошаговое руководство
- Чтение линейного Холловского датчика с Raspberry Pi: руководство по Java и особенности ADC0832
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Тестирование датчика температуры DS18B20 на Raspberry Pi
- От $4 солнечного фонаря к умному беспроводному сенсорному узлу: MSP430 + nRF24L01+ для мониторинга сада