ความปลอดภัยเป็นปัญหาสำคัญในชีวิตประจำวันของเราและการล็อกแบบดิจิทัลได้กลายเป็นส่วนสำคัญของระบบรักษาความปลอดภัยเหล่านี้ หนึ่งในโครงการนี้เลียนแบบการล็อกรหัสดิจิทัลโดยใช้บอร์ด arduino และแป้นพิมพ์เมทริกซ์
ส่วนประกอบ
- Arduino
- โมดูลปุ่มกด
- Buzzer
- 16x2 LCD
- BC547 ทรานซิสเตอร์
- ตัวต้านทาน (1k)
- กระดานขนมปัง
- อำนาจ
- การเชื่อมต่อสายไฟ
ในวงจรนี้เราได้ใช้เทคนิคการมัลติเพล็กซ์เพื่อเชื่อมต่อปุ่มกดสำหรับป้อนรหัสผ่านในระบบ ที่นี่เราใช้ปุ่มกด 4x4 ซึ่งมี 16 ปุ่ม หากเราต้องการใช้ 16 คีย์เราต้องมี 16 พินสำหรับเชื่อมต่อกับ arduino แต่ในเทคนิคมัลติเพล็กซ์เราต้องใช้ 8 พินเท่านั้นสำหรับการเชื่อมต่อ 16 คีย์ เพื่อให้เป็นวิธีที่ชาญฉลาดในการเชื่อมต่อกับโมดูลปุ่มกด
เทคนิคการมัลติเพล็กซ์: เทคนิคการมัลติเพล็กซ์เป็นวิธีที่มีประสิทธิภาพมากในการลดจำนวนพินที่ใช้กับไมโครคอนโทรลเลอร์สำหรับป้อนข้อมูลหรือรหัสผ่านหรือตัวเลข โดยพื้นฐานแล้วเทคนิคนี้ใช้ในสองวิธีคือวิธีหนึ่งคือการสแกนแถวและอีกวิธีหนึ่งคือการสแกนลำไส้ใหญ่ แต่ในโครงการที่ใช้ arduino นี้เราได้ใช้ไลบรารีปุ่มกดดังนั้นเราจึงไม่จำเป็นต้องสร้างรหัสมัลติเพล็กซ์สำหรับระบบนี้ เราต้องใช้ไลบรารีปุ่มกดสำหรับการป้อนข้อมูลเท่านั้น
คำอธิบายวงจร
วงจรของโครงการนี้ง่ายมากซึ่งมี Arduino โมดูลปุ่มกดกริ่งและ LCD Arduino ควบคุมกระบวนการทั้งหมดเช่นการใช้โมดูลแป้นพิมพ์รหัสผ่านการเปรียบเทียบรหัสผ่านการขับเสียงกริ่งและการส่งสถานะไปยังจอ LCD ปุ่มกดใช้สำหรับจดรหัสผ่าน Buzzer ใช้สำหรับบ่งชี้และ LCD ใช้สำหรับแสดงสถานะหรือข้อความ Buzzer ขับเคลื่อนโดยใช้ทรานซิสเตอร์ NPN
หมุดคอลัมน์ของโมดูลปุ่มกดเชื่อมต่อโดยตรงกับพิน 4, 5, 6, 7 และหมุดแถวที่เชื่อมต่อกับ 3, 2, 1, 0 ของ arduino uno 16x2 LCD เชื่อมต่อกับ arduino ในโหมด 4 บิต พินควบคุม RS, RW และ En เชื่อมต่อโดยตรงกับขา arduino 13, GND และ 12 และพินข้อมูล D4-D7 เชื่อมต่อกับพิน 11, 10, 9 และ 8 ของ arduino และหนึ่งออดเชื่อมต่อที่พิน 14 (A1) ของ arduino ผ่านทรานซิสเตอร์ BC547 NPN
กำลังทำงาน
เราได้ใช้ EEPROM ของ arduino ในตัวเพื่อบันทึกรหัสผ่านดังนั้นเมื่อเราเรียกใช้วงจรนี้เป็นครั้งแรกโปรแกรมอ่านข้อมูลขยะจาก EEPROM ของ arduino ในตัวและเปรียบเทียบกับรหัสผ่านอินพุตและให้ข้อความบน LCD ว่า Access Denied เนื่องจากรหัสผ่านไม่ตรงกัน ในการแก้ปัญหานี้เราจำเป็นต้องตั้งรหัสผ่านเริ่มต้นเป็นครั้งแรกโดยใช้การเขียนโปรแกรมที่ระบุด้านล่าง:
สำหรับ (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("ป้อน Ur Passkey:"); lcd.setCursor (0,1); สำหรับ (int j = 0; j <4; j ++) pass = EEPROM.read (j);
จะเป็นการตั้งรหัสผ่าน“ 1234” เป็น EEPROM ของ Arduino
หลังจากเรียกใช้ครั้งแรกเราต้องลบสิ่งนี้ออกจากโปรแกรมและเขียนโค้ดอีกครั้งใน arduino และเรียกใช้ ตอนนี้ระบบของคุณจะทำงานได้ดี และรหัสผ่านที่คุณใช้เป็นครั้งที่สองตอนนี้คือ“ 1234” ตอนนี้คุณสามารถเปลี่ยนได้โดยกดปุ่ม # จากนั้นป้อนรหัสผ่านปัจจุบันของคุณจากนั้นป้อนรหัสผ่านใหม่ของคุณ
เมื่อคุณป้อนรหัสผ่านระบบจะเปรียบเทียบรหัสผ่านที่คุณป้อนกับรหัสผ่านที่เก็บไว้ใน EEPROM ของ arduino หากมีการจับคู่เกิดขึ้น LCD จะแสดงข้อความ“ ให้การเข้าถึง” และหากรหัสผ่านไม่ถูกต้อง LCD จะ“ ถูกปฏิเสธการเข้าถึง” และเสียงสัญญาณเตือนอย่างต่อเนื่องเป็นระยะ และเสียงกริ่งยังส่งเสียงบี๊บหนึ่งครั้งเมื่อใดก็ตามที่ผู้ใช้กดปุ่มใด ๆ จากปุ่มกด
คำอธิบายการเขียนโปรแกรม
ในรหัสเราได้ใช้ไลบรารีปุ่มกดสำหรับเชื่อมต่อปุ่มกดกับ arduino
# รวม
const byte ROWS = 4; // สี่แถว const byte COLS = 4; // สี่คอลัมน์ char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; ไบต์ rowPins = {3, 2, 1, 0}; // เชื่อมต่อกับ pinouts แถวของปุ่มกด byte colPins = {4, 5, 6, 7}; // เชื่อมต่อกับ pinouts คอลัมน์ของปุ่มกด // เริ่มต้นอินสแตนซ์ของคลาส NewKeypad ปุ่มกด customKeypad = ปุ่มกด (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS)
เราได้รวมไลบรารี LCD สำหรับการเชื่อมต่อ LCD และสำหรับการเชื่อมต่อ EEPROM เราได้รวมไลบรารี EEPROM.h. จากนั้นตัวแปรเริ่มต้นและพินที่กำหนดไว้สำหรับส่วนประกอบ
#define buzzer 15 LCD LiquidCrystal (13,12,11,10,9,8); รหัสผ่านถ่าน ถ่าน pass1; int ผม = 0; ถ่าน customKey = 0;
จากนั้นเราเริ่มต้น LCD และกำหนดทิศทางไปยังพินในฟังก์ชันการตั้งค่า
การตั้งค่าเป็นโมฆะ () {lcd.begin (16,2); PinMode (นำ, เอาท์พุท); pinMode (เสียงกริ่งเอาท์พุท); PinMode (m11, เอาท์พุท); PinMode (m12, เอาท์พุท); lcd.print ("อิเล็กทรอนิกส์"); lcd.setCursor (0,1); lcd.print ("ปุ่มกดล็อค"); ล่าช้า (2000); lcd.clear (); lcd.print ("ป้อน Ur Passkey:"); lcd.setCursor (0,1);
หลังจากนี้เราจะอ่านปุ่มกดในฟังก์ชันลูป
customKey = customKeypad.getKey (); ถ้า (customKey == '#') เปลี่ยน (); ถ้า (customKey) {รหัสผ่าน = customKey; lcd.print (customKey); บี๊บ (); }
จากนั้นเปรียบเทียบรหัสผ่านกับบันทึกรหัสผ่านโดยใช้วิธีเปรียบเทียบสตริง
ถ้า (i == 4) {ล่าช้า (200); สำหรับ (int j = 0; j <4; j ++) pass = EEPROM.read (j); ถ้า (! (strncmp (รหัสผ่าน, ผ่าน, 4))) {digitalWrite (led, HIGH); บี๊บ (); lcd.clear (); lcd.print ("ยอมรับรหัสผ่าน"); ล่าช้า (2000); lcd.setCursor (0,1); lcd.print ("#. เปลี่ยน Passkey"); ล่าช้า (2000); lcd.clear (); lcd.print ("ป้อนรหัสผ่าน:"); lcd.setCursor (0,1); ฉัน = 0; digitalWrite (led, LOW); }
นี่คือฟังก์ชั่นเปลี่ยนรหัสผ่านและฟังก์ชั่นเสียงบี๊บ
การเปลี่ยนแปลงเป็นโมฆะ () {int j = 0; lcd.clear (); lcd.print ("UR Passk ปัจจุบัน"); lcd.setCursor (0,1); ในขณะที่ (j <4) {char key = customKeypad.getKey (); ถ้า (คีย์) {pass1 = คีย์; lcd.print (คีย์); โมฆะ beep () {digitalWrite (buzzer, HIGH); ล่าช้า (20); digitalWrite (เสียงกริ่งต่ำ); }