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

Summarize this content to 400 words in Persian Lang
حرکت شیب کیت PTZ ما توسط PWM کنترل می شود. در قسمت بعدی به بررسی مکانیک حرکت تابه خواهیم پرداخت.
در قسمت قبل توانستیم سروو را تا 180 درجه حرکت دهیم. ما آن کد را اصلاح می کنیم و تابعی ایجاد می کنیم که می تواند سرووی ما را به هر زاویه ای هدایت کند.
فهرست مطالب
الزامات
1 عدد تخته رزبری پیکو
1 عدد کابل USB نوع 2.0
1 عدد ماژول بلوتوث HC-05
1 عدد ماژول قطب نما HMC5833L
سیم بلوز 18 MM
2 عدد تخته نان کوچک
2 عدد سرو موتور SG90
1 عدد کیت PTZ
1 عدد ماژول GPS
پیاده سازی
هر دو سروو را در کیت PTZ ثابت کنید.
کیت ما محدود به حرکت از 0 درجه به 90 درجه خواهد بود. تنظیم به گونه ای خواهد بود که در 90 درجه قسمت شیب کیت رو به بالا و در 0 درجه به صورت عمودی قرار می گیرد. هنگام راه اندازی باید در 90 درجه برای اندازه گیری دقیق عنوان قطب نما باشد.
تصویر بالا کیت تابه را در زوایای مختلف نشان می دهد. خط نقطه چین خط دید دستگاه گیرنده دیش ماهواره را نشان می دهد.
نمودار اتصالات
لطفا توجه داشته باشید که سروو موتور در اینجا روی کیت PTZ نصب شده است.
توابع
ما از کدی استفاده خواهیم کرد sweep تابعی که برای مثال در قسمت قبل به همراه تمامی تغییرات معرفی شده یعنی import نوشتیم CH و راه اندازی delay.
ما اینها را در اطراف یک تابع دیگر قرار می دهیم tilt برای اجرای تمیزتر و کمک به استفاده مجدد از کد در آینده.
را tilt تابع می گیرد Direction و tilt_angle به عنوان استدلال و تضمین می کند که حرکت در محدوده 0 تا 90 درجه محدود می شود.
fn tilt(pwm: &CH, delay: &mut Delay, tilt_angle: &mut f32, direction: Direction) {
if *tilt_angle >= 0. && *tilt_angle <= 90. {
// valid movts only if angle within range
match direction {
Direction::Up => {
if *tilt_angle != 0. {// constrain angle within range
*tilt_angle -= 1.;// update tilt angle
position_kit_tilt(pwm, tilt_angle);
delay.delay_ms(1);// delay
}
},
Direction::Down => {
if *tilt_angle != 90. {// constrain angle within range
*tilt_angle += 1.;// update tilt angle
position_kit_tilt(pwm, tilt_angle);
delay.delay_ms(1);// delay
}
},
_ => {},
}
}
}
fn position_kit_tilt(pwm: &CH, tilt_angle: &mut f32) {
// facing up –> at 90 deg
// standing vertically –> 0 deg
pwm.sweep((90. – tilt_angle.round()) as u16);
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ما باید یک متغیر سراسری معرفی کنیم که زاویه شیب به روز شده را نگه می دارد.
static TILT: Mutex<RefCell<Option<f32>>> = Mutex::new(RefCell::new(None));
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
آن را مقداردهی اولیه کنید و در متغیر واقعی آپلود کنید. سیستم باید با قسمت شیب کیت رو به بالا شروع شود.
let mut tilt_angle = 90.; // initialize tilt angle i.e. kit facing up
position_tilt_kit(&pwm2, &mut tilt_angle);// start position of tilt
cortex_m::interrupt::free(|cs| {
TILT.borrow(cs).replace(Some(tilt_angle));
});
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
برنامه
اکنون می توانیم از PWM در کد برنامه خود استفاده کنیم.
در manual بخش کد برنامه، در زیر Up، خطوط زیر را اضافه کنید.
tilt(&pwm2, delay.as_mut().unwrap(), tilt_angle.as_mut().unwrap(), Direction::Up);
writeln!(&mut serialbuf, “tilt angle: {}”, tilt_angle.unwrap().round()).unwrap();
transmit_uart_data(uart_data.as_mut().unwrap(), serialbuf);
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
زیر Down:
tilt(&pwm2, delay.as_mut().unwrap(), tilt_angle.as_mut().unwrap(), Direction::Down);
writeln!(&mut serialbuf, “tilt angle: {}”, tilt_angle.unwrap().round()).unwrap();
transmit_uart_data(uart_data.as_mut().unwrap(), serialbuf);
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نتایج
با مرتب کردن مجدد کد، در نهایت به این نسخه نهایی می رسیم.
اگر آن را در Pico اجرا کنید، باید ببینید که کیت PTZ در هنگام روشن شدن رو به بالا است و بسته به دستورات داده شده از برنامه سریال بلوتوث، به سمت بالا یا پایین حرکت می کند.
بالا…
پایین…
در قسمت بعدی عملکرد پان را پیاده سازی می کنیم که پان سیستم را قادر می سازد تا با آن هماهنگ شود theta از زوایای نگاه ما
حرکت شیب کیت PTZ ما توسط PWM کنترل می شود. در قسمت بعدی به بررسی مکانیک حرکت تابه خواهیم پرداخت.
در قسمت قبل توانستیم سروو را تا 180 درجه حرکت دهیم. ما آن کد را اصلاح می کنیم و تابعی ایجاد می کنیم که می تواند سرووی ما را به هر زاویه ای هدایت کند.
فهرست مطالب
الزامات
- 1 عدد تخته رزبری پیکو
- 1 عدد کابل USB نوع 2.0
- 1 عدد ماژول بلوتوث HC-05
- 1 عدد ماژول قطب نما HMC5833L
- سیم بلوز 18 MM
- 2 عدد تخته نان کوچک
- 2 عدد سرو موتور SG90
- 1 عدد کیت PTZ
- 1 عدد ماژول GPS
پیاده سازی
هر دو سروو را در کیت PTZ ثابت کنید.
کیت ما محدود به حرکت از 0 درجه به 90 درجه خواهد بود. تنظیم به گونه ای خواهد بود که در 90 درجه قسمت شیب کیت رو به بالا و در 0 درجه به صورت عمودی قرار می گیرد. هنگام راه اندازی باید در 90 درجه برای اندازه گیری دقیق عنوان قطب نما باشد.
تصویر بالا کیت تابه را در زوایای مختلف نشان می دهد. خط نقطه چین خط دید دستگاه گیرنده دیش ماهواره را نشان می دهد.
نمودار اتصالات
لطفا توجه داشته باشید که سروو موتور در اینجا روی کیت PTZ نصب شده است.
توابع
ما از کدی استفاده خواهیم کرد sweep
تابعی که برای مثال در قسمت قبل به همراه تمامی تغییرات معرفی شده یعنی import نوشتیم CH
و راه اندازی delay
.
ما اینها را در اطراف یک تابع دیگر قرار می دهیم tilt
برای اجرای تمیزتر و کمک به استفاده مجدد از کد در آینده.
را tilt
تابع می گیرد Direction
و tilt_angle
به عنوان استدلال و تضمین می کند که حرکت در محدوده 0 تا 90 درجه محدود می شود.
fn tilt(pwm: &CH, delay: &mut Delay, tilt_angle: &mut f32, direction: Direction) {
if *tilt_angle >= 0. && *tilt_angle <= 90. {
// valid movts only if angle within range
match direction {
Direction::Up => {
if *tilt_angle != 0. {// constrain angle within range
*tilt_angle -= 1.;// update tilt angle
position_kit_tilt(pwm, tilt_angle);
delay.delay_ms(1);// delay
}
},
Direction::Down => {
if *tilt_angle != 90. {// constrain angle within range
*tilt_angle += 1.;// update tilt angle
position_kit_tilt(pwm, tilt_angle);
delay.delay_ms(1);// delay
}
},
_ => {},
}
}
}
fn position_kit_tilt(pwm: &CH, tilt_angle: &mut f32) {
// facing up --> at 90 deg
// standing vertically --> 0 deg
pwm.sweep((90. - tilt_angle.round()) as u16);
}
ما باید یک متغیر سراسری معرفی کنیم که زاویه شیب به روز شده را نگه می دارد.
static TILT: Mutex<RefCell<Option<f32>>> = Mutex::new(RefCell::new(None));
آن را مقداردهی اولیه کنید و در متغیر واقعی آپلود کنید. سیستم باید با قسمت شیب کیت رو به بالا شروع شود.
let mut tilt_angle = 90.; // initialize tilt angle i.e. kit facing up
position_tilt_kit(&pwm2, &mut tilt_angle);// start position of tilt
cortex_m::interrupt::free(|cs| {
TILT.borrow(cs).replace(Some(tilt_angle));
});
برنامه
اکنون می توانیم از PWM در کد برنامه خود استفاده کنیم.
در manual
بخش کد برنامه، در زیر Up
، خطوط زیر را اضافه کنید.
tilt(&pwm2, delay.as_mut().unwrap(), tilt_angle.as_mut().unwrap(), Direction::Up);
writeln!(&mut serialbuf, "tilt angle: {}", tilt_angle.unwrap().round()).unwrap();
transmit_uart_data(uart_data.as_mut().unwrap(), serialbuf);
زیر Down
:
tilt(&pwm2, delay.as_mut().unwrap(), tilt_angle.as_mut().unwrap(), Direction::Down);
writeln!(&mut serialbuf, "tilt angle: {}", tilt_angle.unwrap().round()).unwrap();
transmit_uart_data(uart_data.as_mut().unwrap(), serialbuf);
نتایج
با مرتب کردن مجدد کد، در نهایت به این نسخه نهایی می رسیم.
اگر آن را در Pico اجرا کنید، باید ببینید که کیت PTZ در هنگام روشن شدن رو به بالا است و بسته به دستورات داده شده از برنامه سریال بلوتوث، به سمت بالا یا پایین حرکت می کند.
بالا…
پایین…
در قسمت بعدی عملکرد پان را پیاده سازی می کنیم که پان سیستم را قادر می سازد تا با آن هماهنگ شود theta
از زوایای نگاه ما