- المكونات مطلوبة
- 433 ميجا هرتز وحدة الإرسال والاستقبال RF)
- رسم تخطيطي لدائرة مرسل الترددات اللاسلكية مع STM32F103C8
- مخطط الدائرة لجهاز استقبال الترددات اللاسلكية مع Arduino Uno
- برمجة STM32F103C8 لنقل التردد اللاسلكي
- برمجة Arduino UNO كجهاز استقبال RF
- اختبار جهاز إرسال واستقبال الترددات اللاسلكية STM 32
يصبح إنشاء مشاريع لاسلكية في الإلكترونيات المدمجة أمرًا مهمًا ومفيدًا للغاية حيث لا توجد أسلاك متشابكة في كل مكان مما يجعل الجهاز أكثر سهولة وقابلية للحمل. هناك العديد من التقنيات اللاسلكية مثل Bluetooth و WiFi و 433 MHz RF (تردد الراديو) وما إلى ذلك. لكل تقنية مزاياها وعيوبها مثل التكلفة أو المسافة أو نقل النطاق أو السرعة أو الإنتاجية وما إلى ذلك. اليوم سنستخدم وحدة RF مع STM32 لإرسال واستقبال البيانات لاسلكيًا. إذا كنت جديدًا على STM32 Microcontroller ، فابدأ بـ Blinking LED مع STM32 باستخدام Arduino IDE وتحقق من جميع مشاريع STM32 الأخرى هنا.
بصرف النظر عن هذا ، استخدمنا أيضًا الوحدة اللاسلكية RF 433Mhz مع متحكمات دقيقة أخرى لبناء بعض المشاريع التي يتم التحكم فيها لاسلكيًا ، مثل:
- الأجهزة المنزلية التي تسيطر عليها الترددات اللاسلكية
- RF المصابيح التي يتم التحكم فيها عن بعد باستخدام Raspberry Pi
- روبوت التحكم بالترددات اللاسلكية
- واجهة وحدة RF مع Arduino
- PIC to PIC Communication باستخدام وحدة RF
هنا سنقوم بتوصيل وحدة لاسلكية 433 ميجا هرتز مع متحكم STM32F103C8. ينقسم المشروع إلى قسمين. و سيتم ربطه الارسال مع STM32 و سيتم ربطه المتلقي مع اردوينو UNO. سيكون هناك مخطط دائري مختلف ورسومات لكل من جزء الإرسال والاستقبال.
في هذا البرنامج التعليمي ، يرسل RF Transmitter قيمتين إلى جانب جهاز الاستقبال: المسافة المقاسة باستخدام مستشعر فوق صوتي وقيمة مقياس الجهد ADC (من 0 إلى 4096) والتي تم تعيينها كرقم من (0 إلى 100). و استقبال الترددات اللاسلكية لاردوينو يتلقى كل من القيم وطباعة تلك المسافة وعدد القيم في 16X2 عرض LCD لاسلكيا.
المكونات مطلوبة
- متحكم STM32F103C8
- اردوينو UNO
- 433 ميجا هرتز RF الارسال والاستقبال
- جهاز استشعار بالموجات فوق الصوتية (HC-SR04)
- شاشة LCD مقاس 16 × 2
- 10 كيلو الجهد
- اللوح
- توصيل الأسلاك
433 ميجا هرتز وحدة الإرسال والاستقبال RF)
Pinout مرسل RF:
433 ميجا هرتز RF الارسال |
دبوس الوصف |
ANT |
لتوصيل الهوائي |
GND |
GND |
VDD |
3.3 إلى 5 فولت |
البيانات |
البيانات المراد إرسالها إلى المتلقي معطاة هنا |
دبوس استقبال RF:
433 ميجا هرتز استقبال الترددات اللاسلكية |
استعمال |
ANT |
لتوصيل الهوائي |
GND |
GND |
VDD |
3.3 إلى 5 فولت |
البيانات |
البيانات التي سيتم استلامها من المرسل |
CE / DO |
وهو أيضًا دبوس بيانات |
مواصفات الوحدة النمطية 433 ميجا هرتز:
- جهد تشغيل جهاز الاستقبال: 3 فولت إلى 5 فولت
- جهد تشغيل جهاز الإرسال: 3 فولت إلى 5 فولت
- تردد التشغيل: 433 ميجا هرتز
- مسافة الإرسال: 3 أمتار (بدون هوائي) إلى 100 متر (كحد أقصى)
- تقنية التحوير: اسأل (مفتاح إزاحة السعة)
- سرعة نقل البيانات: 10 كيلو بت في الثانية
رسم تخطيطي لدائرة مرسل الترددات اللاسلكية مع STM32F103C8
اتصالات الدائرة بين مرسل الترددات اللاسلكية و STM32F103C8:
STM32F103C8 |
مرسل RF |
5 فولت |
VDD |
GND |
GND |
PA10 |
البيانات |
NC |
ANT |
توصيلات الدائرة بين مستشعر الموجات فوق الصوتية و STM32F103C8:
STM32F103C8 |
جهاز استشعار بالموجات فوق الصوتية (HC-SR04) |
5 فولت |
VCC |
PB1 |
علم حساب المثلثات |
PB0 |
صدى صوت |
GND |
GND |
A الجهد 10K متصل مع STM32F103C8 لتوفير مدخلات قيمة النظير (0 إلى 3.3V) إلى PA0 ADC دبوس STM32.
مخطط الدائرة لجهاز استقبال الترددات اللاسلكية مع Arduino Uno
توصيلات الدائرة بين مستقبل الترددات اللاسلكية واردوينو أونو:
اردوينو UNO |
مستقبل الترددات اللاسلكية |
5 فولت |
VDD |
GND |
GND |
11 |
البيانات |
NC |
ANT |
توصيلات الدائرة بين شاشة LCD مقاس 16x2 و Arduino UNO:
اسم دبوس LCD |
اردوينو UNO Pin Name |
الأرض (Gnd) |
مطحون (G) |
VCC |
5 فولت |
VEE |
دبوس من مركز مقياس الجهد من أجل التباين |
اختيار التسجيل (RS) |
2 |
قراءة / كتابة (RW) |
مطحون (G) |
تمكين (بالإنكليزية) |
3 |
بت البيانات 4 (DB4) |
4 |
بت البيانات 5 (DB5) |
5 |
بت البيانات 6 (DB6) |
6 |
بت البيانات 7 (DB7) |
7 |
LED إيجابي |
5 فولت |
سلبي LED |
مطحون (G) |
سيتم شرح الترميز بإيجاز أدناه. سيكون هناك جزءان من المخطط حيث سيكون الجزء الأول قسم جهاز الإرسال والآخر قسم جهاز الاستقبال. سيتم تقديم جميع ملفات الرسم وفيديو العمل في نهاية هذا البرنامج التعليمي. لمعرفة المزيد حول توصيل وحدة RF مع Arduino Uno ، اتبع الرابط.
برمجة STM32F103C8 لنقل التردد اللاسلكي
يمكن برمجة STM32F103C8 باستخدام Arduino IDE. A مبرمج FTDI أو ST-لينك ليست هناك حاجة لتحميل رمز لSTM32F103C8. ما عليك سوى الاتصال بجهاز الكمبيوتر عبر منفذ USB من STM32 وابدأ البرمجة باستخدام ARDUINO IDE. يمكنك تعلم برمجة STM32 في Arduino IDE باتباع الرابط.
في قسم جهاز الإرسال ، يتم قياس مسافة الكائن بـ `` سم '' باستخدام مستشعر فوق صوتي وقيمة الرقم من (0 إلى 100) مضبوطة باستخدام مقياس الجهد الذي يتم إرساله عبر جهاز إرسال RF المتصل بـ STM32.
تم تضمين مكتبة Radiohead أولاً ، ويمكن تنزيلها من هنا. حيث تستخدم هذه المكتبة ASK (تقنية Amplitude Shift Keying) لنقل البيانات واستقبالها. هذا يجعل البرمجة سهلة للغاية. يمكنك تضمين مكتبة في الرسم بالانتقال إلى Sketch-> include library-> Add.zip library.
#تضمن
كما هو الحال في هذا البرنامج التعليمي في جانب جهاز الإرسال ، يتم استخدام مستشعر فوق صوتي لقياس المسافة بحيث يتم تحديد المشغل ودبابيس الصدى.
#define trigPin PB1 #define echoPin PB0
بعد ذلك ، يتم تعيين اسم الكائن لمكتبة RH_ASK على أنه rf_driver مع معلمات مثل speed (2000) و RX pin (PA9) و TX pin (PA10).
RH_ASK rf_driver (2000 ، PA9 ، PA10) ؛
بعد ذلك يتم الإعلان عن متغير السلاسل النصية المطلوب في هذا البرنامج.
سلسلة Transmit_number ؛ سلسلة الإرسال ؛ سلسلة الإرسال ؛
بعد ذلك في إعداد الفراغ () ، تتم تهيئة كائن RH_ASK rf_driver.
rf_driver.init () ،
بعد ذلك يتم تعيين دبوس المشغل على أنه دبوس الإخراج ويتم تعيين PA0 (متصل بمقياس الجهد) ودبوس الصدى على أنه دبوس INPUT. يبدأ الاتصال التسلسلي بمعدل الباود 9600.
Serial.begin (9600) ؛ pinMode (PA0 ، الإدخال) ؛ pinMode (echoPin ، INPUT) ؛ pinMode (trigPin ، الإخراج) ؛
بعد ذلك في الحلقة الفارغة () ، يتم تحويل قيمة مقياس الجهد التي تمثل الجهد التناظري للإدخال إلى قيمة رقمية (تم العثور على قيمة 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 ، عالية) ؛ تأخير ميكروثانية (10) ؛ digitalWrite (trigPin ، LOW) ؛
يستشعر دبوس الصدى الموجة المنعكسة مرة أخرى ، وهي المدة الزمنية التي تنعكس فيها الموجة المحفزة مرة أخرى وتستخدم في حساب مسافة الكائن باستخدام الصيغة. تعرف على المزيد حول كيفية قيام مستشعر الموجات فوق الصوتية بحساب المسافة باتباع الرابط.
مدة طويلة = pulseIn (echoPin، HIGH) ؛ مسافة التعويم = المدة * 0.034 / 2 ؛
الآن يتم تحويل كل من رقم البيانات والمسافة المقاسة إلى بيانات سلسلة وتخزينها في متغيرات السلسلة المعنية.
Transmit_number = سلسلة (pwmvalue) ، Transmit_distance = سلسلة (مسافة) ؛
تتم إضافة كل من السلسلة كسطر واحد وتخزينها في سلسلة تسمى الإرسال والفاصلة "،" تستخدم لفصل سلسلتين.
الإرسال = transmit_pwm + "،" + الإرسال_المسافة ؛
يتم تحويل سلسلة الإرسال إلى مجموعة أحرف.
const char * msg = transmit.c_str () ؛
يتم إرسال البيانات وانتظر حتى يتم إرسالها.
rf_driver.send ((uint8_t *) msg، strlen (msg)) ؛ rf_driver.waitPacketSent () ،
يتم أيضًا عرض بيانات السلسلة المرسلة في Serial Monitor.
Serial.println (msg) ؛
برمجة Arduino UNO كجهاز استقبال RF
تمت برمجة Arduino UNO باستخدام Arduino IDE. في قسم جهاز الاستقبال ، يتم تقسيم البيانات التي يتم إرسالها من قسم جهاز الإرسال واستلامها بواسطة وحدة مستقبل التردد اللاسلكي وبيانات السلسلة المستلمة إلى بيانات خاصة (المسافة والرقم) ويتم عرضها على شاشة LCD مقاس 16 × 2.
دعونا نرى ترميز المتلقي باختصار:
كما هو الحال في قسم جهاز الإرسال ، يتم تضمين مكتبة RadiohHead أولاً. حيث تستخدم هذه المكتبة ASK (تقنية مفاتيح تغيير الاتساع) لنقل البيانات واستقبالها. هذا يجعل البرمجة سهلة للغاية.
#تضمن
نظرًا لاستخدام شاشة LCD هنا ، يتم أيضًا تضمين مكتبة Liquidcrystal.
#تضمن
ويتم تحديد دبابيس شاشة العرض LCD مقاس 16 × 2 المتصلة بـ Arduino UNO والإعلان عنها باستخدام شاشة LCD ككائن.
LiquidCrystal LCD (2،3،4،5،6،7) ؛
بعد ذلك ، يتم الإعلان عن متغيرات بيانات السلسلة لتخزين بيانات السلسلة.
سلسلة str_receive ؛ سلسلة str_number ؛ سلسلة str_distance ؛
تم الإعلان عن كائن مكتبة Radiohead.
RH_ASK RF ؛
الآن في إعداد الفراغ () ، تم ضبط شاشة LCD على وضع 16x2 ويتم عرض رسالة ترحيب ومسحها.
lcd.begin (16.2) ؛ lcd.print ("CIRCUIT DIGEST") ؛ 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) ؛
إذا كانت السلسلة متاحة في وحدة مستقبل الترددات اللاسلكية ، فإن وظيفة if تتحقق من الحجم ويتم تنفيذها. يتم استخدام rf.recv () لتلقي البيانات.
إذا (rf.recv (buf، & buflen))
يحتوي buf على السلسلة المستلمة ، لذا يتم تخزين السلسلة المستلمة في متغير سلسلة str_receive .
str_receive = String ((char *) buf) ؛
تُستخدم حلقة for هذه لتقسيم السلسلة المستلمة إلى سلسلتين إذا اكتشفت "،" بين سلسلتين.
لـ (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 (مسافة ، 3) ؛ str_number.toCharArray (numberstring، 3) ؛
بعد ذلك ، قم بتحويل مصفوفة الأحرف إلى عدد صحيح باستخدام atoi ()
المسافة int = atoi (distancestring) ؛ عدد int = atoi (numberstring) ؛
بعد التحويل إلى قيم صحيحة ، يتم عرض المسافة والرقم في شاشة LCD مقاس 16 × 2
lcd.setCursor (0،0) ؛ lcd.print ("الرقم:") ؛ lcd.print (رقم) ؛ lcd.setCursor (0،1) ؛ lcd.print ("المسافة:") ؛ lcd.print (المسافة) ؛ lcd.print ("سم") ؛
بعد تحميل كل من الرموز ، أي جهاز الإرسال والاستقبال في STM32 و Arduino UNO على التوالي ، يتم إرسال البيانات مثل الرقم ومسافة الكائن المقاسة باستخدام STM32 إلى مستقبل التردد اللاسلكي عبر مرسل الترددات اللاسلكية ويتم عرض القيم المستلمة في شاشة LCD لاسلكيًا.
اختبار جهاز إرسال واستقبال الترددات اللاسلكية STM 32
1. عندما يكون الرقم عند 0 وتكون مسافة الجسم عند 6 سم.
2. عندما يكون رقم 47 ومسافة الجسم 3 سم.