پروژه ی رادار با mega16 و با قابلیت مانیتورینگ در کامپیوتر و اندروید
به نام خدا
در این مطلب قصد دارم پروژه ی رادار را خدمت دوستان معرفی کنم
در این پروژه اژ ماژول آلتراسونیک sfr05 برای تشخیص موانع و از سرووموتور sg5010 برای اسکن محیط با زاویه ۱۸۰ درجه استفاده شده است.و همچنین از یک lcd کاراکتری ۲*۱۶ برای نمایش اطلاعات شامل زاویه و فاصله و از یک میکروی atmega16 برای پردازش اطلاعات استفاده شده است.
یکی از خصوصیات منحصر به فرد این پروژه مانیتورینگ بودن آن توسط کامپیوتر است.
فیلم توضیحات و عملکرد پروژه رادار:
به این صورت که اطلاعات با استفاده از مبدل usb به serial به کامپیوتر ارسال میشود و نرم افزار با پردازش آنها موقعیت جسم را نمایش می دهد
این قابلیت با استفاده از کامپایلر prosesing طراحی شده است.
تنظیمات ماژول آلتراسونیک و سروو موتور به شرح زیر است
مشخصات ماژول SRF05
نحوه کار ماژول SRF05
Vcc : به ۵ ولت وصل میشود.
GND : به زمین وصل میشود.
ابتدا یک پالس با زمان ۲۰ میکرو ثانیه به پایه Trig میدهیم
و بعد ماژول srf05 ، ۸ پالس به سمت محیط ارسال میکند
و بعد ما پالسی از پایه Echo دریافت میکنیم و با محاسبه طول این پالس و ضرب کردن در مقادیری….فاصله ماژول srf05 رو تا مانع پیدا میکنیم
توجه مهم : اگه طول پالسی که دریافت کردیم از ۳۰ میلی ثانیه بیشتر شد یعنی مانعی جلوی ماژول نیست.
توجه : طول پالسی که دریافت میکنیم بین ۱۰۰ میکرو ثانیه تا ۲۰ میلی ثانیه هستش.
پایه Out هم به جایی وصل نیست
۱ ۲ ۳ ۴ |
//ارسال یک پالس به پایه تریگ ;PORTC.0=1 ;(delay_us(20 ;PORTC.0=0 |
بعداز این که پالس ها را ارسال کردیم….یک کد قرار میدهیم تا ببینیم چه زمانی پایه مورد نظر (پایه ای که قرار است پالس را از ان دریافت کنیم یک میشود ) که از کد زیر استفاده میکنیم
۱ |
{}(while(PINC.1==0 |
وقتی پایه Echo یک شد از حلقه بالا خارج میشود و سپس تایمر شروع به کار می کند ( مدت زمانی که پایه Echo یک است را محاسبه کنیم.) تا زمانی که پایه Echo یک است در حلقه ی زیر برنامه قرار دارد.
۱ |
{}(while(PINC.1 == 1 |
سپس با یک ضرب و تقسیم مناسب فاصله ماژول تا مانع رو پیدا میکنیم.
در ضمن این نکته را یادآور میشوم که ما در این پروژه فرکانس کاری تایمر را ۱ مگا هرتز قرار داده ایم که هر شمارش تایمر ۱ میکرو ثانیه ظول می کشد و وقتی که TCNT تایمر تا ۲۵۶ میشمارد وقفه سر ریز آن رخ می دهد و یک واحد به متغییر timer اضافه میشود به خاطر همین در کد زیر متغیر timer در عدد ۲۵۶ ضرب شده است
و علت اینکه با مقدار tcnt جمع شده است این است مثلا فرض کنید ۱۰ با وقفه سر ریز اتفاق افتاده که ما ۲۵۶۰ میکرو ثانیه را داریم در این هنگام که مقدار tcnt برابر با ۱۲۰ میشود پالس از طریق آلتراسونک دریافت میشود و به میکرو می رسد و تایمر از شمارش بازمی ایستد برای همین ما نباید آن مقدار ۱۲۰ را از دست بدهیم
;d=0;d=(timer*256.0+TCNT0)*.17 |
علت تقسیم بر ۲ در فرمول زیر : این تعداد پالس های محاسبه شده برای رفتن و برگشتن موج است و ما برای محاسبه فاصله تنها به زمان رفت(یا برگشت) نیاز داریم و نه زمان رفت و برگشت.
توجه : سرعت صوت در هوا ۳۴۳٫۲ متر بر ثانیه هستش.(که در زیر برای سادگی من ۳۴۰ قرار داده ایم)
( واحد متر) ۱۷۰m * (ز م ش) = ((یک مگا هرتز) ۱۰۰۰۰۰۰ / ۱) * ( ۲ / ۳۴۰ms) * ( (واحد میکرو ثانیه)ز م ش)
که زمان محاسبه شده ( ز م ش) در فرمول مقدار (timer*256.0+TCNT0) است
و بسته به این که این مقدار در چه عددی (۱۷۰ برای متر ۱٫۷ برای سانتیمتر ۰٫۱۷ برای میلیمتر) ضرب شود واحد فاصله بدست می آید.
مشخصات و نحوه عملکرد سروو موتور SG5010
سروو موتور چیست؟
سروو برگرفته از یک کلمه یونانی به نام servus که به معنی خدمتکار است.این سیستم نیز که تحت این نام کار می کند را سیستم سروو می گویند.بدین دلیل که مستقیما به فرامین پاسخ می دهد.
سروموتور به انگلیسی: Servomotor یا موتور کنترل به انگلیسی: Control motor نوعی از موتورهای الکتریکی است که با هدف بکارگیری در سیستمهای کنترل فیدبک طراحی میشود. لختی (اینرسی) در این موتورها پایین بوده و در نتیجه تغییر سرعت در این موتورها بسیار سریع است. معمولا قطر این موتورها کم اما درازای آنها زیاد میباشد.
در کاربردهاي مـدرن ، واژه سرو يا مکانيــسم سرو به يک سيستم کنـترلي فيدبک که متغير کنترل شونده ، موقعيت يا مشتق موقعيت مکانيکي به عنوان سرعت و شتاب است، محدود مي شود.
يک سيستم کنترلي فيدبک ، سيـستم کنـترلي است که به نگهـداشتن يک رابطه مفروض بين يک کميت کنـترل شده و يک کميـت مرجع ، با مقايسه توابع آنها و اسـتفاده از اختلاف به عنوان وسيله کنترل منجر مي شود.
سيستم کنـترلي فيدبک الکتريکي ، عموما براي کار به انرژي الکتـريکي تکيه مي کند . مشخصـات مهمي که معمولا براي چنين کنترلي مورد نياز است ، عبارتند از :
۱- پاسخ سريع ،
۲- دقت بالا ،
۳- کنترل بدون مراقبت و
۴- کارکرد از راه دور .
تعریف عمومی سرو موتور بدین شکل است: سرو موتور یک دستگاه کوچکی است که یک محور (shaft) خروجی دارد. این محور قادر است تا در یک موقعیت و زاویه ای خاص با ارسال سیگنال رمزی قرار گیرد. در واقع چگونگی حرکت وموقعیت های زاویه ای این محور خروجی توسط دسته ای از سیگنالهای رمزی که برای سیم کنترل آن تعریف می شودکنترل می شود. برای طول مدت زمانیکه یک سیگنال فعال بوده و یک پالس برروی خط ورودی آن قرار دارد این محور خروجی در موقعیت خاص زاویه ای که مختص آن سیگنال است قرار می گیرد و با تغییر سیگنال رمزی موقعیت زاویه ای تغییر می کند. در عمل سرو موتورها در صنایع رباتیک وتولیدات صنعتی مانند موتورهای کنترل کننده هواپیماها کنترل موقعیت سطوح ( مانند آسانسورها و … ) و… کاربرد وسیعی دارند .
مقایسه سرو موتور با استپر موتور:
در واقع یک استپر موتور از طریق پالسی که دریافت می کند به موتور دستور میدهد که طبق یک درجه خاص بچرخد اما ممکن است این چرخش به مقدار کافی دقیق نباشد که این اختلاف چرخش در پروژه های حساس مشکل آفرین است.اما سروو موتور یک نوع استپر موتوراست که از یک طرف به انکودر متصل می باشد و در هر لحظه میزان چرخش موتور توسط انکودر اندازه گیری می شود(احتمالا از طریق یک پالس در جهت معکوس ) و یک فیدبک از درجه موجود به موتور ارسال می گردد و موتور با دقت مناسب در درجه مشخص شده متوقف می گردد.
مشخصات سرو SG5010:
SG-5010 یک سرو موتور محصول شرکت Tower Pro است که مناسب برای ساخت روباتهای پیشرفته و دقیق ،استفاده در هواپیماهای مدل و انواع بازوهای صنعتی می باشد.این سرو موتور دارای قابلیت چرخش ۱۸۰ درجه می باشد. این موتور دارای سه پین برای تغذیه و کنترل است. مشخصات کلی این سرو به شرح ذیل است:
ست کردن رجیسترهای ATtmega32 برای راه اندازی سرو SG5010 :
با استفاده از خاصیت PWM در میکروکنترلرها می توان با ارسال پالس مناسب به سروو، آنها را کنترل کرد. مقدار پالس مناسب در دیتاشیت هر سروو موتورآمده است. برای تولید پالس مناسب در ATtmega16 می توان از تایمر استفاده کرد. بنابراین با استفاده از تایمر ۱۶ بیتی شماره یک میکروکنترلر ATtmega16 و مقدار دهی رجیستر OCR1A می توان پالس دلخواه را ایجاد کرد.
مثلا اگر بخواهیم سرو در درجه ۷۰ درجه منوقف شود باید محاسبات انجام گیرد و سپس بر اساس این محاسبات رجیستر OCR1A مقدار دهی شود.
برای انجام این محاسبات تایمر یک به صورت زیر مقدار دهی می شود.
فرکانس کاری میکروکنترلر ۸ مگاهرتز و clock value تایمر۱ را برابر ۱۰۰۰ کیلوهرتز قرار میدهیم. مابقی رجیسترهای تایمر یک را به صورت زیر انجام می دهیم:
; TCCR1A=0xA0
TCCR1B=0x12;// Clock value: 1000 kHz
;TCNT1H=0x00
; TCNT1L=0x00
برای مقدار دهی رجیستر ICR1 به صورت زیر عمل می کنیم:
Fpwm = Fcpu/(2*N * (1+TOP))= 50Hz
ابتدا با استفاده از رابطه بالا مقدار TOP را محاسبه کرده و سپس رجیستر را با مقدار TOP مقدار دهی می کنیم.توجه داشته باشید رجیستر ICR1 ، ۱۶ بیتی است پس برای مقدار دهی ۸ بیت پرارزش ICR1 از رجیستر ۸ بیتی ICR1H و برای مقدار دهی ۸ بیت کم ارزش از رجیستر ICR1L استفاده می کنیم.
Fpwm فرکانس سرو موتور و برابر ۵۰ هرتز است.
Fcpu فرکانس کاری میکروکنترلر و برابر ۸ مگاهرتز است.
N مقدار تقسیم کلاک است و برابر است با ۸
بنابر این :
Fpwm =Fcpu/( 2*N * (۱+TOP) )=> ۸۰۰۰۰۰۰HZ/( 2*8 *(۱+TOP) ) = 50MHZ
N =Fcpu/ClockValue=8MHZ/1000KHZ = 8
TOP = 9999 => TOP = ۰x270F
<=
;ICR1L=0x0F
;ICR1H=0x27
نحوه کنترل سروو موتورها با AVR : (به دست آوردن عدد مناسب برای مقدار دهی رجیستر OCR1A)
همانطور که در دیتاشیت سروو SG 5010 آمده، حداقل پالس برای چرخش سروو به ترتیب برابر ۶۰۰ میکروثانیه و حداکثر ۲۴۰۰ میکروثانیه می باشد. SG 5010 می تواند از صفر تا ۱۸۰ درجه بچرخد لذا ۶۰۰ میکرو ثانیه برای تنظیم روی صفر درجه و ۲۴۰۰ میکروثانیه برای تنظیم روی ۱۸۰ درجه می باشد.
پس ۶۰۰ تقسیم بر ۲ برابر ۳۰۰ میکروثانیه برای ۰ درجه و ۲۴۰۰ تقسیم بر ۲ برابر ۱۲۰۰ میکروثانیه برای ۱۸۰ درجه.
پالس لازم برای اختلاف یک درجه از رایطه زیر محاسبه می شود:
(۱۲۰۰-۳۰۰)/(۱۸۰-۰)=۵
به عنوان مثال برای تنظیم روی یک درجه(درجه ۱) مقدار پالس لازم برابر ۵ + ۳۰۰ = ۳۰۵ میکروثانیه می باشد. پس رجیستر OCR1A را با عدد ۳۰۵ مقدار دهی می کنیم.
برای تنظیم روی n درجه مقدار پالس لازم برابر ۳۰۰ + (n * 5) می باشد.
شماتیک و نوع و قطعات به کار رفته و نحوه اتصالات اجزای مدار نیز به صورت شکل زیر است :
بخش برنامه اندرویدی پروژه رادار برای نمایش اطلاعات در گوشی اندروید
در برنامه اندروید زیر که مشاهده میکنید اطلاعات پس از اتصال از طریق بلوتوث و ماژول hc05 به گوشی اندرویدی منتقل میشوند:
در پروژه اندرویدی فوق به ازای موانع پیداشده توسط ماژول آلتراسونیک نقاطی قرمز رنگ روی صفحه ظاهر می شود
و تمام مقادیر زاویه و فاصله در edit text ها نمایش داده میشوند همچین قابلیت اضافه ای که وجود دارد میتوانید به edit text ها دستی مقدار بدهید و با زدن دکمه set زاویه و فاصله را تنظیم کنید که در هنگام گسترس سورس کد از این مقادیر میتوانید جهت گسترش برنامه و تنظیم آفست استفاده کنید.
برای پاک کردن صفحه نیز به طور دستی میتوانید رو تکست ویو لمس کنید تا صفحه از نقاط قرمز پاک شود.
جهت ارتباط با میکرو کافیست یک ماژول بلوتوث تهیه کنید و پس از تامین تغذیه ۳٫۳ ولتی آن به صورت زیر عمل کنید:
۱-گراند بلوتوث با گراند میکرو متصل شود.
۲ – پایه tx میکرو به پایه rx ماژول بلوتوث متصل شود.
=<همچمنین اگر سخت افزار ندارید این برنامه اندرویدی را میتوانید با نرم افزار شبیه ساز پروتئوس راه اندازی کنید که بعدا میگم چطور این کارو انجام بدید.
“در شماتیک فوق در پروتئوس به جای portcom مبدل جهت ارتباط با کامپیوتر و ماژول بلوتوث جهت ارتباط با گوشی قرار میگیرد،حتی میتوانید با همان ماژول بلوتوث به نرم افزار تحت کامپیوتر هم متصل بشید که کاری نداره باید از بلوتوث لبتابتون استفاده کنید و به hc05 متصل بشید سپس دوتا پورت سریال ایجاد میشه براتون کافیه در نرم افزار پروسسینگ اسم اون پورت کام رو بدید.
در این پروژه از تمامی قسمت ها فیلم ظبط شده و فایل های شبیه سازی پروتعوس و شماتیک و pcb در آلتیوم طراحی شده است و به زبان c در کامپایلر کدویژن برای میکرو و به زبان ++c در کامپایلر پروسسینگ برای کامپیوتر و به زبان جاوا در اندروید استدیو برای اندروید کد نویسی شده است.همچنین برای ساخت پروژه ساپورت های لازم انجام می شود.
لیست قطعات مورد استفاده :
۷-LED و برد خام مدار چاپی و اسید و مته(جهت سوراخ کاری) و خازن (۱۰۰ و ۱۰۰۰ میکرو) و پتانسیومتر(۱۰ کیلو برای کنتراست lcd)
«این قطعات رو از هر فروشگاهی میتونید تهیه کنید»
توضیحات تنظیمات میکروکنترلر:
فرکانس کاری میکرو ۸ مگا هرتز است که میتوانید از اسیلاتور داخلی استفاده کنید و فیوز بیت ها رو به صورت زیر تنظیمات کنید:
کلاک سلکت صفر برابر ۰
کلاک سلکت یک برابر ۰
کلاک سلکت دو برابر ۱
کلاک سلکت سه برابر ۰
و در صورت اتصال کریستال خارجی ۸ مگا هرتز تمامی کلاک سلکت هارو ۱ کنید
توضیحات بیشتر در مورد نحوه پروگرام کردن میکرو از این لینک ببینید.
میتوانید به تلگرام بنده مراجعه کنید ,سوالی داشتید یا مشکلی در دانلود به وجود آمد در خدمتم .
دانلود کامپایلر پروسسینگ برای اجرای کد گرافیکی برنامه در لبتاب.
آی دی تلگرام بنده :
مطالب پیشنهادی زیر را مشاهده کنید:
برنامه اندرویدی حرفه ای کنترلر LEDRGB و ۸ رله با قابلیت دریافت دما از طریق بلوتوث
سلام خسته نباشید ببخشید این یوزر در تلگرام موجود نیست، من فقط قسمت برنامه کد ویژن این پروژه رو میخواستم، هزینش چقدر هست؟
با سلام
آی دی تلگرام بنده قرار داده شده است
MicroDroidPrj@
همچنین به ایمیل شما پاسخ داده است
موفق باشید
سلام برای خرید ارور میده !
سلام.مشکل برطرف شد دوست عزیز
با سلام و ممنون از آموزش خوبتون ببخشید از کجا میشه کامپایلر پروسسور رو یاد گرفت به زبان فارسی؟ چون هر چی تو اینترنت سرچ می کنم چیزی پیدا نمیکنم
سلام.خواهش میکنم.فارسی رو ببوس بزار کنار.بعدشم کاری نداره یادگیریش،برنامه نویسیش به زبان ++C هستش و نمونه کد و مثال هم خیلی زیاد داره…
سلام لطفا ایدی تلگرام تون درست کنید تا در ارتباط باشیم
سلام هم شماره قرار دادم هم آی دی تلگرم
۰۹۳۸۵۷۹۲۷۶۵
microdroidprj@
سلام.چرا نمیشه دانلود کرد؟
سلام .برای خرید پروژ پیام میده کارت پذیرنده نا معتبر است.
سلام از مشکلات موقت درگاه بانکیه، تلگرام پیام بدید، اونجا میفرستم براتون.
Id:microdroidprj