تجارب بسيطة مع متحكم STM32F103 (الجهاز اللوحي الأزرق)

صورة

الجزء 2 <- الجزء 1

دعنا نواصل التجربة مع متحكم STM32F103C8T6 ، وتوصيل بعض أجهزة استشعار / شاشات I2C بـ "الجهاز اللوحي الأزرق".

الدعم المطبق لشاشات I2C الشائعة:

  • LCD 1602
  • SSD1306

الدعم المنفذ لأجهزة الاستشعار التالية:

  • BH1750 - مستشعر الضوء
  • BME280 - درجة الحرارة والضغط ومستشعر الرطوبة
  • CCS811 - استشعار CO2 ، المركبات العضوية المتطايرة (المواد العضوية المتطايرة)

من أجل البدء في العمل مع ميزات جديدة ، تحتاج إلى إنشاء مشروع جديد.
ويرد الرابط لتنزيل برنامج MIOC في الجزء الأول.

أجهزة الاستشعار


BH1750 الاستشعار


صورة

BH1750 مستشعر الإضاءة 16 بت (عداد الضوء) مع واجهة I2C. يحدد الثنائي الضوئي في BH1750 شدة الضوء ، التي يتم تحويلها إلى الجهد الناتج باستخدام مكبر للصوت التشغيلي. يوفر ADC المدمج بيانات رقمية 16 بت. يلغي المنطق الداخلي لجهاز BH1750 الحاجة إلى أي حسابات معقدة ، حيث إنه يخرج مباشرة بيانات رقمية مهمة في lux (lux).

وفقًا للوثائق ، يكون المستشعر BH1750 حساسًا للضوء المرئي ولا يتأثر عملياً بالإشعاع تحت الأحمر ، أي يتفاعل مع ما يقرب من نفس النطاق الطيفي للعين البشرية.

للعمل مع هذا المستشعر ، في علامة التبويب "التكوين" ، حدد BH1750.

ستكون نتائج القياس في المتغير العام:
uint32_t BH_L؛

توصيل المستشعر بالحافلة I2C2:

صورة

BME280 الاستشعار


صورة

يقيس هذا المستشعر المعايير البيئية: درجة الحرارة ، الضغط الجوي ، وكذلك الرطوبة.

هناك أيضا جهاز استشعار مماثل - BMP280 ، الذي يفتقر إلى القدرة على قياس الرطوبة. لكنه يكلف أقل بكثير.

بالإضافة إلى حقيقة أن المستشعر يقيس جميع المعلمات أعلاه ، فإنه يعرف أيضًا كيفية تصفية الضوضاء ، ومعايرة القراءات مضمنة فيه. أيضًا ، على عكس أجهزة الاستشعار الأخرى ، يقوم هذا المستشعر بإجراء جميع هذه القياسات ليس فقط بسرعة ، ولكن أيضًا في نطاقات أوسع. على سبيل المثال ، لا تعرف العديد من أجهزة الاستشعار كيفية قياس رطوبة الهواء التي تقل عن 20 في المائة.

الخصائص المعلنة للمستشعر هي كما يلي:

صورة
تتصل المستشعرات بحافلة I2C2 كما يلي:

صورة

إذا كان سيتم استخدام BMP280 ، فعندئذٍ في الملف الرئيسي / bme280.c ، يتعين عليك تعليق جميع الأسطر التي تحمل علامة // Comment for BMP.

ستكون نتائج القياس في المتغيرات العالمية:

صورة

مثال لبرنامج يعمل مع أجهزة استشعار BH1750 و BME280 وشاشة 1602:

#include "mx_init_hw.c" int main() { char s[64]; float t=0, p=0, h=0; Init_HW(); // --------------------- // The main program loop // --------------------- while( TRUE ) { delay_ms( 300 ); t = BME_T / 10.0; p = BME_P / 100.0; h = BME_H / 10.0; sprintf( s, "t=%-7.1fC", t ); SSD1306_write_string( 1, s ); sprintf( s, "p=%-7.1fPa", p ); SSD1306_write_string( 2, s ); sprintf( s, "h=%-7.1f%% ", h ); SSD1306_write_string( 3, s ); sprintf( s, "T=%-7.1fH=%.1f", t, h ); LCD_write_string( 1, s ); sprintf( s, "P=%-7.1fL=%u", p, BH_L ); LCD_write_string( 2, s ); } } 

نتيجة البرنامج:

