رباتیک و هوافضا

پروژه ی ساخت یک ریموت کنترل ۲٫۴ گیگا هرتز برای ۱۰ کانال

به نام خدا

پروژه ی ساخت یک ریموت کنترل ۲٫۴ گیگا هرتز برای ۱۰ کانال

در این پروژه قصد داریم تا یک ریموت کنترل ده کاناله در پهنای باند مورد استفاده ی صنعتی ، علمی و پزشکی بسازیم. این ریموت کنترل از ده میکروسوئیچ تشکیل شده است که از هر کدام از آن ها می توان برای مقاصدی استفاده کرد. هر کدام از این میکرو سوئیچ ها یک رله را در گیرنده ی سیستم کنترل می کنند. با استفاده از منبع تغذیه ی ۹ ولتی این سیستم قابل حمل خواهد بود. قلب این پروژه ماژول NRF24L01  می باشد که در خود هم گیرنده دارد و هم فرستنده. این ماژول امکان ارتباط بین دو آردوینو را فراهم می سازد. هنگامی که یک میکروسوئیچ فشرده شود ال ای دی جهت اطلاع روشن خواهد شد. همچنین هنگامی که یک سیگنال ارسالی دریافت شود ال ای دی نیز روشن می شود.

 

 

شماتیک مدار و اتصالات آن :

تصویر بالا شماتیک کامل مدار است. همچنین کتابخانه ی NRF24L01  را نیز می توانید از لینک زیر دانلود کنید.

دانلود فایل

 

کد برنامه فرستنده:

#include <RF24.h>
#include<SPI.h>
RF24 radio(9,10);
const byte address[][6] = {"00001", "00002"};
const int ip1 = 2;
const int ip2 = 3;
const int ip3 = 4;
const int ip4 = 5;
const int ip5 = 6;
const int ip6 = 7;
const int ip7 = 8;
const int ip8 = A0;
const int ip9 = A1;
const int ip10 = A2;
const int buzzer = A3;
char buzzchar[32] = "";
const char constbuzzer[32] = "buzz";
const char button1[32] = "activate_1";
const char button2[32] = "activate_2";
const char button3[32] = "activate_3";
const char button4[32] = "activate_4";
const char button5[32] = "activate_5";
const char button6[32] = "activate_6";
const char button7[32] = "activate_7";
const char button8[32] = "activate_8";
const char button9[32] = "activate_9";
const char button10[32] = "activate_10";
void setup()
{
pinMode(ip1, INPUT);
pinMode(ip2, INPUT);
pinMode(ip3, INPUT);
pinMode(ip4, INPUT);
pinMode(ip5, INPUT);
pinMode(ip6, INPUT);
pinMode(ip7, INPUT);
pinMode(ip8, INPUT);
pinMode(ip9, INPUT);
pinMode(ip10, INPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(ip1, HIGH);
digitalWrite(ip2, HIGH);
digitalWrite(ip3, HIGH);
digitalWrite(ip4, HIGH);
digitalWrite(ip5, HIGH);
digitalWrite(ip6, HIGH);
digitalWrite(ip7, HIGH);
digitalWrite(ip8, HIGH);
digitalWrite(ip9, HIGH);
digitalWrite(ip10, HIGH);
radio.begin();
radio.openWritingPipe(address[1]);
radio.openReadingPipe(1, address[0]);
radio.setChannel(100);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
}
void loop()
{
if(digitalRead(ip1) == LOW)
{
radio.write(&button1, sizeof(button1));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip2) == LOW)
{
radio.write(&button2, sizeof(button2));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip3) == LOW)
{
radio.write(&button3, sizeof(button3));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip4) == LOW)
{
radio.write(&button4, sizeof(button4));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip5) == LOW)
{
radio.write(&button5, sizeof(button5));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip6) == LOW)
{
radio.write(&button6, sizeof(button6));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip7) == LOW)
{
radio.write(&button7, sizeof(button7));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip8) == LOW)
{
radio.write(&button8, sizeof(button8));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip9) == LOW)
{
radio.write(&button9, sizeof(button9));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
if(digitalRead(ip10) == LOW)
{
radio.write(&button10, sizeof(button10));
radio.startListening();
while(!radio.available());
radio.read(&buzzchar, sizeof(buzzchar));
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
radio.stopListening();
}
}

 

بیشتر بخوانید...  راه اندازی جوی استیک دو محوره با AVR

 

گیرنده:

قسمت گیرنده شامل آردوینو می شود  اگر ده کانال یا ده عمل متفاومت مورد نظر باید از ۱۰ عدد مقاومت ۳۳۰ اهمی که جهت محدود کردن جریان به کار می رود استفاده کنید. همچنین از ۱۰ ترانزیستور و ۱۰ رله نیز باید استفاده کنید. منبع تغذیه باید توانایی تهییه حداقل یک آمپر جریان برا داشته باشد.

 

 

 

 

شماتیک مدار:

 

 

 

در تصویر بالا شماتیک مدار گیرنده را مشاهده می کنید . همچنین در زیر پین های خروجی و ورودی آورده شده است:

