מודול רדיו- nRF24L01
  נכתב על ידי עומר בלנק ברון 

unnamed.png

מטרת הרכיב לאפשר תקשורת בין ארדואינו אחד למישנהו על ידי תקשורת רדיו.

תיאור פשוט של אופן פעולת הרכיב

המודול רדיו nRF, הוא מודול רדיו אשר עובד עם ארדואינו, ביכולתו גם לשלוח וגם לקבל ,תקשורת רדיו, בעצם הוא ממלא תפקיד גם של Receiver, וגם Transmitter.
טווח השידור שלו הוא עד ה100 מטר בתדר של 2.4 GHz, בשטח פתוח בלי הפרעות. שימושים אפשריים למודול הם שלטים אלחוטיים, תחנת מזג אוויר על גג הבית, או תקשורת בין שני ארדואינו כאשר הטווח גדול מדי לשימוש בטכנולוגיה אחרת (לדוגמה Bluetooth) או כשיש צורך להשתמש בשני בקרי הארדואינו הן כמשדר והן כמקלט.

unnamed (1).png

הסבר פנימי של אופן פעולת הרכיב

המודול רדיו nRF, מתקשר עם הארדואינו בשיטה הנקראת SPI, תקן Interface Peripheral Serial) SPI) הרכיב נועד לאפשר תקשורת טורית בין מכשיר Master  (ארדואינו) אחד למספר מכשירי Slave. הMaster מעביר מידע\ פקודות, לSlave, הSlave יכול להעביר מידע חזרה לMaster
לפי שיטה זאת המודול גם יכול לקבל מידע מהארדואינו וגם להעביר מידע לארדואינו בו זמנית, הרכיב עצמו צורך סך הכל בין 3.6-1.9 וולט. המידע שהמודול שולח נשלח בתדר 2.4 GHz ISM Band, (זה אומר שזה תדר אשר מותר להשתמש בו בלי רשיון.) (2.4GHz=2,400,000,000Hz). התדר אשר משתמש בו המודול נע בין 2401MHz הרץ ל2525MHz הרץ, כל מגה הרץ לדוגמה (2420MHz) נקרא  ערוץ, וכאשר רוצים לתקשר בין שני מודלים ויותר הם צריכים להיות על אותו ערוץ. סך הכל הרכיב תומך ב-125 ערוצים.

תמונה2.png

