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

Arduinoで『暗がり補助・誘導イルミネーション』を作る

ホーム前へ次へ
Arduinoって?

Arduinoで『暗がり補助・誘導イルミネーション』を作る

Arduinoで『暗がり補助・誘導イルミネーション』を作る

フォトレジスタと人感センサーを使ったイルミネーション
2017/12/06

 Arduinoを使って『暗がり補助・誘導イルミネーション』を自作してみるページ。

 例えば、夜、電気を消した部屋の足下やベット下、廊下、通路、トイレ付近など電気をつけるほどでもありませんが、人が通る時には、ちょっとした明かりは欲しい、人がいない時は不要だから常夜灯ではなく、といった際に足下などを照らすためなどに。

 また、玄関先や庭、ベランダ・バルコニーなどなら、家人や通行人に反応して点灯や点滅させることでライトアップ、照明、装飾、更に必要に応じてブザーなどと併用することで防犯装置としても使うことができるでしょう。

 灯りには、ライトやランプでもよいですが、時期的にクリスマスらしく?ここでは、LEDテープ、LEDストリング、LEDストリップなどと呼ばれるテープ状やケーブルにLEDが複数連なったものと光センサや人感センサなどを使うものとします。

夜間・暗闇補助イルミネーション 100円ショップLEDストリング版

夜間補助イルミネーションOFF

 イルミネーションOFF。

 明るい時、人がいない時には、点灯しない。

夜間補助イルミネーションON

 イルミネーションON。

 暗くて、かつ、人がいる、通過する時に点灯します。

 ここでは、イルミネーションには、とりあえず、100均ダイソーのLED 10灯 常時点灯タイプ グリーン1色(全長約1500mm,1.5m)の電池ボックスを外して(ケーブルを切って)使ってみました。

 ただ、眺める分には綺麗だし、長さもそこそこありますが、LED数も少なく、予想通り、補助灯にするには、光量が不足気味であるため、実用的には、電圧(電流)を上げるとか、LEDもパワーLEDを連ねるか、LEDストリング(LEDストリップ、LEDテープ...etc.)を使う必要があるでしょう。

 LEDテープには、メートルあたりのLED数、単色・点灯のみから点滅できるもの、更には付属リモコンでLEDの色や点灯・点滅パターンを8種類前後の選択できるもの、電源は、DC12Vが多いようですが、DCプラグ出し、ケーブル出しだけのものやDCアダプタ付きのものなどいろいろあるので用途や好みに合わせて選ぶとよいでしょう。

 また、テープ状のものは、往々にして数cm程度の長さごとに途中で切断できるものが多く、一端のみにケーブルが出ているもの、2分割を想定し、両端に出ているものなどがありますが、もちろん、切って既存の取り出しケーブルと分断した部分については、自分でケーブルをハンダ付けするなどする必要があります。

 このように各種あるわけですが、値段的には、数百円〜2000円前後程度のものが多いようです。

 電源は電池などでも良いですが、ここでは、ACアダプタ接続USB充電器を想定、3.3V/5Vなら、そのまま、それ以上(12Vなど)なら昇圧モジュールやUSB 5V-DC 12V変換ケーブルなどを介してArduinoボードを接続するものとします。

 光センサには、CdSやフォトダイオード、これらを搭載したモジュール、人感センサには、3〜7m程度の感度、検出後の電圧出力時間などをポテンショメータで調整可能ですが、センサカバー部を露出させる必要のある焦電センサや、そのままでは調整はできませんが、ある程度の物質を介しても反応し、センサを隠蔽できるマイクロ波レーダーなどのチョイスが考えられるでしょう。

 仮に1000円ほどのLEDテープを使うとして、Amazonマーケットプレイス激安店価格でいけば、Nanoが、350〜400円、人感センサが140〜200円程度、光センサが約100円、昇圧モジュールかUSB-DC変換ケーブルをおよそ200円、ブレッドボードで済ますとしたらジャンパワイヤ含め、200円弱、Nano用ミニUSBケーブルや筐体とするケースは100均で買うとすればそれぞれ108円で216円、ACコンセント接続USB充電器(Android用)もダイソーなら216円、締めて2500円ちょっとといったところでしょうか。

 より安価なLEDテープを使えばマイナス200〜300円、場所や用途によって100円ショップのLEDストリングでもいけるなら、マイナス800〜900円程度にはなるかもしれません。([2018/01/30:追記]後述の通り、100円ショップのLEDストリングを使うまでもなく、もっと安価な1400円弱でできそう。)

