- ابزارآلات و آهنربا
-
ابزارآلات
- ابزار اندازه گیری (مولتیمتر، کولیس و . . .)
- ابزار سوراخکاری (مته، سه نظام، چهار نظام، پنج نظام و . . .)
- ابزار و تجهیزات کار (پیچ گوشتی، انبردست، سیمچین، پنس و . . .)
- برد بورد، فیبر خام و سوراخدار (فیبر مدار چاپی و PCB)
- پیچ و اسپیسر (پیچ و مهره رباتیک و اسپیسر پلاستیکی و فلزی)
- سیم و کابل (سیم افشان، فلت، باندی، کابل شارژ، پرینتر، و . . .)
- لحیمکاری (هویه، نوک هویه، پایه هویه، سیم لحیم، روغن لحیم و . . . )
- منبع تغذیه، باتری و جاباتری (باتری قلمی، نیم قلمی، کتابی و . . . )
-
ابزارآلات
- برد هوشمند
- پرینتر سه بعدی
- رباتیک و پروازی
- ماژول
- قطعات الکترونیک
- کیت الکترونیکی و انواع جعبه
- موتور
- اصناف مختلف
پروژه ساخت قفل رمزی با آردوینو
در این پروژه میآموزیم که چگونه اقدام به ساخت قفل رمزی با آردوینو بکنیم. با توجه به افزایش روزافزون سرقتها، تأمین امنیت بیش از پیش اهمیت پیدا میکند بنابراین داشتن یک قفل با رمز دیجیتالی جهت فراهم کردن ایمنی منزل یا محل کار، امری ضروری به نظر میرسد. در واقع با این قفل، تنها زمانی درب باز خواهد شد که رمز بهدرستی وارد شود.
مدار این پروژه الکترونیکی بسیار ساده است زیرا تنها برد آردوینو، ماژول کیپد، بازر، سروو موتور و یک LCD دارد. آردوینو برای کنترل تمامی فرآیندها نظیر دریافت پسورد از ماژول کیپد، مقایسه آنها، راهاندازی بازر، چرخاندن سروو موتور و ارسال وضعیت به LCD به کار میرود. خودِ کیپد نیز جهت وارد کردن پسورد استفاده میشود. بازر هم برای بررسی وضعیت و سروو موتور برای باز کردن درب در زمان چرخیدن به کار خواهد رفت. در نهایت LCD هم وظیفه نمایش پیامها را بر عهده دارد.
فهرست مطالب
لوازم مورد نیاز برای ساخت قفل رمزی با آردوینو
در ادامه لیست لوازم مورد نیاز برای ساخت قفل رمزی با آردوینو را مشاهده میکنید که با کلیک روی نام هر کدام از آنها، امکان خرید را خواهید داشت.
شماتیک و نمای فیبر مدار چاپی پروژه ساخت قفل رمزی با آردوینو
مدار یا شماتیک برد این پروژه بسیار ساده است. شما برای راهاندازی آن میتوانید از نرمافزار Fritzing استفاده کنید.
در مرحله اول باید به کیپد 4×3 اتصالی را برقرار کنیم. برای متصل کردن این ماژول به آردوینو، از پینهای دیجیتالی D1 تا D7 استفاده خواهیم کرد. تمامی هفت پین کیپد را به پینهای D1 تا D7 آردوینو متصل نمایید.
برای وصل کردن سروو موتور به آردوینو، از پین دیجیتالی D9 روی آردوینو بهره ببرید تا پین PWM سروو موتور خروجی دهد. حالا سیم مثبت بازر را به پین D10 آردوینو و سیم منفی را به زمین وصل کنید.
حالا سراغ متصل کردن صفحه نمایش LCD دارای ابعاد 2×16 به آردوینو میرویم:
1) پینهای 1، 3، 5 و 16 نمایشگر LCD را به پین زمین یا GND وصل کنید.
2) پینهای 2 و 15 نمایشگر LCD را به پین VCC یا 5 ولت آردوینو وصل کنید.
3) پین 4 نمایشگر LCD را به پین A0 آردوینو وصل کنید.
4) پین 6 نمایشگر LCD را به پین A1 آردوینو وصل کنید.
5) پین 11 نمایشگر LCD را به پین A2 آردوینو وصل کنید.
6) پین 12 نمایشگر LCD را به پین A3 آردوینو وصل کنید.
7) پین 13 نمایشگر LCD را به پین A4 آردوینو وصل کنید.
8) پین 14 نمایشگر LCD را به پین A5 آردوینو وصل کنید.
در ادامه میتوانید تصویری از نوعی دیگر از شماتیک پروژه ساخت قفل رمزی با آردوینو را مشاهده نمایید که با نرمافزار EasyEDA طراحی شده است. در اینجا برد آردوینو Nano به جای آردوینو Uno به کار رفته است.
شماتیک و نمای فیبر مدار چاپی پروژه ساخت قفل رمزی با آردوینو
اگر نمیخواهید مدار این پروژه را روی برد بورد راهاندازی کنید، میبایست PCB خود را شبیه چیزی مانند تصاویر درآورید.
نحوه کار کردن پسورد پروژه ساخت قفل رمزی با آردوینو
در پروژهای که در این مطلب به شما آموزش دادهایم، رمز پیشفرض در آردوینو 4567 است. البته شما میتوانید آن را با کدنویسی تغییر دهید. وقتی کلمه عبوری را وارد میکنید، به صورت اتوماتیک با پسورد ذخیره شده در آردوینو مطابقت داده میشود. در ادامه اگر درست بود، عبارت Access Granted, Welcome به معنی “دسترسی داده شد، خوش آمدید” نوشته و سروو موتور درب را به اندازه 180 درجه میچرخاند و درب باز خواهد شد. سپس 5 ثانیه وقت خواهید داشت تا وارد شوید. زمانی که 5 ثانیه به اتمام رسید، درب باز هم به صورت خودکار بسته خواهد شد.
در سمت دیگر، اگر پسورد اشتباه بود، عبارت Code Incorrect, Go Away به معنای “رمز اشتباه است، دور شوید” نمایش داده خواهد شد. در ادامه اگر کلیدی فشار داده شد، بازر صدای بیپ خواهد داد.
منبع کد و برنامهنویسی پروژه ساخت قفل رمزی با آردوینو
کدهای مورد نیاز برای ساخت قفل رمزی با آردوینو در ادامه آورده شده است. شما میتوانید با استفاده از برنامه Arduino IDE آنها را به سادگی هر چه تمامتر کپی و پیست کنید. سپس آنها را وارد برنامه و در نهایت در میکروکنترلر ATmega328 آپلود نمایید. ضمناً، میتوانید کتابخانه مربوط به Keypad.h را نیز از لینک زیر دانلود کنید.
#include
#include
#include
Servo myservo;
int pos=0; // LCD Connections
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
const byte rows=4;
const byte cols=3;
char key[rows][cols]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[rows]={1,2,3,4};
byte colPins[cols]={5,6,7};
Keypad keypad= Keypad(makeKeymap(key),rowPins,colPins,rows,cols);
char* password="4567";
int currentposition=0;
int redled=10;
int greenled=11;
int buzz=8;
int invalidcount=12;
void setup()
{
displayscreen();
Serial.begin(9600);
pinMode(redled, OUTPUT);
pinMode(greenled, OUTPUT);
pinMode(buzz, OUTPUT);
myservo.attach(9); //SERVO ATTACHED//
lcd.begin(16,2);
}
void loop()
{
if( currentposition==0)
{
displayscreen();
}
int l ;
char code=keypad.getKey();
if(code!=NO_KEY)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PASSWORD:");
lcd.setCursor(7,1);
lcd.print(" ");
lcd.setCursor(7,1);
for(l=0;l<=currentposition;++l)
{
lcd.print("*");
keypress();
}
if (code==password[currentposition])
{
++currentposition;
if(currentposition==4)
{
unlockdoor();
currentposition=0;
}
}
else
{
++invalidcount;
incorrect();
currentposition=0;
}
if(invalidcount==5)
{
++invalidcount;
torture1();
}
if(invalidcount==8)
{
torture2();
}
}
// LOOP ENDS!!!//
}
//********OPEN THE DOOR FUNCTION!!!!***********//
void unlockdoor()
{
delay(900);
lcd.setCursor(0,0);
lcd.println(" ");
lcd.setCursor(1,0);
lcd.print("Access Granted");
lcd.setCursor(4,1);
lcd.println("WELCOME!!");
lcd.setCursor(15,1);
lcd.println(" ");
lcd.setCursor(16,1);
lcd.println(" ");
lcd.setCursor(14,1);
lcd.println(" ");
lcd.setCursor(13,1);
lcd.println(" ");
unlockbuzz();
for(pos = 180; pos>=0; pos-=5) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(5); // waits 15ms for the servo to reach the position
}
delay(2000);
delay(1000);
counterbeep();
delay(1000);
for(pos = 0; pos <= 180; pos +=5) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15);
currentposition=0;
lcd.clear();
displayscreen();
}
}
//************WRONG CODE FUNCTION********//
void incorrect()
{
delay(500);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("CODE");
lcd.setCursor(6,0);
lcd.print("INCORRECT");
lcd.setCursor(15,1);
lcd.println(" ");
lcd.setCursor(4,1);
lcd.println("GET AWAY!!!");
lcd.setCursor(13,1);
lcd.println(" ");
Serial.println("CODE INCORRECT YOU ARE UNAUTHORIZED");
digitalWrite(redled, HIGH);
digitalWrite(buzz, HIGH);
delay(3000);
lcd.clear();
digitalWrite(redled, LOW);
digitalWrite(buzz,LOW);
displayscreen();
}
//************** CLEAR THE SCREEN!!!*************//
void clearscreen()
{
lcd.setCursor(0,0);
lcd.println(" ");
lcd.setCursor(0,1);
lcd.println(" ");
lcd.setCursor(0,2);
lcd.println(" ");
lcd.setCursor(0,3);
lcd.println(" ");
}
//**************KEYPRESS********************//
void keypress()
{
digitalWrite(buzz, HIGH);
delay(50);
digitalWrite(buzz, LOW);
}
//********DISPALAY FUNCTION!!!*************//
void displayscreen()
{
lcd.setCursor(0,0);
lcd.println("*ENTER THE CODE*");
lcd.setCursor(1 ,1);
lcd.println("TO _/_ (OPEN)!!");
}
//*************** ARM SERVO***********//
void armservo()
{
for (pos=180;pos<=180;pos+=50)
{
myservo.write(pos);
delay(5);
}
delay(5000);
for(pos=180;pos>=0;pos-=50)
{
myservo.write(pos);
}
}
//**********UNLOCK BUZZ*************//
void unlockbuzz()
{
digitalWrite(buzz, HIGH);
delay(80);
digitalWrite(buzz, LOW);
delay(80);
digitalWrite(buzz, HIGH);
delay(80);
digitalWrite(buzz, LOW);
delay(200);
digitalWrite(buzz, HIGH);
delay(80);
digitalWrite(buzz, LOW);
delay(80);
digitalWrite(buzz, HIGH);
delay(80);
digitalWrite(buzz, LOW);
delay(80);
}
//**********COUNTER BEEP**********//
void counterbeep()
{
delay(1200);
lcd.clear();
digitalWrite(buzz, HIGH);
lcd.setCursor(2,15);
lcd.println(" ");
lcd.setCursor(2,14);
lcd.println(" ");
lcd.setCursor(2,0);
delay(200);
lcd.println("GET IN WITHIN:::");
lcd.setCursor(4,1);
lcd.print("5");
delay(200);
lcd.clear();
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
digitalWrite(buzz,LOW);
delay(1000);
//2
digitalWrite(buzz, HIGH);
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
lcd.setCursor(4,1); //2
lcd.print("4");
delay(100);
lcd.clear();
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
digitalWrite(buzz,LOW);
delay(1000);
//3
digitalWrite(buzz, HIGH);
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
lcd.setCursor(4,1); //3
lcd.print("3");
delay(100);
lcd.clear();
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
digitalWrite(buzz,LOW);
delay(1000);
//4
digitalWrite(buzz, HIGH);
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
lcd.setCursor(4,1); //4
lcd.print("2");
delay(100);
lcd.clear();
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN:");
digitalWrite(buzz,LOW);
delay(1000);
//
digitalWrite(buzz, HIGH);
lcd.setCursor(4,1);
lcd.print("1");
delay(100);
lcd.clear();
lcd.setCursor(2,0);
lcd.println("GET IN WITHIN::");
digitalWrite(buzz,LOW);
delay(1000);
//5
digitalWrite(buzz, HIGH);
delay(40);
digitalWrite(buzz,LOW);
delay(40);
digitalWrite(buzz, HIGH);
delay(40);
digitalWrite(buzz,LOW);
delay(40);
digitalWrite(buzz, HIGH);
delay(40);
digitalWrite(buzz,LOW);
delay(40);
digitalWrite(buzz, HIGH);
delay(40);
digitalWrite(buzz,LOW);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("RE-LOCKING");
delay(500);
lcd.setCursor(12,0);
lcd.print(".");
delay(500);
lcd.setCursor(13,0);
lcd.print(".");
delay(500);
lcd.setCursor(14,0);
lcd.print(".");
delay(400);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("LOCKED!");
delay(440);
}
//*********TORTURE1***********//
void torture1()
{
delay(1000);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("WAIT FOR ");
lcd.setCursor(5,1);
lcd.print("15 SECONDS");
digitalWrite(buzz, HIGH);
delay(15000);
digitalWrite(buzz, LOW);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("LOL..");
lcd.setCursor(1,1);
lcd.print(" HOW WAS THAT??");
delay(3500);
lcd.clear();
}
//*****TORTURE2*****//
void torture2()
{
delay(1000);
lcd.setCursor(1,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("EAR DRUMS ARE");
lcd.setCursor(0,1);
lcd.print(" PRECIOUS!! ");
delay(1500);
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" WAIT FOR");
lcd.setCursor(4,1);
lcd.print(" 1 MINUTE");
digitalWrite(buzz, HIGH);
delay(55000);
counterbeep();
lcd.clear();
digitalWrite(buzz, LOW);
lcd.setCursor(2,0);
lcd.print("WANT ME TO");
lcd.setCursor(1,1);
lcd.print("REDICULE MORE??");
delay(2500);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Ha Ha Ha Ha");
delay(1700);
lcd.clear();
}