در برخی از خودروها سیستم فاصله سنجی وجود دارد که هنگام عقب رفتن خودرو فعال می شود که در زبان عامیانه به آن سنسور دنده عقب خودرو می گویند. این سیستم زمانیکه خودرو به سمت عقب در حال حرکت است اگر جسمی در نزدیکی آن باشد آلارم می کشد و راننده را از وجود جسمی که در حال نزدیک شدن به آن است مطلع می کند.
عملکرد سنسور دنده عقب خودرو به این صورت است که چند سنسور التراسونیک در قسمت پشتی خودرو معمولا بر روی سپر عقب ماشین نصب می شود تا فاصله ماشین تا مانع را مدام اندازه گیری کند، تا در صورت نزدیک شدن به مانع سیستم مرکزی خودرو شروع به کشیدن آلارم کند، این سنسور به صورت اتوماتیک زمانیکه راننده وضعیت دنده خودرو را بر روی دنده عقب تنظیم می کند فعال می شود.
در این پروژه ما قصد داریم تا توسط ماژول آلتراسونیک سنجش مسافت SRF05 میزان مسافت را اندازه گیری کنیم و به واسطه برد آردوینو Arduino و ماژول نمایگشر سون سگمنت TM1637 مقدار فاصله تا جسم مورد نظر را نشان دهیم. پس بدون اتلاف زمان و توضیح اضافی به سراغ ساخت مدار می رویم.
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
ماژول آلتراسونیک SRF05 مناسب اندازه گیری فاصله | 1 عدد |
بازر 5 ولتی با اسیلاتور داخلی | 1 عدد |
تک سوئیچ 2 پایه DIP سایز 6x6x5 میلیمتر | 1 عدد |
سیم جامپر برد بوردی مدل یک سر نری - مادگی (سری 40تایی) | 1 عدد |
آداپتور 12V ولت 2A آمپر مدل بین راهی ساخت ایران | 1 عدد |
مرحله اول : اتصال ماژول اولتراسونیک SRF05 به برد آردوینو
1- پایه VCC ماژول فاصله سنج SRF05 را به پایه 5V یا همان VCC بر روی برد آردوینو متصل کنید.
2- پایه Trig ماژول فاصله سنج SRF05 را به پایه دیجیتال شماره 2 برد آردوینو متصل کنید.
3- پایه Echo ماژول فاصله سنج SRF05 را به پایه شماره 3 برد آردوینو متصل کنید.
4- پایه GND ماژول فاصله سنج SRF05 را به پایه GND بر روی برد آردوینو متصل کنید.
مرحله دوم : اتصال کلید به برد آردوینو
در این پروژه شما می توانید یک فاصله مشخص برای سنسور اندازه گیری فاصله تعیین کنید تا زمانیکه ماژول فاصله سنج SRF05 از آن فاصله بیشتر به جسم و یا اجسام مقابل خود نزدیک شد، برد آردوینو با استفاده از بازر تعبیه شده در مدار پروژه شروع به بوق زدن به صورت ضربانی می کند، حال هر چقدر فاصله با جسم کمتر شود صدای بوق یا ضربان ها به صورت سریعتر پخش خواهد شد، درست همانند سنسورهای دنده عقب که بر روی خودروها نصب می شود. به همین جهت از این کلید برای ورود به منوی تنظیمات و تنظیم مقدار فاصله دلخواه برحسب سانتی متر استفاده می شود. که می توانید آنرا طبق توضیحات و نقشه شماتیک زیر به برد آردوینو متصل کنید.
1- یکی از پایه های تک سوئیچ را به پایه GND بر روی برد آردوینو متصل کنید.
2- پایه دیگر تک سوئیچ را به پایه دیجیتال شماره 12 بر روی برد آردوینو متصل کنید.
مرحله سوم : اتصال ماژول نمایگشر سون سگمنت TM1637
1- پایه GND ماژول سون سگمنت TM1637 را به پایه GND بر روی برد آردوینو متصل کنید.
2- پایه VCC ماژول سون سگمنت TM1637را به پایه 3.3V بر روی برد آردوینو متصل کنید.
3- پایه DIO ماژول سون سگمنت TM1637 را به پایه آنالوگ شماره A4 برد آردوینو متصل کنید.
4- پایه CLK ماژول سون سگمنت TM1637 را به پایه آنالوگ شماره A5 برد آردوینو متصل کنید.
مرحله چهارم : اتصال بازر Buzzer به برد آردوینو
1- پایه منفی بازر را به پایه دیجیتال شماره 9 برد آردوینو متصل کنید. همچنین می توانید این پایه را به پایه GND بر روی برد آردوینو نیز متصل کنید.
2- پایه مثبت بازر را به پایه دیجیتال شماره 8 برد آردوینو متصل کنید.
مرحله پنجم : نصب کتابخانه TM1637.h در نرم افزار آردوینو
1- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino کار می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
2- کتابخانه TM1637.h را از اینجا دانلود کنید.
3- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه Grove_4-Digit_Display را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله ششم : پروگرام کردن برنامه بر روی برد آردوینو
1- برد آردوینو را از طریق کابل USB به کامپیوتر متصل کنید.
2- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino کار می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
3- پس از اجرای نرم افزار آردوینو، از طریق منوی File بر روی گزینه New کلیک کنید.
4- تمامی کدهای زیر را کپی کنید و در پنجره جدید باز شده بچسبانید (Paste).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#include <TM1637.h> //*************************Config Pin Display #define CLK A5 #define DIO A4 TM1637 Display1(CLK, DIO); int8_t Digitos[] = {8, 8, 8, 8}; int8_t Digit3; int8_t Digit2; int8_t Digit1; int8_t Digit0; //*************************Config Pin Buzzer const int Buzzer = 8; const int BuzzerGND = 9; //*************************Config Pin SRF05 const int Echo = 3; const int Trig = 2; //*************************Config Pin Switch const int PinSW = 12; //*************************Config Value int DurationSettings = 25; String DistanceEnd; int duration; int distance; int TimeDisplay; String Value; boolean Key; int TimeSW; void setup() { Display1.set(7); Display1.init(); Display1.display(Digitos); pinMode(Buzzer, OUTPUT); pinMode(BuzzerGND, OUTPUT); pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(PinSW, INPUT_PULLUP); delay(2000); Display1.point(POINT_OFF); Digitos[3] = 16; Digitos[2] = 16; Digitos[1] = 16; Digitos[0] = 16; } void loop() { delayMicroseconds(2); digitalWrite(Trig , LOW ); delayMicroseconds(10); digitalWrite(Trig , HIGH); duration = pulseIn(Echo , HIGH); distance = (duration / (58)); DistanceEnd = String(distance); switch (DistanceEnd.length()) { case 1: Digit3 = 16; Digit2 = 16; Digit1 = 16; Value = DistanceEnd.substring(0, 1); Digit0 = Value.toInt(); break; case 2: Digit3 = 16; Digit2 = 16; Value = DistanceEnd.substring(1, 2); Digit1 = Value.toInt(); Value = DistanceEnd.substring(0, 1); Digit0 = Value.toInt(); break; case 3: Digit3 = 16; Value = DistanceEnd.substring(2, 3); Digit2 = Value.toInt(); Value = DistanceEnd.substring(1, 2); Digit1 = Value.toInt(); Value = DistanceEnd.substring(0, 1); Digit0 = Value.toInt(); break; case 4: Value = DistanceEnd.substring(3, 4); Digit3 = Value.toInt(); Value = DistanceEnd.substring(2, 3); Digit2 = Value.toInt(); Value = DistanceEnd.substring(1, 2); Digit1 = Value.toInt(); Value = DistanceEnd.substring(0, 1); Digit0 = Value.toInt(); break; default: Digit3 = 16; Digit2 = 16; Digit1 = 16; Digit0 = 16; break; } Digitos[3] = Digit3; Digitos[2] = Digit2; Digitos[1] = Digit1; Digitos[0] = Digit0; Display1.display(Digitos); int timer = 0; int BuzzerTime = 0; while (true) { timer++; delay (1); if (digitalRead(PinSW) == 0) { TimeSW++; } else { TimeSW = 0; } if (TimeSW >= 1500) Settings(); if (timer > 500) break; if (distance < DurationSettings ) { BuzzerTime++; if (BuzzerTime < distance * 4) { digitalWrite(Buzzer , LOW ); } else { digitalWrite(Buzzer , HIGH ); if (BuzzerTime > distance * 4 + 80) { BuzzerTime = 0; digitalWrite(Buzzer , LOW ); } } } else { digitalWrite(Buzzer , LOW ); BuzzerTime = 0; } } } void Settings() { digitalWrite(Buzzer , LOW ); TimeSW = 0; Key = 1; while (true) { TimeSW++; TimeDisplay++; Digit2 = DurationSettings % 10 ; Digit1 = (DurationSettings % 100) / 10 ; if (TimeDisplay < 100) { Digitos[2] = Digit2 ; Digitos[1] = Digit1 ; } else { Digitos[2] = 16 ; Digitos[1] = 16 ; } Digitos[3] = 16 ; Digitos[0] = 16 ; if (TimeDisplay > 200) TimeDisplay = 0; Display1.display(Digitos); if (digitalRead(PinSW) == 0 && Key == 0) { Key = 1; TimeSW = 0; DurationSettings++; if (DurationSettings > 99 ) DurationSettings = 5; } if (digitalRead(PinSW) == 1 && Key == 1)Key = 0; if (TimeSW >= 1500) break; delay(1); } TimeSW = 0; } |
5- حال از طریق منوی File گزینه Save را انتخاب کنید و برنامه را در محل دلخواه خود ذخیره کنید.
6- پس از ذخیره برنامه از طریق منوی Tools به زیر منوی Board رفته و از لیست کشویی باز شده آیتم Arduino/Genuino Uno را انتخاب کنید.
7- دوباره از طریق همان منوی Tools به زیر منوی Port رفته و از لیست کشویی باز شده شماره پورت USB که از طریق آن برد آردینو به کامپیوتر متصل شده است را انتخاب کنید.
8- در پایان برای انتقال برنامه به برد آردوینو کافیست تا بر روی آیکون در نرم افزار برنامه نویسی آردوینو کلیک کنید.
مرحله هفتم : راه اندازی پروژه
1- برد آردوینو را به صورت کامل از کامپیوتر جدا کنید.
2- توسط یک آداپتور 12 ولت DC با حداقل جریان 200 میلی آمپر برد آردوینو را راه اندازی کنید.
3- در صورتیکه در هنگام ساخت پروژه، تمامی مراحل قبل را به درستی انجام داده باشید باید مقدار فاصله ماژول SRF05 با جسم یا اجسام مقابل آنرا بر حسب سانتی متر بر روی نمایشگر سون سگمنت مشاهده کنید.
4- در حالت پیش فرض مقدار فاصله اعلام خطر بر روی عدد 25 سانتی متر تنظیم شده است. این به این معنا است که اگر فاصله ماژول التراسونیک SRF05 با جسمی کمتر از 25 سانتی متر شود، بازر موجود در پروژه فعال می شود و شروع به پخش صدای بوق به صورت ضربانی می کند.
مرحله هشتم : تغییر مقدار فاصله اعلام خطر
1- کلید فشاری را به مدت 3 ثانیه نگه دارید، تا زمانیکه عدد فاصله فعلی که به صورت پیش فرض 25 سانتی متر تنظیم شده است به صورت چشمک زن بر روی نمایشگر سون سگمنت ظاهر شود.
2- حال می توانید با هر بار فشار کلید، مقدار فاصله مورد نظر خود را انتخاب کنید.
3- پس از انتخاب فاصله مورد نظر برای ذخیره و اعمال تنظیم، تنها کافی است به مدت حداقل 3 ثانیه به کلید دست نزنید.
10 بار هم بادقت انجام دادم هنوز ارور میده
متن ارور اینه:
A library named Grove_4-Digit_Display already exists
سلام دوست عزیز
لطفاً سایر کتابخانه هایی که از دیگر سایت ها دانلود کرده اید و در کتابخانه نرم افزار آردوینو نصب کرده اید را به صورت کامل از پوشه libraries حذف کنید.
ما مجددا کتابخانه و کد پروژه را در نرم افزار آردوینو آزمایش کردیم و بدون هیچ اخطار برنامه کامپایل شد، لطفاً توجه داشته باشید حتما از کتابخانه قرار داده شده در “مرحله پنجم” توضیحات که لینک دانلود آن نیز در همان قسمت درج شده است، استفاده کنید.
همچنین به پوشه libraries نرم افزار آردوینو بروید و مطمئن شوید کتابخانه فوق را تنها یکبار نصب کرده باشید.
سلام مهندس عزیز.میخواستم ببینم میشه از ماژول سنسور اولتراسونیک AJ-SR04M هم استفاده کرد؟
سلام دوست عزیز
بله می توانید استفاده کنید، اما از آنجا که این موضوع به صورت عملی توسط ما آزمایش نشده است بهتر است برای اطمینان بیشتر، قبل از خرید محصول مشخصات فنی موجود در دیتاشیت هر دو ماژول را با یکدیگر مقایسه کنید.
باسلام واحترام
قصد خرید این ماژول ها را دارم آیا دقیقاً همان ماژول های پروژه هستند؟
ماژول سگمنت 7Segment 4 Digit با تراشه TM1637
برد آردوینو Arduino Uno R3 با تراشه R3 اورجینال
ماژول آلتراسونیک تشخیص فاصله SRF05 Ultrasonic
ماژول بازر اکتیو Active Buzzer – Low Level Trigger
سلام دوست عزیز
بله قطعات ذکر شده صحیح هستند
با تشکر از پیگیری شما
اگرامکانش هست ممنون میشم کد ها رو یه توضیح مختصر بدید(هر کد مربوط به چیست).
بنده در کدنویسی یک مقدار ضعیف هستم و با وجود اینکه کد ها را چند بار خواندم باز هم متوجه نشدم.
سلام دوست عزیز
با توجه محدودیت زمانی و سوالات زیاد کاربران که همه روزه از طریق بخش نظرات سایت، ایمیل، شبکه های اجتماعی و.. مطرح می شود،زمان کافی برای پاسخگویی به همه سوالات نیست. از همین رو تجزیه و تحلیل کدها به عهده خود خواننده است که با اندکی جستجو در قسمت آموزش سایت و مطالعه زبان برنامه نویسی به راحتی قابل فهم است همچنین امکان پاسخگویی به سوالات مربوط به توسعه و یا شخصی سازی پروژه ها برایمان امکانپذیر نیست.
باتشکر
نرم افزاری رو که شماتیک مدار رو رسم کردید(نقشه های سیمکشی) رو میشه معرفی کنید.
در این پروژه ما برای ترسیم نقشه شماتیک از برنامه Fritzing استفاده کرده ایم.
و یک سوال دیگه همین پروژه رو میشه با
برد آردوینو نانو Arduino NANO با تراشه CH340G
پیاده سازی کرد؟
بله می توانید، مشکلی وجود ندارد.
عذرخواهم شما در آموزش از بازر استاده کردید ولی گفتید که ماژول بازر تهیه شود راه اندازی ماژول به چه شکل است.
سلام دوست عزیز
راه اندازی ماژول بازر بسیار ساده است، تنها کافی است پایه مثبت ماژول بازر را به پایه +5V آردوینو و پایه منفی ماژول بازر را به یکی از پایه های GND و یا پایه شماره 9 برد آردوینو متصل کنید و در پایان پایه تحریک ماژول را به پایه شماره هشت برد آردوینو متصل کنید.