آموزش

ساخت رادیو کنترلر و ریموت کنترل با NRF24 - بخش اول تست شبکه

بازدید85.7kپست ها4آخرین فعالیت4 سال پیش
2
3

بسم الله الرحمن الرحیم

توضیح تصویر

این ماژول ساخت شرکت نوردیک بوده و با فرکانس 2.4 و تکنولوژی GFSK کار میکند، همان تکنولوژی مورد استفاده در بلوتوث! البته بردش بسیار بالاتر از بلوتوث هست. نکته ای که راجب این ماژول در فضای اینترنت پر شده و درست هم هست اینه که ماژولها چینی هستن و اصلا برد نامی خودشون رو نمیتونن بدن و یه ماژول 12 هزار تومنی رو از eca میگیرید میبینید روش نوشته 100 متر برد ولی در عمل تو فضای باز با خازن موازی و... 50-60 متر هم بهتون برد نمیده! ولی مثلا یه 100 هزار تومنی تایوانیش تا 1000 متر هم ممکن هست در شرایط ایده ال بهتون برد بده. پس در خرید ماژول دقت کنید و جنس اصل رو خریداری کنید اگر برد و کیفیت کار براتون مهم هست وگرنه دو تا 10 تومنیش هم برای روشن/خاموش کردن 4 تا رله و یه ماشین کنترلی و... از چند ده متری کافیه.
دیتا ریت جنس اصلش تا 2 مگابیت هم میرسه و حتی دیده شده ویدئو میفرستن باهاش! ولی دردسر های خودشم داره.

برخی مشخصات:

دیتا ریت: ۲ مگا بیت بر ثانیه

جریان مصرفی: آماده باش 22 میکرو آمپر - دریافت دیتا با ۲ مگا بیت بر ثانیه ۱۲٫۳ میلی آمپر(بسیار کم مصرف)

ولتاژ تغذیه: 1.9 تا 3.6 ولت(اصلا بالای 3.6 ولت رو امتحان نکنید که مثل من چیپ میسوزونید)

۶ لوله دیتا MULTICEIVER برای ارتباط چند ماژول به هم و ایجاد شبکه محلی

نوع ارتباط با آردوینو و میکرو: isp و پین های CE/SCN/MISO/MOSI/SCK/RESET/3.3V

شما دو پین CE و SCN رو در کد تعریف میکنید و بعد به هر کدوم از پینها که خواستین متص میکنید
تغذیه باید از طریق 3.3 ولت صورت بگیره واگر از یک رگلاتور مجزا و خازن مولتی لایر 104 هم برای تغذیش استفاده بشه بهترم میشه.
پین IRQ هم فعلا باهاش کاری نداریم. اتصالات به این شکل هست:

توضیح تصویر

VCC==>3.3V

GND==>GND

8==>CSN

7==>CE

13==>SCK

11==>MOSI

12==>MISO

کد فرستنده:

//کد فرستنده
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN تعیین پایه های
const byte address[6] = "00001";//آدرس کانال ارتباطی که باید با گیرنده یکی باشه
void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}
void loop() {
  const char text[] = "Hello World";//متن تست در سریال مانیتور
  radio.write(&text, sizeof(text));
  delay(1000);//تاخیر نمایش پیام
}

کد گیرنده:

//کد گیرنده
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}

دانلود کتابخانه تست ماژول NRF

بعد از اتمام کار نرم افزار آردوینو رو باز کنید و در بخش سربرگها TOOLS و بعد PORT رو انتخاب کرده و پورت COM مربوط به برد آردوینو گیرنده رو انتخاب کنید و به سریال مانیتورش برید، اگر Hello World رو پشت سر هم نمایش میداد شما موفق به برقراری ارتباط شدید.

آخرین ویرایش: 05-07-2019 ???? 15:10، توسط Hossein-McLaren
0

کنترل از راه دور سروو موتور با پتانسیومتر و ماژول NRF 24

توضیح تصویر

همه اتصالات مثل قبل هست فقط باید الان سروو و پتانسیومتر رو هم به مدار اضافه کنید. ابتدا پتانسیومتر خوب این قطعه که ما اینجا از 10 کیلو اهمیش استفاده میکنیم از 3 پایه تشکیل شده پایه وسط بین دو پایه چپ و راست قرار گرفته و با چرخاندن به چپ و راست شما در واقع مقاومت بین اونها رو تغییر میدید و خروجی روی پایه آنالوگتون ولتاژی بین 0 تا پ ولت تولید میشه. بعد این سیگنال ارسال میشه و در اردوینو دوم که گیرنده هست به پالس pwm تبدیل شده و موتور با چرخاندن پتانسیومتر گیرنده دقیقا روی زاویه دلخواه قرار میگیره و شما میتونید با این کار یک فرمان ماشین کنترلی یا یک باله هواپیما قابل کنترل و یا یک تیغه فرمان قایق موتوری طراحی کنید. فقط دقت کنید تغذیه سروو رو از آردوینو نگیرید(باتری 5 تا 9 ولت مناسب هست) که ممکن هست جریان زیادی که میکشه میکرو رو ریست و یا بهش آسیب برسونه. اتصالات به این صورت هست :

