セキュリティは私たちの日常生活における主要な関心事であり、デジタルロックはこれらのセキュリティシステムの重要な部分になっています。このプロジェクトでは、arduinoボードとマトリックスキーパッドを使用して、このようなデジタルコードロックの1つを模倣しています。
コンポーネント
- Arduino
- キーパッドモジュール
- ブザー
- 16x2 LCD
- BC547トランジスタ
- 抵抗器(1k)
- ブレッドボード
- 力
- 接続線
この回路では、多重化技術を使用して、システムにパスワードを入力するためのキーパッドをインターフェースしました。ここでは、16キーを含む4x4キーパッドを使用しています。16キーを使用する場合は、arduinoへの接続に16ピンが必要ですが、多重化技術では、16キーのインターフェイスに8ピンのみを使用する必要があります。そのため、キーパッドモジュールをインターフェースするスマートな方法です。
多重化手法:多重化手法は、入力またはパスワードまたは数値を提供するためにマイクロコントローラーで使用されるピンの数を減らすための非常に効率的な方法です。基本的に、この手法は2つの方法で使用されます。1つは行スキャンで、もう1つはコロンスキャンです。ただし、このarduinoベースのプロジェクトでは、キーパッドライブラリを使用しているため、このシステムの多重化コードを作成する必要はありません。入力を提供するためにキーパッドライブラリを使用する必要があるだけです。
回路の説明
このプロジェクトの回路は非常にシンプルで、Arduino、キーパッドモジュール、ブザー、LCDが含まれています。Arduinoは、キーパッドモジュールからのパスワードの取得、パスワードの比較、ブザーの駆動、LCDディスプレイへのステータスの送信などの完全なプロセスを制御します。キーパッドはパスワードの取得に使用されます。ブザーは表示に使用され、LCDはステータスやメッセージを表示するために使用されます。ブザーはNPNトランジスタを使用して駆動されます。
キーパッドモジュールの列ピンはピン4、5、6、7に直接接続され、行ピンはarduino unoの3、2、1、0に接続されます。16x2LCDは4ビットモードでarduinoに接続されています。制御ピンRS、RW、Enはarduinoのピン13、GND、12に直接接続されています。データピンD4-D7はarduinoのピン11、10、9、8に接続されています。そして、1つのブザーがBC547 NPNトランジスタを介してarduinoのピン14(A1)に接続されています。
ワーキング
内蔵のarduinoのEEPROMを使用してパスワードを保存したので、この回路を初めて実行すると、プログラムは内蔵のarduinoのEEPROMからガベージデータを読み取り、入力パスワードと比較して、パスワードが一致しないためアクセスが拒否されたというメッセージをLCDに表示します。この問題を解決するには、以下のプログラミングを使用して、初めてデフォルトのパスワードを設定する必要があります。
for(int j = 0; j <4; j ++)EEPROM.write(j、j + 49);
lcd.print( "Enter Ur Passkey:"); lcd.setCursor(0,1); for(int j = 0; j <4; j ++)pass = EEPROM.read(j);
これにより、パスワード「1234」がArduinoのEEPROMに設定されます。
初めて実行した後、これをプログラムから削除し、再度arduinoにコードを書き込んで実行する必要があります。これで、システムは正常に実行されます。また、2回目に使用するパスワードは「1234」になりました。これで、#ボタンを押して現在のパスワードを入力し、新しいパスワードを入力して変更できます。
パスワードを入力すると、システムは入力されたパスワードをarduinoのEEPROMに保存されているパスワードと比較します。一致した場合、LCDには「アクセスが許可されました」と表示され、パスワードが間違っている場合、LCDは「アクセスが拒否されました」と表示され、しばらくの間ブザーが鳴り続けます。また、ユーザーがキーパッドから任意のボタンを押すたびに、ブザーが1回鳴ります。
プログラミングの説明
コードでは、キーパッドをarduinoとインターフェースするためにキーパッドライブラリを使用しました。
#include
constバイトROWS = 4; // 4行constバイトCOLS = 4; // 4列charhexaKeys = {{'1'、 '2'、 '3'、 'A'}、{'4'、 '5'、 '6'、 'B'}、{'7'、 ' 8 '、' 9 '、' C '}、{' * '、' 0 '、'# '、' D '}}; バイトrowPins = {3、2、1、0}; //キーパッドバイトの行ピン配置に接続しますcolPins = {4、5、6、7}; //キーパッドの列のピン配列に接続します//クラスのインスタンスを初期化しますNewKeypadKeypad customKeypad = Keypad(makeKeymap(hexaKeys)、rowPins、colPins、ROWS、COLS);
LCDインターフェース用およびEEPROMインターフェース用のLCDライブラリが含まれています。ライブラリEEPROM.h。が含まれ、コンポーネントの可変ピンと定義済みピンが初期化されています。
#defineブザー15LiquidCrystal lcd(13,12,11,10,9,8); charパスワード; char pass、pass1; int i = 0; char customKey = 0;
そして、LCDを初期化し、セットアップ機能でピンに方向を与えます
void setup(){lcd.begin(16,2); pinMode(led、OUTPUT); pinMode(ブザー、出力); pinMode(m11、OUTPUT); pinMode(m12、OUTPUT); lcd.print( "Electronic"); lcd.setCursor(0,1); lcd.print( "キーパッドロック"); delay(2000); lcd.clear(); lcd.print( "Enter Ur Passkey:"); lcd.setCursor(0,1);
この後、ループ機能でキーパッドを読み取ります
customKey = customKeypad.getKey(); if(customKey == '#')change(); if(customKey){password = customKey; lcd.print(customKey); ビープ(); }
次に、文字列比較メソッドを使用して、パスワードを保存パスワードと比較します。
if(i == 4){delay(200); for(int j = 0; j <4; j ++)pass = EEPROM.read(j); if(!(strncmp(password、pass、4))){digitalWrite(led、HIGH); ビープ(); lcd.clear(); lcd.print( "Passkey Accepted"); delay(2000); lcd.setCursor(0,1); lcd.print( "#。ChangePasskey"); delay(2000); lcd.clear(); lcd.print( "パスキーを入力してください:"); lcd.setCursor(0,1); i = 0; digitalWrite(led、LOW); }
パスワード変更機能とブザービープ機能です
void change(){int j = 0; lcd.clear(); lcd.print( "UR Current Passk"); lcd.setCursor(0,1); while(j <4){char key = customKeypad.getKey(); if(key){pass1 = key; lcd.print(key); void beep(){digitalWrite(buzzer、HIGH); delay(20); digitalWrite(ブザー、LOW); }