ACS、ラズベリー、ティーポット

画像 メインキャラクターはタイトルにリストされており、その結果、ドアを開けるだけでなく、制御信号を与えたり停止したりすることで同様のアクションを実行するために使用できる、 まったく同じRFIDモジュールRC522に基づく単純なアクセス制御システムのプロトタイプを取得します。



インターネット上に非常に多くの多様な情報があり、実例はあまりありませんが、すべてを段階的に詳細に説明しようと思います。 このモジュールは、13.56 MHzの周波数のRFIDカードで動作し、そのような周波数のカードとチップに加えて、モスクワのユニフォームチケット(使用済みの1回限りのシングルチケットを使用)とNFCタグを簡単に理解します。



ハードウェア



プロジェクトを実装するには、モジュールといくつかの追加コンポーネントを接続する必要があります。

モジュール接続図
画像



モジュールの動作を確認するために、いくつかのダイオードとピエゾダイナミクスを使用しました。 赤と緑のダイオード-条件付きロック操作の状態を示す(赤-ロックが閉じている、緑-ロックが開いている)、黄色のダイオード-制御信号を示す(実際の状態ではロックに置き換えられます)、ピエゾダイナミックスピーカー-ロックを開くとビープ音が鳴り、エラーを通知します。 ロック付きの実際の回路では、リレーを使用してロックの電源回路を制御することをお勧めします。

ダイオードとスピーカーの接続図
画像





ソフトウェア



有効になっていない場合は、まずRaspberryでSPIを有効にする必要があります。 これを行う方法はここに書かれています

ライブラリをダウンロードしてモジュールを操作し、カードの読み取りと書き込みを確認できます。 私たちにとって、読み取りは重要です。特に、UIDカードを読み取るために、コンソールに入力します。

git clone https://github.com/mxgxw/MFRC522-python
      
      





ダウンロードしたコードが正常に機能するためには、SPI-pyもダウンロードしてインストールする必要があります。

 git clone https://github.com/lthiery/SPI-Py sudo python /SPI-Py/setup.py install
      
      





これで、カードのUIDとそこに記録された情報を読み取ることができます。 これを行うには、ダウンロードしたファイルの例を実行します。

 cd MFRC522-python sudo python Read.py
      
      





以下が画面に表示されるはずです。

 Welcome to the MFRC522 data read example Press Ctrl-C to stop.
      
      





その後、カードまたはタグをリーダーに持っていくと、UIDが表示されます

 Card detected Card read UID: 60,56,197,101 Size: 8 Sector 8 [12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      
      





この場合、この部分に興味があります: UID:60,56,197,101

そして、この部分を変更できます
ネタバレ見出し
、ゼロを必要な値に置き換えます: セクター8 [12、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0]ですが、これは今は興味がありません。


さらに、モジュールやその他のコンポーネントの操作のために、さまざまなソースに基づいた簡単なpythonスクリプトを作成しました。



コメント付きのスクリプト
 #!/usr/bin/env python import RPi.GPIO as GPIO import MFRC522 import signal import time red = 11 green = 18 speaker = 16 doorlock = 12 #  UID  (UID     sudo python /MFRC522-python/Read.py card_01 = '6056197101' #white card_02 = '148167101184' #fob card_03 = '13652116101' # #   GPIO.setmode(GPIO.BOARD) #  ,         (3v3 - ) GPIO.setup(red, GPIO.OUT, initial=1) #   18   GPIO.setup(green, GPIO.OUT, initial=0) #     11 GPIO.setup(speaker, GPIO.OUT, initial=0) #  16 GPIO.setup(doorlock, GPIO.OUT, initial=0) #  12 continue_reading = True def end_read(signal,frame): #  ,        global continue_reading print "Ctrl+C captured, ending read." continue_reading = False GPIO.cleanup() # Create an object of the class MFRC522 (??) MIFAREReader = MFRC522.MFRC522() while continue_reading: #   -   UID (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) #    ,  " " if status == MIFAREReader.MI_OK: print "Card detected" #  UID  (status,uid) = MIFAREReader.MFRC522_Anticoll() #   UID,    if status == MIFAREReader.MI_OK: #  UID    UIDcode = str(uid[0])+str(uid[1])+str(uid[2])+str(uid[3]) print UIDcode #      if UIDcode == card_01 or UIDcode == card_03 or UIDcode == card_02: #    # ,       #  ( ,  ),  # ..     # ..       doorlock #  ,  ,      GPIO.output((red, green, speaker, doorlock), (0,1,1,1)) print "Door open" #    1  time.sleep(1) GPIO.output((red, green, speaker, doorlock), (1,0,0,0)) #   ,     print "Door closed" #      ,     else: GPIO.output((red, green, speaker, doorlock), (1,0,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,0,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (0,1,1,0)) time.sleep(0.05) GPIO.output((red, green, speaker, doorlock), (1,0,0,0)) print "Unrecognised Card"
      
      









ファイルを作成し、その中にコードをコピーします。

 nano rf.py
      
      





ファイルを保存します(CTRL + x、y)。

コマンドでスクリプトを実行します

 sudo python rf.py
      
      





以下が発生した後:

赤いダイオードが点灯し、「ロック」が閉じていることを示します。

番号(コンマなし)がリストされているリーダーにカードが持ち込まれると、赤色のダイオードが消え、緑色のダイオードが点灯し、「ロック」が開いていることを知らせ、黄色のダイオードが点灯します-この場合は「コントロール」であり、「ロック」制御信号があり、ピエゾダイナミックスピーカーからビープ音が鳴ります。 指定した時間(この場合は1秒)後、ダイオードとスピーカーは元の状態に戻り、リーダーはカードが読み取られるのを待ちます。

カードがリストからリーダーに届かない場合、赤と緑のダイオードが点滅し、圧電スピーカーが断続的にビープ音を発してエラーを通知し、黄色のダイオードは点灯しません(つまり、「ロック」を開く信号がありません)。 1秒以内に、すべてが元の状態に戻ります。



作品を示す短いビデオ:




All Articles