const int cds = 5;
const int pir = 6;
 
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(cds, INPUT);
  pinMode(pir, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
}
 
void loop() {
  int cdsin = digitalRead(cds);
  int pirin = digitalRead(pir);
  if(cdsin && pirin) {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000);                       // wait for a second
  } else {
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);                       // wait for a second
  }
}

 ラフスケッチは、これだけ。

 回路は、ArduinoボードにNano、CdSモジュール搭載の光センサ4ピンのD0をD5、赤外線焦電・人感センサHC-SR501のOUTをD6、それぞれVCCを5Vか3.3V、GND-GND、ボードLEDに割り当てられているD13のHIGH/LOWを切り替えるものとし、D13からLEDストリングのプラス、マイナスをGNDに接続。

 ちなみに、この検証の構成ならセンサ、LEDともに5Vのみならず、3.3Vでも機能しました。

 今回は、消費電力抑制を全く考慮しておらず、スリープもしていませんが、検証のみならまだしも、実用するなら、少なくともスリープ機能(ここでは鳥よけや他で入れた)は入れた方がよいでしょうし、消費電力は低いに越したことはないので更なる工夫も検討の余地大でしょう。

[2018/12/18]

 遅まきながら、マイクロ波レーダーモジュールを使ったケースを書き忘れていたので追記。

 CdSを使わない場合、当該モジュールで使うのはVin/GND/OUTのみ。

 5VのArduino:マイクロ波レーダーは、5V:Vin/GND:GND/pirin:OUTのように接続。

 CdSをマイクロ波レーダーのボードにはんだ付けして使う場合、5V:Vin/GND:GND/pirin:OUT/cdsin:CDS。

夜間・暗闇補助イルミネーション LEDテープライト版

[2018/01/25]

 SMD5050 150球 RGBフルカラー 5m 387円SMD3528 600球 白単色 5m 411円のLEDストリップ(/テープ/ストリング)ライトを買って届いたところで単色のLEDテープライトをつないでみたのですが、明るさは期待通り。

 ちなみにこれをやる以前にワニグチクリップを脱着する手間を惜しんでロッカスイッチも付けておきました。

LEDテープライトによる夜間補助イルミネーションOFF

 イルミネーションOFF。

 明るい時、人がいない時には、点灯しない。

LEDテープライトによる夜間補助イルミネーションON

 イルミネーションON。

 暗くて、かつ、人がいる、通過する時に点灯します。

 LEDチップの種類や球数にもよりますが、SMD3528といえど600球となると直視するには厳しい(しばらく残像がある)ので設置には注意が必要。

LEDテープライト用に追加した昇圧モジュール/三端子のMOSFET/整流ダイオード...etc.回路

 尚、このLEDテープライトは、入力電圧12Vなので昇圧モジュール、更に増幅・スイッチングのため、バイポーラトランジスタよりも熱が少ないなどメリットも多く、比較的多い電流にも対応できる三端子のパワーMOSFET(Nチャンネル)、電流がArduinoボードの上限を超える可能性が高いので逆流防止に整流ダイオードを組み込むことにしました。

 何れも選定方法がよくわからないまま買ったので妥当である保証は全くないのですが、ここでは、整流ダイオードに1N4004(50個147円)、MOSFETには、IRF530(5個162円)とIRFZ34N(5個208円)の何れかを使い、MOSFET Motor Example画像の回路を使わせて頂きました。

 回路については、モータとデジタルピン番号以外の部分は全く同じで、モータをLEDテープライト+昇圧モジュールに替えただけ。

 ここでは、電源に9V電池を使ったため、Arduinoボードの5Vからではなく、Vinからの電圧をMT3608 昇圧モジュール(5個449円)で12Vに昇圧しました。

 あとは、LEDテープを切断可能位置を踏まえて適当な長さに切ったり、ケーブルをはんだ付けしたりして通路だけでなく、べット下、デスク下、扉付き棚、フタ付き箱...etc.にセットするだけ...あ、省電力化も考慮しないと特に電池じゃ厳しいか。

 ベット下ライトの場合、ベットの縦方向は2mちょっとありますが、実際には、1m〜1.2mもあれば、用をなすと思われ、計算しやすいように仮に1mとして先の単色のLEDテープは、m単価約82円、Arduino Nano 380円、整流ダイオード約3円、パワーMOSFET約40円、昇圧モジュール約90円、PIRセンサー約140円、光センサー約100円、ブレッドボード、ジャンパワイヤ、ワニグチクリップ、抵抗、9V電池、ロッカスイッチなど諸々350円として約1185円。

 他もLEDテープの長さに依存する程度であり、同じくらいでできるでしょう。

 セットの仕方としては、暗い時、人が通過した時、開けた時など極々短時間を想定しているため、LEDストリップライトの放熱はしなくても...とも思わなくもありませんが、万一のことを考えると、やはり、放熱対策にもなり、設置もしやすいアルミレール(フレーム)にLEDテープライトを貼るのがよさ気。

 市販品には、LEDテープライト用のカバー付き(白、乳白色、透明など種類がある場合もあり)もありますが、さて、どうするか...。

LEDストリップライト放熱兼固定用に買ってきたアルミアングル0.8x1.2x1.2x2000mm
[2018/01/30]

 近所のホームセンター ユニディでL字のアルミアングル 0.8x12x12(mm)x2m 税込み343円を買ってきました。

 LEDストリップライト用のカバー付きはなかったものの、最初はコの字のアルミチャンネルにしようと思っていたのですが、幅がちょうどよいのがありませんでした。

 実際には、1.2x10x10x10(mm)x2mのチャネルを買ってきてみたら、1.2mm幅を差し引く必要があることに気づかず、約8mmと約10mmのLEDテープが何れも入らなかったため、再度、店に行き、サービスカウンタで交換したい旨のみ伝えたところ、意外なことに返金してくれたので買い直しました。(結果買ったアングルはチャンネルより安価だったため、交換だと何らかのものを別途、買い足すことになっていたはずですが、その必要がなかったので良心的な店だ。)

 あとは、よきサイズにカットしてビス用の穴をあけ、LEDストリップライト付属の両面テープ(3Mを思わせるMのプリントはありますが、3がないのでたぶんバッタ物)の強度にもよりますが、そのまま貼って、剥がれた時の対処としてアルミアングルの数カ所に部分的に耐熱ポリイミドテープ(カプトンテープ)でも巻くなりしてビス止めしようかと。

 先の部品代約1185円に、このアルミアングル1m 約172円、ビスとカプトンテープを約10円と見ても約1367円といったところでしょうか。

 よりリーズナブルな構成にしたり、節電(省電力化)の余地もあるでしょうし、後者なくして電池では交換頻度が高くなるであろうことから、当面は、ダイソーの200円商品にもあるACアダプタ接続のUSB充電器からArduino Nanoを使うなら100円でセリアにもあるミニUSB-USB Aケーブルを使って電源を取る方が現実的なケースもあるでしょう。

 根拠なく1000円以内に収めたい気がしなくもありませんが、それにしても3m〜7m内で設定した距離において通路を通った時、ベットやデスクに近づいた時、動いた時などに調整した一定時間LEDテープライトが灯り、(少なくとも電池版なら)ロッカスイッチでON/OFFもでき、自分で作った(組みあげた)という満足感も得られて、この値段なら、どこに使うにしろ、なかなか、よい線いっているのではないかと。