خروجی – پین آردوینو

PIN 2 – OUTPUT 1
PIN 3 – OUTPUT 2
PIN 4 – OUTPUT 3
PIN 5 – OUTPUT 4
PIN 6 – OUTPUT 5
PIN 7 – OUTPUT 6
PIN 8 – OUTPUT 7
PIN A0 – OUTPUT 8
PIN A1 – OUTPUT 9
PIN A2 – OUTPUT 10

نمای قسمت رله:

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

 

 

کد برنامه ی گیرنده:

دانلود فایل
#include <RF24.h>
#include<SPI.h>
RF24 radio(9,10);
const byte address[][6] = {"00001", "00002"};
const int op1 = 2;
const int op2 = 3;
const int op3 = 4;
const int op4 = 5;
const int op5 = 6;
const int op6 = 7;
const int op7 = 8;
const int op8 = A0;
const int op9 = A1;
const int op10 = A2;
const char buzzer[32] = "buzz";
char buttonstate[32] = "";
const char button1[32] = "activate_1";
const char button2[32] = "activate_2";
const char button3[32] = "activate_3";
const char button4[32] = "activate_4";
const char button5[32] = "activate_5";
const char button6[32] = "activate_6";
const char button7[32] = "activate_7";
const char button8[32] = "activate_8";
const char button9[32] = "activate_9";
const char button10[32] = "activate_10";
boolean status1 = false;
boolean status2 = false;
boolean status3 = false;
boolean status4 = false;
boolean status5 = false;
boolean status6 = false;
boolean status7 = false;
boolean status8 = false;
boolean status9 = false;
boolean status10 = false;
void setup()
{
Serial.begin(9600);
pinMode(op1, OUTPUT);
pinMode(op2, OUTPUT);
pinMode(op3, OUTPUT);
pinMode(op4, OUTPUT);
pinMode(op5, OUTPUT);
pinMode(op6, OUTPUT);
pinMode(op7, OUTPUT);
pinMode(op8, OUTPUT);
pinMode(op9, OUTPUT);
pinMode(op10, OUTPUT);
radio.begin();
radio.openReadingPipe(1, address[1]);
radio.openWritingPipe(address[0]);
radio.setChannel(100);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
}
void loop()
{
while(!radio.available());
radio.read(&buttonstate, sizeof(buttonstate));
Serial.println(buttonstate);
if((strcmp(buttonstate,button1) == 0) &&  status1 == false)
{
digitalWrite(op1, HIGH);
status1 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button1) == 0) && status1 == true)
{
digitalWrite(op1, LOW);
status1 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button2) == 0) &&  status2 == false)
{
digitalWrite(op2, HIGH);
status2 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button2) == 0) && status2 == true)
{
digitalWrite(op2, LOW);
status2 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button3) == 0) &&  status3 == false)
{
digitalWrite(op3, HIGH);
status3 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button3) == 0) && status3 == true)
{
digitalWrite(op3, LOW);
status3 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button4) == 0) &&  status4 == false)
{
digitalWrite(op4, HIGH);
status4 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button4) == 0) && status4 == true)
{
digitalWrite(op4, LOW);
status4 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button5) == 0) &&  status5 == false)
{
digitalWrite(op5, HIGH);
status5 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button5) == 0) && status5 == true)
{
digitalWrite(op5, LOW);
status5 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button6) == 0) &&  status6 == false)
{
digitalWrite(op6, HIGH);
status6 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button6) == 0) && status6 == true)
{
digitalWrite(op6, LOW);
status6 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button7) == 0) &&  status7 == false)
{
digitalWrite(op7, HIGH);
status7 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button7) == 0) && status7 == true)
{
digitalWrite(op7, LOW);
status7 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button8) == 0) &&  status8 == false)
{
digitalWrite(op8, HIGH);
status8 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button8) == 0) && status8 == true)
{
digitalWrite(op8, LOW);
status8 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button9) == 0) &&  status9 == false)
{
digitalWrite(op9, HIGH);
status9 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button9) == 0) && status9 == true)
{
digitalWrite(op9, LOW);
status9 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button10) == 0) &&  status10 == false)
{
digitalWrite(op10, HIGH);
status10 = true;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
else if((strcmp(buttonstate,button10) == 0) && status10 == true)
{
digitalWrite(op10, LOW);
status10 = false;
radio.stopListening();
for(int i = 0; i < 10; i++)
{
radio.write(&buzzer, sizeof(buzzer));
delay(10);
}
radio.startListening();
}
}

 

بیشتر بخوانید...  ساخت سیستم هشدار درب با استفاده از آردوینو و سنسور آلتراسونیک

دیدگاه‌ها (24)

پاسخ دادن به محمدرضا لغو پاسخ