اتصالات فرستنده:

VCC==>3.3V

GND==>GND

8==>CSN

7==>CE

13==>SCK

11==>MOSI

12==>MISO

پایه های چپ و راست پتانسیومتر ==> 5 ولت VCC و GND

پایه وسط پتانسیومتر به A0

اتصالات گیرنده:

VCC==>3.3V

GND==>GND

8==>CSN

7==>CE

13==>SCK

11==>MOSI

12==>MISO

قهوه ای سروو(منفی) ==> GND آردوینو و منفی باتری

قرمز سروو(مثبت) ==> مثبت باتری

زرد سروو (سیگنال) ==> D6 گیرنده

کد فرستنده:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define led 4
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
boolean buttonState = 0;
void setup() {
  pinMode(4, OUTPUT);
  radio.begin();
  radio.openWritingPipe(addresses[1]); // 00002
  radio.openReadingPipe(1, addresses[0]); // 00001
  radio.setPALevel(RF24_PA_MIN);
}
void loop() {
  delay(5);
  radio.stopListening();
  int potValue = analogRead(A0);
  int angleValue = map(potValue, 0, 1023, 0, 180);
  radio.write(&angleValue, sizeof(angleValue));
  delay(5);
  radio.startListening();
  while (!radio.available());
  radio.read(&buttonState, sizeof(buttonState));
  if (buttonState == HIGH) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}

کد گیرنده:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define button 4
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
Servo myServo;
boolean buttonState = 0;
void setup() {
  pinMode(button, INPUT);
  myServo.attach(5);
  radio.begin();
  radio.openWritingPipe(addresses[0]); // 00001
  radio.openReadingPipe(1, addresses[1]); // 00002
  radio.setPALevel(RF24_PA_MIN);
}
void loop() {
  delay(5);
  radio.startListening();
  if ( radio.available()) {
    while (radio.available()) {
      int angleV = 0;
      radio.read(&angleV, sizeof(angleV));
      myServo.write(angleV);
    }
    delay(5);
    radio.stopListening();
    buttonState = digitalRead(button);
    radio.write(&buttonState, sizeof(buttonState));
  }
}

در این کد با 1 کردن پایه D4 گیرنده پایه D4 فرستنده یک خواهد شد که در صورت تمایل متونید این پایه ها رو هم به LED و میکرو سوییچ متصل کرده و تست کنید.

آخرین ویرایش: 06-07-2019 ???? 13:36، توسط Hossein-McLaren
0

به نام خدا

سلام

امرزو در تستهای میدانی برای سنجش برد نمونه های 12 هزار تومانی از این ماژول یعنی آنتن pcb ساده به نکات جالبی رسیدم که شاید براتون جالب باشه! اول اینکه خازن 104 که موازی کردم با تغذیه برد خیلی تغییر نکرد و یه جورایی با توجه به تغذیه رگوله شده خود آردوینو و باتری لیتیوم یونی که استفاده کردم نباید هم تاثیری داشته باشه چون ولتاژ استیبل و خوبی بهش میرسید. یکسری آنتن های دستساز با سیمهای روکش دار مسی هم در فضای اینترنت دیدم که نویسندگانش میگفتن جواب میده ولی واقعیتش نه تنها برد رو ناقص کردم و جواب نگرفتم بلکه بردش کمتر هم شد و کلا چیز بیخودی بود و همون ماژول اولیه بدون تغییر در بهترین حالت 40-50 متر در فضای با موانع خیلی کم بهم برد داد که به نظرم نهایت عملکرد این ماژول هست. اگر عملکرد بهتر میخواهید باید یه 100 تومن برای هر ماژول خرج کنید و نمونه های تایوانی رو بگیرید تا به بردهای چند صد متری دست پیدا کنید! اینها برای همون کنترل چند رله و یه اسباب بازی مناسب هستن ولی برای پروژه های جدی تر فقط خرابی و دردسر به بار میارن.

0

سلام. میشه با استفاده از اتصال wifi پیامک بفرستیم؟

1

سلام

بنده برای ارسال پیامک و تماس از ماژول شرکت simcom به نام sim 800l و برای وایفای هم از ماژولهای esp8266 استفاده میکنم. آموزش هردوی اینها قبلا در همین انجمن قرار داده شده.

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.