カードリーダー式入退室システムについて
目次
概要
本システムは、指定した学生証をかざすと、扉を解錠するものです。
また、ロックが解除された状態で再び学生証をかざすと、扉は施錠されます。
なお、このシステムが動いている状態でも、鍵による解錠施錠は問題なく行えます。
学生証を指定する
・学生証の管理はMemberID.jsonで行なっています。以下の点に気をつけて書き換えを行ってください。
・学籍番号の最後の英語は大文字で記入してください
・jsonファイルの読み込みは、起動時1回のみなので、書き換えた際は再起動してください
・盗難リスクを考慮し、部室によく来る学生に限定するのが良いでしょう
動かなくなったときは
以下の順で確認、処置を行ってみてください。
① ピンが指定の場所に刺さっているか確認
② USBハブのランプが青く光っているか(通電しているか)の確認
② 電源の抜き差しによる再起動
③ マウス、キーボード、モニターを接続し、ソフト側の不具合を修正
それでも直らないときは
使用しているのはRaspberryPiZeroというもので、そんなにいいものじゃありません。
電源をぶち抜いたときにたまにSDカードが破損します(2敗)。
ディスクイメージをGoogleDrive(ディスクイメージ)に保存しているので、解凍してからSDカードに書き込んで貰えば大丈夫です……多分。
もしそれでも動かない場合は、以下の文章を読んでください。
大丈夫、あなたなら直せます!
RaspberryPiのピンについて
ケーブルは以下のようになっています。
茶色: サーボモーターと磁気センサーのGND → 6番
赤色: 磁気センサーの信号 → 16番
オレンジ: サーボモーターの信号 → 12番(18)
黄色: サーボモーターの電源 → 2番
RaspberryPiのピン配列は以下のサイトを確認してください。
https://learn.microsoft.com/ja-jp/windows/iot-core/learn-about-hardware/pinmappings/pinmappingsrpi
Pythonコードについて
googleDriveにまんま保存しています。(DoorLockSystem)
gitHubにも保存しています。(https://github.com/EhimeCSR/DoorLockSystem)
デスクトップに( /home/csr/Desktop/DoorLockSystem となるように)おいてください。
自動実行について
serviceファイル | batファイル | Python実行 |
AutoDoorLockSystem.service | AutoProcessRun.sh | DoorLockSystem.py |
実行フロー
serviceファイル→batファイル→sudo & Python実行
ライブラリのインストール
下記のコードをターミナルで打ってください。
1️⃣nfcpy(nfcカードリーダー)
sudo pip3 install –break-system-packages nfcpy |
*追記(2024.08.24):pipによるインストール時に
–break-system-packagesが無いと動作しなかった
*参考:ラズパイに怒られた話【error: externally-managed-environment】 #Python3 - Qiita
2️⃣discordwebhook(Discordに自動投稿する)
sudo pip3 install –break-system-packages discordwebhook |
serviceファイルの初期設定
注意:
以下のコードまんまで実行する際は、ユーザーネームを”csr”、
DoorLockSystem(Pythoコードの入ったフォルダ)はデスクトップに、AutoDoorLockSystem.service(serviceファイル)とAutoProcessRun.sh(batファイル)はDoorLockSystemの中においてください。
1️⃣serviceファイルを /etc/systemd/system に入れる。以下のコードを打てばOKです
なお、以下のコードはserviceファイルがDoorLockSystemの中に保存されている前提のものです
sudo cp /home/csr/Desktop/DoorLockSystem/AutoDoorLockSystem.service /etc/systemd/system/ |
*ls /etc/systemd/system/による確認も推奨
2️⃣serviceファイルを追加したので、デーモンのリロードを行う
sudo systemctl daemon-reload |
3️⃣serviceファイルの自動実行を有効化する
sudo systemctl enable AutoDoorLockSystem |
4️⃣serviceを開始する(rebootでも(多分)可)
sudo systemctl start AutoDoorLockSystem |
*何かしらサービスの動作設定をしたい場合に確認用(コードに調整を加えた際は一旦停止が必要?)
リンク:https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9
5️⃣serviceが登録されているかの確認。”grep”は以下の文字列を含んだserviceファイルのみを検索する
sudo systemctl list-unit-files –type=service | grep Auto |
6️⃣Pythonファイルにsudo権限を渡す(batファイルにsudo Python3と書き込んだので不要?)
sudo chmod 755 /home/csr/Desktop/DoorLockSystem/DoorLockSystem.py |
sudo chmod 755 /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh |
7️⃣serviceが正常に動作しているかどうかの確認
sudo systemctl status AutoDoorLockSystem |
それぞれのファイルの中身
serviceファイル(AutoDoorLockSystem.service)
[Unit] Description = AutoDoorLockSystem
After = network
[Service]
Type = simple
ExecStart = /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh
[Install]
WantedBy = multi-user.target
batファイル(AutoProcessRun.sh)
#!/bin/bash
sudo pigpiod
cd /home/csr/Desktop/DoorLockSystem/
sudo python3 DoorLockSystem.py
こんなエラーが発生するかも
1️⃣statusを見るとバッチファイルのディレクトリが存在しないと言われる
エラー例:
AutoDoorLockSystem.service: Failed at step EXEC spawning /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh : No such file or Directory |
原因:
スクリプトファイルのシバン(shebang)行にWindowsの改行文字(^M、CR+LF)が含まれている可能性が高いです。
LinuxではLF(\n)のみを改行文字として認識するため、このような問題が発生します。
解決策:
下記コードを実行し、スクリプトの改行コードをLinux形式(LF)に変更する。
sudo apt-get install dos2unix dos2unix /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh |
なにかわからないことがあったときは
本システムを作成したのは、2016年入学の「Y」、2020年入学の「SAI/かんきつ」、2023年入学の「つむ」です。
わからないことがあればDiscord等で聞いてください。
問題が発生するごとにいろいろと更新してます。
適度に更新してください。
最終編集者:Toku
最終編集日:2024/8/24