暗さ+人感センサーでライトアップする玄関の間接照明

[2021/06/03]

 玄関用の自動ライトアップ間接照明を製作しました。

 材料は、Arduino Nano、CdS(元素記号/Cd:カドミウム+S:硫黄)素子(LDR/Light Dependent Resistor)、PIRセンサー HC-SR501、MOSFET IR530N、ダイオード1N4004、カーボン抵抗1MΩ、400穴ブレットボード、制御部格納用カードケース(100均)、電源延長コード(100均)、1口スイッチ付きコンセント(100均)、ACアダプター12V、DCコネクタオス 各1、DCコネクタメス x2、LEDテープライト 3528 120個/m 12V 白/昼光色、LEDテープライト用防水IP67シリコンチューブ 8mm、アルミアングルを必要長さ分、アルミアングル固定具、配線カバー、配線コード0.50sq、熱収縮チューブ(透明)、ジャンパワイヤ、接着剤適量。

玄関間接照明OFF

 玄関間接照明OFF。

 明るい時、人がいない時には、点灯しない。

玄関間接照明ON

 玄関間接照明ON。

 ある程度、暗い時、かつ、人がいる時に点灯。

 約1分、リピート設定(人体検知中、動体の動作があった場合、時間経過後も継続して点灯に)してありますが、ほどよく良い感じです。

 実際には、3辺、それぞれ配線コードで接続し、LEDテープライト+防水IP67シリコンチューブ+アルミアングルを張り巡らせ、良き高さにくるよう固定具を作り、固定しました。

 玄関に雨が吹き込んだり、ビショビショになることはあり得ないとは思いつつ、念の為、防水IP67シリコンチューブに通しておくことにしました。

 Aliexpressで別途買った防水IP67シリコンチューブ(10m)には、予め糸が通してあり、チューブごと適宜切って使うわけですが、具体的には、引けば引くほど締まるようLEDテープ先端を縛りつつ、かつ、締まりすぎるとLEDテープが千切れる可能性すらあるので反対側から優しく糸を引くことでうまく通すことができました。

 ちなみに糸がギリギリの長さだったので作業中、LEDテープ先端を縛っている間に反対側の糸が引っ張られてチューブ内に引っ込んでしまうことが多々あり、針金の先を曲げた治具を作って先端に糸を引っ掛けてから何度かくるくる回してそーっと引っ張り出しました。

 LEDテープをはんだ付けする部分のシリコンチューブを適宜切り、そこを含めカバーできるよう熱収縮チューブを通してからハンダ付け、チューブを収縮させ固定、念の為、お風呂場で使うシリコン補修材を着け、3辺あるのでLEDテープ接続部の2箇所と制御部にいくLEDテープのハンダ付け部、他端の4箇所を同様に処理しました。

 また、最適解か否かはともかく、ホットボンドだとシリコンチューブの接着がうまくいかなかったので防水シリコンチューブとアルミアングルへの接着にもシリコン補修材を使いました。

 シリコン補修材については、アルミへの接着はともかく、やはり、防水シリコンチューブ両端の防水兼接着用途に以前、屋外用のArduino鳥獣よけ装置RCWL-0516/LDR/WS2812Bのテストで使ったことがあったので。

