- רכיבים נדרשים
- משדר ומקלט RF 433Mhz)
- תרשים מעגל של משדר RF עם STM32F103C8
- תרשים מעגל של מקלט RF עם Arduino Uno
- תכנות STM32F103C8 להעברת RF אלחוטי
- תכנות Arduino UNO כמקלט RF
- בדיקת משדר מקלט RF מבוסס STM 32
ביצוע פרויקטים אלחוטיים באלקטרוניקה משובצת הופך לחשוב מאוד ומועיל מכיוון שאין חוטים מקולקלים בכל רחבי הדרך שהופכים את המכשיר ליותר שימושי ונייד. ישנן טכנולוגיות אלחוטיות שונות כגון Bluetooth, WiFi, 433 מגה-הרץ RF (תדר רדיו) וכו '. לכל טכנולוגיה יתרונות וחסרונות משלה כגון עלות, העברת מרחק או טווח, מהירות או תפוקה וכו'. היום נשתמש במודול RF עם STM32 כדי לשלוח ולקבל את הנתונים באופן אלחוטי. אם אתה חדש ב- STM32 מיקרו-בקר, התחל עם LED מהבהב עם STM32 באמצעות Arduino IDE ובדוק את כל שאר הפרויקטים של STM32 כאן.
מלבד זאת, השתמשנו גם במודול אלחוטי RF 433Mhz עם בקרי מיקרו אחרים לבניית כמה פרויקטים מבוקרים אלחוטיים, כגון:
- מכשירי חשמל ביתיים מבוקרי RF
- נוריות RF בשלט רחוק באמצעות פטל פי
- רובוט מבוקר RF
- ממשק RF מודול עם Arduino
- תקשורת PIC ל- PIC באמצעות מודול RF
כאן נתממשק מודול אלחוטי 433MHz RF עם מיקרו-בקר STM32F103C8. הפרויקט מחולק לשני חלקים. המשדר יהיה להתממשק עם STM32 ואת המקלט יהיה להתממשק עם Arduino UNO. יהיו תרשימי מעגל ושרטוטים שונים עבור חלקם המשדרים וגם מקבלים.
במדריך זה, משדר RF שולח שני ערכים לצד המקלט: המרחק שנמדד באמצעות חיישן קולי וערך ADC פוטנציומטר (0 עד 4096) הממופה כמספר מ (0 עד 100). מקלט ה- RF של Arduino מקבל את הערכים ומדפיס את ערכי המרחק והמספר בתצוגת LCD בגודל 16x2 באופן אלחוטי.
רכיבים נדרשים
- STM32F103C8 מיקרו-בקר
- ארדואינו UNO
- משדר ומקלט RF 433Mhz
- חיישן קולי (HC-SR04)
- תצוגת LCD 16x2
- פוטנציומטר 10k
- קרש לחם
- חוטי חיבור
משדר ומקלט RF 433Mhz)
משדר RF Pinout:
משדר RF 433Mhz |
תיאור סיכה |
נְמָלָה |
לחיבור אנטנה |
GND |
GND |
VDD |
3.3 עד 5V |
נתונים |
הנתונים שיועברו למקלט מובאים כאן |
מקלט RF Pinout:
מקלט RF 433Mhz |
להשתמש |
נְמָלָה |
לחיבור אנטנה |
GND |
GND |
VDD |
3.3 עד 5V |
נתונים |
נתונים שיתקבלו מהמשדר |
CE / DO |
זהו גם סיכת נתונים |
433 מגה-הרץ מפרטי מודול:
- מקלט מתח הפעלה: 3V עד 5V
- משדר הפעלה מתח: 3V עד 5V
- תדר הפעלה: 433 מגהרץ
- מרחק שידור: 3 מטר (ללא אנטנה) עד 100 מטר (מקסימום)
- טכניקת אפנון: ASK (מקשי משמרת משרעת)
- מהירות העברת נתונים: 10Kbps
תרשים מעגל של משדר RF עם STM32F103C8
חיבורי מעגלים בין משדר RF ל- STM32F103C8:
STM32F103C8 |
משדר RF |
5V |
VDD |
GND |
GND |
PA10 |
נתונים |
NC |
נְמָלָה |
חיבורי מעגלים בין חיישן קולי ל- STM32F103C8:
STM32F103C8 |
חיישן קולי (HC-SR04) |
5V |
VCC |
PB1 |
טְרִיגוֹנוֹמֶטרִיָה |
PB0 |
הֵד |
GND |
GND |
פוטנציומטר 10k קשור STM32F103C8 לספק ערך קלט אנלוגי (0 עד 3.3 וולט) אל PA0 סיכה ADC של STM32.
תרשים מעגל של מקלט RF עם Arduino Uno
חיבורי מעגלים בין מקלט RF ל- Arduino UNO:
ארדואינו UNO |
מקלט RF |
5V |
VDD |
GND |
GND |
11 |
נתונים |
NC |
נְמָלָה |
חיבורי מעגלים בין 16x2 LCD ו- Arduino UNO:
שם פין LCD |
שם הסיכה של Arduino UNO |
קרקע (GND) |
קרקע (G) |
VCC |
5V |
VEE |
סיכה ממרכז פוטנציומטר לניגודיות |
בחר הרשמה (RS) |
2 |
קריאה / כתיבה (RW) |
קרקע (G) |
הפעל (EN) |
3 |
נתונים ביט 4 (DB4) |
4 |
נתונים ביט 5 (DB5) |
5 |
נתונים ביט 6 (DB6) |
6 |
נתונים ביט 7 (DB7) |
7 |
LED חיובי |
5V |
LED שלילי |
קרקע (G) |
הקידוד יוסבר בקצרה להלן. יהיו שני חלקים של הסקיצה כאשר החלק הראשון יהיה קטע משדר ואחר יהיה קטע מקלט. כל קבצי השרטוטים וסרטון העבודה ינתנו בסוף הדרכה זו. למידע נוסף על ממשק מודול RF עם Arduino Uno, עקוב אחר הקישור.
תכנות STM32F103C8 להעברת RF אלחוטי
ניתן לתכנת את STM32F103C8 באמצעות Arduino IDE. אין צורך במתכנת FTDI או ST-Link כדי להעלות את הקוד ל- STM32F103C8. כל שעליך לעשות הוא להתחבר למחשב באמצעות יציאת USB של STM32 ולהתחיל לתכנת עם ARDUINO IDE. תוכל ללמוד תכנות STM32 שלך ב- Arduino IDE על ידי לחיצה על הקישור.
בקטע המשדר נמדד מרחק האובייקט ב- 'ס"מ' באמצעות חיישן אולטראסוני וערך המספר מ (0 עד 100) מוגדר באמצעות פוטנציומטר המועבר באמצעות משדר RF המממשק ל- STM32.
ראשית כלולה ספריית רדיוהד, ניתן להוריד אותה מכאן. מכיוון שספרייה זו משתמשת ב- ASK (Amplitude Shift Keying Technique) כדי להעביר ולקבל נתונים. זה מקל מאוד על התכנות. אתה יכול לכלול את הספרייה בסקיצה על ידי מעבר לסקיצה-> כולל ספרייה-> הוסף ספריית zip.
#לִכלוֹל
כמו במדריך זה בצד המשדר, נעשה שימוש בחיישן קולי למדידת המרחק כך שמוגדרים ההדק והסיכות.
#define trigPin PB1 #define echoPin PB0
בהמשך מוגדר שם האובייקט לספריית RH_ASK כ- rf_driver עם הפרמטרים כגון מהירות (2000), סיכת RX (PA9) ופין TX (PA10).
RH_ASK rf_driver (2000, PA9, PA10);
בשלב הבא מוכרז המשתנה מיתרים הדרוש בתוכנית זו.
מחרוזת שידור_מספר; מחרוזת שידור_מרחק; מחרוזת משדרת;
הבא בהתקנת הריק (), האובייקט עבור RH_ASK rf_driver מאותחל.
rf_driver.init ();
לאחר מכן את סיכת ההדק מוגדרים כסיכת OUTPUT ואת ה- PA0 (מחובר לפוטנציומטר) וסיכת ההד מוגדרת כסיכת INPUT. תקשורת טורית מתחילה בקצב שידור של 9600.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
הבא במעגל הריק (), קודם ערך הפוטנציומטר שהוא הקלט המתח האנלוגי מומר לערך דיגיטלי (נמצא ערך ADC). כמו ADC של STM32 יש רזולוציה של 12 סיביות. לכן, הערך הדיגיטלי משתנה בין (0 ל- 4096) אשר ממופה ל (0 עד 100).
int analoginput = analogRead (PA0); int pwmvalue = מפה (קלט אנלוגי, 0,4095,0,100);
לאחר מכן המרחק נמדד באמצעות חיישן קולי על ידי הגדרת ההדק גבוה ונמוך עם עיכוב של 2 מיקרו שניות.
digitalWrite (trigPin, LOW); עיכוב מיקרו-שניות (2); digitalWrite (trigPin, HIGH); עיכוב מיקרו-שניות (10); digitalWrite (trigPin, LOW);
סיכת ההד חשה את הגל המוחזר לאחור, כלומר משך הזמן שגל המופעל מוחזר לאחור משמש לחישוב מרחק האובייקט באמצעות הנוסחה. למידע נוסף על אופן חישוב המרחק על ידי חיישן קולי, על ידי לחיצה על הקישור.
משך זמן ארוך = pulseIn (echoPin, HIGH); מרחק לצוף = משך * 0.034 / 2;
כעת הן מספר הנתונים והן המרחק שנמדד מומרים לנתוני מחרוזת ומאוחסנים במשתני מחרוזת בהתאמה.
transmit_number = מחרוזת (pwmvalue); transmit_distance = מחרוזת (מרחק);
שני המחרוזות מתווספות כשורה אחת ומאוחסנות במחרוזת הנקראת שידור ופסיק "," משמשת להפרדת שני מחרוזות.
שידור = שידור_פוום + "," + שידור_מרחק;
מחרוזת השידור מומרת למערך תווים.
const char * msg = transmit.c_str ();
הנתונים מועברים והמתינו עד שיישלחו.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
נתוני המחרוזות שנשלחו מוצגים גם בצג הסידורי.
Serial.println (msg);
תכנות Arduino UNO כמקלט RF
UND של ארדואינו מתוכנת באמצעות IDE של ארדואינו. בקטע המקלט הנתונים המועברים מחלק המשדר ומתקבלים על ידי מודול מקלט ה- RF ונתוני המיתרים המתקבלים מחולקים לנתונים בהתאמה (מרחק ומספר) ומוצגים בתצוגת LCD 16x2.
בואו נראה את קידוד המקלט בקצרה:
כמו בסעיף המשדרים תחילה ספריית RadiohHead כלולה. מכיוון שספרייה זו משתמשת ב- ASK (Amplitude Shift Keying Technique) כדי להעביר ולקבל נתונים. זה מקל מאוד על התכנות.
#לִכלוֹל
כמו שמשתמשים כאן בתצוגת LCD כך גם ספריית הקריסטלים הנוזלים כלולה.
#לִכלוֹל
וסיכות התצוגה 16x2 LCD המחוברות ל- Arduino UNO מוגדרות והוכרזות באמצעות lcd כאובייקט.
LiquidCrystal lcd (2,3,4,5,6,7);
בשלב הבא מוצהרים משתני נתוני מחרוזת לאחסון נתוני מחרוזות.
מחרוזת str_reciveive; מחרוזת str_number; מחרוזת str_distance;
האובייקט לספריית רדיוהד הוכרז.
RH_ASK rf;
כעת בהגדרת הריק (), תצוגת ה- LCD מוגדרת במצב 16x2 והודעת קבלת פנים מוצגת ומנקה.
lcd.begin (16,2); lcd.print ("מעגל מעגל"); lcd.setCursor (0,1); lcd.print ("RF עם STM32"); עיכוב (5000); lcd.clear ();
לאחר מכן, האובייקט rf מאותחל.
rf.init ();
כעת בלולאה הריקנית (), ה- Array buf מוכרז בגודל 7. היות ולנתונים שנשלחו מהמשדר יש 7 כולל ",". לכן, שנה זאת בהתאם לנתונים שיש להעביר.
uint8_t buf; uint8_t buflen = sizeof (buf);
אם המחרוזת זמינה במודול המקלט rf, פונקציית if בודקת את הגודל והיא מבוצעת. Rf.recv () משמש כדי לקבל נתונים.
אם (rf.recv (buf, & buflen))
ל- buf יש את המחרוזת שהתקבלה אז המחרוזת שהתקבלה נשמרת במשתנה מחרוזת str_receive .
str_receive = מחרוזת ((char *) buf);
זה עבור לולאה משמש לפצל את המחרוזת קבלה לשתי אם הוא מזהה את "" ב-בין שתי מחרוזות.
עבור (int i = 0; i <str_receive.length (); i ++) { if (str_receive.substring (i, i + 1) == ",") { str_number = str_receive.substring (0, i); str_distance = str_receive.substring (i + 1); לשבור; }
שני מערכי תווים לשני ערכים מוצהרים והמחרוזת המפוצלת לשניים נשמרת במערך מכובד על ידי המרת מחרוזת למערך תווים.
מחרוזת מספר חריפים; הרחבת חרם; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (מחרוזת מספרים, 3);
לאחר מכן להמיר את מערך התווים למספר שלם באמצעות atoi ()
מרחק int = אטוי (distancestring); int מספר = אטוי (מספר מחרוזת);
לאחר ההמרה לערכים שלמים, ערכי המרחק והמספר מוצגים בתצוגת LCD בגודל 16x2
lcd.setCursor (0,0); lcd.print ("מספר:"); lcd.print (מספר); lcd.setCursor (0,1); lcd.print ("מרחק:"); lcd.print (מרחק); lcd.print ("ס"מ");
לאחר העלאת שני הקודים כלומר משדר ומקלט ב- STM32 ו- Arduino UNO בהתאמה, הנתונים כגון המספר ומרחק האובייקט שנמדדו באמצעות STM32 מועברים למקלט ה- RF באמצעות משדר RF והערכים שהתקבלו מוצגים בתצוגת LCD באופן אלחוטי.
בדיקת משדר מקלט RF מבוסס STM 32
1. כאשר המספר הוא 0 ומרחק האובייקט הוא 6 ס"מ.
2. כאשר המספר 47 ומרחק האובייקט הוא 3 ס"מ.