- المواد المطلوبة:
- ADC0804 وحدة ADC أحادية القناة 8 بت:
- مخطط الدائرة وشرحها:
- برمجة Raspberry Pi:
- إظهار قيمة Flex Sensor على شاشة LCD باستخدام Raspberry Pi:
Raspberry Pi هو لوحة قائمة على معالج معماري ARM مصممة لمهندسي الإلكترونية والهواة. يعد PI أحد أكثر منصات تطوير المشاريع الموثوقة الموجودة حاليًا. بفضل سرعة المعالج العالية وذاكرة الوصول العشوائي (RAM) التي تبلغ 1 جيجابايت ، يمكن استخدام PI للعديد من المشاريع البارزة مثل معالجة الصور وإنترنت الأشياء. هناك الكثير من الأشياء الرائعة التي يمكن القيام بها باستخدام PI ، ولكن إحدى الميزات المحزنة هي أنه لا يحتوي على وحدة ADC داخلية.
فقط ، إذا كان من الممكن ربط Raspberry Pi بأجهزة استشعار ، فيمكنه التعرف على معلمات العالم الحقيقي والتفاعل معها. تحتوي معظم المستشعرات الموجودة على مستشعر تناظري ، وبالتالي يجب أن نتعلم استخدام وحدة ADC خارجية مع Raspberry Pi لربط هذه المستشعرات. في هذا المشروع سوف نتعلم كيف يمكننا ربط جهاز الاستشعار المرن مع Raspberry Pi وعرض قيمه على شاشة LCD.
المواد المطلوبة:
- Raspberry Pi (أي نموذج)
- ADC0804 إيك
- شاشة عرض LCD مقاس 16 * 2
- جهاز الاستشعار المرن
- المقاومات والمكثفات
- اللوح أو لوحة الأداء.
ADC0804 وحدة ADC أحادية القناة 8 بت:
قبل المضي قدمًا ، دعنا نتعرف على ADC0804 IC وكيفية استخدام هذا مع raspberry pi. ADC0804 عبارة عن دائرة متكاملة مكونة من 8 بتات أحادية القناة ، مما يعني أنه يمكن قراءة قيمة ADC واحدة وتعيينها إلى 8 بت من البيانات الرقمية. يمكن قراءة هذه البيانات الرقمية 8 بت بواسطة Raspberry Pi ، وبالتالي ستكون القيمة 0-255 لأن 2 ^ 8 هي 256. كما هو موضح في pinouts من IC أدناه ، يتم استخدام المسامير DB0 إلى DB7 لقراءة هذه الرقمية. القيم.
الآن شيء مهم آخر هنا هو أن ADC0804 يعمل بجهد 5 فولت وبالتالي فهو يوفر خرجًا في إشارة منطقية 5 فولت. في إخراج 8 سنون (يمثل 8 بت) ، يوفر كل دبوس + خرج 5 فولت لتمثيل المنطق "1". لذا فإن المشكلة تكمن في أن منطق PI هو + 3.3 فولت ، لذلك لا يمكنك إعطاء منطق + 5V إلى + 3.3V GPIO pin الخاص بـ PI. إذا أعطيت + 5V لأي دبوس GPIO من PI ، فستتلف اللوحة.
لذلك ، من أجل مستوى منطق التنحي من + 5 فولت ، سنستخدم دائرة مقسم الجهد. لقد ناقشنا دائرة مقسم الجهد التي نظرت إليها مسبقًا لمزيد من التوضيح. ما سنفعله هو أننا نستخدم مقاومين لتقسيم منطق + 5V إلى منطق 2 * 2.5V. لذلك بعد القسمة سنعطي + 2.5v منطق لـ Raspberry Pi. لذلك ، كلما تم تقديم المنطق "1" بواسطة ADC0804 ، سنرى + 2.5V في PI GPIO Pin ، بدلاً من + 5V. تعرف على المزيد حول ADC هنا: مقدمة إلى ADC0804.
فيما يلي صورة لوحدة ADC باستخدام ADC0804 التي بنيناها على لوحة الأداء:
مخطط الدائرة وشرحها:
يظهر أدناه الرسم التخطيطي الكامل للدائرة لربط Flex Sensor مع Raspberry Pi. شرح نفسه على النحو التالي.
هذا التوت بي استشعار المرن قد يبدو الدائرة أن تكون معقدة بعض الشيء مع الكثير من الأسلاك، ولكن إذا كنت تأخذ نظرة فاحصة أكثر من أسلاك موصولة مباشرة من LCD ودبوس البيانات 8 بت إلى بي التوت. سيساعدك الجدول التالي أثناء إجراء الاتصالات والتحقق منها.
اسم الدبوس |
رقم توت العليق |
اسم Raspberry Pi GPIO |
شاشات الكريستال السائل Vss |
دبوس 4 |
أرض |
شاشة LCD Vdd |
دبوس 6 |
Vcc (+ 5 فولت) |
LCD Vee |
دبوس 4 |
أرض |
LCD روبية |
دبوس 38 |
GPIO 20 |
شاشة LCD RW |
دبوس 39 |
أرض |
LCD E. |
دبوس 40 |
GPIO 21 |
شاشة LCD D4 |
دبوس 3 |
GPIO 2 |
شاشة LCD D5 |
دبوس 5 |
GPIO 3 |
شاشة LCD D6 |
دبوس 7 |
GPIO 4 |
شاشة LCD D7 |
دبوس 11 |
GPIO 17 |
ADC0804 Vcc |
دبوس 2 |
Vcc (+ 5 فولت) |
ADC0804 B0 |
دبوس 19 (من خلال 5.1 كيلو) |
GPIO 10 |
ADC0804 B1 |
دبوس 21 (من خلال 5.1K) |
GPIO 9 |
ADC0804 B2 |
دبوس 23 (من خلال 5.1 كيلو) |
GPIO 11 |
ADC0804 B3 |
دبوس 29 (من خلال 5.1K) |
GPIO 5 |
ADC0804 B4 |
دبوس 31 (من خلال 5.1 كيلو) |
GPIO 6 |
ADC0804 B5 |
دبوس 33 (من خلال 5.1 كيلو) |
GPIO 13 |
ADC0804 B6 |
دبوس 35 (من خلال 5.1 كيلو) |
GPIO 19 |
ADC0804 B7 |
دبوس 37 (من خلال 5.1 كيلو) |
GPIO 26 |
ADC0804 WR / INTR |
دبوس 15 |
GPIO 22 |
يمكنك استخدام الصورة التالية لتحديد أرقام الدبوس على Raspberry منذ ذلك الحين.
مثل جميع وحدات ADC ، يتطلب ADC0804 IC أيضًا تشغيل إشارة ساعة ، ولحسن الحظ ، يحتوي هذا IC على مصدر ساعة داخلي ، لذلك علينا فقط إضافة دائرة RC إلى دبابيس CLK in و CLK R كما هو موضح في الدائرة. لقد استخدمنا قيمة 10K و 105 pf ، ولكن يمكننا استخدام أي قيمة قريبة مثل 1uf ، 0.1uf ، 0.01uf.
ثم لتوصيل مستشعر Flex ، استخدمنا دائرة مقسم محتملة باستخدام مقاوم 100K. نظرًا لانحناء مستشعر Flex ، ستختلف المقاومة عبره وبالتالي ستنخفض الإمكانات عبر المقاوم. يتم قياس هذا الانخفاض بواسطة ADC0804 IC ويتم إنشاء بيانات 8 بت وفقًا لذلك.
تحقق من المشاريع الأخرى المتعلقة بـ Flex Sensor:
- جهاز استشعار فليكس مع متحكم AVR
- وحدة تحكم لعبة Angry Bird من Arduino باستخدام Flex Sensor
- التحكم في محرك سيرفو بواسطة Flex Sensor
- توليد النغمات عن طريق النقر بالأصابع باستخدام Arduino
برمجة Raspberry Pi:
بمجرد أن ننتهي من الاتصالات ، يجب أن نقرأ حالة هذه 8 بتات باستخدام Raspberry Pi وتحويلها إلى عشري حتى نتمكن من الاستفادة منها. يتم تقديم البرنامج لفعل الشيء نفسه وعرض القيم الناتجة على شاشة LCD في نهاية هذه الصفحة. علاوة على ذلك ، يتم شرح الكود في سفن الينك الصغيرة أدناه.
نحتاج إلى مكتبة LCD لربط LCD بـ Pi. لهذا نستخدم المكتبة التي طورتها shubham والتي ستساعدنا على واجهة شاشة LCD مقاس 16 * 2 مع Pi في وضع أربعة أسلاك. نحتاج أيضًا إلى مكتبات للاستفادة من الوقت ودبابيس Pi GPIO.
ملاحظة : يجب تنزيل ملف lcd.py من هنا ، ووضعه في نفس الدليل حيث تم حفظ هذا البرنامج. عندها فقط سيتم ترجمة الكود.
import lcd #Import the LCD library by [email protected] وقت الاستيراد # استيراد وقت الاستيراد RPi.GPIO حيث سيتم إعادة تقديم GPIO #GPIO كـ GPIO فقط
و التعاريف دبوس LCD تم تعيينها إلى المتغيرات كما هو موضح أدناه. لاحظ أن هذه الأرقام هي أرقام PIN GPIO وليست أرقام التعريف الشخصية الفعلية. يمكنك استخدام الجدول أعلاه لمقارنة أرقام GPIO بأرقام الدبوس. سيتضمن ثنائي الصفيف جميع أرقام أطراف البيانات وستخزن بتات الصفيف القيمة الناتجة لجميع دبابيس GPIO.
# تعريفات دبوسLCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 ثنائيًا = (10،9،11،5،6،13،19،26) # مجموعة من أرقام الدبوس تتصل بـ DB0- بتات DB7 = # القيم الناتجة لبيانات 8 بت
الآن ، علينا تحديد دبابيس الإدخال والإخراج. ستكون دبابيس البيانات السبعة هي دبوس الإدخال وسيكون دبوس المشغل (RST و INTR) هو دبوس الإخراج. لا يمكننا قراءة قيم البيانات 8 بت من طرف الإدخال إلا إذا قمنا بتشغيل طرف الإخراج عاليًا لفترة معينة وفقًا لورقة البيانات. منذ أعلنا دبابيس الثنائية في binarys مجموعة يمكننا استخدام لل حلقة لإعلان كما هو مبين أدناه.
بالنسبة للثنائي في الثنائيات: GPIO.setup (ثنائي ، GPIO.IN) # جميع المسامير الثنائية هي دبابيس إدخال #Trigger pin GPIO.setup (22 ، GPIO.OUT) يتم إخراج دبابيس WR و INTR
الآن باستخدام أوامر مكتبة LCD ، يمكننا تهيئة وحدة LCD وعرض رسالة مقدمة صغيرة كما هو موضح أدناه.
mylcd = lcd.lcd () mylcd.begin (D4، D5، D6، D7، RS، EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2،1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
داخل حلقة while اللانهائية ، نبدأ في قراءة القيم الثنائية وتحويلها إلى رقم عشري وتحديث النتيجة على شاشة LCD. كما ذكرنا سابقًا قبل أن نقرأ قيم ADC ، يجب أن نجعل دبوس المشغل مرتفعًا لفترة معينة لتنشيط تحويل ADC. يتم ذلك باستخدام الأسطر التالية.
GPIO.output (22، 1) #Turn ON Trigger time.sleep (0.1) GPIO.output (22، 0) #Turn OFF Trigger
الآن ، يجب أن نقرأ دبابيس البيانات الثمانية ونحدّث النتيجة في مصفوفة البتات. للقيام بذلك ، نستخدم حلقة for لمقارنة كل طرف إدخال مع True و False. إذا كان هذا صحيحًا ، فسيتم إجراء مصفوفة البتات ذات الصلة على أنها 1 وإلا فسيتم إجراؤها على شكل 0. وكانت جميع البيانات ذات 8 بتات 0 وستتم قراءة 1 لكل منهما.
# اقرأ دبابيس الإدخال ونتج التحديث في مصفوفة بت لـ i في النطاق (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
بمجرد تحديث مصفوفة البتات ، يجب علينا تحويل هذه المصفوفة إلى قيمة عشرية. هذا ليس سوى تحويل ثنائي إلى عشري. بالنسبة إلى البيانات الثنائية ذات 8 بتات ، فإن 2 ^ 8 هو 256. لذلك سنحصل على البيانات العشرية من 0 إلى 255. في لغة البايثون ، يتم استخدام عامل التشغيل "**" لإيجاد قوة أي قيمة. نظرًا لأن البتات تبدأ بـ MSB ، فإننا نضربها بـ 2 ^ (7 مواضع). بهذه الطريقة يمكننا تحويل جميع القيم الثنائية إلى بيانات عشرية ثم عرضها على شاشة LCD
#calculate القيمة العشرية باستخدام مصفوفة بت لـ i في النطاق (8): عشري = عشري + (بت * (2 ** (7-i)))
بمجرد أن نعرف القيمة العشرية ، يصبح من السهل حساب قيمة الجهد. علينا فقط ضربه في 19.63. لأن كل بت من أجل 5VADC 8 بت هي تشبيه 19.3 ملي فولت. قيمة الجهد الناتج هي قيمة الجهد الذي ظهر عبر المسامير Vin + و Vin- من ADC0804 IC.
# حساب قيمة الجهد الجهد = عشري * 19.63 * 0.001 # وحدة واحدة 19.3mV
باستخدام قيمة الجهد ، يمكننا تحديد كيفية ثني المستشعر المرن وفي أي اتجاه تم ثنيه. في الأسطر أدناه ، قمت للتو بمقارنة قيم قراءة الجهد مع قيم الجهد المحددة مسبقًا للإشارة إلى موضع مستشعر Flex على شاشة LCD.
#compare voltage وحالة عرض المستشعر mylcd.setCursor (1،1) if (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") وإلا: mylcd.Print ("مستقرة")
وبالمثل ، يمكنك استخدام قيمة الجهد لأداء أي مهمة ترغب في أن يؤديها Raspberry Pi.
إظهار قيمة Flex Sensor على شاشة LCD باستخدام Raspberry Pi:
عمل المشروع بسيط للغاية. ولكن تأكد من تنزيل ملف lcd.py header ووضعه في نفس الدليل حيث يوجد برنامجك الحالي. ثم قم بإجراء الاتصالات في الرسم التخطيطي للدائرة باستخدام لوحة توصيل أو لوحة perf وتشغيل البرنامج أدناه على Pi الخاص بك ويجب أن تحصل على شيء يعمل. يجب أن يبدو الإعداد مثل هذا أدناه.
كما هو موضح ، ستعرض شاشة LCD القيمة العشرية وقيمة الجهد وموضع المستشعر. ما عليك سوى ثني المستشعر للأمام أو للخلف وستكون قادرًا على رؤية الجهد والقيمة العشرية تتنوع ، كما سيتم عرض نص الحالة. يمكنك توصيل أي مستشعر ولاحظ تنوع الجهد عبره.
يمكن العثور على عمل البرنامج التعليمي الكامل في الفيديو أدناه. آمل أن تكون قد فهمت المشروع واستمتعت ببناء شيء مشابه. إذا كان لديك أي شك ، فاتركها في قسم التعليقات أو في المنتديات وسأبذل قصارى جهدي في الرد عليها.