آموزش راه اندازی ماژول NRF24l01 با آردوینو و ایجاد یک ارتباط رادیویی

فهرست مطالب

مقدمه

امروزه برقراری ارتباط بیسیم و ساخت یک شبکه بیسیم برای تبادل اطلاعات و نیز پروژه های IOT اهمیت بسیار بالایی دارد. در این آموزش نحوه برقراری یک ارتباط بیسیم بین دو بورد آردوینو و ساخت یک شبکه با استفاده از ماژول NRF24L01 را خواهید آموخت.

دقت داشته باشید برای برقراری ارتباط به دو برنامه مجزا برای مستر و اسلیو نیاز خواهید داشت.

آنچه در این آموزش یاد می گیرید

ماژول NRF24L01 چیست و چگونه کار می کند؟

راه های مختلفی برای ایجاد یک ارتباط بیسیم از جمله بلوتوث، – وای فای و … وجود دارد، یکی از روش های ارزان قیمت و ساده و درعین حال موثر استفاده از ماژول NRF24L01 می باشد.
ماژول NRF24L01 یک ماژول فرستنده و گیرنده (Transceiver) است یعنی می تواند اطلاعات را ارسال و نیز دریافت کند. این ماژول در فرکانس 2.4 گیگاهرتز و مدولاسیون GFSK کار می کند و قادر است در فضای آزاد داده ها را تا حداکثر سرعت 2Mbps و برد 100 متر (برای مدل های دارای آنتن خارجی تا 1 کیلومتر) انتقال دهد.
parameter ResponseTypical value
Working voltage 3.3 v
Current usage in send mode 11.3 mA
Current usage in receive mode 12.3 mA
Current usage in sleep mode 900 nA
Temareture range -40 to +85 C
price 2.5 $
از ویژگی های مثبت این ماژول قابلیت ایجاد شبکه است، هر ماژول NRF می تواند به 6 ماژول NRF دیگر متصل گردد. بنابراین قیمت مناسب، راحتی استفاده، ابعاد کوچک، قابلیت شبکه سازی، بورد بالا و سرعت انتقال داده مناسب ماژول NRF24l01 را به گزینه خوبی برای پروژهای بیسیم و IOT تبدیل کرده است. ماژول NRF24L01 از طریق پروتکل SPI با میکروکنترلر ارتباط برقرار می کند و دارای 8 پایه می باشد:
پایه های SPI ماژول باید به پایه های SPI بورد متصل گردند.
Pin Operation
GND Circuit ground
Vcc Circuit supply voltage(3.3V)
CE Chip Enable
CSN SPI Chip Select
SCK Connection CLK
MOSI Receiving data from Master
MISO Sending data to Master
IRQ Intrupt pin

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 2
ماژول انتقال بیسیم اطلاعات +NRF24L01 × 2

نرم افزار های مورد نیاز

Arduino IDE

اتصال دو بورد آردوینو به یک دیگر و ایجاد ارتباط بیسیم

برای ارتباط دو بورد آردینو به یکدیگر نیاز به دو ماژول NRF24L01 داریم، یکی را به عنوان مستر و دیگری را به عنوان اسلیو در نظر می گیریم. در این مثال با استفاده از یک ولوم در سمت مستر، سروو موتور سمت اسلیو را کنترل می کنیم.

سیم بندی

اتصالات مستر و اسلیو را بصورت برقرار کنید.
توجه

پایه های CSN و CE می توانند به هر پایه دیجیتالی متصل شوند.

توجه

پایه های SPI ماژول باید به پایه های SPI بورد متصل گردند.

کد

برای استفاده از ماژول NRF24L01 با آردوینو از کتابخانه RF24 استفاده می کنیم، می توانید این کتابخانه را از لینک زیر دانلود کنید.

دانلود کتابخانه RF24

توجه

دقت داشته باشید برای برقراری ارتباط به دو برنامه مجزا برای مستر و اسلیو نیاز خواهید داشت.

مستر

کد زیر را بر روی یکی از دو بورد آردوینوی خود آپلود کنید.

