# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > مباحث عمومی کار با سخت افزارها، سنسورها و لوازم جانبی >  نوشتن برنامه تلفیقی GPS , GPRS , HARDware ؟

## prince0fpersia

سلام به همگی


قبل از هر چیز بگم من مبتدی ام ...پس لطفا خرده نگیرید از سوالام

من چند وقت پیش یک سیستمی رو دیدم که به صورت دزدگیر برای خودرو بود

یک قطعه ای در خودرو نصب میشه که یک سیمکارت بهش میخوره ...بعد این سیمکارت  از طریق جی-پی-اس و جی-پی-آر-اس اطلاعات خودرو رو بر روی سایت(اینترنتی)  سازنده دستگاه که یک نقشه داره میفرسته 

بعد نشون میده خودرو الان کجای نقشه هست

ضمنا یک قابلیت دیگه هم داره که سخت افزاری میشه و میتونه با ارسال دستوری از طریق سایت ، خودرو رو خاموش کنه


میخواستم منو راهنمایی کنید که اگر بخوام همچین برنامه ای رو بنویسم به چه  چیزهایی نیاز دارم؟ (مخصوصا سوال من این هست که چطور میشه سایتی طراحی کرد  که بتونه روی نقشه دستگاه های جی-پی-اس متعدد رو که من برای سیستم تعریف  میکنم نشون بده و حتی من بتونم از طریق سایت دستوراتی رو برای این جی-پی-اس  ها (که مدارات جانبی دیگه ای هم برای کارهای دیگه دارند) بفرستم و اونها  دستوراتی که من بهشون میدم رو اجرا کنن؟)



و در آخر سر اگر بخوام کل این پروژه رو به صورت هوش مصنوعی پیاده کنم چطوری  میشه؟ یعنی به جای اینکه من از طریق سایت دستورات رو بفرستم خود سایت با  توجه به برنامه ریزی قبلی که شده دستورات رو اتوماتیک (و به صورت جداگانه  برای هر کدوم از دستگاه ها) بفرسته


 :لبخند گشاده!: 



ممنون که راهنمایی میکنید .... اجرکم عندالله

----------


## Mohsen6558

دوست عزیز شما نیازمند همچین پروژه ای هستین فکر کنم:
http://www.mohsen6558.com/gps

این پروژه رو من نوشتم و الان در حال استفاده هست
اینم مشخصه های ارتباطی بنده
http://www.mohsen6558.com/visit.jpg

----------


## Mehran.GH

> اگر بخوام همچین برنامه ای رو بنویسم به چه  چیزهایی نیاز دارم؟


برای انجام این کار یک GPS  نیاز داری که موقعیت را پیدا کند , یک مادول  GPRS  نیاز داری که مختصات را به  سرور بفرستد (یا یک  گوشی موبایل قدیمی که دستورات AT  را پشتبانی کند )  یک میکرو کنترلر کوچک لازم داری که از طریق یک  پورت سریال مختصات را از GPS بخواند و از طریق پورت سریال دوم مختصات را از طریق GPRS  به سرور بفرستد




> مخصوصا سوال من این هست که چطور میشه سایتی طراحی کرد  که بتونه روی نقشه دستگاه های جی-پی-اس متعدد رو که من برای سیستم تعریف  میکنم نشون بده و حتی من بتونم از طریق سایت دستوراتی رو برای این جی-پی-اس  ها (که مدارات جانبی دیگه ای هم برای کارهای دیگه دارند) بفرستم و اونها  دستوراتی که من بهشون میدم رو اجرا کنن؟


ارتباط GPRS با سرور از طریق روش برنامه نویسی سوکت انجام  میشود و نیاز داری در سمت سرور IP  VALID  داشته باشی یعنی شرکت خدمات دهنده موبایل که GPRS  را از آنها می گیری باید یک IP VALID   برای سمت سرور بهت بدهد.