玄関間接照明制御部

 コントローラーと言うか制御部については、恒久になるかもしれませんが、とりあえず、400穴ブレッドボードに回路を作り、ダイソーやセリア、キャンドゥにもあった100均のトレカ用カードケースに入れ、PIRセンサーとDCコネクタ用に切り欠きを入れ、それぞれ外に出しました。

 PIRセンサーは、何かと重宝する粘着ラバー ブル・タックで向き調整しています。

 より、感知範囲を狭めたい場合には、PIRセンサーの感知させたくない方向に板紙とか何らかの障壁を作ればよいでしょう。

 この制御部は、前掲写真の靴箱手前の程よいデッドスペースに置き、電源延長コード+1口スイッチ付きコンセントに挿したACアダプタをDCコネクタメスで受け、靴箱奥から配線カバー内を通した配線をDCコネクタオス・メスで接続、反対側は、3本、LEDテープ+防水IP67シリコンチューブ+アルミアングルが連なっている状態です。

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

 Fritzingによるブレッドボード図のようにArduinoのVIN、CdS(日本では元素記号/Cd:カドミウム+S:硫黄で、英語圏では、抵抗器としてLDR/Light Dependent Resistorと呼ばれることが多い模様)、PIRセンサーともに入力電圧として受け付けるのでACアダプタ12Vでもいけます。

 ArduinoのVINについては、入力電圧7〜12Vらしいのでギリギリ?

 Arduino+LEDテープライトのベッド下照明のようにUSB充電ACアダプタで5V給電し、出力側に昇圧モジュールを使う手もありますが、よく考えたらArduinoのVIN、HC-SR501、CdS素子共に12Vに対応するので100V→5V→12Vと昇降圧するのも微妙かなと気づいてしまいました。

 尤も、その時は、入力電圧5VのCdSのモジュールを使っていたので、どっちにしろ微妙でしたけどね。

 定電流回路について考えていないのですが、この場合、何がどう違ってくるんでしょ?実用上、光量が足りないとか、時によって違うとかいうことは感じませんが、逆に無駄も出る?

 ちなみにArduinoがなくてもPIRセンサーだけなら人などの動きで、CdSだけなら分圧を使って暗くなった時に、LEDテープライトを点灯させることができました。

 が、玄関の足下用に暗いときのみ機能する自動点灯ライトを作りつつ、PIRのCdS用パターンにCdSを仕込む以外でArduinoなしでPIRとCdSを併用する方法がわからず、良くも悪くも結局、Arduino(マイコン)を使用せざるを得ませんでした。

 尚、この回路では未計測ながら、他の5VのLEDテープライトで電池ボックスから直でつなげた時、電流が430mA程度、Arduinoなしの上記のような回路につないだ時、60〜80mA程度でした。

 明るさに違いがあるのは当然として回路自体は、手で触ってわかるほど熱として放出している感は全くないのですが、これって使用したMOSFETの仕様上当然であって、出力を、ひいては光量を適度に抑えられてるって単純に喜んでいいのでしょうか?

 っていうか、VGS(th) Min:2.0V/Max:4.0VでVGSの遮断領域<=飽和領域(VGS<=x<=VDS+VTH)<=線形領域ってことは、増幅のつもりで使ったMOSFETの飽和領域について単3エネループx4だとVDSはかなり小さくなるから、IDも限られ、電池ボックス直より電流が制限されたってことでいい?のかな?

 で、MOSFETは電圧で電流を制御できるから余った電流を熱に変換する必要もなく熱が出るわけでもない?から結果、回路に余計な負荷もかからず、適度な明るさになった上、電池も長持ちするようになったラッキー...ってことでいいのかな...?

 更に、っていうか、MOSFETって電源1系統でもよいの?もしかして常にMOSFET用と負荷用2系統あってこそのもの?

 わー、いよいよMOSFETちゃんと学ばなくちゃいけないか...。

#include <avr/sleep.h>
 
const int cds = A0;
const int pir = 2;
const int led = 13;
 
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, FALLING);
 sleep_mode(); //指定したモードでスリープを開始
 sleep_disable(); //割り込みによるスリープからの復帰
 detachInterrupt(1); //割り込み処理の解除
}
void setup() {
 Serial.begin(9600);
 pinMode(led, OUTPUT);
 pinMode(pir, INPUT_PULLUP);
}
 
void loop() {
 int cdsin = analogRead(cds); // 抵抗値 0-1023 小さいほど明るい
 int pirin = digitalRead(pir);
 if(cdsin > 12 && !pirin) {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
 
 } else {
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
  Serial.println("Sleep...");
  delay(20);
  sleepNow();
 }
}

 スリープを含めたスケッチは、こんな感じです。

ホーム前へ次へ