วงจรล็อครหัสผ่านความปลอดภัยโดยใช้ปุ่มกด 4 × 4 และ Arduino

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโพสต์นี้เราจะสร้างวงจรล็อคความปลอดภัยด้วยรหัสผ่านซึ่งสามารถเข้าถึงได้ด้วยรหัสผ่าน 6 หลัก เพื่อให้แม่นยำยิ่งขึ้นรหัสผ่านที่เป็นตัวเลขตัวอักษร

ฮาร์ดแวร์สำหรับโครงการนี้

เราจะใช้ปุ่มกด 4x4 ซึ่งประกอบด้วยค่าทศนิยม 0 ถึง 9 อักขระพิเศษสองตัว '#' และ '*' และตัวอักษร A ถึง D การรวมกันของอักขระเหล่านี้สามารถใช้เป็นรหัสผ่านได้



Arduino เป็นสมองของระบบรีเลย์จะเชื่อมต่อกับ Arduino เพื่อเปิดใช้งานและปิดการใช้งานเมื่อสั่งรหัสผ่านที่ถูกต้อง ไฟ LED แสดงสถานะสองดวงใช้ที่นี่เพื่อแสดงสถานะของระบบล็อค

หากคุณไม่คุ้นเคยกับปุ่มกด 4x4 โปรดดูบทความก่อนหน้าของฉันซึ่งกล่าวถึงอย่างครอบคลุม พื้นฐานของแป้นพิมพ์ 4x4 เมทริกซ์



โครงการที่เสนอมีการออกแบบฮาร์ดแวร์ที่ค่อนข้างเรียบง่าย เพียงแค่ประกอบด้วยปุ่มกดรีเลย์ arduino และไฟ LED สองดวงแม้แต่ noob ใน arduino ก็สามารถทำได้อย่างง่ายดาย

ส่วนเดียวที่ยากเล็กน้อยในโครงการนี้คือการเข้ารหัสไม่ต้องกังวลว่าจะได้รับรหัสในโครงการนี้ โปรแกรมควรเขียนในลักษณะที่เป็นหลักฐานหลอกและนักจี้ไม่สามารถแฮ็กระบบได้

แต่โปรดระวังหากคุณเปิดเผยฮาร์ดแวร์หรือฮาร์ดแวร์ของโครงการนี้สามารถเข้าถึงได้ง่ายรีเลย์สามารถแฮ็กได้อย่างง่ายดาย ดังนั้นให้โครงการนี้อยู่ในแชสซีที่มีการป้องกันอย่างดี

มันทำงานอย่างไร

หมายเหตุ: ต้องเชื่อมต่อตัวต้านทาน จำกัด กระแส 4.7K กับฐานของทรานซิสเตอร์ซึ่งไม่ได้แสดงในแผนภาพ

ตอนนี้เรามาดูวิธีการทำงานของวงจรล็อครหัสผ่าน Arduino โปรดอ่านคำแนะนำที่ระบุด้านล่างอย่างละเอียดเพื่อใช้งานวงจร

แผนภูมิวงจรรวม

Arduino Password Security Lock Circuit โดยใช้ปุ่มกด 4x4

นี่คือภาพประกอบสองภาพวิธีการเชื่อมต่อแป้นพิมพ์และ Arduino:

ผลการทดสอบ Arduino Password Security Lock

•เมื่อเปิดวงจรวงจรจะถามรหัสผ่านคุณสามารถเห็นได้บนจอภาพอนุกรม (ไม่บังคับใช้จอภาพอนุกรม แต่สามารถใช้เพื่อการทดสอบได้)

•ป้อนรหัสผ่านที่คุณป้อนในโปรแกรมก่อนที่จะรวบรวม

•ในขณะที่คุณกดปุ่มไฟ LED สีเขียวจะกะพริบเป็นเวลาหนึ่งในสิบวินาทีซึ่งแสดงว่าผู้ใช้กดปุ่มบางปุ่ม