هر ایستگاه متحرک از طریق یک IPو سوکت به سرور متصل می شود , مختصات را مثلا هر یک  دقیقه به سرور  می فرستد  (در دستورات AT  گوشی موبایل یا مادول GPRS  میتوانی این  را مطالعه کنی و کار مشکلی نیست ) و در سمت سرور هم که با برنامه نویسی سوکت آن اطلاعات را که شامل مختصات و .... بعلاوه یک ID مربوط به هر ایستگاه است را دریافت می کند و در یک بانک اطلاعاتی ذخیره می کند.
زبان برنامه نویسی در سمت میکرو همان  c  خودمون !  و در سمت سرور هم  هر زبان اسکریپتی که برای انتقال داده از طریق سوکت بلدی یا حتی cgi  


چون ممکن است همزمان بخواهند چند ایستگاه مختصات بفرستند راحترین راه  برای یک  پروژه آموزشی باز کردن سوکت در سمت سرور ,خواندن پاکت از یک ایستگاه, بستن سوکت و مجددا تکرار این چرخه هر یک دقیقه مثلا

برای نمایش گرافیکی اطلاعات  هر ایستگاه در یک  نرم افزار هم  استفاده از API  هایGOOGLE EARTH  سریعترین روش است یا نوشتن یکبرنامه در #c  که از یک طرف اطلاعات را از بانک بخواند و از طرف دیگر با API  گوگل ارتباط برقرار کند و مختصات را در نقشه نشان دهد (در صفحه مربوط به GOOGLE EARTH  روش و مثال فراوان است)  و اگر هم نخواهی از امکانات گوگل استفاده کنی و نرم افزار را خودت تهیه کنی (در بخش #c  فروم در این باره  صحبت شده   بگردی مطلب بیشتری پیدا می کنی )

برای نمایش گرافیکی اطلاعات در یک سایت به صورت Online : 
مثلا شبیه این سایت که پرواز هواپیماها را در اروپا نشان می دهد http://www.radarvirtuel.com/ 

این بخش یکم باید راجع بهش فکر  کرد چون در اصل  نیاز به یک web-based GIS Engine    داری 

در راه حل قبلی یعنی نمایش اطلاعات در یک PC  مثلا  آن برنامه #c   اطلاعات به جایی فرستاده نمی شد  اما در حالت نمایش در اینترنت    باید  اطلاعات را به صورت چرخشی برای سایت خاص خودت آماده شود  و مثلا به روش FTP به سرور ارسال شود یا از طریق GET از طرف سرور درخواست شود (این بخش را جواب قطعی ندارم و باید بیشتر بررسی کرد که چه گزینه هایی مقدور است)




> و در آخر سر اگر بخوام کل این پروژه رو به صورت هوش مصنوعی پیاده کنم چطوری  میشه؟ یعنی به جای اینکه من از طریق سایت دستورات رو بفرستم خود سایت با  توجه به برنامه ریزی قبلی که شده دستورات رو اتوماتیک (و به صورت جداگانه  برای هر کدوم از دستگاه ها) بفرسته


ارسال اتوماتیک دستورات که هوش معمولی کامپیوتری است و هوش مصنوعی یک مفهوم دیگری دارد , مشکل برای ارسال اطلاعات به ایستگاه ها یا همان مثالی که خودت زدی خاموش کردن اتومبیل مثلا نیاز داری در سمت ایستگاه IP Valid   داشته باشی یعنی در شبکه موبایل GPRS  که ایستگاه ها به آن  متصل هستند شرکت خدمات دهنده باید این  امکان را در اختیار مشتری بگذارد که معمولا به دلایل امنیتی بعضی کشورها این  امکان را نمی دهند (اگر  بعدها به این بخش رسیدی باز هم  می توان بیشتر صحبت کرد) 


