به نام خدایی که فرمود “بقیه الله خیر لکم ان کنتم مومنین” : در این مطلب، ابتدا به بررسی ارتباط سریال بین میکرو و رزبری پای می پردازیم؛ در اول بحث، برنامه میکروکنترلر رو می نویسیم و تست می کنیم ( آموزش ساخت کوادکوپتر با رزبری پای قسمت 3 )
آموزش ساخت کوادکوپتر با رزبری پای قسمت 3
برنامه ما این بود ( برنامه سمت میکروکنترلر مگا32 با کدویژن – برا دانلود زیر گزنیه زیر کلیک کنید ):
مداری که بستیم این بود ( برای دیدن در اندازه اصلی کلیک کنید روی عکس ) :
عملکرد و توضیح کدها رو در ویدئو زیر ببینید : http://www.aparat.com/v/zYWVM
یه استراحت امنیتی هم داشته باشیم.
خواهشمندم ویدئو کوتاه مقابل رو ببینید : http://www.aparat.com/v/cAndD
طبق اظهارات آقای روحانی، 4 سال پیش، خبری از جنگ نبود؛ حال سوال این است که در این 4 سال گذشته چه اتفاقی افتاده که سایه جنگ برسر ما اومده؟ آیا ضعف و عقب نشینی، باعث ایجاد فضای جنگ شده؟ چرا در زمان دولت قبلی ( که انتقادات بسیاری بهش دارم ) که خشن ترین برخوردها رو با غرب داشت، سایه جنگ ایجاد نشد؟؟؟
حالا میریم سروقت رزبری ابتدا کنسول اپلیکیشن و بلوتوث رو غیر فعال می کنیم ( ملزومات ارتباط سریال )؛ برای غیر فعال کردن کنسول اپلیکیشن و بلوتوث، به مطلب مقابل مراجعه کنید : پروژه sim908 رزبری پای آموزش ارتباط سریال raspberry pi و برنامه زیر رو می نویسیم :
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 |
//g++ serialtest.cpp -o serialtest $(pkg-config --libs opencv) -lwiringPi #include <iostream> #include"wiringPi.h" #include"wiringSerial.h" #include <stdio.h> #include <string.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; char indata[200]={0},data[200]={0},send[200]={0}; char inchar=-1; char *star,*sharp; unsigned int pos =0; int speed1=30,speed2=30,speed3=30,speed4=30,allspeed=30; long int speed =0; int main(void) { namedWindow("speed",0); createTrackbar("motor1","speed",&speed1,99); createTrackbar("motor2","speed",&speed2,99); createTrackbar("motor3","speed",&speed3,99); createTrackbar("motor4","speed",&speed4,99); createTrackbar("all","speed",&allspeed,99); int fd; cout<<"wiringserial test"<<endl; wiringPiSetup(); fd=serialOpen("/dev/ttyAMA0",9600); delay(1); serialPuts(fd,"*20202020#"); delay(1); serialPuts(fd,"*20202020#"); delay(1); serialPuts(fd,"*20202020#"); delay(1); serialPuts(fd,"*20202020#"); delay(1); while(waitKey(5)<3){ if(serialDataAvail(fd)) { speed=speed4*1000000+speed3*10000+speed2*100+speed1; inchar=serialGetchar(fd); indata[pos]=inchar; pos++; star=strchr(indata,'*'); if(star) strncpy(data,star,7); sharp=strchr(indata,'#'); if(sharp) { if(data[0]=='*' & data[6]=='#') { sprintf(send,"*%u#",speed); serialPuts(fd,send); pos=0; sprintf(indata," "); sprintf(data," "); } else { cout<<"not valid"<<endl; pos=0; sprintf(indata," "); sprintf(data," "); } } } } serialClose(fd); return 0; } |
تشریح کد بالا : http://www.aparat.com/v/E5LcG
یه موضوع دیگه می مونه، اون هم کالیبره کردن اسپید کنترلر ها.
یه توصیه : بهتره زاویه سنجی رو هم توسط میکروکنترلر انجام بدیم چون امکان هر گونه قعطی یا نویز در ارتباط بین میکروکنترلر و رزبری وجود داره؛ اینجوری فقط دستورات کنترلی مثل بالا پایین و حرکت در 4 جهت و چرخش رو با رزبری اعمال می کنیم؛ در اینصورت، کاربرد رزبری در کواد ما فقط محدود میشه به کنترل و مشاهده دوربین.
متاسفانه به چند دلیل زیر، امکان ادامه این مطلب تا چند ماه آینده میسر نیست :
- وسایل قرضی بود و پسشون دادم باید صبر کنم و دوباره ازش بگیرم.
- مشکل مالی برای ادامه این آموزش وقت گیر.
- قیمت بسیار ارزان کوادکوپتر های آماده مشابه!!! ( کمتر از نصف )
جهت هر چه مستحکم تر شدن مقام ولایت فقیه و ظهور بابای خوبمون مهدی (عج) صلوات
مهمان
سلام ، برای این پروژه تا همین قسمت چند درصد کار انجام شده ؟
نویسنده این مطلب
تقریبا هیچ!!!
وقتی نتونیم موتور ها رو درست کنترل کنیم،بقیه کارها بی فایده است.(در مطلب هم نوشتم که به دلیل نویز عجیب در خروجی رزبری،به جایی نرسیدیم.)
مهمان
سلام من ی کد ساده با pwm نوشتم که با ترک بار کنترل کنم وقتی رو رسبری کامپایل میکنم رسبری نمیکشه و خاموش میکنه ی نمونه هم حتی از اینترنت گرفتم اونم زدم خاموش کرد به رسبری هم هیچی وصل نکردم :
#include
#include
#include
#include
using namespace std;
using namespace cv;
int slider = 20;
int slider_max = 1023;
int main(void)
{
wiringPiSetup();
pinMode(1,PWM_OUTPUT);
namedWindow(“MOTOR_SPEED”, 0);
createTrackbar(“SPEED 1_1024”, “MOTOR_SPEED”, &slider,slider_max);
while(waitKey(33)!=27)
{
pwmWrite (1,slider);
delay(1);
}//while
destroyAllWindows();
return 0;
}
نویسنده این مطلب
سلام
۱٫تو مرحله کامپایل خاموش میشه؟
۲٫pwm خالی (بدون ترک بار)هم که استفاده می کنید،خاموش میشه؟
۳٫ترک بار خالی هم که استفاده می کنید،خاموش میشه؟
۴٫آمپر خروجی آداپتورتون چنده؟
۵٫کد کاملتون رو یه جایی آپلود کنید تا امتحان کنم.
مهمان
کلا زمانی که pwm رو میزدم و برنامه رو کامپایل میکردم خاموش میشد که با اضافه کردن یک sudo به اولش یعنی ./sudo A دیگه خاموش نشد منتها زمانی که این کتاب خونه اضاف میشه حتی یک عکس ساده هم نمایش نمیده و پنجره بدون ترک بار و خالی برام باز میشه
آدرس برنامه تو drop box :
https://www.dropbox.com/s/zz8gxkss5hoo7yh/pwm_trackbar.cpp.txt?dl=0
نویسنده این مطلب
سلام
برنامه رو به صورت زیر تفییر دادم جواب داد.(نسخه opencv بنده ۲٫۴ هست)
http://s9.picofile.com/file/8303129676/pwm.cpp.html
برنامه تون مشکلاتی داشت.یکیشو که متوجه شدم،آکولاد تابع main فراموش شده.
مهمان
سلام.آقا من یه مشکلی دارم …. اونم اینه که وقتی یه برنامه ای رو مینوسم تو رسپری میخوام که این برنامه پس از خاموش روشن شدن رسپری دوباره اجرا بشه بدون اینکه نیاز باشه که بری تو ترمینال و اون برنامه رودوباره فراخوانی و یا کامپایل کنی راهش چیه؟اگه منظورمو بخوام واضح تر بگم اینه که من میخوام رسپری من مثل یه میکروکنترلرباشه که بعد از وصل کردن به منبع تغذیه بدون هیچ کاری برنامه ای که قبلا توش کامپایل شده رو انجام بده …
نویسنده این مطلب
سلام
دو تا راه می شناسم
۱٫Bare SBC
که یعنی استفاده از رزبری بدون سیستم عامل
۲٫گذاشتن نرم افزار مورد نظر،در لیست startup
مهمان
میشه یه مقدار باجزئیات بیشتری توضیح بدید..
نویسنده این مطلب
Startup مثل اجرای یه نرم افزار هنگام بالا اومدن ویندوزه.رزبین هم یه سیستم عامله پس میشه یه نرم افزار رو موقع بالا اومدن اجرا کرد.
.تو گوگل سرچ بفرمایید:
How to autostart application at raspbian
اون مدل بدون سیستم عامل رو تاحالا کار نکردم.الان هم رزبری ندارم تا امتحان کنم.
نویسنده این مطلب
روش بدون سیستم هامل،همون bare… هست که متاسفانه کار نکردم
مهمان
سلام آقای اسلامی خسته نباشید
و همچنین آقای دمرچیلو
با نامردی تعرفه های روستاهارو قطع کردن که بماند
مردمم که قشنگ جواب خون شهدا دادن رفت
گند زدن به ریاست جمهوری خدا این چهار سال به خیر بگذرونه
و اما سوال پردازش موازی جز رزبزی تو میکرو هایی مثل avr و arm امکان پذیره من قبلا یه جا arm دیدیم
نویسنده این مطلب
سلام
با احترام،لطفا به رای مردم،احترام بگذارید.دلیل نمیشه که مسائلی که برای من و شما مهمه،برای بقیه هم مهم باشه.
و دیگه اینکه،احتمال تقلب جزئی وجود داره ولی اختلاف زیادی در نتایج ایجاد نمی کنه.
خون شهدا رو ما نمی تونیم جواب بدیم (حساب شهدا با خداست)
هرچه دلت خواست،نه آن می شود…هرچه خدا خواست همان می شود.
نظرتون رو جلب می کنم به صحیفه امام ره:
” دموکراسی این است که آراء اکثریت، و آنهم اینطور اکثریت معتبر است. اکثریت هرچه گفتند آرای ایشان معتبر است ولو به ضرر خودشان باشد!”
صحیفه امام جلد ۹ ص ۳۰۴
*******
درباره پردازش موازی،بل وقفه تایمر میشه اینو روی میکرو هم پیاده کرد.
یعنی با فرکانس دلخواه،وقفه تایمر فراخوانی بشه و چند برنامه به صورت همزمان اجرا بشه.
اطلاع ندارم که راه دیگه ای هست یا خیر.
مهمان
جواب خون شهدا تتلو با اون خالکوبیاش بود؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

مدیر سایت
اینو ببین فعلا : —
مهمان
سلام . مطالبتون خیلی خوبه من تا اینجا دنبال میکردم و برام بسیار جذاب بود. وقتی گفتید دیگه تا چند ماه قراره ادامه ندید واقعا دلسرد شدم.
تجربه شخصی م میگه هیچ وقت از تلاش دست بر ندار
به امید موفقیت شما دوست عزیز
نویسنده این مطلب
سلام
متاسفانه وسایل همه متعق به دوستم بود.
و الان ۱۲۰۰ کیلومتر ازش دورم.خودم هم خیلی خیلی مشتاق بودم تا تمومش کنم ولی قسمت نشد.
به امید خدا،اگر شرایط جور بود،درسش که نموم شد،وسایل رو ازش می گیرم و ادامه می دم.
به امید موفقیت همه مردم ایران…
مهمان
زود باش زود باش,این حرفای بیخود رو که گذاشتی صفحه اصلی پاک کن,مگه شبکه خبر نگاه نمیکنی؟
مدیر سایت
مودب باش.