工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoキーパッドドアロック:ユーザー設定可能な暗証番号

必要なパーツと用品

Arduino UNO×1
4x4 キーパッドマトリックス×1
汎用プッシュボタン×1
LCD I²C×1
リニアソレノイドロック×1
IRF510N MOSFET×1
1チャネルリレーモジュール×1

必要な工具と機械

ブレッドボード(170ピン)
ジャンパーワイヤーキット(5cm、10本)

このプロジェクトについて

こんにちは、このチュートリアルへようこそ(古いけど定番です)。今日は、Arduinoボード、キーパッド、LCD I²Cディスプレイをベースにしたドアロックプロジェクトを作ります。ロックにはソレノイドとリレーを使用します。指紋認証ドアロックのチュートリアルではDCモーター式のロックを使いましたが、お使いのロックシステムに合わせて配線、コードを適応させてください。

注: 実用プロジェクトでは、ソレノイドの使用はまったくお勧めしません。むしろ、電子錠と機械錠の両方で開けられる錠前をハックし、それに合わせてプロジェクトを適応させることを推奨します。

パーツ

このプロジェクトには以下のコンポーネントが必要です。ジャンパーワイヤーと12V電源も必要ですが、ここでは省略しています。

(部品写真は元記事を参照)

プッシュボタンは室内からロックを開けるためのものです。不要なら外せます。抵抗はチャタリング防止用です。

4×4キーパッドを使用していますが、3×4でも可能です。その場合、コードの一部を修正する必要があります(確認キーに'A'を使用していますが、'*'や'#'に変更可能)。

ソレノイドは12V外部電源で駆動し、IRF510N MOSFETトランジスタで制御します。

トランジスタはスイッチとして動作し、Nチャネル型が適しています。IRF510NはArduinoとの組み合わせで人気があります。ゲートとソース間に5Vを印加すると、ドレインとソース間が導通(スイッチON)し、バイポーラトランジスタのようなベース抵抗は不要です。電圧を印加しなければ開放(スイッチOFF)となり、これでソレノイドを制御します。

もう一方の例では1チャネルリレーモジュールを使用します。これは3.3Vで動作し、入力制御はトランジスタと同様ですが、ロジックが反転します(コードで確認)。

アルゴリズム フローチャート

理解しやすくするためにフローチャートを作成しました。完全ではありませんが、コードの概要を示しています。

(フローチャート画像は元記事を参照)

注: リレーを使えば250VACまでの電気錠を制御可能です。ソレノイド制御にも使用できます。

コードはまったく同じで、ロックを開くときのLOW/HIGHを切り替えるだけです。

重要: 初回はコードをアップロードし、パスコードを変更してから、いくつかの行をアンコメント(setup内の該当行を探してください)して再アップロードする必要があります。これでEEPROMからパスコードを読み取れるようになります。この操作は初回のみ必要です。

また、コード長も変更可能です。最初は4桁にしていますが、デフォルトコードから変更できます。コードでは「sizeof(code)」を使用しているため「4」という数値はハードコードされていません。ただし、4桁のコードを6桁に変更する場合は、まずソースコードの初期パスコードを変更してください。

テスト

テストの様子は以下の写真をご覧ください。

(テスト写真多数は元記事を参照)

以上がプロジェクトのテスト結果です。ソレノイドでもリレーでも同じ動作です。プッシュボタンで室内から開錠できます(不要なら外せます)。

お役に立てれば幸いです。問題や質問があればコメントしてください。

ソースコード

ソレノイド版 (Keypad_doorlock_solenoid.ino)

/* 4x4キーパッドマトリックス、LCD I2C、IRF510Nトランジスタ、プッシュボタンで動作
 * 正しいコードまたは室内のプッシュボタンで解錠可能
 * キーパッドで直接コード変更可能、コード再アップロード不要
 * コードはEEPROMに保存
 * 詳細は www.surtrtech.com 参照 */
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>

#define Solenoid 11  // 実際はソレノイドを制御するトランジスタのゲート
#define O_Button 10  // プッシュボタン
#define I2C_ADDR 0x27  // I2Cアドレス、最初にスキャナースケッチで確認を
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

char keypressed;
char code[] = {'6','6','0','1'};  // デフォルトコード、変更可、桁数も可変
char code_buff1[sizeof(code)];
char code_buff2[sizeof(code)];
short a=0, i=0, s=0, j=0;

byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols] = {5,4,3,2};

LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

void setup() {
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home();
  lcd.print("Standby");
  pinMode(Solenoid, OUTPUT);
  pinMode(O_Button, INPUT);
  
  // 初回アップロード時は以下をコメントアウトしたままにする
  // for(i=0; i

リレー版 (Keypad_doorlock_relay.ino)

/* 4x4キーパッドマトリックス、LCD I2C、リレーモジュール、プッシュボタンで動作
 * 正しいコードまたは室内のプッシュボタンで解錠可能
 * キーパッドで直接コード変更可能、コード再アップロード不要
 * コードはEEPROMに保存
 * 詳細は www.surtrtech.com 参照 */
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>

#define Relay 11  // リレー制御
#define O_Button 10  // プッシュボタン
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

char keypressed;
char code[] = {'6','6','0','1'};
char code_buff1[sizeof(code)];
char code_buff2[sizeof(code)];
short a=0, i=0, s=0, j=0;

byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols] = {5,4,3,2};

LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

void setup() {
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home(); lcd.print("Standby");
  pinMode(Relay, OUTPUT);
  pinMode(O_Button, INPUT);
  // 初回のみEEPROM書き込みのためのループをアンコメントして再アップロード
}

void loop() {
  keypressed = myKeypad.getKey();
  if(keypressed == '*') {
    lcd.clear(); lcd.setCursor(0,0); lcd.print("Enter code");
    GetCode();
    if(a == sizeof(code)) OpenDoor();
    else { lcd.clear(); lcd.print("Wrong"); }
    delay(2000); lcd.clear(); lcd.print("Standby");
  }
  if(keypressed == '#') { ChangeCode(); lcd.clear(); lcd.print("Standby"); }
  if(digitalRead(O_Button) == HIGH) {
    digitalWrite(Relay, LOW);  // リレーはロジック反転
    delay(3000);
    digitalWrite(Relay, HIGH);
  }
}

// GetCode, ChangeCode, GetNewCode1, GetNewCode2, OpenDoor 関数はソレノイド版と同一
// OpenDoorのみリレー制御に合わせて修正:
// void OpenDoor() { lcd.clear(); lcd.print("Welcome"); digitalWrite(Relay, LOW); delay(3000); digitalWrite(Relay, HIGH); }

回路図

(回路図画像2枚は元記事を参照)

製造プロセス

  1. 銀行金庫の中身:歴史、設計、セキュリティの未来
  2. スマートフォンのBluetooth近接検知でスマートオートロックドアを構築
  3. スマートホーム連携向けマルチポジション温度センサーシステム
  4. MotionSense: ArduinoとESP8266で作るスマート侵入検知システム
  5. 3Dプリンター火災予防:スマートセンサーセーフティシステム
  6. Arduino、キーパッド、リニアアクチュエーターで作るパスワード式ドアロック
  7. Arduino、Yaler、IFTTTでWeb対応IoTゲージを構築する
  8. Arduinoで作る斥力式磁気浮上装置: シンプル回路とDIYガイド
  9. 高度なリモートコントロールグリッパーロボット: 精密ハンドリング向け
  10. 高度なマイクロコントローラー実験:ESP32、Arduino、PIC、センサーモジュール
  11. CoroFenceサーマルディテクター:Grid-EYE & PIRセンサー搭載IoT体温監視