استفاده از این روش برای کاربردی چون  دزدگیر خودرو یا  "هر کاربردی که صحت عملکرد کل سیستم وابسته به برقراری دایمی ارتباط ایستگاه ها به شبکه است"  مشکلات زیر را دارد :
- شبکه GPRS  نقاط کور دارد و همه جا را پوشش نمی دهد 
- به راحتی میتوان با استفاده از GPS and GSM jammer
کل سیستم را کور کرد به طوری که نه مختصات را از ماهواره بگیرد و نه ارتباط با سرور مقدور باشد !

حتی مثلا کاربردهایی که فردی بخواهد اتومبیل ها یا رانندگانش را تحت کنترل داشته باشد هم بایک jammer   می توان سیستم را در هر نقطه دلخواه کور کرد بنابراین این روش ها را باید بیشتر برای بهینه کردن سیستم  دید نه کنترل افراد یا چنین تعاریفی!


این ایده کاری خوبی است و خیلی تجربه جالب می توان  یاد گرفت اما اگر بخواهی یک  محصول تجاری تولید کنی باید یک قدم بهتر از کارهایی باشد که صدبار قبلا انجام شده. 

پیشنهاد می کنم روی روشی کار کنی که امکان انتقال صدا هم از طریق الگوریتم های فشرده سازی و یا هر روش دیگری که خودت کشف می کنی از طریق شبکه GPRS  که پهنای باند کمی دارد قابل پیاده سازی باشد یعنی چیزی شبیه همان VOICE  Over IP    در پهنای باند کم , چون در UTMS  این کار قابل انجام است اما از نظر هزینه برای پروژه هایی که چندین ایستگاه متحرک به صورت Online   به سرور مرکزی متصل هستند ودیتا و صدا تبادل می شود  از نظر اقتصادی به صرفه نیست.

----------


## prince0fpersia

ضمن تشکر از راهنمایی های شما دوستان عزیز و مخصوصا آقا مهران که سعی کردند از همه جوانب به موضوع نگاه کنن و پیشنهاداتی ارایه بدن


راستش دفعه قبل کلی نوشته بودم درست قبل از اینکه دکمه ارسال رو بزنم صفحه مرورگرم خود به خود بسته شد و همه اش به باد رفت ....الانم از صبح پای سیستمم چشمام سو نداره انگشت درد هم گرفتم بس که نوشتم (جاهای دیگه رو میگم)


خلاصه اینو نوشته بودم که با توجه به اون قسمت حرف شما که فرمودین اطلاعات هر دقیقه به سرور فرستاده میشه ، میشه اینطور نتیجه گرفت که هنوز قدرت سخت افزار ها به جایی نرسیده که ارسال آنی اطلاعات اونم با حجم گسترده(یعنی خیلی اطلاعات دیگه به غیر از مکان اون شی) و همچنین به تعداد خیلی بالا شی متحرک (میلیونی) رو پشتیبانی کنه...درسته؟


من قصدم این بود که سیستمی باشه که به طور مثال توی نقشه واسش محدوده ای تعریف کنیم به اسم طرح ترافیک بعد هر خودرویی که واردش میشه واسش اخطار بفرسته و یا واسش جریمه صادر کنه (روی خودرو گیرنده مورد نظر نصب شده ) .... و این به تعداد میلیونی در سطح یک شهر یا کشور اجرا بشه

یا مثلا بیایم یک سری خیابون و بزرگراه رو واسشون حد سرعت تعیین کنیم توی برنامه و از اونطرف هم روی خودرو ها علاوه بر گیرنده یه کروز کنترل(یا یه همچین چیزی) بذاریم که با گیرنده هم در ارتباط باشه و نذاره خودرو ها از اون حد مجاز سرعت بتونن بیشتر برن توی اون خیابون یا بزرگراه


و خیلی خیلی خیلی قابلیت های مختلف که میتونه به این سیستم اضافه بشه


اما الان با توجه به توضیحات شما یه جورایی به این نتیجه رسیدم که انگار غیر ممکنه(حداقل امروز با این سخت افزارها؟!)