/*
  NRF24L01 - Controle a servo motor wirelessly
  Master
  modified on 8 Apr 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); // CE, CSN const byte address[][6] = {"Node1"}; const int potpin = A0; int val = 0; void setup() { radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); } void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 179); radio.write(&val, sizeof(val)); delay(5);

اسلیو

کد زیر را برروی آردوینو دیگر خود آپلود کنید.

/*
  NRF24L01 - Controle a servo motor wirelessly

  Master
  modified on 8 Apr 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> Servo myservo; RF24 radio(7, 8); // CE, CSN const byte address[][6] = {"Node1"}; const int servo = 9; int val = 0; void setup() { Serial.begin(9600); myservo.attach(servo); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { delay(5); radio.startListening(); if ( radio.available()) { while (radio.available()) { radio.read(&val, sizeof(val)); myservo.write(val); Serial.print("Servo position = "); Serial.println(val); } } }

بگذارید نگاهی جزئی تر به کد استفاده شده در این مثال بیاندازیم:

RF24 radio(CS, CSN);

شی(Object) لازم برای ماژول را با مشخص کردن پایه های CS و CSN می سازد.

const byte address[][6] = {"addr"};

تعیین آدرس برای نودها، دقت داشته باشید برای برقراری ارتباط، آدرس فرستنده و گیرنده باید یکسان باشد.

radio.openWritingPipe(address);

گیرنده را برای فرستنده تعیین می کند.

radio.openReadingPipe(0, address);

فرستنده را برای گیرنده تعیین می کند.

radio.setPALevel(RF24_PA_MIN);

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

radio.stopListening();

ماژول را در مد فرستنده قرار می دهد.

radio.startListening();

ماژول را در مد گیرنده قرار می دهد.

radio.write(&data, sizeof(data));

داده را با تعیین کردن اندازه آن، ارسال می کند.

radio.available();

در صورت دریافت داده ای در گیرنده، مقدار 1 را برمی گرداند.


radio.read(&data, sizeof(text));

داده را با تعیین کردن اندازه آن دریافت کرده و در متغیر data ذخیره می کند.

ایجاد شبکه ای از ماژول های NRF

با استفاده از ماژول NRF24L01 می توانید شبکه ای بیسیم درست کرده و اطلاعات را در شبکه خود جا به جا کنید.

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

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

در روش دوم، از روش درختی برای شبکه سازی استفاده می شود درنتیجه مستر اصلی تنها با زیر مجموعه خود در ارتباط است و هر زیرمجموعه بصورت درختی گسترش پیدا می کند درنتیجه می توانیم شبکه ای شامل حداکثر 3125 ماژول NRF24L01 بسازیم بنابراین این روش از روش اول موثرتر است.

سیم بندی

کد

برای استفاده از این روش باید از کتابخانه RF24Network استفاده کنید، می توانید این کتابخانه را از لینک زیر دانلود کنید:
دانلود کتابخانه RF24Network

مستر

/*
  NRF24L01 - Network
  Master
  modified on 8 Apr 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <RF24Network.h> #include <RF24.h> #include <SPI.h> #include "dht.h" RF24 radio(7, 8); // nRF24L01 (CE,CSN) RF24Network network(radio); dht DHT; const uint16_t this_node = 00; const uint16_t node01 = 01; const uint16_t node02 = 02; const uint16_t node03 = 03; const int butpin = 3; const int potpin = A0; const int dhtpin = 4; void setup() { SPI.begin(); radio.begin(); network.begin(90, this_node); //(channel, node address) radio.setDataRate(RF24_2MBPS); pinMode(butpin, INPUT); Serial.begin(9600); } void loop() { // Send to Node 01 int potValue = analogRead(potpin); int angleValue = map(potValue, 0, 1023, 0, 179); RF24NetworkHeader header2(node01); bool ok = network.write(header2, &angleValue, sizeof(angleValue)); // Send to Node 02 int buttonState = digitalRead(butpin); RF24NetworkHeader header3(node02); bool ok2 = network.write(header3, &buttonState, sizeof(buttonState)); // LEDs control at Node 022 unsigned long pot2Value = analogRead(A1); RF24NetworkHeader header4(node03); DHT.read11(dhtpin); bool ok3 = network.write(header4, &DHT.temperature, sizeof(DHT.temperature)); }

Node01 

/*
  NRF24L01 - Network
  Node01
  modified on 8 Apr 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <RF24Network.h> #include <RF24.h> #include <SPI.h> #include <Servo.h> RF24 radio(7, 8); // nRF24L01 (CE,CSN) Servo myservo; RF24Network network(radio); // Include the radio in the network const uint16_t this_node = 01; // Address of our node in Octal format ( 04,031, etc) const uint16_t master00 = 00; // Address of the other node in Octal format const int servopin = 9; void setup() { SPI.begin(); radio.begin(); network.begin(90, this_node); //(channel, node address) radio.setDataRate(RF24_2MBPS); myservo.attach(servopin); } void loop() { network.update(); while ( network.available() ) { RF24NetworkHeader header; int data; network.read(header, &data, sizeof(data)); // Read the incoming data myservo.write(data); } delay(5); }

Node02

/*
  NRF24L01 - Network
  Node02
  modified on 8 Apr 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <RF24Network.h> #include <RF24.h> #include <SPI.h> RF24 radio(7, 8); // nRF24L01 (CE,CSN) RF24Network network(radio); // Include the radio in the network const uint16_t this_node = 02; // Address of our node in Octal format ( 04,031, etc) const uint16_t master00 = 00; // Address of the other node in Octal format const int ledpin = 5; void setup() { SPI.begin(); radio.begin(); network.begin(90, this_node); //(channel, node address) radio.setDataRate(RF24_2MBPS); pinMode(ledpin,OUTPUT); } void loop() { network.update(); while ( network.available() ) { RF24NetworkHeader header; int data; network.read(header, &data, sizeof(data)); // Read the incoming data digitalWrite(ledpin, !data); } delay(5); }

Node03

/*
  NRF24L01 - Network
  Node03
  modified on 8 Apr 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <RF24Network.h> #include <RF24.h> #include <SPI.h> RF24 radio(7, 8); // nRF24L01 (CE,CSN) RF24Network network(radio); // Include the radio in the network const uint16_t this_node = 03; // Address of our node in Octal format ( 04,031, etc) const uint16_t master00 = 00; // Address of the other node in Octal format const int fan = 5; //Red wire to pin 13,Black wire to pin GND void setup() { SPI.begin(); radio.begin(); network.begin(90, this_node); //(channel, node address) radio.setDataRate(RF24_2MBPS); pinMode(fan, OUTPUT); digitalWrite(fan, LOW); } void loop() { network.update(); while ( network.available() ) { RF24NetworkHeader header; int data; network.read(header, &data, sizeof(data)); // Read the incoming data if (data > 70) digitalWrite(fan, HIGH); else digitalWrite(fan, LOW); } delay(5); }

یک گام جلوتر

  • سعی کنید یک ارتباط دوطرفه با دو ماژول NRF24L01 بسازید، به این معنا که هر ماژول هم قابلیت ارسال داشته باشد و هم قابلیت دریافت.

از این مطلب خوشتان آمد؟

آخرین مطالت و آموزش ها را در ایمیلتان دریافت کنید:

مطالب بیشتر

Comments (37)

  • یاسین رضایی Reply

    بسیار عالی
    ممنون از سایت خوبتون

    نوامبر 3, 2019 at 11:42 ب.ظ
    • سعید حسینی Reply

      متشکریم

      دسامبر 18, 2019 at 4:57 ب.ظ
  • امیر زند Reply

    من از این روش استفاده کردم و ارتباط دو طرفه ایجاد کردم،اما بعد چند ساعت ارتباط از بین میره و ماژول رو باید ریست کنم تا دوباره با هم ارتباط برقرار کنن،کسی میدونه مشکل چیه؟

    ژانویه 29, 2020 at 1:02 ق.ظ
    • سعید حسینی Reply

      با سلام، شاید مدار تغذیتون مشکل داره

      فوریه 29, 2020 at 9:16 ق.ظ
  • میثم Reply

    سلام وقت بخیر ایا میشه به این طریق ۴ تا استپ موتور رو با گوشی هم زمان فعال کرد که هر استپ موتور ۴ تا متغییر قراره دریافت کنه یعنی هم زمان ۱۶ تا متغییر قراره ارسال بشه .ممنون میشم راهنمایی کنید

    آوریل 24, 2020 at 10:55 ب.ظ
    • Amir Mogoei Reply

      باسلام
      از این طریق خیر. برای ارتباط به گوشی نیازه از ماژول وای فای یا بلوتوث استفاده کنید

      می 12, 2020 at 9:37 ق.ظ
  • محمد Reply

    سلام
    با این ماژول حداکثر چند موتور رو میتوان کنترل کرد؟

    ژوئن 24, 2020 at 10:42 ق.ظ
  • AD Reply

    سلام.
    خسته نباشید.
    من میخواستم این پروژه رو با میکروکنترلر بسازم.
    میشه؟
    چه تغییراتی لازمه توی کد بدم؟
    فقط پایه های spi رو باید درست وصل کنم و ce و csn رو به پورت دیجیتال وصل کنم درسته؟؟
    خیلی ممنون میشم راه نمایی کنید…
    با تشکر

    می 4, 2021 at 5:27 ب.ظ
    • مهران ملکی Reply

      سلام. خیلی ممنون
      با چه میکروکنترلی میخواید پروژه رو انجام بدید؟ با نرم‌افزار آردوینو توانایی پروگرم کردن انواع میکروکنترلرهارو دارید. در نتیجه همین کد رو با تغییرات کوچک (بر اساس میکروکنترلر مورد استفادتون) میتونید برای پروژه خودتون هم استفاده کنید.

      می 8, 2021 at 12:29 ب.ظ
      • AD Reply

        میکرو Atmega8a
        باید با Boot Loader میکرو رو پروگرم کنم درسته؟
        فقط مشکلم اتصال میکرو به ماژول مبدل یو اس بی به سریال هستش.
        چطوری باید وصل بشه؟ کدوم پایه میکرو به کدوم پایه ماژول؟

        می 13, 2021 at 12:58 ب.ظ
        • مهران ملکی Reply

          بله، در واقع Boot Loader یک برنامه‌ست که روی میکرو خام ریخته میشه تا بشه اون رو به کمک مبدل usb to ttl پروگرم کرد.
          بعد از اینکه Boot Loader رو روی میکرو ریختید میتونید با مبدل usb to ttl میکرو رو پروگرم کنید. برای این کار پایه TX میکرو به RX مبدل، پایه RX میکرو به TX مبدل و پایه RESET میکرو از طریق یک خازن در حدود 100nF به پایه DTR/RTS مبدل لازمه که وصل بشن. پایه‌های VCC و GND مبدل رو هم که به عنوان تغذیه باید متصل کنید. برای اطلاعات بیشتر میتونید از لینک زیر هم کمک بگیرید:
          “https://www.youtube.com/watch?v=Sww1mek5rHU&t=1583s”

          می 17, 2021 at 9:11 ق.ظ
          • AD

            خیلی ممنون از راهنماییتون.
            فقط من درست متوجه نشدم.
            فایل دارای Boot Loader رو میشه با مبدل یو اس بی به سریال روی میکرو ریخت؟
            چون یه جا نوشته بود نمیشه. اول باید با یک آردوینو، Boot Loader رو روی میکرو ریخت بعد میشه با مبدل، میکرو رو پروگرام کرد.
            اگر اینطوره میشه بگید آردوینو رو چطوری به میکرو وصل کنم؟
            پایه VCC و GND رو باید به تغذیه میکرو وصل کنم دیگه؟
            یا تغذیه جدا باید باشه؟

            می 22, 2021 at 8:44 ب.ظ
        • مهران ملکی Reply

          خواهش میکنم.
          نه، خود Boot Loader رو نمیتونید با مبدل usb به سریال روی میکرو بریزید. بعد از اینکه Boot Loader روی میکرو ریخته شد اونوقت میتونید با مبدل usb به سریال میکرو رو پروگرم کنید.
          حالا برای ریختن خود Boot Loader روی میکرو باید روش دیگه‌ای رو جلو برید که آموزشش در حال نوشتنه. میتونید موقتا از این لینک‌ها کمک بگیرید: “https://www.arduino.cc/en/Tutorial/BuiltInExamples/ArduinoISP” ، “https://www.instructables.com/Turn-Your-Arduino-Into-an-ISP/” همچنین لینک ویدیویی که براتون ارسال کردم خیلی خوب توضیح میده.
          تغذیه رو هم میتونید از همون میکرو بگیرید. نیازی نیست جدا باشه.

          می 23, 2021 at 9:17 ق.ظ
  • AD Reply

    سلام من میخوام سرعت و جهت دو موتور رو کنترل کنم.
    چه تغییراتی لازمه؟
    تونستم با یه روشی کد رو روی میکرو ATMEGA8 پروگرم کنم.
    برای سخت افزار مدار و سیم بندی مشکلی ندارم. یعنی استفاده از درایور رو بلدم.
    مشکل کد نویسیه… با زبان C کار کردم و زبان CPP رو زیاد بلد نیستم.

    آگوست 26, 2021 at 2:48 ب.ظ
    • مهران ملکی Reply

      سلام
      لازمه اطلاعات کاملتری از پروژتون داشته باشم تا بشه راهنمایی کامل کرد. برای مثال، چه نوع موتوری رو قصد دارید کنترل کنید؟ موتور دی‌سی، سروو موتور و یا استپرموتور؟ چه درایوری رو برای درایو کردن موتورتون مد نظر دارید؟ این‌ها رو لازمه که اول به درستی انتخاب کنید و بعدش میتونید کارهای کدنویسیش رو انجام بدید. همچنین بسته به درایور و موتور مورد استفاده، آموزش‌های گوناگونی در سایت موجود هست که میتونید از اون ها هم استفاده کنید. این سه آموزش میتونن خیلی کمک‌کننده باشن:
      “https://thecaferobot.com/learn/l293d-control-drive-stepper-servo-dc-motors-by-arduino/”
      “https://thecaferobot.com/learn/interfacing-l298n-motor-driver-controller-module-with-arduino/”
      “https://thecaferobot.com/learn/interfacing-tb6612fng-dual-motor-driver-module-with-arduino/”

      آگوست 28, 2021 at 9:47 ق.ظ
      • AD Reply

        2 عدد موتور گیربکس دی سی
        با درایور l298.
        کار کردن با درایور رو بلدم قبلا کنترل موتور دی سی با میکرو atmega8 و درایور l293d ساختم…
        اگر بشه به زبان c راهنمایی کنید که خیلی بهتره..

        آگوست 28, 2021 at 1:33 ب.ظ
        • مهران ملکی Reply

          خب این آموزش که براتون ارسال کردم به طور کامل چیزایی که نیاز دارید رو در خودش داره:
          “http://thecaferobot.com/learn/interfacing-l298n-motor-driver-controller-module-with-arduino/”
          زبان برنامه‌نویسی هم که براش استفاده شده آردوینو هست که یک زبان برنامه‌نویسی بر پایه Cئه. تو این آموزش نحوه اتصالات یه موتور دی‌سی به درایور، نحوه نوشتن کد برای حالت‌های مختلف جلو رفتن، عقب رفتن و تنظیم سرعت حرکت به طور کامل توضیح داده شده.

          آگوست 29, 2021 at 9:39 ق.ظ
          • AD

            خیلی ممنون.
            ولی فک کنم اشتباه متوجه شدین!!…
            من میخوام رادیوکنترل بسازم. و با اون دوتا موتور دی سی کنترل کنم. تو پیام قبلی گفتم با درایور کار کردم مدار ساختم بلدم.. پس اینو نمیخام!!
            اصلا برا همین تو این صفحه پرسیدم.. گفتم چه تغییراتی لازمه…

            آگوست 29, 2021 at 3:17 ب.ظ
        • مهران ملکی Reply

          آها، بله کامل متوجه نشدم…
          برای کابردی که میخواید به نظرم کد آموزش زیر خیلی ساده‌تر باشه:
          “https://thecaferobot.com/learn/interfacing-nrf24l01-wireless-2-4-ghz-transceiver-module-with-arduino/”
          برای این پروژه‌ای که دارید شما دو عدد nrf و دو عدد میکروکنترلر احتیاج دارید. هر کدوم از nrfهارو به یکی از میکروکنترلرها متصل میکنید، یکی به عنوان فرستنده و دیگری گیرنده. موتورهایی رو هم که میخواید کنترل کنید به میکرویی که به nrf گیرنده متصله وصل کنید. با ترکیب کد آموزشی که تو این کامنت و کامنت قبلی براتون گذاشتم به راحتی میتونید کنترل رو انجام بدید.

          آگوست 30, 2021 at 10:16 ق.ظ
  • amir Reply

    سلام من چندتا ماژول nrfددارم یک شکل و سالم . تازه کارم این نقشه و کدهارو دقیق پیاده کردم ولی کار نکرد نمیدونم مشکل از ماژول بیسیم هست یا برنامه . البته من فرستنده رو با ماژول ینو آر۳ استفاده کردم و گیرنده رو با ینو تنها .
    پایه ها همش درست زدم برق نول همه درسته ولی کار نمیکنه

    سپتامبر 23, 2021 at 3:28 ق.ظ
  • amir Reply

    سلام من اینو درست کردم ولی کار نکرد نمیدونم چزا ولی همه سیم بندی هارو درست زدم حتی ماژول های nrf رو هم عوض کردم فایده نداشت . فقط البته من یک اردینیو ینو آر۳ داشتم و یک ینو معمولی

    سپتامبر 23, 2021 at 12:52 ب.ظ
    • مهران ملکی Reply

      سلام.
      از کد و سیم‌بندی آموزش زیر هم استفاده کنید ببینید مشکلتون برطرف میشه.
      “https://thecaferobot.com/learn/interfacing-nrf24l01-wireless-2-4-ghz-transceiver-module-with-arduino/”

      سپتامبر 25, 2021 at 9:28 ق.ظ
  • Mohfff Reply

    سلام من با دوتا ماژول nrf و دوتا اردوینو نانو و با کد یه سایت خرجی که فیلمشو دیده بودم فرستنده و گیرنده 6 کاناله درست کردم و عمل هم میکنه ولی ولتاژش بسیار پایین هست یعنی موتور dc معمولی(ارمیچر) رو نمیتونه هرکت بده ولی وقتی با LED امتحان میکنم و وصلش میکنم به بورد گیرنده اولش روشن میشه و با تکون دادن جوی استیک فرستنده به سمت چپ نورش کم میشه و به سمت راست نورش زیاد میشه. میخاستم بدونم باید کجای کد رو اصلاح کنم که توانش زیاد تر بشه؟اصلا ایا میشه بدون درایور موتور dc رو مستقیم به گیرنده وصل کرد؟ ممنون میشم راهنمایی کنین

    دسامبر 27, 2021 at 11:02 ب.ظ
    • مهران ملکی Reply

      سلام.
      اینکه موتور بچرخه و یا خیر مربوط به میزان جریانی هست که تغذیه اون میتونه بهش بده (در مدار شما برد آردوینو نانو) و ارتباطی به کدی که نوشته شده نداره. برد آردوینو هم اصلا توانایی دادن جریان مناسب به یک موتور DC رو نداره و بدون درایور متصل کردن یک موتور DC به برد آردوینو، به احتمال خیلی بالا باعث آسیب به آردوینو و سوختن اون میشه. در نتیجه، شما بدون درایور نمیتونید موتور DC رو مستقیما به گیرنده متصل کنید و لازمه حتما توسط درایور این کار انجام بشه.

      دسامبر 28, 2021 at 9:29 ق.ظ
  • محمد Reply

    سلام spi چیه و یعنی در حالت عادی انتقال اطلاعات پایه CSNباید ۱ باشه یا ۰ ؟
    می خوام پایه های CSNوCEرو به یک پایه از برد آردوینو بزنم می شه یا نه ؟؟

    ژانویه 3, 2022 at 10:46 ق.ظ
    • مهران ملکی Reply

      سلام.
      SPI یه پروتکل ارتباطی 3 یا 4 سیمه ست که برای انتقال اطلاعات بین ماژول‌ها و میکروکنترلرها استفاده میشه. پایه‌های اصلی این پروتکل MOSI، MISO، SCKو CS (در SPI چهار سیمه) هست. برای اطلاع کامل در مورد این پروتکل میتونید به لینک ویکیپدیا اون مراجعه کنید.
      https://fa.wikipedia.org/wiki/%DA%AF%D8%B0%D8%B1%DA%AF%D8%A7%D9%87_%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7_%D8%AC%D8%A7%D9%86%D8%A8%DB%8C_%D8%B3%D8%B1%DB%8C%D8%A7%D9%84
      https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
      پایه CSN هم مخفف Chip Select Not هست و در واقع نقش همون پایه CS رو داره که بالاتر بهش اشاره شد. این پایه در حالت عادی انتقال اطلاعات باید 0 باشه. (به علت Not بودن. اگر پایه CS بود، لازم بود در حالت عادی انتقال اطلاعات 1 باشه.)
      و اینکه خیر، شما نمیتونید پایه های CSN و CE رو به یک پایه یکسان بزنید. هر کدومشون نیازمند یه پایه جداگونه هستن.

      ژانویه 4, 2022 at 9:09 ق.ظ
  • رایان اقراری Reply

    باعرض سلام و درود خدمت شما استادان گرامی
    من قصد دارم که از طریق تلفن همراه به هر یک از ماژول های nrf که دارای یک استپر موتور هستن فرمان جدا بدم. ایا چنین چیزی ممکن هست با این ماژول؟
    با ماژول وای فای چطور می تونه انجام بشه؟

    فوریه 22, 2022 at 9:09 ب.ظ
    • مهران ملکی Reply

      سلام. وقتتون بخیر.
      اینکه به طور مستقیم از گوشی به ماژول nrf دستور بدید امکان‌پذیر نیست، اما راه‌حل‌های دیگه‌ای وجود داره. برای مثال می‌تونید از یک ماژول بلوتوث استفاده کنید و اون رو به آردوینوی master متصل کنید. با این کار میتونید دستور رو از گوشی و از طریق بلوتوث به ماژول بلوتوث ارسال کنید و آردوینو با توجه به دستور دریافت شده، به nrf متصل به خودش دستور میده که کدوم یک از ماژول nrf که slave هستن و یک استپر موتور بهشون متصل هست، فعال بشن. راه دیگه که وجود داره هم همون ماژول وای فای هست که فرمودید. البته راه اندازی ماژول وای فای کمی پیچیدگی بیشتری نسبت به ماژول بلوتوث داره اما کلیت کار مشابه همون روندی که برای ماژول بلوتوث توضیح دادم هست.

      فوریه 23, 2022 at 9:33 ق.ظ
  • mobin Reply

    سلام ممنون
    میشه لطف کنید و ی اموزش بزارید
    درباره درست کردن یک واکیتاکی 2 (الی بیشتر) کاناله با ماژول nrf و اردینیو
    و اینکه میشه وقتی برنامه وارد ایسی اردینیو شد اون رو از بورد اردینیو جدا و مستقیم به برد پروژه وصل کرد
    و در اخر ممنون میشم از دوستانی که اگه اموزشی سراغ دارن از اینچیزی که گفتم لینکش رو قرار بدن
    واقعا ممنون

    ژانویه 19, 2023 at 12:37 ق.ظ
  • soheilr1 Reply

    سلام ممنون بابت مطالب خوبتون
    من این پروژه و پروژه های رادیو کنترل دیگه ایو که قبلا با اردوینو اونو ران کرده بودمو به راحتی جواب میدادو روی atmega8a ریختم ولی به هیچ وجه ارتباطی بین nrfها برقرار نمیشه
    من میکرو را با کریستال 16 مگاهرتز خارجی راه اندازی کردم
    میخواستم بدونم atmega8 فرق داره با اردوینو اونو یا نانو در نوشتن کد؟
    یا اینکه کار خاص دیگه ای باید انجام بدم؟
    ممنون میشم راهنمایی کنید چند روزه درگیرشم

    می 16, 2023 at 1:57 ق.ظ
  • روح الله Reply

    سلام. مثل اینکه این برنامه و ماژول روی برد آردینو WEMOS کار نمیکنه؟؟؟؟
    این خط کد چه در فرستنده و چه در گیرنده که کمی با هم متفاوتند به مشکل می خورند
    radio.openWritingPipe(address);

    جولای 8, 2023 at 10:33 ب.ظ
  • سیدحسین حسینی Reply

    سلام خسته نباشید امید وارم این پیام من به دست شما برسد
    من میخواستم بدونم با همین کار میشه راه ارتباطی بین اردوینو و سیستم رو متصل کرد و با همین روش اردوینو رو کامپایل کرد به صورت بیسیم؟

    اکتبر 17, 2023 at 12:20 ق.ظ
    • محمد دمیرچی Reply

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

      اکتبر 17, 2023 at 8:11 ق.ظ
  • احمدرضا Reply

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

    آوریل 3, 2024 at 8:24 ب.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.