この辺のことをするために作りました.
Raspberry Piでライトの点灯を識別したい機会がどれだけあるかわかりませんが,カーナビでも画面の暗転などに使用されている汎用的な方法があります.
車の電源の種類
車にはたくさんの電装品がついていますが,純正じゃないナビなど,部外品の多くは車と通信しているわけではありません.
そんな電装品が車から供給されている唯一のものがバッテリー電源です.
このバッテリー電源ですが,常時供給されるものとそうでないものがあり,常時供給されるものの方が少ないです.
略称 | タイミング | 用途・備考 |
---|---|---|
+B , バッテリー | 常時供給 | 一部の保安機器など,バッテリ上がりに注意. |
ACC , イグニッション | キー連動 | 多くの電装品,キーをACC位置にするとON |
イルミ | ライト連動 | 車のヘッドライトを点灯させるとON,イルミネーション系向け |
これらの電源はヒューズボックスから取ってくるのが一般的かと思います.
私の場合,設置場所がナビだったので,ナビなどに使用されているトヨタ10P+6Pコネクタから取り出しました.
ライトを検出する回路
前項を見ていただければわかるかと思いますが,ライトを検出する最も簡単な方法はイルミ電源の電圧が0か12Vかを検出することです.そこで,Raspberry PiのGPIOでこれを検出する回路を作ってみます.
2値を検出だけですので非常に簡単ですが,12Vを直接Raspberry Piに印加するわけにはいかないので,なんらか回路を挟む必要があります.
分圧方式
12Vを抵抗の分圧を用いて3.3V付近まで下げそれをRaspberry PiのGPIOの入力で検出します.
1点大きな問題が,電源のノイズです.
多くの車はエンジン始動中,交流モーターを回して,簡単な整流をした後に,バッテリーを充電しています.イルミ電源も同じ回路に接続されているわけで,大きなリプルが乗ります.
また,12Vと言いつつ,エンジン始動中は16[V]程度まで電圧が上昇するなど,極めて不安定です.
コンデンサを取り付けるなど,多少は対策も可能ですが,今回は見送りました.
フォトカプラ方式
絶縁といえばフォトカプラです,12V側に電流制限抵抗が必要なほか,ピンをプルアップする必要があります.
※回路を作った時には忘れていたのですが,Raspberry Piにはあらかじめプルアップ抵抗が内蔵されています.きちんと設定すれば回路図右上の10kΩ抵抗は不要になり,右のコネクタも2ピンで良くなります.
なによりフォトカプラの安心感は大きいです.
GNDも分離できるため,ノイズの影響は限りなく低くなります.
今回はこの回路で製作しました.
フォトカプラはTLP785を用いました.
実際に製作した回路がこちらです.
ビニールで包んでいますが真ん中の黒いのがフォトカプラです.
以下のプログラムで動作チェックします.
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(26,GPIO.IN , pull_up_down = GPIO.PUD_UP) # 引数pull_up_downをGPIO.PUD_UPでプルアップ,GPIO.PUD_DOWNでプルダウン while True: print(GPIO.input(26)) time.sleep(0.2)
このプログラムではフォトカプラのコレクタ側をGPIOピンヘッダの37番ピン(BCMの26番ピン),エミッタ側をGND(GPIOピンヘッダの39番ピンなど)に接続します.
結果以下の通り,12Vを印加するかどうかで値が変化しました.
なお,プルアップですので,12V印加時が0,停電時が1となります.
この回路を使って自動車のライトが消灯すると警告する機能を作りました.
IMG_5753 from shujima on Vimeo.
中央下に製作した回路(15mm*60mmくらい)が写っています.
手前のコネクタを抜く(ライトが消灯したのに相当)と,Raspberry Piが反応して警告音・表示を出します.
実験は成功です.