気の向くままに辿るIT/ICT/IoT
IoT・電子工作

Arduinoで『LEDテープライトによるベッド下照明』を作る

ホーム前へ次へ
Arduinoって?

Arduinoで『LEDテープライトによるベッド下照明』を作る

Arduinoで『LEDテープライトによるベッド下照明』を作る

2018/02/13

 Arduinoで『LEDテープライトによるベット下(間接)照明』を自作してみるページ。

 既にブレッドボード上に回路を組み、動作確認済みだったのですが、今日、アルミアングル約60cmの切り出し、穴あけ、やすりがけ、LEDテープライト 60球 約50cmの貼り付け(両面テープは十分強力も、念の為、カプトンテープで補強)、0.5sq(AWG20相当)の配線コードのはんだ付け、端子付きDCジャック取り付けが完了した次第。

 尚、今回は、ベットの縦方向の一辺にのみ、LEDテープライト 50cm 60球+放熱兼固定用にアルミアングル 60cmの設置で事足りると判断しました。

 スケッチは後述しますが、回路は、タイマー付き自動ON/OFF LEDライトの回路からRTCモジュールを外し、人感センサモジュールHC-SR501、CdS搭載光センサモジュールを追加したものと同じ。

 電源については、電池駆動の場合、Arduino UnoならDCジャックから、Arduino Nanoなら[Vin]ピン、Pro Miniなら[RAW]から給電、AC電源やモバイルバッテリーからなら、USB充電器/モバイルバッテリー+USBケーブルから給電するだけ。

 手動ON/OFFスイッチ付きにしたい場合、電池駆動の場合、電池からのケーブルのプラスかマイナスの何れかのラインにロッカスイッチなどのスイッチを噛ませる、ACコンセントからならスイッチ付きコンセントに接続。

 今回は、以前購入したArduino Nano互換機(Amazon/HiLetgo 5個セット1750円、単価350円)、HC-SR501(Amazon/Rasbee 139円)、4ピン光センサー(Amazon/HiLetgo 99円)、LEDには、12V 5m SMD3238 600球 単色LEDストリップライト(Amazon/FashionableGNJPyoung 411円)、50cmなので約41円、昇圧モジュールにMT3608(Amazon/EasyWordMall 5個449円 単価約90円)、整流ダイオードに1N4004(Amazon/United TiffanyJP 50個147円 単価約3円)、ハイパワーMOSFETにIRFZ34N(Amazon/FashionableGNJPyoung 5個208円 単価約42円)、端子台付きDCジャック(Amazon/FashionableGNJPyoung DC 5.5mmx2.1mm プラグ・ジャック端子台出しアダプタ 各10個セット 320円 単価16円)、ブレッドボード、ジャンパワイヤ、1/4Wカーボン抵抗220Ωなど多めに見積もっても約300円をAmazonマーケットプレイスで、LED放熱兼固定用アルミアングル 0.8mmx1.2mmx1.2mmx2000m 343円、60cmで約104円を近所のホームセンターで買うとして、電源周りを除き、締めて約1146円。

 選定基準がわからない整流ダイオード、Amazonで安価で購入可能な数限られた中から選んだMOSFETの選定については、適当そのものなので、あしからず。

 ちなみに近所のホームセンターには、LEDテープライト用で透明や半透明のカバー付きのアルミチャンネルはなく、専用でないアルミチャンネルはありましたが、今回の用途には、サイズが小さいものしかなく、一方で幅、長さ、色など種類が豊富なアルミアングルで手を打ってみたのですが、結果、満足。

#include <avr/sleep.h>
 
const int cds = 2;
const int pir = 3;
const int led = 4;
 
void pirOn(){
 Serial.println("PIR ON!");
 delay(500);
}
 
void sleepNow(){
 digitalWrite(led, LOW);
 set_sleep_mode(SLEEP_MODE_PWR_DOWN); //スリープモード設定
 sleep_enable(); //スリープ有効化
 
 attachInterrupt(digitalPinToInterrupt(pir), pirOn, RISING);
 sleep_mode(); //指定したモードでスリープを開始
 sleep_disable(); //割り込みによるスリープからの復帰
 detachInterrupt(1); //割り込み処理の解除
}
void setup() {
 Serial.begin(9600);
 pinMode(led, OUTPUT);
 pinMode(cds, INPUT);
 pinMode(pir, INPUT);
 digitalWrite(cds, LOW);
 digitalWrite(pir, LOW);
}
 
void loop() {
 digitalWrite(pir, LOW);
 int cdsin = digitalRead(cds);
 int pirin = digitalRead(pir);
 Serial.print("cdsin : ");
 Serial.println(cdsin);
 Serial.print("pirin : ");
 Serial.println(pirin);
 if(cdsin && pirin) {
  Serial.println("Awake!");
  Serial.print("cdsin : ");
  Serial.println(cdsin);
  Serial.print("pirin : ");
  Serial.println(pirin);
   
  digitalWrite(led, HIGH);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
 
  if(!cdsin) {
   digitalWrite(led, LOW);
   digitalWrite(LED_BUILTIN, LOW);
  }
 } else {
  digitalWrite(led, LOW);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
  Serial.println("Sleep...");
  delay(20);
  sleepNow();
 }
}

 sleepも入れたラフスケッチがこれです。

 ledのD4はもちろん他でもよいし、cdsは割り込みに使っていないのでD2である必要なし、pirは割り込みに使うため、Uno系ならD2かD3を使用。

ArduinoとLEDテープライトによるベッド間接照明 by Fritzing
2021/06/03

 Fritzingによる回路追加。

 尚、12VのLEDテープライトを使うなら、暗さ+人感センサーで点灯する玄関の間接照明のようにCdSモジュールではなく、CdS素子に、電源入力をUSB充電ACアダプタではなく、ACアダプタ12VにしてArduinoのVINから給電するのが無難なのかもしれません。

ホーム前へ次へ