*
*

    علیرضا مهمان مرداد 1, 1397 پاسخ

    سلام کد مدار فرستنده نیست اگه میشه لطف کنید بزارید

      Admin مدیر کل آبان 14, 1399 پاسخ

      سلام. اصلاح شد و کد برنامه فرستنده گذاشته شد

    محمدرضا مهمان آذر 12, 1398 پاسخ

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

      Admin مدیر کل آبان 14, 1399 پاسخ

      سلام. اصلاح شد و کد برنامه فرستنده گذاشته شد

    hamid مهمان تیر 7, 1399 پاسخ

    سلام تو قسمت یکی مونده به اخر(قبل از کد برنامه ی گیرنده) چجوری باید رله رو به برد متصل کنم تا جواب بده؟؟
    از سمته مقاومت باید صورت بگیره؟

      Admin مدیر کل آبان 14, 1399 پاسخ

      پایه های تحریک رله رو یکی به 9 ولت یکی رو هم به پایه کلکتور ترانزیستور.... اگرم رله 5 ولت داشتید به جای 9 ولت به 5 ولت وصل کنید

      محمد مهمان شهریور 20, 1400 پاسخ

      برای جلوگیری از تداخل ریموت های فرستنده مثلا اگه دو تا فرستنده داشته باشیم چجوری میشه ؟

        Admin مدیر کل شهریور 21, 1400 پاسخ

        باید کتابخونه رو دستکاری کنید

          محمد مهمان مهر 14, 1400 پاسخ

          چجوری میشه کتابخونه را دستکاری کرد؟

            Admin مدیر کل آبان 21, 1400

            برای دستکاری کتابخونه باید توی کد نویسی مهارت داشته باشید.... روش خاصی نداره، بازش کنید و تغییراتی که میخواید رو اعمال کنید...

    hamid مهمان تیر 7, 1399 پاسخ

    بعد اون خط چین ها مربوط به چیه ؟؟
    _ _ _ _
    وسایل مورد نیاز تو این مرحله رله۹v مقاومت ۳۳۰ اهم و ترانزیستور BC548 هست فقط دیگه؟؟

      Admin مدیر کل آبان 14, 1399 پاسخ

      علاوه بر این ها توی مدار فرستنده یه تعداد میکروسوئیچ میخواید البته برد آردوینو هم یادتون نره. ماژول فرستنده گیرنده هم که nrf24l01 هست. به جای رله 9 ولت از 5 ولت هم میتونی استفاد کنی منتهی به جای اتصال به 9 ولت به 5 ولت وصلش کن

    hamid مهمان تیر 7, 1399 پاسخ

    لطفا یه توضیحی درباره اون قسمت بدین برای ما تازه وارد ها.

      Admin مدیر کل آبان 14, 1399 پاسخ

      خط چین ها چیز خاصی نیست.. میتونی پایه 9 ولتشون رو به هم وصل کنی

    ابوالفضل مهمان آبان 14, 1399 پاسخ

    سلام کدوم فایلو اپلود کنم

      Admin مدیر کل آبان 14, 1399 پاسخ

      برنامه فرستنده و گیرنده که نوشته رو آپلود کنید. کتابخونه رو هم به کتابخونه آردوینو اضاف کنید

    محمد مهمان دی 18, 1399 پاسخ

    سلام بسیارعالی و ممنون
    آیا امکان استفاده هم زمان از چند خروجی در این برنامه هست یا نه ؟

      Admin مدیر کل دی 21, 1399 پاسخ

      سلام... خواهش میکنم
      ممنون
      بله امکان استفاده چند خروجی وجود داره

    parviz مهمان بهمن 5, 1399 پاسخ

    با سلام
    خسته نباشید .کدهای گیرنده به Arduino uno آپلود نشد خطا دادن مشکل از کجاست ممنون میشم کمک کنید.با تشکر

      Admin مدیر کل شهریور 21, 1400 پاسخ

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

    مهدی مهمان خرداد 2, 1400 پاسخ

    سلام
    ممنون از سایت خوب و عالی تون
    میخواستم بدونم میشه وسایلی رو که میخوام به کیرنده مستقیم متصل کنیم مثلا یه آرمیچر رو مستقیم به گیرنده متصل کرد اگه میشه که هیچ اگه نمیشه یه توضیحی میدید
    با تشکر

      Admin مدیر کل شهریور 21, 1400 پاسخ

      سلام
      خیلی ممنون
      میتونی به آرمیچر وصل کنی ولی مستقیم نه.... یه درایور واسه آرمیچر باید بذاری، حالا یا ترانزیستور یا ماسفت بذار یا از آی سی هایی مثل L293 استفاده کن.... اگرم میخوای سرعتش رو کم و زیاد کنید از PWM باید استفاده کنی..... توی محصولاتمون بری پروژه رادیوکنترل هست

    محمد مهمان آبان 20, 1400 پاسخ

    سلام ببخشید این مدار بردش چقدره و اینکه میشه ازش برای کنترل ماشین rc استفاده کرد؟

      Admin مدیر کل آبان 21, 1400 پاسخ

      سلام بستگی به نوع ماژول nrf که روش میذارید از 100 متر تا یک کیلومتر، بله واسه ماشین rc هم میشه منتهی یه سری تغییرات باید توی کد ایجاد کنید.....