この前の車にキーレス付けた時、アクチュエーターが3つ余ったから何か作ろうかなってことで、ラズベリーパイを使って引戸の電気錠を作ろうということになりました。
材料集め
全部amazonでそろいます。私は全て家に転がっていたのでそれを使いました。
- ラズベリーパイ pi3でもzeroでも家に転がっているやつでOK
- リレーモジュール ラズパイからの出力は電力不足なので
- 12V電源 家に転がってるやつでOK
- フェリカ 家に転がってるやつでOK
- フェリカにタッチできるカード ナナコとかでもOK
アクチュエーターの配線を調べる
マスターアクチュエーターを使うので、配線図を頼りに探っていきます。
たぶん青と緑に12Vくればアクチュエータがどちらかに動く感じです。プラスマイナスを反転させれば反対側に動きます。
残りの、茶色と白と黒ですが、黒はアースということで、たぶん開閉どちらかで黒と茶色もしくは白で通が出る感じです。一応テスターで測るとそうでした。
配線図を書く
ざっくり書くとこんな感じ。
アクチュエーターはプラマイを反転させると動作も反転するので、リレーを2つ組み合わせて反転回路を作ってます。
リレーモジュールは工夫してつかうと、回路数分使えます。
具体的にはリレーモジュールはフォトカプラでVccが入力がアイソレートしているので、Vccにラズパイの3.3Vを加えて、IN1にGPIOでグランドに落としてあげるとチャンネルを独立して使えます。
んで、いろいろつなぐとこんな感じ。
ラズパイでフェリカを読み込む
pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 005: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory
Bus 001 Device 006: ID 054c:06c3 Sony Corp. RC-S380
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~ $ sudo apt-get install python-pip
Reading package lists… Done
Building dependency tree
Reading state information… Done
python-pip is already the newest version (18.1-5+rpt1).
The following packages were automatically installed and are no longer required:
libdrm-etnaviv1 libllvm6.0 python3-pyperclip python3-thonny rpi.gpio-common
Use ‘sudo apt autoremove’ to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
pi@raspberrypi:~/nfcpy $ sudo pip3 install nfcpy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting nfcpy
Downloading https://files.pythonhosted.org/packages/7e/ed/3b3a00ada844f8a9229c8a79f460a1a13e870b767a1eb0ee0caf99740e9d/nfcpy-1.0.3-py3-none-any.whl (186kB)
88% | | 163kB 182kB/s eta 0:00:01
93% | | 174kB 182kB/s eta 0:00:0 99% || 184kB 185kB/s eta 0:00 100% || 194kB 171kB/s
Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from nfcpy) (3.4)
Collecting pydes (from nfcpy)
Using cached https://www.piwheels.org/simple/pydes/pyDes-2.0.1-py2.py3-none-any.whl
Collecting libusb1 (from nfcpy)
Downloading https://www.piwheels.org/simple/libusb1/libusb1-1.7.1-py3-none-any.whl (59kB)
100% || 61kB 102kB/s
Collecting ndeflib (from nfcpy)
Using cached https://files.pythonhosted.org/packages/c9/80/bbc9a4818cd74807f914d225611cd724d8c0e56237b952a9a4aa6d583f5c/ndeflib-0.3.3-py2.py3-none-any.whl
Installing collected packages: pydes, libusb1, ndeflib, nfcpy
Successfully installed libusb1-1.7.1 ndeflib-0.3.3 nfcpy-1.0.3 pydes-2.0.1
pi@raspberrypi:~ $ git clone https://github.com/nfcpy/nfcpy.git
Cloning into ‘nfcpy’…
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 8408 (delta 27), reused 39 (delta 18), pack-reused 8351
Receiving objects: 100% (8408/8408), 6.60 MiB | 2.51 MiB/s, done.
Resolving deltas: 100% (6041/6041), done.
pi@raspberrypi:~/nfcpy $ sudo sh -c ‘echo SUBSYSTEM==\”usb\”, ACTION==\”add\”, ATTRS{idVendor}==\”054c\”, ATTRS{idProduct}==\”06c3\”, GROUP=\”plugdev\” >> /etc/udev/rules.d/nfcdev.rules’
pi@raspberrypi:~/nfcpy $ cat /etc/udev/rules.d/nfcdev.rules
SUBSYSTEM==”usb”, ACTION==”add”, ATTRS{idVendor}==”054c”, ATTRS{idProduct}==”06c3″, GROUP=”plugdev”
$vi getIDm.py
#!/usr/bin/env python3
import binascii
import nfc
def on_connect(tag):
print(binascii.hexlify(tag.identifier).upper())
def main():
with nfc.ContactlessFrontend(‘usb’) as clf:
clf.connect(rdwr={‘on-connect’: on_connect})
main()
$chmod 755 getIDm.py
って感じで、./getIDm.pyするとIDm取れます。IDmなので、認証に使うべきではないのですが、手軽に実装ということでとりあえず、使用します。
参考:
Raspberry Pi + PaSoRi と Android HCE で NFC 通信
制御のプログラムを作る
$ vi open.php
<?php
$R_A = 27; //電源スイッチ
$R_B = 22; //極性反転用
$R_C = 23; //極性反転用
//リレーユニットなので、GPIOはoutにする
exec(“gpio -g mode $R_A out”);
exec(“gpio -g mode $R_B out”);
exec(“gpio -g mode $R_C out”);
exec(“gpio -g write $R_A 0”); //電源ON
exec(“gpio -g write $R_B 0”); //
exec(“gpio -g write $R_C 0”); //
exec(“sleepenh 1”);
//テストなので、とりあえず開けた後は閉める
exec(“gpio -g write $R_B 1”); //アクチュエーター電源反転
exec(“gpio -g write $R_C 1”); //アクチュエーター電源反転
exec(“gpio -g write $R_A 1”); //電源OFF
?>
$ vi test.php
<?php
while(1){
$IDm = exec(“./getIDm.py”);
if(strcmp(“b’0000000000000000′”, $IDm) == 0) {
exec(“php open.php”);
}
}
?>
あとは、コマンドラインでphp ./test.phpしてフェリカにカードをかざせばアクチュエーター動くって感じです。
後編は実際の取付と運用の内容になると思います。