به نام خالق عزم و اختیار : به امید خدا، در آموزش قصد داریم یه کوادکوپتر رو با رزبری پای راه اندازی کنیم ( آموزش ساخت کوادکوپتر با رزبری پای قسمت 1 )
آموزش ساخت کوادکوپتر با رزبری پای قسمت 1
امکانات کوادکوپتر با رزبری پای
- کنترل با کامپیوتر و ارتباط با یک مودم وای فای ( می خواستم ارزون در بیاد!!! )
- امکان مشاهده آنلاین تصاویر دوربین نصب شده روی کوادکوپتر.
- کنترلر پرواز ( flight controller ) ساخت خودمون!! ( امان از بی پولی! )
تجهیزات مورد نیاز ساخت کوادکوپتر با رزبری پای
- رزبری پای 3 (در صورت استفاده از رزبری 2، نیاز به یک دانگل وای فای خواهید داشت و احتمالا نتونید مشاهده آنلاین دوربین داشته باشید )
- فریم کوادکوپتر و 4 عدد موتور براشلس و اسپید کنترلرهای مناسب موتور ها و ملخ مناسب
- یه باتری 3 سلولی لیتیوم پلیمر، به همراه شارژرش ( ظرفیت باتری و وزنش، باید متناسب با جریان مصرفی و قدرت موتور ها باشه )
- دوربین رزبری پای به همراه کابل مخصوصش
- سنسور ژیروسکوپ و شتاب سنج MPU6050 ( در غالب ماژل GY-21 )
- رگولاتور برای تغذیه بورد به اضافه یه مشت سیم و کانکتور و پیچ و …
در ادامه، در بخش اول این مطلب، نحوه راه اندازی موتور ها رو بررسی می کنیم، و در بخش دوم، به نحوه سنجش زاویه با ماژولمون می پردازیم.
آموزش راه اندازی موتور براشلس با رزبری پای
بخش اول: باتری و موتور کوادکوپتر
ما از باتری 3 سلولی لیتیوم پلیمر 5000 میلی آمپرساعت، با ظریب تخلیه 55c استفاده کردیم ( وزنش 420 گرمه!! که تا الان که دارم این مطلب رو می نویسم، مطمئن نیستم که موتورا زورشون برسه این باتری رو بلند کنن!!! )؛ ما برای کندن کواد از زمین و پرواز موفقش از یه بسته کامل پروازی، شامل 4 تا موتور و 4تا اسپید کنترلر و 4 تا ملخ استفاده کردیم؛ که طبق دیتاشیت،می تونن 800 تا 1000 گرم رو به پرواز در بیارن.
موتور ما 3 سیمه است؛ اونو به خروجی اسپید کنترلر وصل می کنیم؛ اسپید کنترلر علاوه بر 3 خروجی، دارای 4 سیم ورودیه که دوتاش برای اتصال به باتریه و دوتای دیگه هم برای اعمال پالس کنترلیه.
- سیم “نارنجی و مشکی” ( نازک تر )، برای اعمال پالس کنترلیه و سیم “قرمز و مشکی” ( زخیم تر ) به قطب مثبت و منفی باتری وصل میشن.
- برای تست موتور و اسپید، تغذیه رو برقرار کردیم و به سیم های کنترلی، سیگنال مربعی، با دیوتی سایکل 50% وصل کردیم.
- اسپید مورد استفاده ما، با تغییر فرکانس، سرعت موتورها رو تغییر میده، که در ویدئو زیر مشاهده می فرمایید :
- توجه داشته باشید که هنگام شروع، برای تنظیم اسپید کنترلر، باید فرکانس روی ماکزیمم باشد ( 600 هرتز ) و برای افزایش سرعت، باید فرکانس رو کاهش داد.
- تست رو با رزبری انجام میدیم؛ اتصالات زیر رو برقرار می کنیم؛ تغذیه بورد رزبری رو با ماژول lm2596 وصل کنید ( حداکثر 5.2 ولت )
http://www.aparat.com/v/6wAz7
برنامه زیر رو توی ترمینال رزبری پای بنویسید و کامپایل کنید :
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 |
//g++ motor.cpp -o motor -l wiringPi #include"stdio.h" #include"softPwm.h" #include"wiringPi.h" #include"iostream" using namespace std; main(){ int c=321; wiringPiSetup(); pinMode(1,PWM_OUTPUT); pwmSetMode(PWM_MODE_MS); pwmSetClock(320); pwmSetRange(100); pwmWrite(26,50); delay(5000); while(c<914) { delay(50); pwmSetClock(c); c++; cout<<c<<endl; } while(c>320) { delay(50); pwmSetClock(c); c--; } return 0; } |
نتیجه کد : http://www.aparat.com/v/RgYZL
فعلا فریم دم دستم نیست ( شکسته بود دادم یکی درستش کنه )، به امید خدا، بعدا یه فیلم به همراه پره اضافه می کنم.
هزینه این مطلب تا اینجای کار : 2 دقیقه تفکر،برای انتخاب بهترین گزینه ممکن برای ریاست جمهور اینده کشورمون!! ببینید چه مواردی براتون حیاتیه و کدوم کاندیدا می تونه این موارد رو برآورده کنه؟ کافیه سوابق کاندیداها رو بررسی بفرمایید.
آموزش راه اندازی زاویه سنج کوادکوپتر با رزبری پای
بخش دوم : زاویه سنجی
برای پایداری کوادکوپتر و کاهش احتمال واژگون شدن اون، از ماژول زاویه سنج استفاده می کنیم؛ ما از ماژول ارزون قیمت mpu6050 استفاده کردیم که دارای یه شتاب سنج سه محوره و یک ژیروسکوپ سه محوره و یه سنسور دما می باشد؛ ما همزمان از هر دو تکنیک بالا، برای سنجش دقیق زاویه استفاده کردیم؛ در مطالب قبلی، با استفاده از شتاب سنج، زاویه رو به دست آوردیم ولی به دلیل نویز پذیر بودن اون، مجبوریم از ژیروسکوپ هم در کنارش استفاده کنیم؛ برای آشنایی با زاویه سنجی ماژول mpu6050 به روش شتاب سنجی، به مطلب زیر مراجعه فرمایید : آموزش راه انداری پروتکول i2c رزبری پای
توجه بفرمایید که زاویه سنجی به روش شتاب سنج، با استفاده از تغییرات g ( شتاب گرانش زمین ) اندازه گیری می شود، که مقدار دقیقی داره ولی هنگام نوسان، نویز زیادی داره و همچنین زاویه سنجی به روش ژیروسکوپ، با استفاده از تغییرات زاویه در واحد زمان اندازه گیری می شود که مقدارش در شرایط ثابت تغییر می کند!!( دریافت مقدار زاویه ) ولی نویز پذیری بسیار کمتری دارد؛ برای همین ما از ترکیب این دو استفاده می کنیم؛ برای آگاهی دقیق تر، دو تا ویدئو زیر رو ببینید :
http://www.aparat.com/v/GmEhV
http://www.aparat.com/v/3Z4mf
کد زاویه سنجی برای کوادکوپتر :
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 |
//g++ angle.cpp -o angle -l wiringPi #include <stdio.h> #include <stdint.h> #include <wiringPi.h> #include <wiringPiI2C.h> #include <math.h> #include <time.h> #include <iostream> using namespace std; #define MPU6050_ACCEL_XOUT_H 0x3B #define MPU6050_ACCEL_XOUT_L 0x3C #define MPU6050_ACCEL_YOUT_H 0x3D #define MPU6050_ACCEL_YOUT_L 0x3E #define MPU6050_ACCEL_ZOUT_H 0x3F #define MPU6050_ACCEL_ZOUT_L 0x40 #define MPU6050_GYRO_XOUT_H 0x43 #define MPU6050_GYRO_XOUT_L 0x44 #define MPU6050_GYRO_YOUT_H 0x45 #define MPU6050_GYRO_YOUT_L 0x46 #define MPU6050_GYRO_ZOUT_H 0x47 #define MPU6050_GYRO_ZOUT_L 0x48 #define MPU6050_PWR_MGMT_1 0x6B #define MPU6050_I2C_ADDRESS 0x68 int main() { int fd = wiringPiI2CSetup(MPU6050_I2C_ADDRESS); if (fd == -1) return 0; wiringPiI2CWriteReg16(fd, MPU6050_PWR_MGMT_1,0); wiringPiI2CWriteReg16(fd, 0x1C,0x10); wiringPiI2CWriteReg16(fd, 0x1B,0x08); int16_t gx=0,gy=0,gz=0,ax=0,ay=0,az=0 ; int16_t gx1=0,gy1=0,gz1=0; float gxo=0.0,gyo=0.0,gzo=0.0,angle_pitch=0.0,angle_roll=0.0; int j=0,set_gyro_angle = 0 ; double starttime=0.0,endtime=0.0; double acc_total_vector=0.0,angle_pitch_acc=0.0,angle_roll_acc=0.0; for(j=0;j<2000;j++){ gxo += (wiringPiI2CReadReg8(fd, MPU6050_GYRO_XOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_GYRO_XOUT_L))/2000.0; gyo += (wiringPiI2CReadReg8(fd, MPU6050_GYRO_YOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_GYRO_YOUT_L))/2000.0; gzo += (wiringPiI2CReadReg8(fd, MPU6050_GYRO_ZOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_GYRO_ZOUT_L))/2000.0; delay(3); } gx1=gxo; gy1=gyo; gz1=gzo; cout<<"1"<<endl; while(1) { starttime = micros(); gx = (wiringPiI2CReadReg8(fd, MPU6050_GYRO_XOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_GYRO_XOUT_L)); - gx1 ; gy = (wiringPiI2CReadReg8(fd, MPU6050_GYRO_YOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_GYRO_YOUT_L )) - gy1 ; gz = (wiringPiI2CReadReg8(fd, MPU6050_GYRO_ZOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_GYRO_ZOUT_L)) - gz1 ; endtime = micros()-starttime; endtime/=(1000000.0*65.5); angle_pitch += gx * endtime* 90.0 / 87.0; angle_roll += gy * endtime * 90.0 / 87.0; angle_roll -= angle_pitch * sin(gz * (endtime * (3.142 / 180))) ; angle_pitch += angle_roll * sin(gz * (endtime * (3.142 / 180))) ; ax = wiringPiI2CReadReg8(fd, MPU6050_ACCEL_XOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_ACCEL_XOUT_L); ay = wiringPiI2CReadReg8(fd, MPU6050_ACCEL_YOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_ACCEL_YOUT_L ); az = wiringPiI2CReadReg8(fd, MPU6050_ACCEL_ZOUT_H ) << 8 |wiringPiI2CReadReg8(fd,MPU6050_ACCEL_ZOUT_L); acc_total_vector = 10 * sqrt(((ax/10)*(ax/10))+((ay/10)*(ay/10))+((az/10)*(az/10))); angle_pitch_acc = asin((float)ay/acc_total_vector)*57.296; angle_roll_acc = asin((float)ax/acc_total_vector)*(-57.296); cout<<"2"<<endl; if(set_gyro_angle == 1) { angle_roll = 0.9996 * angle_roll + 0.0004 * angle_roll_acc; angle_pitch = 0.9996 * angle_pitch + 0.0004 * angle_pitch_acc; } else { angle_roll = angle_roll_acc; angle_pitch = angle_pitch_acc; set_gyro_angle = 1; cout<<"first set"<<endl; } cout<<"3"<<endl; cout << "pitch-angle:" << angle_pitch << ",roll-angle:" << angle_roll <<endl; } return 0; } |
نتیجه زاویه سنجی : http://www.aparat.com/v/4daOw
به امید خدا، در مطلب بعدی، به بحث پردازش موازی ( Thread ) و آشکارسازی کلیدهای صفحه کلید می پردازیم.
کافیه که از غالب های معمول اصلاح طلب و اصول گرا خارج شد...تا بشه بهترین رئیس جمهور ممکن رو انتخاب کرد/غ چون کسی که با حمایت حزب و گروه رئیس بشه، فردا مجبوره محبت هم حزبیاش رو جبران کنه... و میشه همین وضعیتی که الان می بینیم!!!
مهمان
امام زمان پشتو پناهتون…
مهمان
سلام ممنون.
این قسمت از کد رومیشه یکی یکی توضیح بدید؟ که چیکار میکنه؟
pinMode(1,PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetClock(320);
pwmSetRange(100);
pwmWrite(26,50);
نویسنده این مطلب
سلام
1.پایه 1 رو به عنوان خروجی pwm تعریف می کنه
2.مد کاری pwm رو تعیین میکنه
3.کلاک pwm رو معلوم میکنه
4.ماکزیمم دیوتی سایکل رو 100 میذاره
5.احتمالا دیوتی سایکل رو 50 میذاره.
مهمان
ممنون از توضیحتان. فقط این قسمت آخر 26 برای چی بکار رفته؟
نویسنده این مطلب
برای اینکه اول برنامه اگر ماژول قطع بود،از برنامه خارج بشه
مهمان
سلام جناب واقعا ممنون از توضیحاته خوبتون. فقط یک سوال داشتم اونم اینکه چطوری با رزبری پای دور موتور معکوس میکنید؟
نویسنده این مطلب
سلام
دور چپ و راست موتور براشلس رو با رزبری تغییر ندادیم.
جای دوتا از سیم های موتور رو جابجا می کنیم.
مهمان
آموزش کاملیه و کاش ویدیو فارسی هم بود
مهمان
سلام و درود آقا مهدی، لطفا اگر ممکن است مشخصات کامل قطعات استفاده شده در پروژهRFIDرا بیان فرمائید.
RF01D
ATMEGA16
Wires
?
?
?
?
?متشکرم
و خدا قوت
نویسنده این مطلب
سلام
لطفا سوالتون رو در مطلب مربوطه اش بپرسید.
مهمان
سلام یکی از بهترین سایت های موجود در اینترنت رو دارید
کلا چند قیمتش میشه ؟
موفق باشید.
نویسنده این مطلب
سلام.به جز وقت زیاد،تا حالا نزدیک به ۸۵۰ هزار تومن خرج داشته.
هنوز هم به نتیجه دلخواه نرسیدیم!!!
آماده اش خیلی ارزون تره دردسر هم نداره.
ولی وقتی خودت بسازی،یه حال دیگه ای داره
الان تو کنترل موتورها،به مشکل خوردیم!!!
متوجه شدم که خروجی پایه های رزبری،نویز زیادی داره!!
به امید خدا،قصد داریم،کنترل موتورا رو با میکرو انجام بدیم و زاویه سنجی و دوربین و کنترل از راه دور رو با رزبری!!
****
اگر که یه دوربین جدا بخرید یا اصلا دوربین نخواید،با میکرو ارزون تره و حدودا ۲۳۰ تومن ارزون تر در میاد.
البته موتور و باتری و … هم انواع مختلف داره
مهمان
سلام.
رسپری پای چه؟
گرونه؟
به چه درد میخوره؟
نویسنده این مطلب
سلام
یه مینی کامپیوتره
از گوگل بپرسید…
مهمان
سلام
برد رزبری (یا به قولی رسپبری) یه برد هست که باهاش خیلی کارها میشه کرد، چیزی شبیه آردینو اما خب قوی تر، یه مقدار هم البته گرون تر که با این حال احتمالا در خیلی موارد به صرفه است باهاش کار کنید و طرفداراش هم داره دائم بیشتر میشه.
یه معرفی نسبتا کامل من توی دوره مقدماتیش توی دیجی آموز دیدم که اگه بخوای آشنا بشی و البته تا حدودی هم یاد بگیری و باهاش کار کنی، دوره خوبیه:
http://digiamooz.com/course/raspberry-basic
البته توی همین آدرس، یه تیزر داره که همون رو هم ببینی یه مقدار از توضیحات داخلش هست.
یک سری کتاب هم هست که می تونی راحت جست و جو و دانلود کنی. آموزش هایی هم به زبان انگلیسی هستن که اونا هم خوبن.
یه تعداد سایت دیگه هم هست که آموزش رو ویدئویی ارائه میده که البته من شخصا خودم اونا رو تجربه نکردم و برای همین صرفا دیجی آموز رو به طور مشخص معرفی می کنم.
البته کلاس هاش هم برگزار میشه که متأسفانه معمولا گرون هستن و احتمالا بهتره با آموزش های ویدئویی و جست و جو شروع کنی.
موفق باشی
مهمان
ببین مهدی جان دمیرچیلو بیا از اسمبل کردن قطعات آماده دست برداریم تهش خب آمادش بیرون هست با کارایی بهتر،من پیشنهادی اینه میتونیم موتور ها رو عوض کنیم همچنین ملخ ها ، فرض کن موتورات ۴۰۰ وات نیرو بدن نگران باتری و رزبری هم نباش برد خودمونو میسازیم