امنیت خودرو و سیستم برف پاک کن خودکار مبتنی بر نانو آردوینو
امنیت خودرو و سیستم برف پاک کن خودکار مبتنی بر نانو آردوینو یک پروژه جالب و جذاب است که در این مقاله برای شما در نظر گرفته ایم.
جدای از آن، از نظر نظارت و کنترل درب خودرو مبتنی بر اپلیکیشن گوشی هوشمند، امنیت خودرو را تامین مینماید.
این نوآوری از نظر استفاده از آردوینو نانو برای فعال سازی خودکار برف پاک کن در هنگام بارندگی و همچنین کنترل سرعت آن در شرایط باران شدید یا سبک است.
همچنین PCB آن یک PCB با اندازه فشرده دو طرفه است که با نرم افزار Eagle پیاده سازی شده است.
در این پروژه، سیستم برف پاک کن یک برف پاک کن مبتنی بر تک موتور است که شیشه جلو اتومبیل را یکباره پاک می کند.
همچنین بسته به شدت باران، سرعت خود را به طور خودکار تغییر می دهد.
شرح نمونه اولیه پروژه امنیت خودرو و سیستم برف پاک کن خودکار مبتنی بر نانو آردوینو
سنسور باران در بالای خودرو قرار گرفته است.
اندازه سطح خودرو : عرض (20 سانتی متر) و طول (12 سانتی متر)
ابعاد درب خودرو : عرض (5 سانتی متر) و ارتفاع – 5 سانتی متر)
سایز سرپوش خودرو : عرض (10 سانتی متر) و طول (12 سانتی متر) و ارتفاع (6 سانتی مت)
ابعاد ماشین : عرض (10 سانتی متر) و طول (12 سانتی متر) و ارتفاع (10 سانتی متر)
ساختار داخلی به 3 دسته تقسیم می شود و به شرح زیر است:
1) مدار طراحی و چاپ PCB
2) طراحی اپلیکیشن اندروید
3) کدنویسی در نرم افزار
لیست قطعات مورد استفاده برای برف پاک کن اتوماتیک و سیستم امنیتی خودرو:
-
Arduino Nano v3.0
هر میکروکنترلری از خانواده آردوینو قابل اجرا است
-
Servo Motor
سرو و موتور SG-90
-
Water/Rain Sensor
آب را حس می کند و به عنوان یک کلید رسانا عمل می کند
-
HC-05 Bluetooth Module
برد تا 10 متر با فرکانس 2.4 گیگاهرتز و به راحتی به دستگاه های تلفن هوشمند متصل می شود
-
L293D
درایور موتور H-Bridge برای درایو موتور
-
IC 7805
ولتاژ ورودی را به عنوان خروجی آن روی 5 ولت تنظیم کنید
-
Motor
موتور گیربکس 12 ولت DC
-
10uf Capacitor
خازن 10فاراد 63 ولت
-
LED
ال ای دی
-
Screw Clamp
واگو و پیچ گیره 2 پورت اتصال
-
12V DC Jack
جک DC برای اتصال پایه آداپتور 12 ولت
-
Jumper Wires
سیم جامپر
-
Batteries/ Adapter
آداپتور 12 ولت یا بسته باتری 12 ولت استفاده می شود
دیاگرام مدار و اتصالات امنیت خودرو
تصویر زیر کل دیاگرام مدار پروژه را نشان می دهد.
عنصر مهم این پروژه میکروکنترلر Arduino Nano v3.0 است.
از آنجایی که این پروژه با هر میکروکنترلر خانواده آردوینو سازگار است، اما به دلیل اندازه کوچک و بدنه فشرده، آردوینو نانو را ترجیح دادیم.
آردوینو نانو با سایر قطعات مرتبط است که نقش مهمی در این پروژه ایفا می کند.
این قطعات عبارتند از:
- سنسور باران
- ماژول بلوتوث HC-05
- موتور سروو SG-90
- و آی سی درایور موتور H-Bridge L293D
آردوینو نانو با اجزای رابط
ابعاد آردوینو نانو 18 در 45 میلی متر است
ابعاد نهایی PCB (50*50) میلی متر است
مقایسه میکروکنترلر آردوینو nano با آردوینو uno
آردوینو nano
- 22 پین ورودی/خروجی دیجیتال که 6 عدد از آنها می تواند به عنوان خروجی PWM استفاده شود. 8 ورودی آنالوگ
- آردوینو نانو با استفاده از میکروکنترلر ATmega328 / ATmega168 ساخته شده است.
- ATmega328 دارای 32 کیلوبایت حافظه فلش برنامه و 2 کیلوبایت حافظه SRAM است.
- ATmega168 دارای 16 کیلوبایت حافظه فلش برنامه و 1 کیلوبایت SRAM است.
- انرژی نانو را می توان از طریق اتصال USB Mini-B تامین کرد.
- این فقط یک جک برق DC ندارد و به جای کابل استاندارد با یک کابل USB Mini-B کار می کند.
- برد نانو آردوینو از دستگاه نصب سطحی (SMD) استفاده می کند، قطعه ای که به دلیل آن اندازه برد کوچکتر است و PCB دو لایه است (مثلاً ترکیب PCB لایه بالا و پایین).
- برد نانو آردوینو 18 میلی متر در 45 میلی متر است.
- اندازه کوچک آن یک امتیاز مثبت برای این میکروکنترلر برای استفاده در توسعه هر محصول تجاری است
آردوینو uno
- 14 پین ورودی/خروجی دیجیتال که 6 عدد از آنها می تواند به عنوان خروجی PWM استفاده شود. 6 ورودی آنالوگ
- Arduino Uno با استفاده از میکروکنترلر ATmega328P ساخته شده است.
- ATmega328P دارای 32 کیلوبایت حافظه فلش برنامه است که 0.5 کیلوبایت آن توسط بوت لودر و 2 کیلوبایت SRAM استفاده می شود.
- در حالی که Arduino Uno با استفاده از پورت USB 2.0 B و جک برق DC تغذیه می شود.
- برد آردوینو Uno از ترکیب دستگاه نصب سطحی (SMD) و اجزای سوراخ (THT) استفاده می کند. در بردهای آردوینو، و میکروکنترلر به هر دو شکل موجود است.
- برد آردوینو uno 6mm X 53.4mm است.
- به دلیل اندازه حجیم این برد بیشتر توسط مبتدیان آردوینو و برای توسعه مهارت ها در آردوینو استفاده می شود.
جزئیات رابط Arduino Nano در زیر آمده است:
رابط نانو آردوینو با LED :
و پین آند (+) LED ⇐ پین d8 آردوینو نانو
پین کاتد (-) LED ⇐ پین GND آردوینو نانو
رابط نانو آردوینو با سنسور باران:
پایه s سنسور باران ⇐ پین A0 آردوینو نانو
و پین GND سنسور باران ⇐ پین GND آردوینو نانو
پایه VCC سنسور باران ⇐ پین D10 آردوینو نانو
رابط آردوینو نانو با سروو موتور (SG-90):
پایه رنگ نارنجی S سرو موتور (SG-90) ⇐ پین d9 آردوینو نانو
و پین GND رنگ قهوه ای سرو موتور (SG-90) ⇐ پین gnd آردوینو نانو
پایه رنگ قرمز VCC سرو موتور (SG-90) ⇐ پین 5ولت آردوینو نانو
رابط نانو آردوینو با ماژول بلوتوث HC-05:
و پین RX ماژول بلوتوث HC-05 ⇐ پین TX1 آردوینو نانو
پایه TX ماژول بلوتوث HC-05 ⇐ پین Rx0 آردوینو نانو
و پین GND ماژول بلوتوث HC-05 ⇐ پین GND آردوینو نانو
پایه VCC ماژول بلوتوث HC-05 ⇐ پین 5 ولت آردوینو نانو
رابط نانو آردوینو با آی سی درایور موتور H-Bridge l293D:
و l293D 2nd Pin -> Arduino Nano D11 Pin
l293D 7th Pin -> Arduino Nano D11 Pin
چاپ PCB
تصویر بالا به ترتیب لایه بالایی و لایه پایینی PCB را نشان می دهد.
هر دو لایه باید از طریق Vias که در هر دو لایه وجود دارد به یکدیگر متصل شوند.
برای چاپ این نوع از PCB ها به یک صفحه مسی دو طرفه نیاز داریم.
چنین مدارهایی فشرده و کوچک هستند به طوری که به فضای کمتری نیاز دارند.
در صورت مشکل، هنگام چاپ این PCB، ما PCB را فقط با لایه پایین توسعه داده ایم.
اپلیکیشن اندروید
تصویر بالا برنامه اندروید طراحی شده و در MitAppInventor.com نشان داده شده است.
در توسعه برنامه برای مبتدیان بسیار انعطاف پذیر است.
همچنین کاربر میتواند اجزای برنامه را با تغییر ویژگیهای آن که در سمت راست تصویر نشاندادهشده است سفارشی کند.
ما از آن برای امنیت خودرو با استفاده از قفل و باز کردن قفل درب خودرو از طریق تلفن هوشمند استفاده کرده ایم.
این برنامه از طریق بلوتوث به سیستم خودرو متصل می شود که پروتکل ارتباطی امنیت خودرو در مقایسه با ارتباطات Wi-Fi است.
شرح دکمه های موجود در برنامه
ارائه دستگاه بلوتوث = و این دستگاه های گیرنده بلوتوث نزدیک را نشان می دهد
باز کردن قفل درب = و درب خودرو را باز می کند
قفل درب = درب خودرو را قفل می کند
موتور روشن = سیستم خودر و را روشن می کند
موتور خاموش = سیستم خودرو را خاموش می کند
اما در اینجا تصویر بالا بلوکهای طراحی اپلیکیشن را که در بخش طراح تشکیل شده است، توضیح میدهد.
دو بلوک پازل اول عملکرد دکمه ارائه دستگاه بلوتوث را مشخص می کند.
این بلوکها کلاینت بلوتوث موجود در نزدیکی را روی صفحه برنامه نمایش میدهند و برنامه نماد قطع شده نوشته شده روی برنامه را تا زمانی که با مشتری بلوتوث جفت شود نشان میدهد.
بلوک دوم پازل نماد متصل را روی صفحه برنامه نمایش می دهد تنها در صورتی که برنامه به کلاینت بلوتوث متصل شود.
چهار بلوک پازل دیگر عملکرد دکمه ها را تعریف می کند. در هر یک از این 4 بلوک در نهایت متنی در بلوک پازل صورتی نوشته شده است.
این متن دادههایی که در کد نوشته شده است را توصیف میکند،
زیرا از این متنها برای خواندن حلقههای سریال Microcontroller و عملکرد آن استفاده میشود. مثلا:
با فشار دادن دکمه باز کردن قفل:
*فرمان Car_Door_Open از طریق ماژول بلوتوث HC-05 و به میکروکنترلر ارسال می شود.
میکر و کنترلر این دستور را به صورت سریال میخواند تا حلقه Unlock_Car_Door را فعال کند.
درب ماشین باز خواهد شد.
بلوک دکمه 1 به عنوان بازکننده درب خودرو عمل می کند و دکمه دوم به عنوان قفل درب خودرو عمل می کند.
دکمه 3 و 4 به ترتیب موتور را روشن و خاموش می کند.
الگوریتم کد نرم افزار
#define Rain_sensor A0 // Analog pin A0 of Arduino Nano
1- int Motorinp-1=11;
2- int Motorinp-2=12;
3- int Engine=8;
4- int Sensorinput=10;
5- int Servo Input=9;
int inp=0; // Value which connects the Unlock Door Loop with Engine_On_Off loop//
int rs=0; // Value which connects the Rain Sensor loop with Engine_Off loop//
String data; //Read Serial Data//
int pos=0; // define Servo Position//
int val; // Read Analog Value//
————————————————————————————————————————–
#include
#include
————————————————————————————————————————–
void setup()
{
(Motorinp-1, OUTPUT);
(Motorinp-2, OUTPUT);
(Sensorinput, OUTPUT);
(Engine, OUTPUT); (
Rain_sensor, INPUT); // Defining the pinModes//
Serial.begin(9600); // Baud Rate//
mySerial.begin(9600); // Serial Read takes place at 9600 baud rate per second//
}
————————————————————————————————————————–
void loop()
{ while (mySerial.available())
{ delay(10 );
char c = mySerial.read();
if (c == ‘#’)
{ break; }
data += c; }
————————————————————————————————————————–
if (data.length() > 0)
{
If (data == “a”) // If the Serial Read value is a than Unlock _Car _Door loop gets active. //
{ Unlock_Car_Door(); // Car Door gets unlock//
inp=1; // This value will activate the Engine_On & Engine_Off loop// }
else if(data == “b”) //If the Serial Read value is b than Lock_Car _Door loop active. //
{ Lock_Car_Door(); // Car Door gets lock//
inp=0;
Engine_Off(); // Car system gets deactivate// }
else if(data == “c” && inp == 1 ) //Unlock_Car_Door loop activates Engine_On Loop. //
{ Engine_On(); // Car system gets deactivate// }
else if(data == “d” && inp == 1 ) //Unlock_Car_Door loop activates Engine_Off Loop. //
{ Engine_Off(); // Car system gets deactivate// } }
if(inp==1 && rs==1) // Unlock_Car_Door & Engine_ON loop activates Engine_Off ///
{ RainSensor(); }
data=””; }
————————————————————————————————————————–
void Unlock_Car_Door()
{ myservo.write(pos); // Door will move in Clockwise Direction//
delay(z); // On basis of requirement of how fast door should work// }
void Lock_Car_Door()
{ myservo.write(pos); //Door will move in Anticlockwise Direction//
delay(z); // On basis of requirement of how fast door should work// }
void Engine_On()
{ Engine pin gets HIGH // digital output//
Sensorinput pin gets HIGH // digital inputs//
RainSensor(); // RainSensor Loop//
rs=1; // Value which connects the Rain Sensor loop with Engine_On loop// }
void Engine_Off() // Engine Off loop//
{ Engine pin gets LOW // digital output//
rs=0; //// Value which connects the Rain Sensor loop with Engine_Off loop//
Sensorinput getsLOW); //digital input//
Motorinp-1 pin gets LOW // digital output//
Motorinp-2 pin gets LOW // digital output// }
————————————————————————————————————————–
void RainSensor() // Rain Sensor Loop//
{
val= analogRead(Rain_sensor); // Rain Sensor Values//
if(val>x1 && val<x2) //Rain Sensor Values such that x2>x1//
{ Motorinp -1 pin gets HIGH // digital output//
Motorinp-2 pin gets LOW // digital output//
delay(y1);
Motorinp-2 pin gets HIGH // digital output//
Motorinp-1 pin gets LOW // digital output//
delay(y1); }
else if(val>x2 && val<x3) //Rain Sensor Values such that x3>x2//
{ Motorinp -1 pin gets HIGH // digital output//
Motorinp-2 pin gets LOW // digital output//
delay(y2); //
Motorinp-2 pin gets HIGH // digital output//
Motorinp-1 pin gets LOW // digital output//
delay(y2); }
else if(val>x3 && valx3//
{ Motorinp -1 pin gets HIGH // digital output//
Motorinp-2 pin gets LOW // digital output//
delay(y3);
Motorinp-2 pin gets HIGH // digital output//
Motorinp-1 pin gets LOW // digital output//
delay(y3); }
else if(val<x0) //Rain Sensor Values such that x0< x1
{ Motorinp-1 gets LOW // digital output//
Motorinp-2 gets LOW // digital output// } }
————————————————————————————————————————-