صورة
سيعرض البرنامج نفسه درجة الحرارة والضغط والرطوبة على شاشة SSD1306
(قم بتوصيل هذا العرض ، وحدده في التكوين):

صورة

يمكن لـ BME280 قياس درجة الحرارة بدقة أكبر. للقيام بذلك ، يجب معايرة ذلك. في الملف الرئيسي / bme280.h ، يوجد تعريف ماكرو لهذا:
#define DT 3520

CCS811 الاستشعار


صورة

الهواء المحيط بنا هو مزيج من الغازات ويتكون بشكل رئيسي من النيتروجين (حوالي 78 ٪) والأكسجين (حوالي 21 ٪). يتم احتساب النسبة المئوية المتبقية من الشوائب المختلفة (الغازات الخاملة ، وثاني أكسيد الكربون ، وأول أكسيد الكربون ، والمواد العضوية المتطايرة (VOC) ، إلخ). على الرغم من أن نسبة الشوائب صغيرة ، إلا أن التغيير في تركيزها قد يكون مزعجًا جدًا وقد يكون خطيرًا على البشر. غالبًا ما ترتبط جودة الهواء في المكاتب والمباني السكنية بمحتوى ثاني أكسيد الكربون والمركبات العضوية المتطايرة.

تشمل المواد العضوية المتطايرة أكثر من 5000 مركب. يرتبط تعليم معظمهم بطريقة ما بعمليات الحياة البشرية.

وبالتالي ، حتى وجود بشري بسيط في غرفة مغلقة يؤدي إلى "تلوث" الهواء والحاجة إلى التهوية. من الصعب تقدير تركيز المركبات العضوية المتطايرة في الهواء. سابقا ، تم استخدام أجهزة استشعار CO2 لتقدير تركيز المركبات العضوية المتطايرة. في الوقت نفسه ، تم أخذ الحقيقة في الاعتبار أنه في ظل الظروف العادية ، تكون تركيزات المركبات العضوية المتطايرة و CO2 مرتبطة. معرفة النسبة المئوية لثاني أكسيد الكربون ، يمكن للمرء أن يحدد بشكل غير مباشر تركيز المركبات العضوية المتطايرة. إذا وصل محتوى ثاني أكسيد الكربون في الهواء إلى حد معين ، فيجب تشغيل التهوية.

في الممارسة العملية ، فإن العلاقة بين المركبات العضوية المتطايرة و CO2 ليست دائما واضحة. على سبيل المثال ، يسبب التدخين في الأماكن المغلقة قفزة حادة في محتوى المركبات العضوية المتطايرة ، والتي لا تسجلها أجهزة استشعار ثاني أكسيد الكربون ، وبالتالي فإن تركيز ثاني أكسيد الكربون لا يتغير كثيرًا. كما أن أجهزة استشعار ثاني أكسيد الكربون ستكون عاجزة إذا تم استخدام المواد الكيميائية المنزلية ومنتجات التنظيف والدهانات والورنيش أو العطور العادية في الغرفة. تقدم AMS حلها لمشكلة قياس تركيز المركبات العضوية المتطايرة - أجهزة استشعار CCS811.

ميزات CCS811B مجسات جودة الهواء:

صورة

يحتوي المستشعر على خوارزمية معايرة تلقائية. يتم تعيين القيم المقاسة تلقائيًا في غضون بضعة أيام. لهذا السبب ، فإن المستشعر الجديد لديه خطأ مبدئي كبير ويجب أن يعمل لمدة ثلاثة إلى أربعة أيام على الأقل حتى يتم الحصول على نتائج أكثر أو أقل موثوقية:

صورة

يجب على المستخدم أيضًا أن يتذكر أنه في كل مرة بعد التشغيل ، يجب أن يعمل جهاز استشعار CCS811 على "الاحماء". يستغرق وقت "الاحماء" أكثر من 30 دقيقة ، يكون خلالها الخطأ كبيرًا بشكل غير مقبول:

صورة

هذه الميزة من CCS811 مهمة للغاية للنظر.

نتائج قياس الاستشعار في المتغيرات العالمية:
uint32_t CCS_CO2 ؛
uint32_t CCS_TVOC؛

توصيل المستشعر بالحافلة I2C2:

صورة

يمكنك كتابة البرنامج لطباعة نتائج هذا المستشعر باستخدام الأمثلة أعلاه ووصف كيفية التعامل مع وحدة التحكم في الجزء الأول بنفسك.

أمثلة على أجهزة استشعار أخرى



استشعار الحركة HC-SR501


صورة

