564.4K حجم رسانه بالاست
مشاهده در ایتا
🛰چگونه ماهوارهها نقشه کاملی از سطح زمین تهیه میکنند!؟
تکنو الکترونیک🔹
@Techno_Electronic
هدفش موفقیت خودش و تشکیلاتش نبود. حتی هدفش سربلندی سپاه و نیروی های مسلح ایران و خاورمیانه قدرتمند هم نبود. صاف و پوست کنده ، میخواست دشمنان قسم خورده اسلام جرئت نکنند به مسلمانان نگاه چپ بیندازند.
او کسی است که گفته بود : من اگر مُردم هم روی قبرم بنویسید ، اینجا مدفن کسی است که میخواست اسرائیل را نابود کند .
مدار رادیو کنترل به همراه کد که در زیر قرار میدهیم
نوشته شده توسط یه بنده خدا که دمش گرم
🔸تکنو الکترونیک
@Techno_Electronic
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN pin
const byte address[6] = "00001";
struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
byte aux1;
byte aux2;
};
Signal data;
void ResetData() {
data.throttle = 127;
data.pitch = 127;
data.roll = 127;
data.yaw = 127;
data.aux1 = 127;
data.aux2 = 127;
}
// map function
int mapJoystickValues(int val, int lower, int middle, int upper , bool reverse) {
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val ); // *255 صحیح*
}
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.stopListening();
ResetData();
}
void loop() {
// read analog input & map
data.throttle = mapJoystickValues( analogRead(A0), 12, 524, 1020, true );
data.roll = mapJoystickValues( analogRead(A3), 12, 524, 1020, true );
data.pitch = mapJoystickValues( analogRead(A2), 12, 524, 1020, true );
data.yaw = mapJoystickValues( analogRead(A1), 12, 524, 1020, true );
data.aux1 = mapJoystickValues( analogRead(A4), 12, 524, 1020, true );
data.aux2 = mapJoystickValues( analogRead(A5), 12, 524, 1020, true );
// debug print
Serial.print(data.throttle); Serial.print('\t');
Serial.print(data.roll); Serial.print('\t');
Serial.print(data.pitch); Serial.print('\t');
Serial.print(data.yaw); Serial.print('\t');
Serial.print(data.aux1); Serial.print('\t');
Serial.println(data.aux2);
// send
radio.write(&data, sizeof(Signal));
}
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
Servo ch1, ch2, ch3, ch4, ch5, ch6;
int ch_width_1, ch_width_2, ch_width_3, ch_width_4, ch_width_5, ch_width_6;
struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
byte aux1;
byte aux2;
};
Signal data;
// تعریف ماژول nRF24L01 (CE=7, CSN=8)
RF24 radio(7, 8);
const byte address[6] = "00001";
unsigned long lastRecvTime = 0;
void ResetData() {
data.roll = 127;
data.pitch = 127;
data.throttle = 127;
data.yaw = 127;
data.aux1 = 127;
data.aux2 = 127;
}
void recvData() {
if (radio.available()) {
radio.read(&data, sizeof(Signal));
lastRecvTime = millis();
}
}
void setup() {
Serial.begin(9600);
ch1.attach(2);
ch2.attach(3);
ch3.attach(4);
ch4.attach(5);
ch5.attach(6);
ch6.attach(9);
ResetData();
ch1.writeMicroseconds(1500);
ch2.writeMicroseconds(1500);
ch3.writeMicroseconds(1500);
ch4.writeMicroseconds(1500);
ch5.writeMicroseconds(1500);
ch6.writeMicroseconds(1500);
radio.begin();
radio.openReadingPipe(0, address);
radio.startListening();
}
void loop() {
recvData();
unsigned long now = millis();
if (now - lastRecvTime > 1000) {
ResetData();
}
ch_width_1 = map(data.roll, 0, 255, 1000, 2000);
ch_width_2 = map(data.pitch, 0, 255, 1000, 2000);
ch_width_3 = map(data.throttle, 0, 255, 1000, 2000);
ch_width_4 = map(data.yaw, 0, 255, 1000, 2000);
ch_width_5 = map(data.aux1, 0, 255, 1000, 2000);
ch_width_6 = map(data.aux2, 0, 255, 1000, 2000);
ch1.writeMicroseconds(ch_width_1);
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
ch5.writeMicroseconds(ch_width_5);
ch6.writeMicroseconds(ch_width_6);
Serial.print(ch_width_1); Serial.print('\t');
Serial.print(ch_width_2); Serial.print('\t');
Serial.print(ch_width_3); Serial.print('\t');
Serial.print(ch_width_4); Serial.print('\t');
Serial.print(ch_width_5); Serial.print('\t');
Serial.println(ch_width_6);
}
کد فرستنده (Transmitter – Tx)
این کد مربوط به دسته کنترل (فرستنده دستی) هستش.
وظیفه اصلی کد فرستنده اینه:
۱. خواندن مقدار جویاستیکها از پینهای آنالوگ
۲. تبدیل مقادیر 0–1023 به بازه 0–255
3. ساختن بسته داده شامل 6 کانال (Throttle, Roll, Pitch, Yaw, AUX1, AUX2)
4. ارسال وایرلس این دادهها از طریق nRF24L01
چیزی که دقیقاً انجام میده اینه:
خواندن جویاستیکها
هر جویاستیک روی یک محور، مقدار آنالوگ میده مثل:
A0 → throttle
A1 → yaw
A2 → pitch
A3 → roll
A4 → aux1
A5 → aux2
مثلاً:
data.throttle = mapJoystickValues( analogRead(A0), 12, 524, 1020, true );
یعنی مقدار جویاستیک گرفته میشه و به عدد 0–255 تبدیل میشه.
۲.تابع mapJoystickValues
این تابع کار زیر را میکنه:
محدوده جویاستیک رو به 0–255 تبدیل میکنه
نقطه وسط جویاستیک را 128 قرار میده
اگر سوراخ محور معکوسه، اونو برعکس میکنه
این دقیقاً همون کاری است که فرستندههای حرفهای RC انجام میدن.
۳. ارسال دادهها
radio.write(&data, sizeof(Signal));
دادههای ساختار Signal شامل 6 کانال، هر کدام یک بایت، ارسال میشه.
کد گیرنده (Receiver – Rx)
این کد روی هواپیما قرار میگیره و سیگنالهای کنترلی را دریافت و تبدیل به PWM جهت سرووها یا کنترلر موتور میکنه.
وظیفه اصلی کد گیرنده اینه:
۱. دریافت بسته داده از nRF24L01
۲. تبدیل هر مقدار (0–255) به پالس PWMاستاندارد (1000–2000µs)
ارسال پالسها به سرووها یا ESC
اگر سیگنال قطع شد → تمام کانالها به
نقطه امن (Failsafe) بروند
توضیح عملکرد بخشها
ساختار Signal
دقیقاً مشابه فرستنده هستش:
struct Signal { byte throttle; byte pitch; byte roll; byte yaw; byte aux1; byte aux2; };
تابع recvData
اگر پاکت دریافتی موجود باشد، اونو میخونه:
if (radio.available()) { radio.read(&data, sizeof(Signal)); lastRecvTime = millis(); }
۳. سیستم FailSafe
اگر بیش از ۱ ثانیه دادهای نیاد:
if (now - lastRecvTime > 1000) { ResetData(); }
یعنی همه کانالها روی مقدار وسط (127) قرار میگیرن.
این کار از سقوط هواپیما جلوگیری میکنه.
۴.تبدیل سیگنالها به پالس 1000–2000 میکروثانیه
ch_width_1 = map(data.roll, 0, 255, 1000, 2000);
این تبدیل دقیقاً همون فرم پالس استاندارد سروو و ESC هست.
۵. ارسال پالسها به سروو و ESC
ch1.writeMicroseconds(ch_width_1); ch2.writeMicroseconds(ch_width_2); ...
پس:
CH1 → Roll
CH2 → Pitch
CH3 → Throttle
CH4 → Yaw
CH5 → AUX1
CH6 → AUX2
جمعبندی عملکرد نهایی سیستم
فرستنده
مقدار جویاستیکها رو میخونه
اونا رو به 0–255 تبدیل میکنه
بسته رو از طریق nRF24L01 ارسال میکنه
گیرنده
بسته رو دریافت میکنه
اون رو از 0–255 به پالسهای 1000–2000µs تبدیل میکنه
به سرووها و ESC میده
اگه سیگنال قطع شه → failsafe فعال میشه و هواپیما امن میشه.
🔹تکنو الکترونیک
@Techno_Electronic
2.3M حجم رسانه بالاست
مشاهده در ایتا
یه کاربرد و استفاده جالب از موج سینوسی
🔸تکنو الکترونیک
@Techno_Electronic
سلام
چند روش برای کد گذاری مقدار مقاومت وجود داره
از جمله کد رنگی و عدد
اما دو روش کد گذاری دیگه هم وجود داره که با تصویر توضیح میدم