מהטבלה משמאל אפשר להבין את הרעיון של 125 הערוצים שהרכיב תומך, ערוץ 1 הוא 2401MHz, ערוץ 2 2402MHz, וכך הלאה עד ערוץ 125 שהוא 2525MHz. 


 לרכיב טווח שידור אופטימלי של כל 100 מטרים. עם זאת, הפרעות שונות גורמות להפחתה בטווח השידור האפקטיבי ההפרעות אשר מורידות את טווח השידור מתחלקות לשתיים, 1. הפרעות פיזיות- חפצים, רהיטים קירות וכו. ההפרעות האלה חוסמות חלק מהגל וכך מורידים את טווח השידור. בכך כאשר גל רדיו פוגע בקירות או בעצמים במרחב, חלק מעוצמת גלי הרדיו נספג בחומר והופך לחום וחלק עובר דרך הקיר וויוצא מעברו השני. לתוך בעובי וארך הקיר, ככל שהקיר יותר גדול ועבה כך יותר יותר גלים נספגים בקיר ופחות עוברים לצידו השני.  2. הפרעות של גלים אחרים- גלי רדיו אחרים- (wifi, Bluetooth, וכו').
כל ההפרעות גורמות לירידה של הטווח, וככל שיש יותר הפרעות כך הטווח קטן יותר, בסביבה ביתית הטווח הוא לערך בין 10- 25 מטר.  הסיבה בה ההפרעות מינימליות, היא סביבה פתוחה, בלי מבנים או חפצים אשר בין שני במודולי רדיו.
מודול רדיו nRF, שולח את המידע בחבילה (packet) במה שנקרא Enhanced ShockBurst, הרעיון של שליחת מידע בחבילה נובע מכך שאתה רוצה להעביר מידע ליחידה מסויימת אשר נמצאת על אותה רשת. (אינטרנט ביתי, שידור של רדיו, רשת קווית וכו'), אתה רוצה שהמודול שלך יקלוט את המידע הספציפי שאתה שולח לא, ולא כל גל רדיו אשר נמצא באוויר. (יש הרבה כאלה). החבילה הזאת מחולקת לחמישה חלקים, הראשון הקדמה, שזאת פתיחה של ההודעה, החלק השני הוא כתובת שזה לאן צריך לשלוח . אז יש חלק שנקרא  בחלק  Packet control, זה החלק שאחראי על הבקרה של השליחה.  החלק הרביעי זה ההודעה עצמה, החלק האחרון נקרא CRC, שזה מנגנון בקרה של הקוד.

unnamed (2).png

הבקרה ב- Packet control עובדת בצורה הבאה, מצב 1- מצב רגיל ההודע נשלחת,  הרכיב המקבל שולח הודעה על כך שהוא קיבל את ההודע למודול הראשון. ( הסרטון למטה מתאר זאת).

unnamed.gif

מצב 2- מצב בו ההודע אינה מגיע ליעד מכל מיני סיבות, המודול הראשון שם לב שהוא אינו מקבל הודעת אישור, ושולח שוב את ההודעה. ( הסרטון למטה מתאר זאת).

unnamed (1).gif

מצב 3- מצב בו ההודע הגיע אבל ההודעת אישור אינה מגיעה מכל מיני סיבות, המודול הראשון שולח שוב את ההודעה, המודול השני קולט ההודעה, ומבין שהיא אותה הודעה מקודם, לא מעביר את המידע לארדואינו, ושולח שו את ההודעת אישור.        (הסרטון למטה מתאר זאת).

unnamed (2).gif

Pinout

הרכיב מקבל הזנה מיוצבת של מתח 3.3V (שימו לב - לא 5V, 5V ישרפו את הרכיב!) ןחיבור ל GND. פרט לכך יש חמישה חוטים המחברים בין הרכיב לארדואינו. שלושה מהם, SCK, MOSI ו MISO חייבים להתחבר לפנים ספציפיים בארדואינו בהתאם למודל של הארדואינו. שני חוטים נוספים, CSN ו CE מתחברים לכל פין דיגיטלי.

להלן דיאגמת PINOUT של המודול

 

1- (GND)  גרונד,              2- (VCC)  מתח 3.3V
3 (CE)   ו4 (CSN)  - תפקידם, לגרום למודול או לשדר או לקלוט לפי מה שהגדרנו בקוד.

5- (SCK)  קצב קבלת נתונים שנקבע לפי הארדואינו, (הארדואינו והרכיב צריכים להיות מתואמים).

6- (MOSI)  הקלט של המודול, מידע מגיע מהארדואינו למודול.

7- (MISO)  הפלט של המודול, מידע שנשלח מהמודול לארדואינו.

8- (IRQ) לא משתמשים בו.

Pinout-nRF24L01-Wireless-Transceiver-Mod

דיאגרממת חיווט


החיווט הוא מאד חשוב כיוון שלארדואינו יש פינים מיוחדים לתקשורת
SPI לפי הטבלה הבאה-
המתח ל-3.3V, והפינים של CE 
ו CSN יכולים להיות בכל פין דיגיטלי.
SCK, MOSI, MISO חייבים להיות 
בפינים ספציפיים. כפי שמופיע בטבלה משמאל

תמונה1.png

בסרטוט למטה אני מראה הדגמה של החיווט, של המודול והארדואינו. בנוסף מצד שמאל של הסרטוט יש טבלה המתארת מה הוא כל חוט.

unnamed (3).png

בית המודול/ בייס המודול

מודול הרדיו מספק בעיות רבות ומגוונות, לדוגמה בעיות של מטח, חיווט, גלים אלקטרומגנטיים ועוד. מה שיכול לעזור לפתור את הבעיות הללו, הוא בייס מודול. בייס המודול מקל על החיווט עוזר למנוע הפרעות אלקטרומגנטיות. סך הכל רכיב הכרחי לעבודה עם המודול. הבייס מתחבר ל בארדואינו5V לעומות המודול אשר מתחבר אל 3.3V בארדואינו.

unnamed (4).png

תמונה של המודול מחובר לבייס       

unnamed (5).png

תמונה של בייס המודול
                 

חיווט בייס המודול

החיווט דומה מאד בין המודול ובית המודול. כל החוטים מתחברים לבית במודול ולא למודול עצמו, הVCC ל5V, וכל שאר החוטים מחוברים לאותם פינים בארדואינו.
בטבלת החיווט צבעתי את הפינים על המודול וכל צבע בטבלה צריך לחבר לבייס בפין הצבוע באותו הצבע.

קוד לדוגמה- משדר

הקוד הבא מחולק לשני חלקים שצריך לצרוב לכל אחד מבקרי הארדואינו. קוד לארדואינו המשדר וקוד לארדואינו המקבל.
הקוד יפעיל את אחד מרכיבי הארדואינו כמשדר (בלבד) ואת השני כמקלט (בלבד). (בחירת המשתמש). בדוגמה הזאת נעביר בעזרת רדיו, ערכים של פוטנציומטר מארדואינו אחד לשני. 

זה הקוד של המשדר-


1.  #include <SPI.h>
2. #include <nRF24L01.h>
3. #include <RF24.h>

4. RF24 radio(9, 8);  // CE, CSN

5. const byte address[6] = "00001";

6. void setup()
{
7. radio.begin();
 
8. radio.openWritingPipe(address);
 
9.  radio.stopListening();
10. pinMode(A0, OUTPUT);
}
11. void loop()
{
12.  const char INTEGER[] = analogRead(A0);
13. radio.write(&INTEGER, sizeof(INTEGER));
 
14. delay(150);
}


 

הסבר קוד לדוגמה משדר

בתחילת הקוד אנו כוללים את ספריית הרדיו (שורות 1,2,3), בכדי שנוכל להשתמש בפקודות מיוחדות לרכיב.
שורה אחרי זה אנחנו מגדירים לאן מחוברים הפינים CE, CSN (שורה 4), שורה אחרי זה אנחנו מגדירים את הכתובת בה הארדואינו ישדר  (שורה 5),  (אפשר לבחור כל חמישה מספרים ובלבד שהכתובת זהה בארדואינו המשדר ובארדואינו הקולט), מפעילים את הרדיו  (שורות 7,8), שורה 9-הופכת את הרכיב למשדר. מגדירים את הפוטוציומטר (A0 כקלט).
בתוך הלופ אנחנו מגדירים את המשתנה INTEGER ואומרים שהוא הערך שמקבלים הפוטנציומטר (שורה 12), שורה אחרי זה משתמשים בפקודה  radio.write בשביל לשלוח את המידע, בגודל שלו  (שורה 13), לרכיב יש הגבלת מידע של 32 ביט.  ובסוף נותנים דיליי קצר (שורה 14), מכיוון שזה תהליך שלוקח זמן, ואם ישר נחזור להתחלה התהליך לא יושלם ולא נתקשר אם הארדואינו השני.
בפקודה radio.write מתחיל תהליך, בו דבר ראשון המידע מוכנס למקומו בחבילת השליחה, החבילה נשלחת, ברגע שהיא נקלטת במודול השני, תשלח הודעת אישור מהמודול השני לארדואינו הראשון, במידה ולא תגיע הודעת אישור המודול ישלח את המידע שוב.

קוד לדוגמה- מקלט

הקוד הבא מחולק לשני חלקים שצריך לצרוב לכל אחד מבקרי הארדואינו. קוד לארדואינו המשדר וקוד לארדואינו המקבל.
הקוד יפעיל את אחד מרכיבי הארדואינו כמשדר (בלבד) ואת השני כמקלט (בלבד). (בחירת המשתמש). בדוגמה הזאת נעביר בעזרת רדיו, ערכים של פוטנציומטר מארדואינו אחד לשני. 

זה הקוד של המקלט-

1. #include <SPI.h>
2. #include <nRF24L01.h>
3. #include <RF24.h>
4. RF24 radio(9, 8);  // CE, CSN

5. const byte address[6] = "00001";

6. void setup()
{
7.   Serial.begin(9600);
 
  8. radio.begin();
 
  9. radio.openReadingPipe(0, address);
 
  10. radio.startListening();
}

11. void loop()
{
  12. if (radio.available())
  {
  13.  char text[32] = “ ”;
  14.  radio.read(&text, sizeof(text));
  15.  Serial.println(text);
  }
}

 

הסבר קוד לדוגמה מקלט

בתחילת הקוד אנו כוללים את ספריית הרדיו (שורות 1,2,3), בכדי שנוכל להשתמש בפקודות מיוחדות לרכיב, שורה אחרי זה אנחנו מגדירים את ה CE, CSN, (שורה 4) שורה אחרי זה אנחנו מגדירים את הכתובת בה הארדואינו ישדר, (אפשר לבחור כל חמישה מספרים ובלבד שהכתובת זהה בארדואינו המשדר ובארדואינו הקולט) (שורה 5) , בתוך הסטאפ אנחנו מפעילים את הסריאל מוניטור (שורה 7) ,  שורה 8 ו 9 מפעילות את הרדי, שורה 10 הופכת את הרכיב למקלט . בתוך הלופ משתמשים בפקודה  if (radio.available()) שהיא פקודה שבודקת האם הרדיו קולט משהו (שורה 12) ,במידה ויש זיהוי של שידור נכנס:מגדירים משתנה שיכול לקלוט את המידע הנשלח. במקרה פה זה- text (שורה 13) , ואז מבצעים פעולה של קריאת השדר תוך כדי צריבתו בזיכרון בתוך המשתנה שהוכן. (שורה 14) , ואז בסוף אנחנו מדפיסים את המשתנה text (שורה 15) ערך הפוטנציומטר .

קבצים מצורפים: (קוד, ספריות)
https://github.com/nRF24/RF24 הספרייה שצריך להוריד למחשב בשביל להשתמש ברכיב.
https://www.arduino.cc/en/Guide/Libraries/ הסבר על איך להתקין ספריות.

חלופות לרכיב

לתקשורת עם ארדואינו מרוחק יש עוד שתי שיטות של תקשורת, wifi, bluetooth.

wifi

 רכיבים רבים מתקשרים באמצעות WIFI, חיבור ארדואינו ל WIFI מאפשר לו לתקשר עם מגוון רחב של רכיבים המתאימים לתקשורת בצורה זו.  דוגמה למודול הוא ESP8266, אשר אפשר בעזרתו טלפון נייד ואפליקצייה יעודית, או אתר, להכין שלל פרויקטים החל בשלט, מנעול חכם לדלת, סנסורי חנייה לאוטו וכו'.

unnamed (6).png

תמונה של הרכיב ESP8266

תמונה3.png

Bluetooth

תקשורת Bluetooth, היא תקשורת רדיו של מכשירים, שעובדת בצורה הבאה,  עד 8 מכשירים המצויים בסמוך יכולים להתחבר  למעין "מיני-רשת", על גלי רדיו, במיני-רשת מועבר מידע, ברשת עצמה יש אחד שמשדר, וכל שאר המכשירים מגיבים לשידורים ממנו.
, יכלת של העברה של סירטונים, חיבור לטלפון הנייד מה שחוסך את הצורך בבניית שלט. צריכה מועטה של אנרגיה.
חסרונות השיטה הם,מרחק שידור קצר מאד של כמה מטרים, לא כל הרכיבים תומכים גם באפשרות של קבלת מידע ושליחת מידע. דוגמה למודול כזה הוא HC-06 אשר אפשר בעזרתו ובעזרת אפליקציה בטלפון לשלוט, בפעולות של הארדואינו, זה יכול לשמש כשלט, לוח בקרה וכו. אפילו להכין שולחן אינטראקטיבי עם לדים.

תמונה4.png
unnamed (7).png

תמונה של הרכיב HC-06

טבלה המשווה את שלושת הרכיבים

תמונה5.png

שגיאות שכדאי להמנע מהן וטיפים מועילים

זה לא רכיב שקל לעבוד איתו לכן אני ממליץ להתחיל עם קוד פשוט ומשם להתקדם. בעיות אשר נתקלתי בהן:
חיבור מתח יתר 5V- אי עבודה של הרכיב, נגרם מנתינה של יותר מדי כוח,( המודול צורך 3.3 V, נתינה של 5V תשרוף את המודול).  
הפרע בתשדורת שנגרמת על ידי  גלים אלקטרומגנטיים,יש לפתור בעיה זו על ידי ליפוף החוטים למעט הVCC בחוט הגראונד. בנוסף מומלץ להשתמש בחוטים הכי קצרים שאפשר בשביל למנוע הפרעות אלקטרומגנטיות.
עניין החיווט מאד חשוב, ואפילו טעות אחת קטנה בחיווט עלולה לגרום לאי תפעולו של המודול, לכן אני ממליץ לבדוק את החיווט ברגע שמשהו לא עובד.
בנוסף  אני ממליץ להשתמש בבית של המודול, הוא עוזר בדרכים רבות, דבר ראשון, הוא מפשט את ההבנה של איזה פין הוא מה. (יש סימון ברור של כל פין על בית המודול). בכך הוא מפשט את החיווט ואת הבדיקה של החיווט, בנוסף בית המודול מקבל חמישה וולט, וככה אי אפשר להרוג את המודול בנתינה של יותר מדי כוח. בנוסף הוא מקטין את ההפרעות האלקטרו מגנטיות, גם עם בית המודול אני ממליץ על ליפוף החוטים למעט הVCC, בחוט גראונד, למניעת הפרעות אלקטרומגנטיות.
אני חייב להגיד שבית המודול הציל לנו את הפרוייקט, לפני שהשתמשתי בו המודולים לא תמיד תקשרו בצורה רציפה ופשוט היו מפסיקים לתקשר. זה לא קרא לי מאז שהשתמשתי במודול.

.לכל בעיה שתתקלו בה תוכלו להתקשר אליי, או אפילו לשלוח ווטסאפ. 058-4280510 עומר.
 

אילוסטרציה של ליפוף חוטים

unnamed (8).png

חיווט של בית המודול

unnamed (3).png

ביבליוגרפיה

האתר How To Mechatronics

https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/

האתר Last Minute Engineers

https://lastminuteengineers.com/nrf24l01-arduino-wireless-communication/
האתר של מכון דוידסון https://davidson.weizmann.ac.il/online/askexpert/technology/%D7%9E%D7%94

-%D7%96%D7%94-bluetooth-%D7%9E%D7%A9%D7%94

לוגו חוף השרון.png