•เมื่อคุณป้อนรหัสผ่าน 6 หลักแล้วให้กด 'D' ในปุ่มกดซึ่งทำหน้าที่เป็น 'Enter' หากรหัสผ่านของคุณถูกต้องรีเลย์จะทำงานไฟ LED สีเขียวจะเปิด

•ในการปิดการทำงานของรีเลย์ให้กด ‘C’ ในปุ่มกด เมื่อเสร็จแล้วไฟ LED สีเขียวจะดับลงและรีเลย์จะปิดการใช้งาน ไม่มีคีย์อื่นใดที่สามารถปิดการทำงานของรีเลย์ได้

•หากรหัสผ่านที่ผู้ใช้ป้อนไม่ถูกต้องไฟ LED สีแดงจะสว่างขึ้นและผู้ใช้ต้องรอ 30 วินาทีเพื่อเข้าสู่ความพยายามครั้งต่อไป เมื่อ 30 วินาทีสิ้นสุดลงไฟ LED สีแดงจะดับลงเพื่อแจ้งให้ผู้ใช้ทราบว่าระบบพร้อมที่จะรับข้อมูลจากผู้ใช้

•เมื่อรีเลย์ถูกปิดใช้งานหลังจากเปิดใช้งานสำเร็จเพื่อที่จะเปิดใช้งานรีเลย์อีกครั้งผู้ใช้จะต้องป้อนรหัสผ่านอีกครั้งและกด ‘D’

นี่คือกรณีพิเศษ:

•เมื่อป้อนรหัสผ่านที่ถูกต้องรีเลย์จะเปิดใช้งานและหลังจากการปิดใช้งานสำเร็จเมื่อผู้ใช้กดแป้นพิมพ์ผิดครั้งใดครั้งหนึ่ง (ไม่ใช่รหัสผ่านทั้งหมด) โปรแกรมจะรับรู้ว่ารหัสผ่านไม่ถูกต้องและผู้ใช้ต้องรออีก 30 วินาที หากนี่คือนักจี้มันจะชะลอจำนวนความพยายามที่ทำโดยนักจี้

•เมื่อกดแป้นพิมพ์ที่ถูกต้องในครั้งแรกจะอนุญาตให้ป้อนคีย์ถัดไปเท่านั้น นี่เป็นเพียงการกดแป้นพิมพ์ครั้งแรกเท่านั้นและไม่ใช่สำหรับการกดแป้นพิมพ์ต่อเนื่องทั้งหมด

•คำขวัญของแนวคิดที่อธิบายข้างต้นคือการชะลอจำนวนครั้งที่พยายามทำโดยนักจี้

รหัสโปรแกรม:

//---------------------------------Program Developed by R.Girish--------------------------//
#include
const byte ROWS = 4
const byte COLS = 4
char pass[] = '123ABC' // 6 digit password only (no less or no more)
int OP=10
int green=12
int red=11
char key1
char key2
char key3
char key4
char key5
char key6
char dumpkey
char keyOK
char ok[]='D'
char offkey
char off[]='C'
int z
char keys[ROWS][COLS] =
{
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
}
byte rowPins[ROWS] = {6,7,8,9} //connect to the row pinouts of the keypad
byte colPins[COLS] = {2,3,4,5} //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS )
void setup()
{
Serial.begin(9600)
pinMode(OP,OUTPUT)
pinMode(green,OUTPUT)
pinMode(red,OUTPUT)
digitalWrite(OP,LOW)
}
void loop()
{
top:
Serial.println('')
Serial.println('[Press D = Enter]')
Serial.print('Enter the password: ')
key1=keypad.waitForKey()
if(key1 == pass[0])
{
digitalWrite(green,HIGH)
delay(100)
digitalWrite(green,LOW)
{
z=1
Serial.print('*')
goto A

}
}
อื่น
{
goto การถ่ายโอนข้อมูล
}
ถึง:
key2 = keypad.waitForKey ()
ถ้า (key2 == pass [1])
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
{
z = 2
Serial.print ('*')
ไปที่ B
}
}
อื่น
{
goto การถ่ายโอนข้อมูล
}
B:
key3 = keypad.waitForKey ()
ถ้า (key3 == pass [2])
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
{
z = 3
Serial.print ('*')
ไปที่ C
}
}
อื่น
{
goto การถ่ายโอนข้อมูล
}
ค:
key4 = keypad.waitForKey ()
ถ้า (key4 == pass [3])
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
{
z = 4
Serial.print ('*')
ไปที่ D
}
}
อื่น
{
goto การถ่ายโอนข้อมูล
}
D:
key5 = keypad.waitForKey ()
ถ้า (key5 == pass [4])
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
{
z = 5
Serial.print ('*')
ไปที่ E
}
}
อื่น
{
goto การถ่ายโอนข้อมูล
}
คือ:
key6 = keypad.waitForKey ()
ถ้า (key6 == pass [5])
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
{
z = 6
Serial.print ('*')
goto ตกลง
}
}
อื่น
{
goto การถ่ายโอนข้อมูล
}
ตกลง:
keyOK = keypad.waitForKey ()
ถ้า (keyOK == ตกลง [0])
{
digitalWrite (OP, สูง)
digitalWrite (สีเขียวสูง)
Serial.println ('')
Serial.println ('รีเลย์เปิดใช้งานแล้วกด' C 'เพื่อปิดใช้งาน.n')
}
อื่น
{
Serial.println ('')
Serial.println ('กด' D 'เพื่อเข้าสู่')
goto ตกลง
}
ปิด:
offkey = keypad.waitForKey ()
ถ้า (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (สีเขียวต่ำ)
Serial.println ('รีเลย์ Deactivated.n')
goto ด้านบน
}
อื่น
{
Serial.println ('กด' C 'เพื่อปิดการใช้งาน')
ออกไป
}
ถ่ายโอนข้อมูล:
ถ้า (z == 0)
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ข้อผิดพลาด goto
}
ถ้า (z == 1)
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ข้อผิดพลาด goto
}
ถ้า (z == 2)
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ข้อผิดพลาด goto
}
ถ้า (z == 3)
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ข้อผิดพลาด goto
}
ถ้า (z == 4)
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ข้อผิดพลาด goto
}
ถ้า (z == 5)
{
digitalWrite (สีเขียวสูง)
ล่าช้า (100)
digitalWrite (สีเขียวต่ำ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ข้อผิดพลาด goto
}
ข้อผิดพลาด:
Serial.println ('')
Serial.print ('รหัสผ่านไม่ถูกต้องรอ 30 วินาที')
digitalWrite (สีแดงสูง)
ล่าช้า (10000)
ล่าช้า (10000)
ล่าช้า (10000)
digitalWrite (สีแดงต่ำ)
goto ด้านบน
}
// --------------------------------- โปรแกรมที่พัฒนาโดย R.Girish --------- ----------------- //

บันทึก: ในการตั้งรหัสผ่าน: char pass [] = '123ABC' // รหัสผ่าน 6 หลักเท่านั้น (ไม่น้อยกว่าหรือไม่มีเลย)
เปลี่ยน“ 123ABC” ด้วยรหัสผ่านของคุณเองภายในเครื่องหมายคำพูด

ตรวจสอบให้แน่ใจว่ารหัสผ่านที่ตั้งไว้ในโปรแกรมเป็นตัวเลข 6 หลักเท่านั้นไม่น้อยกว่าหรือไม่มีเลย แต่เป็นตัวเลข 6 หลัก มิฉะนั้นโปรแกรมจะทำงานไม่ถูกต้อง

หากคุณมีข้อสงสัยเพิ่มเติมเกี่ยวกับวงจรล็อคความปลอดภัยรหัสผ่านที่อธิบายไว้โปรดโพสต์ผ่านความคิดเห็นของคุณ




คู่ของ: วงจร LED จำลองพระอาทิตย์ขึ้นพระอาทิตย์ตก ถัดไป: วงจรควบคุมมอเตอร์บลูทู ธ