بازم تشکر میکنم از راهنمایی های همه دوستان

----------


## Mohsen6558

دوست عزیز اصلا غیر ممکن نیست
دستگاه GPS شما دو تا آنتن خواهد داشت GSM,GPRS
این دستگاه GPS با GPRS هم م تونه اطلاعات بفرسته هم دریافت کنه
خب از طریق آنتن GPS شما می فهمید که تو موقعیت فلان و با سرعت فلان هستید
خب یه سیگنال به یه خروجی می دید این خروجی مثلا وصل هست به یه آژیر و آژیر شروع به کار می کنه یا وصل هست به دریچه ی بنزین و بنزین رو کم میکنه و سرعت کم می شه
هیچ چی غیر ممکن نیست

----------


## Mehran.GH

> خلاصه اینو نوشته بودم که با توجه به اون قسمت حرف شما که فرمودین اطلاعات هر دقیقه به سرور فرستاده میشه ، میشه اینطور نتیجه گرفت که هنوز قدرت سخت افزار ها به جایی نرسیده که ارسال آنی اطلاعات اونم با حجم گسترده(یعنی خیلی اطلاعات دیگه به غیر از مکان اون شی) و همچنین به تعداد خیلی بالا شی متحرک (میلیونی) رو پشتیبانی کنه...درسته؟


یک دقیقه  را مثال زدم  که در برنامه می توانی این طور تعریف کنی.  روش عملکرد به اینصورت است  که Client  یک درخواست به سمت سرور ارسال می کند و سرور پاسخ می دهد و این درخواست می تواند مثلا هر یک دقیقه یک بار باشد یا هر زمان دیگر

ببین  یک راه حل برای اینکه  توانایی پاسخ گویی سرور به ایستگاه های مختلف افزایش یابد استفاده از روش Multi-Threaded  است که در این روش Client درخواست اتصال TCP  را ارسال می کند و در سمت سرور یک Thread  برای این Client تعریف می شود و در سرورهای قوی می توان Request-Handling-Strategie  تعریف کرد که  شامل  Thread pro Connection  ,Thread per Requast ,  Thread  Polling ,.... بشود

*به زبان ساده* ایستگاه درخواست می کند که اطلاعاتش را بفرستد و سرور هم می گوید بفرست آماده  دریافت هستم و در مکانیسم  Multi-Threaded  می تواند همزمان به چند ایستگاه بگوید بفرستید و هر کدام که تمام شد ارتباط را می بندد تا یک ایستگاه  دیگر امکان برقراری ارتباط داشته باشد.

حالا اگر نیاز داشته  باشی به  صورت آنی و حجم زیاد اطلاعات بفرستی باید روشی پیداکنی که  در طرف ایستگاه  امکان Multi-Threaded  برای درخواست پیاده سازی شود , که آسان نیست. 

یک مثال میزنم : اگر دقت کنی بعضی وقتها به یک سایت که مراجعه می کنی به علت ترافیک بالا سایت صفحه سایت را نمیتوانی ببینی و بعدها باید مراجعه کنی (معمولا پیغام  Bad Request )  و یکی از روشهای از کار انداختن یک سرور اینترنتی هم که  به آن حمله می کنند همین ارسال درخواست های زیاد همزمان است.

این مشکل را در سایتهای بزرگ مثل گوگل و .... نمی بینی. علت : استفاده  از سرورهای قوی و Chain
به هم متصل هستند و بار اضافی یکی را دیگری پاسخ میدهد و  اینکه با توجه به نیازی که در پاسخگویی دارند مرتب سرورها را بهینه می کنند و افزایش می دهند.

بنابراین این نتیجه گیری که خودت کردی درست است , می توان سیستم را توسعه داد که توانایی بیشتری داشته  باشد اما یک جایی دیگر حد پایانی است (با توجه به تکنولوژی موجود در همان زمان)  مگر اینکه شرکتی مثل گوگل باشد که از این  خدمات پول کلان در می آورد و مرتب هم سرمایه گذاری می کند. 