لا تتطلب بعض المستشعرات ، مثل مستشعرات الحركة HC-SR501 ، كتابة أي قصاصات إضافية.

بالنسبة لهذا المستشعر ، قم بتعريف متغير ، حدد Type = GPIO_Mode_IN_FLOATING ، حدد منفذًا.

توليد BSP ، ترجمة ، تحميل إلى MK. بعد ذلك ، نعمل مع هذا المستشعر بنفس الطريقة التي نعمل بها مع الزر (لتلقي البيانات).

اتصال الاستشعار HC-SR501:

صورة

درجة الحرارة / الرطوبة الاستشعار DHT22


صورة

استشعار درجة الحرارة / الرطوبة

اتصال الاستشعار:

صورة

سيكون العمل باستخدام هذا المستشعر مثالاً على مقتطف المستخدم (التناظرية على رسم اردوينو).

يمكن أخذ مقتطف هنا:
dht22.c
ضعه في المجلد الرئيسي
في هذا الملف ، قم بتحرير الأسطر:

 #define PORT GPIOA #define PIN GPIO_Pin_5 

بواسطة اتصال الاستشعار الفعلي

نص البرنامج للعمل مع هذا المقتطف:

 #include "mx_init_hw.c" #include "dht_22.c" int main() { int16_t dht_t, dht_h; Init_HW(); dht_init(); // --------------------- // The main program loop // --------------------- while( TRUE ) { delay_ms( 5000 ); if( !get_dht_data( &dht_t, &dht_h ) ) print( "t=%.1f h=%.1f\r\n", (float)dht_t / 10.0, (float)dht_h / 10.0 ) else print( "DHT 22 - ERR\r\n" ); } } 

نتيجة العمل:

صورة

في كثير من الأحيان كل 4-5 ثواني ، لا يكون المستشعر منطقيًا للاستجواب. الأسباب: يتم حساب درجة الحرارة في حدود 800-900 مللي ثانية ، ثانياً: إذا قمت بإجراء مقابلة أكثر من مرة ، فسيتحسس المستشعر بنفسه.

CLI


يحتوي البرنامج الثابت على غلاف صغير يعمل مع وحدة التحكم. يمكنك معرفة الأوامر الموجودة في الملف الرئيسي / mx_cli.c

إذا رغبت في ذلك ، يمكنك إضافة أي من فرقك.

يبدأ CLI العمل في وضع No Echo ، أي أن الأحرف التي تدخلها لا يتم عرضها. لعرض الأحرف التي تدخلها ، اكتب: echo on.

سينتج أمر "sh on" مرتين في الثانية قيم المتغيرات المعلنة في المُكوِّن والمتغيرات المرتبطة بالمستشعرات. الرقم في الموضع الأول يتوافق مع رقم السطر في جدول التكوين. يرصد هذا الأمر لنقل البيانات إلى نظام متصل بوحدة التحكم.

لا توجد علامات وعلامات مزامنة تحلل انشغال وحدة التحكم. لذلك ، عند استخدام عامل التشغيل "print" و "echo on" معًا ، قد يحدث خلط لمعلومات الإخراج. يجب أن لا تستخدم كلا الطريقتين في نفس الوقت. لحل هذه المشكلة ، يمكنك استخدام قناتين الإخراج. على سبيل المثال ، وحدة التحكم في UART1 ، وإخراج معلومات المستخدم على VCP. أو العكس.

استخدام وظائف:

 send_uart1( char *data, int len ) send_usb( char *data, int len ) 

لتسهيل استخدام هذه الوظائف ، يمكنك تغيير ماكرو printf في ملف gbl.h. على سبيل المثال ، ما يلي:

 #define printf(fmt,argv...){char s[128];sprintf(s,fmt,##argv);send_usb(s,strlen(s));} //   VCP 

مثال الإخراج إلى وحدة التحكم (صدى على):

صورة

مسح I2Cx حافلة


لمسح ناقل I2C1 أو I2C2 ، هناك "برامج ثابتة" جاهزة *. hex
الماسح الضوئي I2Cx
إخراج المعلومات إلى UART1 ، السرعة - 115200.8 ، N ، 1
بعد تحميل الماسحة الضوئية ، اضغط على زر "إعادة الضبط".

يعرض البرنامج الثابت عناوين الأجهزة الموجودة على الناقل.

صورة

جميع أجهزة الاستشعار الثلاثة المذكورة أعلاه.

Source: https://habr.com/ru/post/ar472204/


All Articles