گروه برق
پایان نامه دوره کارشناسی ناپیوسته برق
گرایش الکترونیک
قفل دیجیتال گاوصندوق
نگارنده:
شهریور 1392
تقدیم به مادر عزیزم که دعای خیرشان همیشه بدرقه ی راهم بوده وپاس خوبی هایش و
تقدیم به تمام آن هایی که به من آموختند
چکیده
با توجه به پیشرفت علم و سوق داده شدن تمامی قطعات و ابزارت صنعتی و غیر صنعتی به سمت الکترونیکی شدن و افزایش امنیت آن ها در برابر مسائل مختلف، قفل ها هم از این موضوع مستثنی نمی باشند. با توجه به جدید بودن این علم در کشورمان، بازار نسبتاً خوبی در این زمینه وجود دارد، که دراین پروژه به تشریح مراحل مختلف آن می پردازیم. بررسی تک تک قطعات موجود در سیستم سخت افزاری قفل پرداخته خواهد شد و سپس به تشریح سیستم سخت افزاری این پروژه می پردازیم, وهمچنین به نحوه انتخاب کامپایلر اشاره کرده و مزایای کامپایلر مورد نظر را بیان و سپس الگوریتم برنامه را تشریح می کنیم و در آخر برنامه اصلی و زیر برنامه ها را قرار می دهیم.
فهرست مطالب
مقدمه
1
فصل اول
1-
مقدمه
3
1-1-
سخت افزار سیستم
3
1-2-
بلوک دیگرام کلی سخت افزار سیستم
3
1-3-
انتخاب میکروکنترلر
3
1-3-1-
ATMega32
4
1-4-
نمایشگر
5
1-5-
Keypad
6
1-5-1-
اسکن صفحه کلید
6
1-5-2-
اتصال Keypad به میکروکنترلر
8
1-6-
رگولاتور
8
1-7-
اعلان وضعیت(Buzzer)
9
1-8-
توضیحات کلی مداری در این پروژه
9
1-8-1-
Key pad
9
1-8-2-
LCD
10
1-8-3-
RELAY
10
1-9-
نتیجه گیری
12
فصل دوم
الف
13
2-
مقدمه
14
2-1-
نرم افزار سیستم
14
2-2-
الگوریتم برنامه
14
2-3-
انتخاب کامپایلر
15
2-4-
زبان برنامه نویسیC
15
2-5-
برنامه
16
2-5-1-
حلقه اصلی برنامه
16
2-5-2-
تابع ولوم
20
2-5-3-
تابع کی پد
20
2-5-4-
تابع پسورد
22
2-5-5-
تابع پاک کردن (clear)
23
2-5-6-
تابع changecode
23
2-6-
نتیجه گیری
27
پیوست
فولوچارت برنامه
29
شماتیک مدار
30
ب
فهرست عکس ها
1-1
بلوک دیاگرام
4
1-2
انواع میکروکنترلر
5
1-3
پایه های AT32
5
1-4
LCD
7
1-5
اتصال صفحه کلید به میکرو
7
1-6
پایه های کی پد
8
1-7
رگولاتور
8
1-8
شماتیک مدار راه انداز
8
1-9
buzzer
9
ج
فهرست علایم و نشانه ها
متغییر یا نماد
مفهوم
A
در کی پد A کلید
B
در کی پد B کلید
C
در کی پد C کلید
D
در کی پد D کلید
start یعنی پرش کن به
د
مقدمه
قـفل دیجیتال محصولی است کـه بـر روی انواع درب های ورودی ساختمان، گاوصندوق وکمد به منظوردسترسی سریع وآسان به قـفل، افزایش امنیت، زیبایـی و قفل کردن درب نصب می گردد و با سیستم های متنوع امنیتی که در آن بکار رفته آرامش و امنیت هرچه بیشتر را برای کاربر به ارمغان می آورد، استفاده از این محصولات نقش بسزایی در افزایش زیبایی و جلوه ساختمان های مدرن امروزی، گاو صندوق و کمد بازی می کند
تاریخچه قفل های دیجیتالی
از ایام قدیم تا قرن ۱۸ میلادی ، قدیمی ترین شکل قفل ، قفلی است که در ویرانه های خرساباد نزدیکی نینوا ، پیدا شده است و حدود ۴ هزار سال قدمت دارد . این قفل چوبی است و چند میله چوبی قابل حرکت دارد که در سوراخ هایی مناسب روی کلون می افتند و کلون را در وضعیت بسته نگه می دارند. لید آن هم چوبی است و میله هایی دارد و می توان آن را در شیاری در کلون داخل کرد د میله های کلید ، میله های قابل حرکت قفل را به ارتفاع مناسب بالا می برند و بیرون کشیدن کلون ممکن می شد. مصریان قدیم ، این نوع قفل را می شناختند و نمونه هایی از آن در ژاپن و نروژ نیز به دست آمده است . در حفره های تپه چغازنبیل در استان ایلام ، کلون و میله هایی سنگی پیدا شده که قدمت آن به قرن سیزدهم میلادی می رسد. رومیان ، قفلها و کلیدهای فلزی را اختراع کردند و برای اولین بار از ضامن ها برای ایمنی قفل استفاده کردند . قفلهای ضامن دار صدها سال ، تنها وسیله اطمینان بخش برای مردمان به شمار می رفت . در واقع ضامن ها همان برآمدگی های اطراف سوراخ کلید در قفل هستند ، به طوری که اگر کلیدی ، شیارهایی متناظر با ضامن ها نداشته باشد ، گردانیدن و حرکت آن در قفل ممکن نیست
1
فصل اول
1-مقدمه
1.1- سخت افزار سیستم: در این فصل به بررسی تک تک قطعات موجود در سیستم سخت افزاری پرداخته خواهد شد و سپس به تشریح سیستم سخت افزاری این پروژه می پردازیم.
1-2- بلوک دیگرام کلی سخت افزار سیستم
1-3- انتخاب میکروکنترلر: یکی از جدید ترین میکروکنترلر های قوی عرضه شده به بازار الکترونیک متعلق به شرکت ATMEL به نام میکروکنترلرهای AVR است. این میکروکنترلرهای 8 بیتی به علت وجود کامپایلرهای قوی به زبان برنامه نویسی (HIGH LEVEL HLL LANGUAGES) مورد استقبال قرار گرفته اند. AVR ها به عنوان میکروهای RISC با دستورات فراوان طراحی شده اند که باعث می شود حجم کد تولید شده کم و سرعت بالاتری بدست آید. با انجام تک سیکل دستورات ، کلاک داخلی سیستم یکی می شود . به کار گرفتن حافظه از نوع Flash که AVR ها به طور یکسان از آن بهره می برند از جمله مزایای آن ها است .
3
شکل1- 2 :انواع میکروکنترولر
1-3-1- ATMega32 یکی ازاین نوع میکرو کنترلر ها می باشد که برخی مشخصات آن عبارت است از:
پایداری حافظه:FLASHقابلیت 1000 بار نوشتن و پاک کردن
پایداری حافظه EEPROM : قابلیت 100000 بار نوشتن و پاک کردن
• خصوصیات جانبی
دو تایمر- کانتر 8 بیتی و یک 16 بیتی با PRESCALER مجزا و دارای مد CAMPARE
• ولتاژهای عملیاتی
2.7 تا 5.5Vبرای (ATMega32L)
4.5 تا 5.5Vبرای (ATMega32)
• فرکانس کاری
MHZ0 تا 16MHZ برای (ATMega32)
MHZ 0تا 8 MHZ برای (ATMega32L)
4
ATMega32 در سه نوع بسته بندی PDIP با 40 پایه و TQFP با 44 پایه و MLF با 44 پایه ساخته می شود که در بازار ایران بیشتر نوع PDIP موجود می باشد. شکل 1-3: پایه های Atmega 32
1-4- نمایشگر: برای نمایش اطلاعات پردازش شده نیاز به یک LCD داریم.LCD ها به دو دسته گرافیکی و کاراکتری تقسیم بندی شده اند. LCD های کاراکتری در ابعاد مختلف موجود هستند و معمولا 16 پایه می باشند. برای راه اندازی LCD های کاراکتری معمولا 6 پایه از LCD باید به6 پایه میکرو متصل شود.
شکل1-4 LCD
5
در این پروژه از 2*16 LCD استفاده شده که دارای 2 سطر و 16 ستون کاراکتر است. این LCD به پورت B از میکروکنترلر متصل گردیده است. پایه های 15 و 16 در lcd های کاراکتری برای روشن یا خاموش کردن لامپ پس زمینه (Back light) در نظر گرفته شده اند . می توان برای تعیین میزان روشنایی (contrast) صفخه LCD ، به پایه 3 از LCD یک پتانسیومتر 10K اهمی متصل کرد .
اتصال LCD به میکروکنترلرLCD: را می توان به صورت 4 بیتی یا 8 بیتی به یکی از پورت های میکرو متصل کرد و در این پروژه LCD به صورت 4 بیتی به پورت B متصل شده است. LCD 16*2 این LCD دارای 16 پایه است که بصورت زیر به میکرو متصل می شوند. D0,D1.D2.D3: در ارتباط 4 بیتی استفاده نمی شوند.
D4,D5,D6,D7 : در اتصال 4 بیتی استفاده می شوند. که در این پروژه اتصال آن ها به PORTB به این صورت است : Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 RW : برای خواندن و نوشتن درLCD استفاده می شود و باید آن را به زمین متصل کرد
: E :با صفر و یک کردن این گزینه توسط میکرو می توان صفحه نمایش را روشن یا خاموش کرد. (E = Portb.4 )
VSS : زمین ، VDD : تغذیه و VEE : کنترل روشنایی.
1-5- Keypad برای اینکه کاربر بتواند با میکرو کنترلر ارتباط برقرار کند نیاز به یک KEYPAD داریم. در این پروژه از یک Keypad 4*4 استفاده شده است که برای انتخاب منوها وهمچنین ورود داده ها از آن استفاده می شود. این Keypad دارای 4سطر ، 4 ستون و 8 پین است شکل(2-8). که به پورت B میکروکنترلر متصل شده است.
6
شکل 1-5: اتصال صفحه کلید با میکرو
1-5-1- اسکن صفحه کلید:برای خواندن صفحه کلید چندین روش وجود دارد که ما در اینجا از ساده ترین روش استفاده خواهیم کرد . در این روش چهار بیت از پورت های میکرو به صورت ورودی وچهار پورت دیگر به صورت خروجی تعریف می کنیم و پایه های کی پد (4*4) را به آن متصل می کنیم. پس چهار بیت کم ارزش یکی از پورت های میکرو را به عنوان خروجی تعریف کرده ، سطر های کی پد رابه آن متصل می کنیم بعد چهار پین باقی مانده را به عنوان ورودی تعریف و به ترتیب به چهار ستون کی پد متصل می کنیم.
شکل 1-6: پایه های کی پد
1-5-2-حالا برای تشخیص کلید فشرده شده به این صورت عمل می کنیم: به ترتیب پایه های خروجی که به کی پد متصل هستند را صفر میکنیم (یعنی هر بار سه تا از پین های خروجی یک و فقط یکی از آنها را صفر می کنیم) و بعد از هر بار صفر کردن چهار پین باقی مانده که به صورت ورودی تعریف شده اند را چک می کنیم. حالا باتوجه به این که کدام سطر (خروجی) صفر وکدام ستون (ورودی خوانده شده) صفر است می توان کلید فشرده شده را تشخیص داد.(در واقع باید سطرها (A, B, C, D) را جاروب کنیم و ستونها (1،2،3،4) را بخوانیم) 7
1-5-3- اتصال Keypad به میکروکنترلر: Keypad دارای 4سطر R1,R2,R3,R4 و 4ستون C1,C2,C3C4 است که به پورت A متصل می شوند. در شکل (3-1) اتصال
keypad به میکرو نشان داده شده است. برای اینکه اطلاعات وارد شده به درستی خوانده شود باید C1 تاC4 به پین های PA.0 تا PD3 متصل می شود وR1 تاR4 به PC.4 تاPD.7 متصل می شود.
1-6- رگولاتور : رگولاتور قطعه ای است که در ساخت مدارات الکترونیکی کاربردهای فراوانی دارد در حقیقت رگولاتورهای ولتاژ، نوعی از نیمه رساناها هستند که برای تنظیم ولتاژ طراحی شده اند.
شکل 1-7: رگولاتور
1-7- اعلان وضعیت(Buzzer):
شکل 1-8: شماتیک مدار راه انداز buzzer
توضیح در خصوص عملکرد مدار بالا این است که ورودی Buzzer که توسط یکی ازپین های میکروکنترلر اکتیو می شود توسط مقاومت R34 به صورت سری به بیس ترانزیستور
8
متصل شده است تا هنگام اکتیو شدن خروجی میکروکنترلر جریان مورد نیاز بیس که هرچند در حد میکروآمپر است جهت اطمینان کنترل شود و به پین میکروکنترلر آسیبی وارد نکند. این خروجی که به بیس ترانزیستور اعمال شده دارای یک فرکانس معین بوده و برای مدت مشخصی روی بیس ترانزیستور باقی می ماند. در بیس ترانزیستور نیز از یک فیلتر RC برای حذف نویزهای احتمالی در ورودی ترانزیستور استفاده شده است. در قسمت کلکتور ترانزیستور نیز یک بیزر به همراه یک مقاومت سری قرار گرفته است تا جریان بیزر را محدود کند.زمانی که بیزر روشن است حدود سه ولت در دو سر آن ولتاژ ایجاد می شود و با توجه به ولتاژ کلکتور-امیتر ترانزیستور جریان کلکتور آن در حدود پنج تا 10 میلی آمپر محدود می شود که برای بایاس بیزر کافی است. تنها نکته ی قابل توجه این است که در هنگام خرید بیزر باید توجه داشت که بیزرها دو نوع هستند. یک نوع از بیزرها درون خود کریستال اسیلاتور داشته و با بایاس DC مستقیما فعال می شوند و یک صدای ثابت با فرکانس مشخص تولید می کنند. اما نوع دیگر علاوه بر این که بایاس DC نیاز دارند تا توسط یک پالس خروجی تحریک شوند و قاعدتا فرکانس صدایی که از بیزر شنیده خواهد شد همان فرکانس پالسی است که به آن اعمال شده است. یک نمونه از این بیزرها را در زیر مشاهده می کنید.
شکل 1-9: buzzer
1-8-توضیحات کلی مداری در این پروژه
1-8-1- Key pad : در این پروژه کی پد به پورت C متصل شده است. برای راه اندازی کی پد ابتدا چهار پورت اول را خروجی و چهار پورت بعدی را به عنوان ورودی می گیریم و سپس خروجی ها را Pull up داخلی می کنیم (یعنی مقدار اولیه را صفر می دهیم) با فشردن هر
9
کلید در صفحه کلید اتصالی در یک سطون و سطر صفحه کلید رخ می دهد و یکی از مقادیر پورت های ورودی یک می شود. حال پورت C دارای یک مقدار باینری متفاوت است که این مقدار را در متغییر A ذخیره می کنیم. سپس جای پورت ها را بر عکس کرده و دوباره عملیات بالا را تکرار و مقدار جدید پورت C را در متغییر جدید B ذخیره می کنیم سپس یک عملیات
جبری (مانند:and، OR و…) انجام می دهیم کهدر این پروژه AوB را باهم OR کرده و در متغییر C ذخیره می کنیم. تمامی عملیات مذکور در عرض چند میکرو ثانیه انجام می شود پس زمانی که کلید را فشار می دهیم تمامی این عملیات انجام می شود پس با زدن هر کلید یک مقدار متفاوت در متغییر C ذخیره می شود پس می توان با هر مقدار C یک مقدار خواص برای هر کدام از کلید ها تعیین کرد.(چون در codevision تابعی برای کی پد وجود ندارد خودمان این تابع را بنویسیم و در برنامه اصلی فراخوانی کنیم).(کی پد از طریق پین هدر و کابل به PCB متصل می شود که در این حالت چهار پورت خروجی به قسمت عمودی و چهار پورت ورودی به قسمت افقی متصل می گردد).
1-8-2- LCD : در این پروژه lcd را به پورت B وصل کرده ایم.
(D4=B.4 , D5=B.5 , D6=B.6 , D7=B.7 , RS=B.0 , RW=B.1 , E=B.2)
(پایه Vdd=5v ، Vss=GND ، مقدار تقسیم ولتاژVo= (مقدار تقسیم ولتاژ مقدار ولتاژی است که از تقسیم ولتاژ دو مقاومت 330 اهم و 10 کیلو اهمی بدست می آید) برای فعال کردن سخت افزار lcd در قسمت codewizarde کامپایلر codevision ، lcd را فراخوانی و lcd را روی پورت B تنظیم کرده و مقدار 2*16 را برای lcd تعیین می کنیم
1-8-3-RELAY :در این پروژه رله را به پورت D.5 میکروکنترولر متصل کرده ایم عمل کرد رله به صورتی است که با اعما ولت 5 ولت به بوبین رله میدان مغناطیسی درون بوبین ایجاد
10
شده است و باعث می شود تیغه از حالت normally close (تیغه بسته) به حالت normally open (تیغه باز) میرود. این سخت افزار زمانی فعال می شود که ما رمز عبور رابه درستی وارد کنیم، که با اعمال کردن رمز درست در lcd پیغام the door is open نمایش داده می شود و پورت D.5 میکروکنترولر فعال شده که باعث فعال شد رله می شود (فعال شدن normally open) و از طرفی چون قفل به پایه normally open رله متصل گردیده باعث می شود ولتاژ 12 که بر روی پایه ثابت قرار داده ایم، دوسر قفل برقی قرار گیرد که با توجه به ولتاژ کاری قفل (12 تا 24 ولت)، ولتاژ 12 ولت دوسر سیم پیچ قرار گرفته و جریان مورد نیاز سیم پیچ بای ایجاد میدان مغناطیسی لازم ایجاد شده و باعث می شود قفل باز شود و تا زمانی که ولتاژ روی قفل قرار دارد یعنی تا زمانی که دکمه D کی پد توسط کاربر فشرده نشده ولتاژ روی قفل قرار دارد و قف باز است. پورت D.5 میکروکنترلر غیر فعال شده و رله به حات اولیه خود بازگشته و ولتاژ قفل برداشته شده و جریان سیم پیچ قفل قطع می شود سپس قفل به حالت اولیه خود (بسته شدن قفل) باز می گردد.
1-8-3-1- فعال شدن RELAY با اعمال پالس توسط پورت D.5 بیس ترانزیستور 2n2222 توسط مقاومت 8/6 کیلو اهمی فعال شده و باعث روشن شدن ترانزیستور 2n2222 می شود. ترانزیستور به صورت منبع جریان عمل کرده وجریان مورد نیاز بوبین رله که به کلکتور ترانزیستور متصل مباشد را تامین می کند (رله از جریان کلکتور ترانزیستور تغذیه می شود). رله در این مدار حدود 60 تا 70 میلی آمپر جریان می کشد. چون مقاومت دقیق رله را نمی دانیم تا اینکه ترانزیستور را به اشباع برسانیم ابتدا پتاسیومتری سر بیس قرار داده و تا حدی مقدار پتاسیومتر را تغییر می دهیم که ولتاژ کلکتور امیتر(Vce) به حدود صفر ولت برسد و جریانی حدود 60 تا 70 میلی آمپر به ما بدهد. بهترین گزینه برای مقدار مقاومت همان مقاومت 8/6 کیلو اهمی می باشد
11
1-9- نتیجه گیری
امنیت بیشتر قفل می توان جدا از قفل الکترونیکی(رمزی) قفل را مغناطیسی (کارتی) طراحی کرد البته در بعضی از قفل های امروزی قفل را به صورت ترکیبی از الکترونیکی ومغناطیسی طراحی کرد. حتی می توان برای امنیت بیشتر بغییر از طراحی گفته شده در بالا قفل را به صورت اثر انگشتی طراحی کرد که در حالت اثر انگشت ضریب امنیتی بیشتری نسبت به دو حالت قبلی خواهیم داشت.
فصل دوم
2-مقدمه
2-1- فصل دوم نرم افزار سیستم: در این فصل به نحوه انتخاب کامپایلر اشاره کرده و مزایای کامپایلر مورد نظر را بیان و سپس الگوریتم برنامه را تشریح می کنیم و در آخر برنامه اصلی و زیر برنامه ها را قرار می دهیم.
2-2- الگوریتم برنامه (توضیحات نرم افزاری): با وصل برق مدار به منوی اصلی میرویم که در ابتدا عبارت (welcome) در LCD نمایش داده می شود. با زدن کلید (A) به قسمت منوی باز کردن در (رمز گشا) می رویم ، در این مرحله باوارد کردن رمز عبور (رمزی که از قبلا در منوی sitting انتخاب شده) قفل در را باز می کنیم . رمز عبور رمز ترکیبی از ولوم و کیبورد میباشد، ممکن است رمز عبور از 1 تا 9 مرحله باشد که باید توجه داشت رمز هر مرحله به درستی وارد شود . در هر مرحله اگر رمز اشتباه وارد شود سیستم error میدهد و اگر اشتباه سه مرتبه تکرار شود سیستم warning میدهد و تا مدت 2 دقیقه نمی توانیم از سیستم استفاده کنیم وبعد از 2 دقیقه سیستم به منوی اصلی welcome)) بازمیگردد و اگر رمز عبور تمامی مراحل درست وارد شود رله فعال شده (می چسبد) و قفل برقی فعال شده ودر گاوصندوق باز می شود و عبارت (the door is open) روی صفحه نمایشگر LCD نمایش داده می شود.
با زدن کلید B)) به منوی sitting میرویم که این منو قابلیت تغییر رمز عبور قفل را به ما میدهد. در ابتدای ورود به منو sitting پرسیده می شود که رمز چند مرحله ای باشد ، که با توجه به اینکه این قفل قابلیت 1 تا 9 مرحله رمز ترکیبی را دارد می توان به دلخواه یکی از اعداد 1 تا 9 را انتخاب کرد و سپس کلید enter را فشرد که در این صورت باید ابتدا رمز عبوری که قبلا ذخیره شده (با در نظر گرفتن تمامی مراحل) وارد می کنیم که اگر رمز در هر مرحله به اشتباه وارد شود سیستم error مدهد ودوباره رمز همان مرحله پرسیده می شود که اگر رمز سه مرتبه به اشتباه وارد شود سیستم به مدت 2 دقیقه warning می دهد و سپس 14
به منوی اصلی باز میگردد ولی اگر رمز به درستی وارد شود سیستم به ما اجازه تغییر رمز را می دهد . با وارد کردن رمزجدید مورد نظر با ولوم و کیبورد و تایید آن در هر محله (تعداد مراحلی که ابتدا انتخاب کردیم) سیستم پیغام (code is true) را نمایش میدهد و رمز جدید در قسمت eeprom میکرو ذخیره و جایگزین رمز قبلی می شود ولی اگر در یکی از مراحل جدید رمز را اشتباه تایید کنیم سیستم error می دهد و اگر اشتباه 3 مرتبه تکرار شود سیستم مدت 2 دقیقه warning می دهد و سپس به منوی اصلی باز میگردد. بافشردن کلید (C) در هر کدام از مراحل باز کردن قفل ویا تغییر رمز که باشیم سیستم مراحل در حال اجرا را لغو و به منوی اصلی باز میگردد. برای بستن در گاو صندوق ابتدا در گاو صندوق را می بندیم وسپس با فشردن کلید (D) رله فعال شده و باعث می شود قفل برقی به حالت اولیه (بسته شدن قفل) باز میگردد و پیغام (the door is close) نمایش داده می شود.
2-3- انتخاب کامپایلر: انواع متنوعی از کمپایلر های AVR عرضه شده اند که در این میان کامپایلرهایBASCOM ، CODEVISION ، FASTAVR ، AVR STUDIO از اهمیت و اعتبار بیشتری برخوردار هستند. کامپایلری که در برنامه ریزی میکروکنترلر AVR در این پروژه از آن استفاده می کنیم codevision نام دارد. این کامپایلر به زبان برنامه نویسی ساخت یافته و قدرتمند C می باشد.
2-4- زبان برنامه نویسیC :امروزه زبان سطح بالای C هر چه بیشتر برای برنامه نویسی مکروکنترولرها عمومیت یافته است. زبان C یکی از برترین و قدرتمندترین زبان های برنامه نویسی بوده که این زبان یک زبان برنامه نویسی سطح بالا محسوب می شود که امروزه به شکل یک زبان گسترده در مرحله مهندسی در آمده. هر زبان برنامه نویسی ساختاری ویژه و مربوط به خود دارد ولی برای برنامه نویسی در AVR ساختار کمی فرق دارد. این فرق در این است که چون AVR یک قطعه سخت افزاری بوده و برنامه مثل کامپیوتر نیست که در هر زمان که کاربر می خواهد با فشار دکمه ای آنرا فعال کند بلکه باید همیشه در فعالیت باشد، به
15
همین خاطر در درون تابع main() یک حلقه دائم قرار داده می شود و کد هایی که همیشه باید در یک سیتم سخت افزاری اجرا شود درون این حلقه قرار داده می شود.مزایای استفاده اززبان C به جای زبان اسمبلی زیادند: کاهش زبان برنامه نویسی، نگهداری ساده تر و قابلیت حمل بیشتر، استفاده مجدد از کدها و ساده تر شدن فهم برنامه.عیب زبان C افزایش حجم کدها و در نتیجه کاهش سرعت برنامه برنامه می باشد. برای کاهش یا رفع این معایب ساختار AVR به گونه ای رفتار شده تا دستورات تولید شده توسط کامپایلر C را به صورت موثر دیکد و اجرا نماید.
2-5- برنامه
2-5-1- حلقه اصلی برنامه
while (1){
if(c!=255){PORTD.4=1;TCCR0=0x00;num=0;l=0;}
if(d==0&&l==0&&e==0&&c==255)TCCR0=0x0D;
if (c==125) {e=1;};
if (c==119) {lcd_clear();lcd_putsf("*door is close*");
PORTD.5=0;delay_ms(2000);lcd_clear(); }
if(c==126)
{ lcd_clear();
lcd_putsf("open the door!");
delay_ms(2000);
lcd_clear();
16
s3=0;
for (s3;s3<s2;s3++)
{ s3++;
lcd_putsf("marhale:");itoa(s3,p);
lcd_gotoxy(10,1);
lcd_puts(p);
delay_ms(1000);
lcd_clear();
s3–;
x=h[s3];
d=2;
while (d==2) {
laghv();
lcd_gotoxy(0,1);
lcd_putsf("inter code:");
lcd_gotoxy(0,0);
lcd_putsf("inter vlm:");
password();
clear();
vlm();
if(c==231) {
if(i==0)b1+=m*100;
17
for (i;i>0;i–) {
b1+=f[i]*f[i]+i*10+m*100 ; };
i=0;
if(b1==x)
{b1=0;l=0;s4++;
if(s4==s2){;s4=0;PORTD.5=1;lcd_clear();lcd_putsf("the door is open");
delay_ms(5000);lcd_clear();}
c=0;d=0;
lcd_clear();}
else{
l++;
b1=0;
lcd_clear();
lcd_gotoxy(5,1);
lcd_putsf("eroor");PORTD.6=1;
delay_ms(1000);PORTD.6=0;
lcd_clear();
if(l==3){
lcd_clear();
lcd_putsf(" warning unit 2minutes");PORTD.6=1;
delay_ms(2000);PORTD.6=0;delay_ms(10000);
18
b1=0;
lcd_clear();
d=0;s3=10;e=0;l=0; }
c=0; } } }
keypad(); };
s3=0; }
lcd_gotoxy(0,0);
lcd_putsf(" **welcome** ");
while (e==1) {
d=0;
lcd_gotoxy(0,0);
lcd_putsf("****setting*****");
delay_ms(2000);
lcd_clear();
while(d==0) {
lcd_gotoxy(0,1);
lcd_putsf("chand marhaleiy?");
keypad();itoa(n,p);lcd_gotoxy(0,0);lcd_puts(p);lcd_gotoxy(1,0);lcd_putsf(" ");
laghv();
if(c==231){
19
s1=n;s3=0;
c=0;
d=2;
delay_ms(300);lcd_clear(); } }
if(d==2){
changecode();
keypad(); } } };
2-5-2- تابع ولوم: نشان دهنده مقدار ADC پتاسیومتر است.
void vlm() {
if (b3<102) {m=0;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>102 & b3<204) {m=1;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>204 & b3<307) {m=2;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>307 & b3<409) {m=3;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>409 & b3<511) {m=4;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>511 & b3<613) {m=5;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>613 & b3<715) {m=6;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>715 & b3<818) {m=7;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>818 & b3<921) {m=8;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);}
if (b3>921 ) {m=9;itoa(m,p);lcd_gotoxy(12,0);lcd_puts(p);} }
2-5-3- تابع کی پد: وضیفه اسکن صفحه کلید را دارد.
void keypad() {
20
DDRC=0x0f;
PORTC=0xf0;
delay_us(10);
b=PINC;
DDRC=0xf0;
PORTC=0x0f;
delay_us(10);
a=PINC;
c=(a|b);
switch(c) {
case 215:{n=0;}break;
case 238:{n=1;}break;
case 222:{n=2;}break;
case 190:{n=3;}break;
case 237:{n=4;}break;
case 221:{n=5;}break;
case 189:{n=6;}break;
case 235:{n=7;}break;
case 219:{n=8;}break;
21
case 187:{n=9;}break; } }
2-5-4- تابع پسورد: این تابع زمانی که کلیدی در کی پد فشرده شود مقدار کلید را در یک متغیر ذخیره می کند و به جای نشان دادن شماره کلید در lcd علامت (*) را در lcd نمایش می دهد.
void password() {
delay_ms(50);
n=10;
keypad();
if (c==255)c1=0;
if(c1==0) {
if (n<10) {
if(i<5) {
i++;
switch (n) {
case 0:{f[i]=0; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 1:{f[i]=1; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 2:{f[i]=2; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 3:{f[i]=3; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 4:{f[i]=4; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 5:{f[i]=5; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 6:{f[i]=6; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 7:{f[i]=7; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
22
case 8:{f[i]=8; lcd_gotoxy(i+10,1); lcd_putsf("*");}break;
case 9:{f[i]=9; lcd_gotoxy(i+10,1); lcd_putsf("*");}break; };
c1=10; }
else {PORTD.6=1;delay_ms(300);PORTD.6=0;}; //boogh } } }
void laghv(){if (c==123){ d=10;e=c=l=0;s3=10;lcd_clear();}}
2-5-5- تابع پاک کردن (clear): زمانی که کلیدی اشتباه فشرده شود با فشردن کلید clear در کی پد این تابع فعال شده و قابلیت تصحیح اشتباه را به ما می دهد.
void clear(){
if (c==255)c1=0;
if(c1==0){
if(c==183){
f[i]=0;
lcd_gotoxy(i+10,1);
lcd_putsf(" ");
i–;
c=0;
c1=10; } } }
2-5-6- تابع changecode: این تابع در قسمت sitting کاربرد دارد و به ما کمک می کند تا رمز عبور را تغییر دهیم و رمز جدید را به جای رمز قبلی در eeprom ذخیره می کند.
void changecode(){
for (s3;s3<s2;s3++) {
lcd_clear();
23
lcd_putsf("marhale:");
x=h[s3];
s3++;
itoa(s3,p);
lcd_gotoxy(6,1);
lcd_puts(p);
s3–;
d=2;
delay_ms(500);
while (d==2) {
lcd_gotoxy(0,1);
lcd_putsf("inter code:");
lcd_gotoxy(0,0);
lcd_putsf("inter vlm:");
password();
clear();
vlm();
laghv();
if(c==231) {
if(i==0)b1+=m*100;
for (i;i>0;i–) {
b1+=f[i]*f[i]+i*10+m*100 ; };
i=0;
if(b1==x)
{b1=0;l=0;s4++;
if(s4==s2){d=3;s4=0;}
c=0;d=3;
lcd_clear();}
else{
l++;
b1=0;
lcd_clear();
lcd_gotoxy(5,1);
lcd_putsf("eroor");PORTD.6=1;
delay_ms(1000);PORTD.6=0;
lcd_clear();
if(l==3){
24
lcd_clear();
lcd_putsf(" warning unit 2minutes");PORTD.6=1;delay_ms(3000);PORTD.6=0;
delay_ms(10000);
b1=0;
lcd_clear();
d=0;s3=10;e=0;l=0; }
c=0; } } }
keypad(); };
s3=0;
if (d==3){
for (s3;s3<s1;s3++) {
lcd_clear();s3++;itoa(s3,p);
lcd_gotoxy(7,1);lcd_puts(p);s3–;
lcd_gotoxy(0,0); lcd_putsf("change key & vlm");delay_ms(2000);
lcd_clear();d=3;
while(d==3) {
lcd_gotoxy(0,1);
lcd_putsf("new code:");
lcd_gotoxy(0,0);
lcd_putsf("new vlm:");
laghv();
password();
vlm();
clear();
if(c==231) {
if(i==0)b1+=m*100;
for (i;i>0;i–) {
b1+=f[i]*f[i]+i*10+m*100 ; };
c=0;
i=0;
d=4; } }
lcd_clear();
c=0;delay_ms(500);
while(d==4){
lcd_gotoxy(0,1);
lcd_putsf("verify code");
lcd_gotoxy(0,0);
25
lcd_putsf("verify vlm");
laghv();
password();
clear();
vlm();
while(c==231) {
if(i==0)b1+=m*100;
for (i;i>0;i–) {
b2+=f[i]*f[i]+i*10+m*100 ; };
i=0;
c=0;
if(b1<b2 || b1>b2)
{
lcd_clear;lcd_gotoxy(6,0);l++;
lcd_putsf(" eroor");
lcd_clear();lcd_gotoxy(1,0);lcd_putsf("code is false:");d=4;PORTD.6=1;
delay_ms(1000);lcd_clear();PORTD.6=0;};
if(l==3){lcd_clear();lcd_putsf(" warning unit 2minutes");
PORTD.6=1;delay_ms(3000);PORTD.6=0;
delay_ms(10000);d=0;s3=10;lcd_clear();l=0;}
if(b1==b2){x=b1;lcd_clear();h2[s3]=x;s4++;
if(s4==s1){s4=0;
for (s4;s4<s2;s4++) h[s4]=0;s2=s1;s4=0;
for (s4;s4<s2;s4++) h[s4]=h2[s4];s4=0; }
lcd_gotoxy(0,0);lcd_putsf("code is changed");
lcd_clear;lcd_gotoxy(0,1);l=0;
lcd_putsf("code is true:");delay_ms(5000);lcd_clear();d=0;b1=0;};
e=0;b2=0; } } }
26
2-6- نتیجه گیری
کارهای زیاد دیگری می توان انجام داد تا امنیت سیستم گاوصندوق را افزایش داد مانند تعبیه کردن سنسور اعلان حریق، سیستمی که با ضربه زدن به قفل آژیر بکشد و سیستم قفل کودک و ….
27
29
شماتیک مدار:
30