- היכרות עם מודול RF nRF24L01
- ממשק nRF24L01 עם Arduino
- צד המקלט: חיבורי מודול Arduino Uno nRF24L01
- צד משדר: חיבורי מודול Arduino ננו nRF24L01
- עבודה עם מודול משדר אלחוטי nRF24L01 +
- תכנות nRF24L01 עבור Arduino
- שליטה על מנוע סרוו באמצעות nRF24L01 באופן אלחוטי
בעוד האינטרנט של הדברים (IoT), תעשיה 4.0, תקשורת בין מכונה למכונות וכו 'הופכים פופולריים יותר ויותר, הצורך בתקשורת אלחוטית הפך לתפקיד, עם יותר מכונות / מכשירים לדבר ביניהם בענן. מעצבים משתמשים במערכות תקשורת אלחוטיות רבות כמו Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF וכו ', ובחירת המדיום תלויה בסוג היישום בו הוא משמש.
בין כולם, מדיום אלחוטי פופולרי אחד לתקשורת רשת מקומית הוא ה- nRF24L01. מודולים אלה פועלים על 2.4GHz (פס ISM) עם קצב שידור בין 250Kbps ל -2Mbps, וזה חוקי במדינות רבות וניתן להשתמש בהם ביישומים תעשייתיים ורפואיים. כמו כן, נטען כי בעזרת אנטנות מתאימות יכולים המודולים הללו לשדר ולקבל מרחק של 100 מטר ביניהם. נכון מעניין !!? לכן, במדריך זה נלמד עוד על מודולי nRF24l01 אלה וכיצד ניתן לממשק אותו לפלטפורמת מיקרו-בקר כמו Arduino. אנו נשתף גם כמה פתרונות לבעיות הנפוצות במהלך השימוש במודול זה.
היכרות עם מודול RF nRF24L01
מודולים nRF24L01 הם משדר מודולים, כלומר כל מודול יכול גם לשלוח ולקבל נתונים אבל מאז הם חצי דופלקס הם גם יכולים לשלוח או לקבל נתונים בזמן. למודול יש את ה- IC nRF24L01 הגנרי ממוליכים למחצה נורדיים שאחראי על העברת וקליטת נתונים. ה- IC מתקשר באמצעות פרוטוקול SPI ומכאן ניתן להתממשק בקלות עם כל מיקרו-בקרים. זה נעשה הרבה יותר קל עם Arduino מכיוון שהספריות זמינות. תרשים הפינים של מודול nRF24L01 תקן מוצג להלן
המודול פועל על מתח ההפעלה מ- 1.9 וולט ל -3.6 וולט (בדרך כלל 3.3 וולט) והוא צורך פחות פחות זרם של 12mA בלבד במהלך פעולה רגילה מה שהופך אותו ליעיל בסוללה ולכן יכול אפילו לפעול על תאי מטבע. למרות שמתח ההפעלה הוא 3.3 וולט, רוב הפינים סובלים 5 וולט ולכן ניתן להתממשק ישירות למיקרו בקרים 5V כמו ארדואינו. יתרון נוסף בשימוש במודולים אלה הוא שבכל מודול יש 6 צינורות. כלומר, כל מודול יכול לתקשר עם 6 מודולים אחרים להעברה או לקבל נתונים. זה הופך את המודול למתאים ליצירת רשתות כוכבים או רשת ביישומי IoT. כמו כן יש להם טווח כתובות רחב של 125 תעודות זהות ייחודיות, ולכן באזור סגור נוכל להשתמש ב -125 ממודולים אלה מבלי להפריע זה לזה.
ממשק nRF24L01 עם Arduino
במדריך זה נלמד כיצד לממשק את ה- nRF24L01 עם ארדואינו על ידי שליטה במנוע הסרוו המחובר לארדואינו אחד על ידי שינוי הפוטנציומטר על הארדואינו האחר. לשם הפשטות השתמשנו במודול nRF24L01 אחד כמשדר והשני הוא מקלט, אך ניתן לתכנת כל מודול לשלוח ולקבל נתונים בנפרד.
תרשים המעגל לחיבור מודול nRF24L01 עם Arduino מוצג להלן. עבור מגוון, השתמשתי ב- UNO עבור הצד המקלט וננו עבור הצד המשדר. אבל ההיגיון בחיבור נשאר זהה גם בלוחות ארדואינו אחרים כמו מיני, מגה.
צד המקלט: חיבורי מודול Arduino Uno nRF24L01
כאמור קודם ה- nRF24L01 מתקשר בעזרת פרוטוקול SPI. ב- Arduino Nano ו- UNO הפינים 11, 12 ו- 13 משמשים לתקשורת SPI. לפיכך אנו מחברים את פינים MOSI, MISO ו- SCK מ- nRF לסיכות 11, 12 ו- 13 בהתאמה. ניתן להגדיר את הפינים CE ו- CS, השתמשתי בסיכה 7 ו -8 כאן, אך ניתן להשתמש בכל סיכה על ידי שינוי התוכנית. מודול ה- nRF מופעל באמצעות הסיכה 3.3V על Arduino, אשר ברוב המקרים יעבוד. אם לא, ניתן לנסות ספק כוח נפרד. מלבד ממשק ה- nRF חיברתי גם מנוע סרוו לסיכה 7 והפעלתי אותו באמצעות הסיכה 5V בארדוינו. באופן דומה מעגל המשדר מוצג להלן.
צד משדר: חיבורי מודול Arduino ננו nRF24L01
גם חיבורי המשדר זהים, בנוסף השתמשתי בפוטנציומטר המחובר על פני פינת האדמה של 5 וולט של ארדואינו. המתח האנלוגי המוצא שישתנה בין 0-5 וולט מחובר לסיכה A7 של הננו. שני הלוחות מופעלים באמצעות יציאת ה- USB.
עבודה עם מודול משדר אלחוטי nRF24L01 +
עם זאת על מנת לגרום ל- nRF24L01 שלנו לעבוד ללא רעש, כדאי שנשקול את הדברים הבאים. אני עובד על nRF24L01 + זה זמן רב ולמדתי את הנקודות הבאות שיכולות לעזור לך להכות על קיר. אתה יכול לנסות את אלה כאשר המודולים לא פעלו כרגיל.
1. רוב המודולים nRF24L01 + בשוק מזויפים. הזולים שאנו יכולים למצוא ב- eBay וב- Amazon הם הגרועים ביותר (אל דאגה, עם מעט שינויים שנוכל לגרום להם לעבוד)
2. הבעיה העיקרית היא ספק הכוח, ולא הקוד שלך. רוב הקודים המקוונים יעבדו כראוי, לי עצמי יש קוד עבודה שבדקתי באופן אישי, הודע לי אם אתה זקוק להם.
3. שימו לב כי המודולים המודפסים כ- NRF24L01 + הם למעשה Si24Ri (כן מוצר סיני).
4. השיבוט והמודולים המזויפים יצרכו יותר כוח, ולכן אל תפתחו את מעגל ההספק שלכם בהתבסס על גליון הנתונים nRF24L01 +, מכיוון של- Si24Ri תהיה צריכת זרם גבוהה כ -250 mA.
5. היזהר מאפלות מתח וזרמי זרם, מודולים אלה רגישים מאוד ועלולים להישרף בקלות. (;-(טיגנו עד כה 2 מודולים)
6. הוספת כמה קבלים (10uF ו- 0.1uF) על פני Vcc ו- GND של המודול עוזרת להפוך את האספקה שלך לטהורה וזה עובד עבור מרבית המודולים.
ובכל זאת אם יש לך בעיות לדווח על קטע ההערות או לקרוא דרך זה, או לשאול את שאלותיך בפורום שלנו.
בדוק גם את הפרוייקט הסמיך שלנו ביצירת חדר צ'אט באמצעות nRF24L01.
תכנות nRF24L01 עבור Arduino
זה היה קל מאוד להשתמש במודולים אלה עם Arduino, בגלל הספרייה הזמינה שנוצרה על ידי maniacbug ב- GitHub. לחץ על הקישור כדי להוריד את הספרייה כתיקיית ZIP ולהוסיף אותה ל- ID של Arduino שלך באמצעות האפשרות Sketch -> Include Library -> Add.ZIP . לאחר הוספת הספרייה נוכל להתחיל בתכנות לפרויקט. עלינו לכתוב שתי תוכניות, האחת מיועדת לצד המשדר והשנייה לצד המקלט. עם זאת, כפי שאמרתי קודם, כל מודול יכול לעבוד גם כמשדר וכמקלט. שתי התוכניות ניתנות בסוף עמוד זה, בקוד המשדר תועמד על אפשרות המקלט ובתוכנית המקלט יוצג תגובה על קוד המשדר. אתה יכול להשתמש בו אם אתה מנסה פרויקט שבו המודול צריך לעבוד כשניהם. בהמשך מוסבר על עבודתה של התוכנית.
כמו כל התוכניות אנו מתחילים לכלול את קבצי הכותרת. מכיוון שה- nRF משתמש בפרוטוקול SPI כללנו את כותרת ה- SPI וגם את הספרייה שהורדנו זה עתה. ספריית סרוו משמשת לשליטה במנוע הסרוו.
#לִכלוֹל
השורה הבאה היא השורה החשובה בה אנו מדריכים את הספרייה לגבי סיכות CE ו- CS. בתרשים המעגלים שלנו חיברנו את CE לסיכה 7 ו- CS לסיכה 8 ולכן הגדרנו את הקו כ-
RF24 myRadio (7, 8);
יש להכריז על כל המשתנים המשויכים לספריית ה- RF כמבנה משתנה מורכב. בתוכנית זו המשתנה msg משמש לשליחת וקבלת נתונים ממודול ה- RF.
חבילת struct { int msg; }; חבילת חבילת מבנה typedef; נתוני חבילה;
לכל מודול RF יש כתובת ייחודית באמצעותה הוא יכול לשלוח נתונים למכשיר המתאים. מכיוון שיש לנו רק זוג אחד כאן, הגדרנו את הכתובת לאפס גם במשדר וגם במקלט, אך אם יש לך מודול מרובה תוכל להגדיר את המזהה לכל מחרוזת ייחודית בת 6 ספרות.
כתובות בתים = {"0"};
לאחר מכן בתוך פונקציית הגדרת הריק אנו מאתחלים את מודול ה- RF ונכנס לעבודה עם רצועת 115 נקייה מרעש וגם מגדירים את המודול לעבוד במצב צריכת חשמל מינימלי במהירות מינימלית של 250 קילו-סיביות לשנייה.
הגדרת חלל () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // רצועת 115 מעל אותות WIFI myRadio.setPALevel (RF24_PA_MIN); // MINRADIO.setDataRate ( זעם נמוך) מיני נמוך (RF24_250KBPS); // מהירות מינימלית myservo.attach (6); Serial.print ("אתחול ההתקנה"); עיכוב (500); }
הפונקציה void WriteData () כותבת את הנתונים שהועברו אליה. כפי שנאמר קודם ל- nRF יש 6 צינורות שונים אליהם נוכל לקרוא או לכתוב נתונים, כאן השתמשנו ב- 0xF0F0F0F066 ככתובת לכתיבת נתונים. בצד המקלט עלינו להשתמש באותה כתובת בפונקציית ReadData () כדי לקבל את הנתונים שנכתבו.
בטל WriteData () { myRadio.stopListening (); // הפסק קבלה והתחל להעביר את myRadio.openWritingPipe (0xF0F0F0F066); // שולח נתונים בכתובת זו של 40 סיביות myRadio.write (& data, sizeof (data)); עיכוב (300); }
פונקציה void WriteData () קוראת את הנתונים ומכניסה אותם למשתנה. שוב מתוך 6 צינורות שונים באמצעותם אנו יכולים לקרוא או לכתוב נתונים כאן השתמשנו ב- 0xF0F0F0F0AA ככתובת לקריאת נתונים. המשמעות היא שמשדר המודול האחר כתב משהו על כתובת זו ולכן אנו קוראים אותו מאותה.
בטל ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // איזה צינור לקרוא, 40 סיביות כתובת myRadio.startListening (); // הפסיקו את השידור והתחילו לחשוף אם (myRadio.available ()) { בזמן (myRadio.available ()) { myRadio.read (& נתונים, sizeof (data)); } Serial.println (data.text); } }
מלבד שורות אלה השורות האחרות בתוכנית משמשות לקריאת ה- POT ולהמרתו ל- 0 עד 180 באמצעות פונקציית המפה ושולחות אותו למודול המקלט שם אנו שולטים בסרוו בהתאם. לא הסברתי אותם שורה אחר שורה שכן כבר למדנו זאת במדריך שלנו לממשקי סרוו.
שליטה על מנוע סרוו באמצעות nRF24L01 באופן אלחוטי
ברגע שתהיה מוכן עם התוכנית, העלה את קוד המשדר והמקלט (להלן) בלוחות Arduino בהתאמה והפעל אותם באמצעות יציאת USB. ניתן גם להפעיל את המסך הטורי של שני הלוחות כדי לבדוק איזה ערך מועבר ומה מתקבל. אם הכל עובד כצפוי כאשר אתה מסובב את כפתור ה- POT בצד המשדר, על הסרוו בצד השני להסתובב בהתאם.
העבודה המלאה של הפרויקט מודגמת בסרטון להלן. זה די רגיל לא לגרום למודולים האלה לעבוד בניסיון הראשון. אם נתקלת בבעיה כלשהי בדוק את הקוד והחיווט שוב ונסה את ההנחיות לעיל בנושא בעיות בעיות. אם שום דבר לא עובד פרסם את הבעיה שלך בפורומים או בסעיף ההערות ואנסה לפתור אותם.