デジタル光センサー:Windows 10 IoT Coreで周囲光に応じてLEDを制御
このWindows 10 IoT Coreプロジェクトでは、デジタル光センサーの読み取り値に基づいてリアルタイムでLEDを駆動する方法を示します。センサー接続のGPIOピンを監視するだけで、光の有無に応じてLEDをトグルするアプリケーションです。
プロジェクト概要
目標はシンプル:周囲光があるときLEDを点灯、光がなくなると消灯。すべてのロジックはUIなしの単一C#ファイルで処理され、コードが軽量で迅速なプロトタイピングに最適です。
プロジェクト結果のデモ(画像プレースホルダー)
ボードのセットアップ
以下は配線図。コードも合わせて更新すればピン番号は変更可能です。
- デジタル光センサー → GPIO #5
- 赤色LED → 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;
センサーとLEDの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;
// LED - 出力
_ledPin = gpioController.OpenPin(_ledGpioPinNumber);
_ledPin.SetDriveMode(GpioPinDriveMode.Output);
// 初期状態
HandleLightStatus();
}
センサー変化への応答:
private void HandleSensorLightDetectionChange(GpioPin sender, GpioPinValueChangedEventArgs args) {
HandleLightStatus();
}
センサー読み取り値に基づきLEDをトグル。ハイ値は暗闇、ロー値は光ありを示す:
private void HandleLightStatus() {
if (_sensorPin.Read() == GpioPinValue.High) {
_ledPin.Write(GpioPinValue.Low); // LEDオフ
} else {
_ledPin.Write(GpioPinValue.High); // LEDオン
}
}
InitializeComponent() の後、ページコンストラクタで Initialize を呼び出し:
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ワンワイヤー温度センサーをGPIOでRaspberry Piに接続する方法
- HC-SR04超音波距離センサーをRaspberry Pi 3に接続 – 完全ガイド
- Raspberry Piでライントラッキングセンサー – シンプルなKY-033ドア/ライン検出器
- BMP180 I2C気圧センサー - Raspberry Pi統合ガイド
- DS18B20ワンワイヤーデジタル温度計をRaspberry Piに接続 - ステップバイステップガイド
- Raspberry Piでリニアホールセンサーを読み取り: JavaガイドとADC0832の知見
- Raspberry PiとDS18B20でマルチセンサー温度・光監視システムを構築
- Raspberry PiでDS18B20温度センサーをテスト
- 4ドルのソーラーライトをスマートワイヤレスセンサーノードに変身: MSP430 + nRF24L01+で庭園監視
- デジタルピンのみでRaspberry Pi用低コスト赤外線近接センサーを構築
- デジタル磁気ホールセンサ:基礎、設計、自動車応用