以前、RFIDプロジェクトの多くでRFIDを使用し、8051を使用してRFIDベースの出席システムを構築しました。ここでは、RaspberryPiを使用してRFIDベースの出席システムを構築し ます。
この RFIDベースの出席システムプロジェクトでは、RFIDカードを使用して出席を自動的に承認およびカウントする方法について説明します。RFIDテクノロジー(無線周波数の識別と検出)は、学校、大学、オフィス、駅でさまざまな目的で一般的に使用され、人々を自動的に追跡します。ここでは、RFIDを使用して許可された人の出席をカウントします。
Raspberry Piに慣れていない場合は、一連のチュートリアルとRaspberry piプロジェクトを作成し、すべての基本コンポーネントといくつかの簡単なプロジェクトを最初にインターフェースして確認してください。
使用されるコンポーネント:
- Raspberry Pi(起動したSDカード付き)
- ボタンを押す
- ブザー
- 16x2 LCD
- 10kポット
- 10K抵抗
- 導いた
- 1k抵抗
- ブレッドボード
- RFIDリーダー
- 電力5ボルト
- RFIDタグまたはカード
- イーサネットケーブル
- 接続線
RFIDリーダーとタグ:
RFIDは、RFIDリーダーとRFIDタグまたはカードの2つの部分からなる電子機器です。RFIDタグをRFIDリーダーの近くに置くと、タグデータが連続して読み取られます。RFIDタグのコイルには12桁の文字コードがあります。このRFIDは9600bpsのボーレートで動作しています。RFIDは、電磁石を使用して、リーダーからタグまたはタグからリーダーにデータを転送します。
作業説明:
ここでは、Raspberry Pi 3がこのプロジェクトのプロセス全体を制御しています(ユーザーは任意のRaspberry Piボードを使用できます)。RFIDリーダーがRFIDカードIDを読み取り、このデータがUARTを介してRaspberry Piによって受信され、RPiがカードを検証して結果をLCD画面に表示します。
人がRFIDタグをRFIDリーダーの近くに置いてスキャンすると、RFIDはタグのデータを読み取り、それをRaspberryPiに送信します。次に、Raspberry PiはそのRFIDタグの一意の識別番号を読み取り、このデータを事前定義されたデータまたは情報と比較します。データが事前定義されたデータと一致する場合、Raspberry Piはタグの人の出席を1つ増やします。一致しない場合、マイクロコントローラーはLCDに「無効なカード」メッセージを表示し、ブザーがしばらく鳴り続けます。そして、ここでは、合計数を確認するためのプッシュボタンも追加しました。すべての学生の出席の。ここでは、3人の学生の出席を記録するために3つが使用され、1つが無効なカードとして使用される4つのRFIDタグを取得しました。
回路の説明:
このRaspberryPi Attendance System Projectの回路図は非常にシンプルで、 Raspberry Pi 3、RFIDリーダー、RFIDタグ、ブザー、LED、LCDが含まれています。ここで、Raspberry Piは、リーダーからのデータの読み取り、データと事前定義されたデータの比較、ブザーの駆動、ステータスLEDの駆動、LCDディスプレイへのステータスの送信などの完全なプロセスを制御します。RFIDリーダーはRFIDタグの読み取りに使用されます。ブザーは表示に使用され、内蔵のNPNトランジスタによって駆動されます。LCDは、ステータスやメッセージを表示するために使用されます。
接続は簡単です。LCDは4ビットモードでRaspberryPiに接続されています。LCDのRS、RW、およびENピンはwiringPi GPIO 11、gnd、および10に直接接続されます。データピンはwiringPi GPIO 6、5、4、および1に接続されます。10KポットはLCDのコントラストまたは輝度を設定するために使用されます。ブザーは、アースを基準にして、wiringPiGPIOピン7に接続されます。3つのLEDは、それぞれのRFIDカードで学生の表示のために接続されています。また、1つのLEDを使用して、システムがRFIDカードをスキャンする準備ができていることを示します。プッシュボタンもwiringPiGPIOピン12に接続され、出席数を表示します。RFIDリーダーはUARTピン(GPIOピン16の配線)に接続されています。
Raspberry PiへのwiringPiライブラリのインストール:
Pythonと同様に、 インポートRPi.GPIOをIO ヘッダーファイル としてインポートして 、Raspberry PiのGPIOピンを使用します。ここでC言語では、wiringPiライブラリを使用してCプログラムでGPIOピンを使用する必要があります。以下のコマンドを1つずつ使用してインストールできます。このコマンドは、ターミナルまたはPuttyなどのSSHクライアント(Windowsを使用している場合)から実行できます。Raspberry Piの取り扱いについて詳しくは、「RaspberryPi入門」チュートリアルをご覧ください。
sudo apt-get install git-core sudo apt-get update sudo apt-get upgrade git clone git://git.drogon.net/wiringPi cdrwiringPi git pull origin cdwireingPi./build
以下のコマンドを使用して、wiringPiライブラリのインストールをテストします。
gpio -v gpio readall
プログラミングの説明:
まず、いくつかのライブラリを含め、このコードで使用する必要のあるピンを定義しました。
#include
その後、計算用の変数と配列を定義し、値と文字列を格納します。
int sp; int count1 = 0、count2 = 0、count3 = 0; char ch; char rfid; int i = 0; char temp;
次に、プロセス全体を実行する関数が作成されました。それらのいくつかを以下に示します。
与えられ たvoidlcdcmd 関数は、LCDにコマンドを送信するために使用されます
void lcdcmd(unsigned int ch){int temp = 0x80; digitalWrite(D4、temp&ch << 3); digitalWrite(D5、temp&ch << 2); digitalWrite(D6、temp&ch << 1); digitalWrite(D7、temp&ch); digitalWrite(RS、LOW); digitalWrite(EN、HIGH);…………….。
与えられた ボイド書き込み 機能は、LCDにデータを送信するために使用されます。
void write(unsigned int ch){int temp = 0x80; digitalWrite(D4、temp&ch << 3); digitalWrite(D5、temp&ch << 2); digitalWrite(D6、temp&ch << 1); digitalWrite(D7、temp&ch); digitalWrite(RS、HIGH); digitalWrite(EN、HIGH);…………….。
所与の ボイドクリア() 関数は、LCDをクリアするために使用され、 空隙はsetCursorが セットカーソル位置とするために使用される ボイドプリント LCDに文字列を送信します。
void clear(){lcdcmd(0x01); } void setCursor(int x、int y){int set = 0; if(y == 0)set = 128 + x; if(y == 1)set = 192 + x; lcdcmd(set); } void print(char * str){while(* str){write(* str); str ++; }}
void begin 関数は、LCDを4ビットモードで初期化するために使用されます。
void begin(int x、int y){lcdcmd(0x02); lcdcmd(0x28); lcdcmd(0x06); lcdcmd(0x0e); lcdcmd(0x01); }
void buzzer() および void wait() 関数は、ブザーを鳴らし、カードを再度配置するのを待つために使用されます。関数 voidserialbegin は、シリアル通信を初期化するために使用されます。
void buzzer(){digitalWrite(buzz、HIGH); delay(1000); digitalWrite(buzz、LOW); } void wait(){digitalWrite(led5、LOW); delay(3000); } void serialbegin(int baud){if((sp = serialOpen( "/ dev / ttyS0"、baud))<0){clear(); print( "開くことができません"); setCursor(0,1); print( "シリアルポート"); }}
で 無効セットアップ() 関数で、我々はすべてのGPIO、LCDおよびシリアルUARTをinitiaze。
void setup(){if(wiringPiSetup()== -1){clear(); print( "開始できません"); setCursor(0,1); print( "wiringPi"); } pinMode(led1、OUTPUT); pinMode(led2、OUTPUT);……………………
与えられ たvoidget_card() 関数は、RFIDリーダーからデータを取得するために使用されます。
ボイドメイン() 関数、我々は、LCD上にいくつかのメッセージを示し、コードの下でカードを検証するために予め定義されたデータとタグデータを比較しました。
……………… if(strncmp(rfid、 "0900711B6003"、12)== 0){count1 ++; 晴れ(); print( "Attd。Registered"); setCursor(0,1); print( "スタッドネット1"); digitalWrite(led1、HIGH); ブザー(); digitalWrite(led1、LOW); 待つ(); } else if(strncmp(rfid、 "090070FE6EE9"、12)== 0){count2 ++; 晴れ(); print( "Attd。Registered"); setCursor(0,1);…………….。
最後に、 void check_button() 関数を使用して、ボタンを押したときの総出席数を表示します。
void check_button(){if(digitalRead(in1)== 0){digitalWrite(led5、LOW); 晴れ(); setCursor(0,0); print( "std1 std2 std3");…………….。
以下のこのRaspberryPi AttendanceSystemの完全なコードを確認してください。