به هر حال اگر محدودیت سخت افزاری وجود نداشت هیچگاه لازم نبود CPU  چند هسته ای تولید شود , هیچگاه لازم نبود برای ارتباط شبکه موبایل بعد از GPRS  مثلا UMTS  بیاید و  یا  HSDPA و  بقیه روشهایی که در آینده خواهد آمد.  




> من قصدم این بود که سیستمی باشه که به طور مثال توی نقشه واسش محدوده ای تعریف کنیم به اسم طرح ترافیک بعد هر خودرویی که واردش میشه واسش اخطار بفرسته و یا واسش جریمه صادر کنه (روی خودرو گیرنده مورد نظر نصب شده ) .... و این به تعداد میلیونی در سطح یک شهر یا کشور اجرا بشه
> 
> یا مثلا بیایم یک سری خیابون و بزرگراه رو واسشون حد سرعت تعیین کنیم توی برنامه و از اونطرف هم روی خودرو ها علاوه بر گیرنده یه کروز کنترل(یا یه همچین چیزی) بذاریم که با گیرنده هم در ارتباط باشه و نذاره خودرو ها از اون حد مجاز سرعت بتونن بیشتر برن توی اون خیابون یا بزرگراه


این ایده خیلی جالبیه و عالیه که دید مهندسی خوبی داری و راه حل تکنولوژی برای مشکلات موجود بررسی می کنی.

اگر دولتی  بخواهد این پروژه را انجام  دهد باید یکسری مشکلات مختلف را قبلش حل کرده باشد:

- بحث زیر ساخت مخابراتی باید قوی باشد و این سرمایه گذاری زیادی می خواهد
- سازمانهای تصمیم گیرنده باید همکاری کنند مثلا نیروی انتظامی که *از راه خلاف کردن رانندگان  درآمد دارد* قطعا به نفعش نیست که چنین سیستمی خودکار سرعت ماشین را کاهش دهد و یا به هر نحوی از مکانیسم کنترل خیابانها کنار زده شود. 
- پروژه باید صد در صد درست کار کند , در صورتی که حتی یک بار بر اثر باگ نرم افزار یا هر چی  تغییر سرعت باعث تصادف یا کشته  شدن فردی شود پرونده آن پروژه برای همیشه بسته است. راننده می گوید من نبودم و ادمین سیستم می گوید خود راننده بود!!  
-بحث امنیتی دارد که در صورت بروز خرابکاری  می توان کل خودروها را از یک مرکز  متوقف کرد و در صورت نیاز خودروهای انتظامی یا امداد امکان وارد شدن به محدوده شهری را ندارند
-بحث استفاده از Jammer  هم که هست یعنی هر راننده ای که  بخواهد وارد محدوده شود jammer  را روشن می کند و دیگر در محدوده دیده نمی شود!

فرضا اگر مجری این طرح شهرداری یا دولت باشد خوب گروه تصمیم گیرنده میگویند چقدر هزینه دارد و چه مشکلی حل می شود  بعد می پرسند چه  راه حلهای دیگری برای حل مشکل می توان با همان هزینه پیاده سازی کرد.

مشکل طرح ترافیک حضور تعداد زیادی خودرو در یک محدوده کوچک شهری است  یک راه حل می تواند خرید ساختمانها و ساختن جاده بیشتر باشد , یا بردن ترافیک به زیر زمین مترو یا هر چی , یا کاهش تراکم در محدوده مثل انتقال شرکتها و ادارات به مناطق دیگر (طرحی که الان دولت دنبال می کند)  و ....  راه های دیگر که بنده  تخصص آن را  ندارم!

بنابراین از دید مشتری  که نگاه کنی  پیاده کردن چنین سیستمی رقبای دیگری  یا در حقیقت راه حلهای دیگری دارد که مشکل را ممکن است  حل کند.

----------

