ユーザ用ツール

サイト用ツール


manage:manual:カードリーダー式入退室システム

カードリーダー式入退室システムについて

目次

概要

本システムは、指定した学生証をかざすと、扉を解錠するものです。
また、ロックが解除された状態で再び学生証をかざすと、扉は施錠されます。
なお、このシステムが動いている状態でも、鍵による解錠施錠は問題なく行えます。

学生証を指定する

・学生証の管理は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.serviceAutoProcessRun.shDoorLockSystem.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

manage/manual/カードリーダー式入退室システム.txt · 最終更新: by csradmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki