توسيع منفذ اردوينو للأزرار. توسيع المدخلات التناظرية في اردوينو

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

تم تصميم موسعات منافذ Arduino المختلفة لمثل هذه المواقف.

عادة، تنفذ أطراف المتحكم الدقيق عدة وظائف مختلفة، لذلك هناك موسعات مختلفة:

  1. موسع منفذ GPIO القياسي
  2. موسع إخراج PWM
  3. موسعات الإدخال التناظرية - أجهزة الإرسال المتعددة وأجهزة ADC الخارجية

بشكل منفصل، تجدر الإشارة إلى المحولات الرقمية إلى التناظرية (DACs) وموسعات مساحة العنوان لحافلة I2C. لا تقوم هذه الأجهزة بتكرار وظائف المنافذ بشكل مباشر، ولكنها تعمل على توسيع قدرات وحدات التحكم الدقيقة.

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

اختيار وحدة الموسع لاردوينو

الوحدة الأكثر شيوعًا وغير المكلفة مصنوعة على شريحة PCF8574 (الشكل 1)

أرز. 1. وحدة توسيع المنفذ PCF8574 المشهورة

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

إذا كنت في حالة مزاجية لمشاريع أكثر جدية، فاطلب وحدة PCF8575 16 بت على Aliexpress. أوصي بشدة بالوحدة الموضحة في الشكل. 2.

أرز. 2. وحدة توسيع المنفذ PCF8575

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

مبدأ تشغيل موسع منفذ PCF8574/PCF8575 GPIO

يتم تبادل البيانات عبر ناقل I2C. يتطلب الاتصال بلوحة Arduino أربعة أسلاك فقط، بما في ذلك الطاقة. يتم تعيين عنوان الموسع بواسطة ثلاثة وصلات عبور على المدخلات A0...A2، بحيث يمكنك في نفس الوقت توصيل ثماني شرائح متطابقة بالناقل والحصول على 8*8=64 منفذًا إضافيًا بحد أقصى مع PCF8574 أو 8*16=128 مع شريحة PCF8575 .

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

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

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

كن حذرًا عند تطبيق جهد الإمداد المباشر على طرف منخفض أو عند تجاوز التيار. 50 مللي أمبيرسوف تدمر الشريحة!

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

من أجل استخدام بعض المنافذ كمدخلات، وبعضها كمخرجات، قبل كل كتابة بايت من البيانات إلى الموسع، من الضروري تطبيق قناع من تلك البتات على تلك البتات التي تتوافق مع المدخلات باستخدام "المنطق المنطقي" عملية "أو". هذا كل شئ)))

مقاطعة الجيل

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

مثال 1: استخدام الوحدة PCF8574

لنقم بتجميع دائرة بسيطة مكونة من أربعة مصابيح LED ووحدة PCF8574 ولوحة Arduino (الشكل 3 و4). مع نظام الاتصال هذا، لا نحتاج حتى إلى مقاومات التبريد لمصابيح LED. يتدفق التيار عبر مؤشر LED والمقاوم المدمج المتصل بسكة الطاقة.

أرز. 3. مخطط اتصال الوحدة PCF8574

أرز. 4. تخطيط الدائرة مع وحدة PCF8574

انسخ واكتب المخطط 1 على لوحة Arduino:

// عنوان الوحدة على الناقل (A0، A1، A2 = 0) int Address = 0x38; // قراءة البيانات من الوحدة النمطية uint8_t dataReceive; // البيانات المراد كتابتها إلى الوحدة uint8_t dataSend; إعداد باطلة () ( Wire.begin ()؛ Serial.begin (9600)؛ // مستوى عالٍ لجميع المنافذ PCF8574 dataSend = B11111111؛ pcf8574_write (dataSend)؛ ) حلقة باطلة () ( // قراءة بايت من وحدة dataReceive = pcf8574_read ()؛ // الإخراج إلى الشاشة بتنسيق ثنائي Serial.println(dataReceive, BIN);<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

تتم كتابة مستوى عالٍ في البداية على جميع منافذ الشريحة، لذا يمكن للمنافذ P0...P3 أن تعمل كمدخلات.

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

يرجى ملاحظة أنه قبل كل عملية كتابة إلى الموسع، يجب علينا تطبيق قناع بت من الواحدات على كافة البتات التي يجب أن تكون مدخلات: dataSend |= B00001111;

إجراءات العمل مع ناقل I2C مبسطة للغاية؛ ولا تتم معالجة أي أخطاء.

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

مثال 2: استخدام الوحدة PCF8575

خصوصية وحدة PCF8575 هي أنها تحتوي على 16 منفذًا اكتب دائمًا بايتين واقرأ بايتين. يجب اتباع هذه القاعدة حتى لو لم تكن هناك حاجة إلى البايت الثاني.

دعونا نغير الرسم البياني قليلا. سنقوم بتوصيل مصابيح LED بالمنافذ P10…P13، وسنقوم بتوصيل المنافذ P00…P03 باستخدام وصلة عبور بالسلك المشترك (الشكل 5 و6).

أرز. 5. مخطط اتصال الوحدة PCF8575

أرز. 6. تخطيط الدائرة مع وحدة PCF8575

في الرسم 2، تتم كتابة 1s أولاً على جميع المنافذ، ثم تتم قراءة حالتها كل 500 مللي ثانية. يُرجع روتين القراءة كلمة مكونة من 16 بت، مقسمة إلى بايت. يتم نسخ محتويات البايت المنخفض (الجهات P00...P07) إلى البايت العالي ويتم تحميلها مرة أخرى إلى الوحدة. إذا قمت بتوصيل أحد الأطراف P00...P03 بالسلك المشترك، فسوف ينطفئ أحد مصابيح LED المتصلة بالطرف P10...P13.

// مكتبة للعمل مع I2C #include // عنوان الوحدة على الناقل بشكل افتراضي int Address = 0x20; // قراءة البيانات من الوحدة النمطية uint8_t hi, lo; uint16_t dataReceive; uint8_t dataHighByte; // بايت عالي (P10...P17) uint8_t dataLowByte; // بايت منخفض (P00...P07) إعداد باطل () (Wire.begin(); Serial.begin(9600); // مستوى عالٍ لجميع المنافذ PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_write(dataLowByte, dataHighByte ); ) حلقة باطلة() (/ قراءة بايت من الوحدة dataReceive = pcf8575_read(); // الإخراج إلى الشاشة بتنسيق ثنائي Serial.println(dataReceive, BIN); // حدد البايت المنخفض من كلمة طويلة dataLowByte = lowByte(dataReceive) ); // انسخ البايت المنخفض إلى البايت العالي dataHighByte; // تطبيق قناع على البايت المنخفض dataLowByte |= B11111111; ); / إجراء كتابة بايت إلى الوحدة النمطية void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // اكتب البايت المنخفض (P00...P07) سلك .write(dth); // اكتب البايت العالي (P10...P17) Wire.endTransmission(); // إجراء قراءة البايت من الوحدة int16_t pcf8575_read() ( Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 2); lo = Wire.read(); // اقرأ البايت المنخفض (P00...P07) hi = Wire.read(); // اقرأ البايت العالي (P10...P17) return (word(hi, lo)); // إرجاع الكلمة الطويلة)

مكتبة اردوينو PCF8574/PCF8575

يمكن تنزيل المكتبة من GitHub. ولكن، كما ترون، فإن العمل مع موسعات المنافذ بسيط للغاية ويمكنك الاستغناء عن مكتبة خاصة بسهولة.

وصف درع المتوسع

Expander Shield عبارة عن وحدة إضافية أصلية مصممة لزيادة عدد منافذ الإدخال/الإخراج لوحدات التحكم الدقيقة المستندة إلى منصة Arduino، بالإضافة إلى وحدات التحكم الدقيقة الأخرى، باستخدام موسعات المنافذ مع واجهة SPI أو I2C.


العناصر الرئيسية لوحدة Expander Shield الإضافية هي دائرتان صغيرتان MCP23S17 أو MCP23017 (موسعتان لمنافذ الإدخال/الإخراج 16 بت مع واجهة SPI أو I2C، على التوالي)، مما يسمح لك بإضافة أربعة منافذ إدخال/إخراج 8 بت، أي ، 32 "أرجل" إضافية.

معدات

يتم توفير وحدة Expander Shield إما كإصدار SPI أو I2C مجمع (مع الرقائق المرتبطة)، أو كمجموعة بدون شرائح، والتي يمكن شراؤها بشكل منفصل.

قد تكون أطراف الوحدة مجهزة بأقفال نقل، والتي يجب إزالتها قبل بدء العمل.

الموسع الدرع SPI 1100 فرك. 850 فرك. أضف إلى السلة

نموذج الطلب.

ExpanderShield إلى ناقل SPI (مع شرائح MCP23S17).

الموسع الدرع I2C 1100 فرك. 850 فرك. أضف إلى السلة

انتباه! لقد قمت بتعطيل جافا سكريبت. التشغيل العادي لنظام الطلب وعربة التسوق غير ممكن. إذا لم تتمكن لسبب ما من تمكين JavaScript، فما عليك سوى إدراج العناصر التي تطلبها في نموذج الطلب.

ExpanderShield إلى حافلة I2C (مع رقائق MCP23017).

تحديد

فيما يلي أهم الميزات الوظيفية لوحدة Expander Shield.

  • مفتاح وضع تشغيل الوحدة المريح اعتمادًا على نوع شرائح توسيع المنفذ المثبتة حاليًا؛
  • لكل من شريحتي توسيع منفذ الإدخال/الإخراج 16 بت المستخدمتين، يتم تعيين عنوان ثلاثي البت على الناقل باستخدام وصلات العبور، مما يسمح لك بوضع ما يصل إلى 8 من هذه الشرائح على ناقل واحد؛
  • القدرة على استخدام وصلة لتحديد رقم خرج وحدة التحكم الدقيقة Freeduino/Arduino المقابلة (الطرف الرقمي 8 أو 9 أو 10) لإشارة CS الخاصة بحافلة SPI؛
  • تستخدم الوحدة موصلات "تمريرية"، مما يسمح لك بإرساء عدة وحدات دون تغيير نسبة إلى لوحة Arduino؛
  • يتم إخراج إشارات الدائرة الدقيقة إلى أربعة موصلات PBD-10R مع جهات اتصال أرضية إضافية و+5 فولت؛
  • القدرة على تحديد إعادة تعيين أجهزة منفصلة أو مشتركة (زر إعادة الضبط) لرقائق توسيع منفذ الإدخال/الإخراج 16 بت ووحدة التحكم الدقيقة Freeduino/Arduino باستخدام وصلات العبور؛
  • موصل JPIC إضافي مع دبابيس المقاطعة (INTA، INTB)، وإعادة ضبط الأجهزة (RST) واختيار الشريحة (CS)؛

يتم تحديد الخصائص الأخرى للوحدة في المقام الأول من خلال خصائص الدوائر الدقيقة MCP23S17/MCP23017، والتي يتوفر الوصف الفني لها في وثائق الشركة المصنعة.

بالإضافة إلى ذلك، قبل البدء في العمل مع وحدة Expander Shield الإضافية، نوصي بالتعرف على مخطط الدائرة الخاص بها.

أوضاع التشغيل

يتم تحديد وضع التشغيل Expander Shield باستخدام مفتاح DIP ووصلات العبور.

اختيار الواجهة والتحكم في سحب حافلة I2C

باستخدام مفتاح DIP، يمكنك تحديد إما وضع SPI (عن طريق تشغيل مجموعة الاتصال 1-4) للدوائر الدقيقة MCP23S17، أو وضع I2C (عن طريق تشغيل مجموعة الاتصال 5-6) للدوائر الدقيقة MCP23017. أيضًا، في وضع I2C، باستخدام الأطراف 7 و 8، إذا لزم الأمر، يتم سحب ناقل I2C عبر مقاومات محددة للتيار إلى ناقل الطاقة +5V. عادةً، يجب توصيل مقاومات السحب في حالة وجود جهاز واحد فقط على ناقل I2C. إذا كان هناك العديد من الأجهزة، فسيتم توصيل المقاومات فقط لأحد الأجهزة.

التنشيط المتزامن لحافلة SPI وI2C، بالإضافة إلى ناقل SPI ومجموعة 7 و8 سنون غير مسموح.

وضع التشغيل المدمج، عندما تعمل إحدى الدائرتين الصغيرتين في وحدة Expander Shield عبر واجهة SPI (MCP23S17)، والأخرى عبر واجهة I2C (MCP23017)، يكون مستحيلًا.

إذا كنت بحاجة إلى تنظيم العمل في وقت واحد عبر واجهات SPI وI2C، فيجب عليك استخدام وحدتين (عدة) إضافيتين من وحدات Expander Shield مع مواضع المفاتيح المقابلة.

تحديد الرقم السري للتحكم في إشارة CS لحافلة SPI

بالنسبة لناقل SPI، تحتاج إلى تحديد دبوس وحدة التحكم الدقيقة Freeduino/Arduino المستخدم كإشارة CS. عادة، يتم استخدام الدبوس 10، والذي يتوافق مع موضع وصلة العبور في أقصى اليسار على موصل SS1. من خلال تحريك العبور إلى أحد الموضعين الآخرين، من الممكن تحديد المسامير 9 و 8، على التوالي.

اختيار عنوان الدوائر الدقيقة في الحافلة

يتم تحديد البتات الثلاثة الأدنى لعنوان الدوائر الدقيقة MCP23S17/MCP23017 باستخدام وصلات العبور الموجودة على موصلات IC1_addr/IC2_addr عن طريق سحب البتات 0، 1، 2 إلى الأرض (Gnd) أو +5V (5V).

يجب أن يكون عنوان كل شريحة فريدًا.

وبالتالي، يمكن وضع ما يصل إلى 8 دوائر دقيقة في ناقل واحد (من خلال الجمع بين، على سبيل المثال، 4 دروع توسعية).

تحديد وضع التشغيل لإعادة ضبط الأجهزة (زر RESET)

من الممكن تنظيم أحد أوضاع التشغيل المتعددة لزر RESET

  • يقوم زر إعادة الضبط بإعادة ضبط شرائح Freeduino/Arduino وMCP23S17/MCP23017
  • يقوم زر RESET بإعادة ضبط Freeduino/Arduino فقط
  • يقوم زر إعادة الضبط بإعادة ضبط شرائح MCP23S17/MCP23017 فقط

تظهر أدناه مواضع وصلة العبور المقابلة على موصل JRS (من اليسار إلى اليمين).

مكتبة MCP23xxx

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

في الواقع، هذه مجموعة من مكتبتين: MCP23xxx وLiquidCrystal_MCP23x17.

يتم وصف تثبيت المكتبات بمزيد من التفصيل في القسم الذي يربط المكتبات. يجب أن تكون بنية الدليل لمجلد المكتبات بعد التثبيت كما يلي:

/libraries/LiquidCrystal_MCP23x17
/المكتبات/MCP23xxx

تطبق مكتبة MCP23xxx قوالب الفئات التي تنظم العمل مع موسعات المنافذ MCP23017 وMCP23S17 وMCP23008 وMCP23S08. مكتبة LiquidCrystal_MCP23x17 هي مكتبة LiquidCrystal قياسية معدلة تدعم اللغة الروسية وتعمل من خلال موسع المنافذ.

تأتي المكتبة مع أمثلة تشرح كيفية العمل معها. الإصدار السابق من المكتبة متاح أيضًا للتنزيل:

دعونا نلقي نظرة على مثال للعمل مع وحدة نمطية لحافلة I2C:

// في المثال، تتم قراءة حالة دبابيس الشريحة الأولى، ويتم تعيين نفس القيم على الثانية

// بالنسبة لإصدار I2C، قم بتوصيل Wire.h:
#يشمل
// قم بتوصيل المكتبة
#يشمل

// أنشئ كائنين من فئة CMCP23017، لكن لا تقم بتهيئتهما، لأن حافلة I2C ليست جاهزة
CMCP23017 mcp23_1;
CMCP23017 mcp23_2;

الإعداد باطل()
{
// تهيئة ناقل I2C...
Wire.begin();
//... وكائنات MCP23* ذات العناوين 0 و1
mcp23_1.init(0);
mcp23_2.init(1);

// يجب أن تكون جميع أطراف الشريحة الأولى مدخلات، والثانية - مخرجات
// يمكن القيام بذلك في حلقة
ل(int i=0; i< 16 ; i++ ) {
mcp23_1.pinMode (i، INPUT) ؛
mcp23_2.pinMode (i، OUTPUT) ؛
}
// أو في وقت واحد، عن طريق استدعاء طريقة pinMode16
//mcp23_1.pinMode16(0x0ffff);
//mcp23_2.pinMode16(0x00000);
}

حلقة فارغة()
{
// يمكنك قراءة جميع مدخلات الشريحة الأولى وضبطها على الشريحة الثانية في حلقة
ل(int i=0; i< 16 ; i++ ) {
mcp23_2.digitalWrite (i, mcp23_1.digitalRead (i) ) ؛
}
// أو في نفس الوقت، باستخدام طريقتي digitalRead16 وdigitalWrite16
//mcp23_2.digitalWrite16(mcp23_1.digitalRead16());
}

إحدى المزايا الرئيسية لمنصة Arduino هي شعبيتها. يتم دعم النظام الأساسي الشهير بشكل نشط من قبل الشركات المصنعة للأجهزة الإلكترونية، حيث تقوم بإصدار إصدارات خاصة من اللوحات المختلفة التي تعمل على توسيع الوظائف الأساسية لوحدة التحكم. تُستخدم هذه اللوحات، التي تسمى بشكل منطقي لوحات التوسيع (اسم آخر: درع اردوينو، درع)، لأداء مجموعة واسعة من المهام ويمكن أن تبسط بشكل كبير حياة مشغل اردوينو. في هذه المقالة، سوف نتعرف على ما هي لوحة توسيع Arduino وكيف يمكن استخدامها للعمل مع مجموعة متنوعة من أجهزة Arduino: المحركات (دروع محرك المحرك)، وشاشات LCD (دروع LCD)، وبطاقات SD (مسجل البيانات)، وأجهزة الاستشعار (درع الاستشعار) وغيرها الكثير.

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

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

لماذا نحتاج إلى دروع الاردوينو؟

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

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

الأمثلة الأكثر شيوعًا للدروع هي لوحات التوسيع للعمل مع أجهزة الاستشعار والمحركات وشاشات LCD وبطاقات SD ودروع الشبكة ونظام تحديد المواقع العالمي (GPS) والدروع ذات المرحلات المدمجة للاتصال بالحمل.

توصيل دروع الاردوينو

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

كقاعدة عامة، تم تصميم الدرع لإصدار محدد جدًا من وحدة التحكم، على الرغم من أن العديد من الدروع الخاصة بـ Arduino Uno، على سبيل المثال، تعمل بشكل جيد مع لوحات Arduino Mega. تم تصميم دبوس الميجا بطريقة تجعل أول 14 دبوسًا رقميًا والدبابيس الموجودة على الجانب الآخر من اللوحة تتزامن مع دبوس UNO، لذلك يمكن إدخال درع Arduino فيه بسهولة.

برمجة اردوينو شيلد

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

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

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




هناك عدة إصدارات من لوحة توسيع اللمس. كلهم يختلفون في عدد ونوع الموصلات. الإصدارات الأكثر شيوعًا اليوم هي Sensor Shield v4 وv5.

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



يعد تنظيم العمل مع الشبكة من أهم المهام في المشاريع الحديثة. تتوفر بطاقة توسيع مقابلة للاتصال بشبكة محلية عبر Ethernet.




لوحات التوسع للنماذج الأولية

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





درع اردوينو LCD ودرع TFT

يستخدم هذا النوع من الدرع للعمل مع شاشات LCD في الاردوينو. كما تعلم، فإن توصيل حتى أبسط شاشة نصية مكونة من سطرين ليس بالمهمة البسيطة: فأنت بحاجة إلى توصيل 6 جهات اتصال للشاشة بشكل صحيح مرة واحدة، دون احتساب مصدر الطاقة. من الأسهل كثيرًا إدراج الوحدة النهائية في لوحة Arduino وتحميل المخطط المقابل ببساطة. في LCD Keypad Shield الشهير، يتم تثبيت من 4 إلى 8 أزرار على الفور على اللوحة، مما يسمح لك بتنظيم واجهة خارجية على الفور لمستخدم الجهاز. يساعد TFT Shield أيضًا



درع مسجل بيانات اردوينو

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




ملخص موجز

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

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

تتوفر شرائح SPI أو I2C ADC بسهولة في مجموعة من الدقة ومعدلات العينات وعدد القنوات. من السهل جدًا إضافتها إلى أي Arduino.

على سبيل المثال، سيوفر MCP3208 8 قنوات بدقة 12 بت لكل SPI، مما يعني 3 دبابيس (MOSI/MISO/SCK) + 1 لكل شريحة (SS). لذا فإن شريحة واحدة ستكون 4 دبابيس، وشريحتين 5 دبابيس، و3 شرائح 6 دبابيس، وما إلى ذلك.

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

يمكن أن يكون الحصول على شرائح I2C أكثر صعوبة نظرًا لوجود عدد محدود فقط من العناوين على ناقل I2C - بالإضافة إلى أن I2C في العديد من Arduinos يحتوي أيضًا على دبوسين تناظريين قد لا ترغب في التضحية بهما.

يتضمن الخيار الثاني استخدام معددات الإرسال التناظرية (مثل 4051) لتحويل المصادر المختلفة إلى المدخلات التناظرية الموجودة.

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

بالتوسع في إجابة مازينكو، يمكنك استخدام مُضاعِف تناظري مثل 74HC4051 لتحويل منفذ تناظري واحد إلى 8.

سيعمل ابن عمه، 74HC4067، على إرسال 16 منفذًا. الآن مع وجود 6 مدخلات تناظرية في Arduino Uno، يمكنك الحصول على 6 × 16 مدخلًا = 96. يمكن أن تكون إشارات التحكم A/B/C متوازية.

سيسمح لك هذا بالتعامل مع 96 مدخلاً مع 6 شرائح إضافية ورمزًا بسيطًا إلى حد ما. لدي أمثلة على التعليمات البرمجية في صفحة 74HC4051 Multiplexer/Demultiplexer الخاصة بي.

لـ 8 رمز الإدخال:

// مثال لاستخدام معدد الإرسال/مزيل تعدد الإرسال 74HC4051 // المؤلف: Nick Gammon // التاريخ: 14 مارس 2013 const byte Sensor = A0; // حيث يتم توصيل منفذ الإدخال / الإخراج معدد الإرسال // حدد عنوان معدد الإرسال (A/B/C) const بايت عنوان A = 6;// بت منخفض الترتيب const byte AddressB = 5; عنوان البايت constC = 4;// إعداد باطلة للبت عالي الترتيب () (Serial.begin(115200); Serial.println("بدء اختبار معدد الإرسال..."); pinMode(addressA, OUTPUT); pinMode(addressB, OUTPUT ); (addressB، (أيهما & 2)؟ عالي: منخفض)؛ الكتابة الرقمية (addressC، (أيهما & 4)؟ عالي: منخفض)؛ // بت عالي الترتيب // اقرأ الآن قراءة المستشعر التناظرية (المستشعر)؛ حلقة قراءة المستشعر الفارغة () (//إظهار جميع قراءات المستشعر الثمانية لـ (البايت i = 0؛ i< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

كنت أعمل بالضبط مع نفس المشكلة. أحتاج لبرنامج يقرأ 100 ثرمستور... لماذا؟ حسنا، إذا كنت في حاجة إليها.

لقد انتهيت من هذا بالفعل.

لقد حاولت 74HC4051 معدد/مزيل تعدد الإرسال. لكن لسبب ما لم أحصل على النتيجة المرجوة.

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

أنا أستخدم بروتوكول I2C و 8 عبيد اردوينو ميجا 7 وسيد واحد. وبعد إرسال إرسال عدد صحيح، تعويم وبلاه بلاه لم يساعدني في القيام بذلك. يمكنه إرسال القراءة التناظرية عبر I2C ويقوم السيد بكل التحويلات اللازمة.

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

→ كيفية زيادة عدد المدخلات والمخرجات التناظرية على اردوينو الخاص بك؟

كيفية زيادة عدد المدخلات والمخرجات التناظرية على اردوينو الخاص بك؟

سيسمح لك معدد الإرسال أو مزيل تعدد الإرسال بتوسيع عدد المدخلات والمخرجات على Arduino الخاص بك.
4051 عبارة عن معدد إرسال/مزيل تعدد إرسال تناظري مكون من 8 قنوات، وبالتالي:
*إذا كنت تستخدم 4051 كمضاعف: يمكنك تحديد أي من المدخلات الثمانية المختلفة وقراءة حالته في وحدة التحكم.
* إذا كنت تستخدم 4051 كجهاز إزالة تعدد الإرسال، فيمكنك تحديد أي من المخرجات الثمانية المختلفة وكتابة القيمة التي تحتاجها هناك.

أيضًا، يمكن لـ 4051 التعامل مع القيم التناظرية في Arduino الخاص بك، ويمكنك استخدام الإشارات التناظرية 0-5V وتوصيل IC بالمدخلات التناظرية في Arduino.

لتحديد الإدخال المطلوب للدائرة الدقيقة بالإضافة إلى أوضاع التشغيل للقراءة أو الكتابة، يجب علينا استخدام ثلاث إشارات تحكم (S0 وS1 وS2). يجب توصيل كل من هذه الأطراف بأحد مخرجات Arduino الرقمية. كل مخرج له رقم (S0 = 1؛ S1 = 2؛ S2 = 4)، وإذا قمت بتعيين أحد هذه المخرجات إلى مستوى منطقي مرتفع، فإن عدد الأطراف الممثلة سيكون 4051.

على سبيل المثال:
* إذا قمت بتعيين السجل "1" على مدخلات الدائرة الدقيقة S0 وS1 وسجل "0" إلى S2، فسيتم تحديد الإدخال y3 للدائرة الدقيقة، يبدو هكذا (1 +2 +0 = 3).
* إذا قمت بتعيين السجل "1" على مدخلات الدائرة الدقيقة S0 وS2 وسجل "0" إلى S1، فسيتم تحديد الإدخال y5 للدائرة الدقيقة، يبدو هكذا (1 +0 +4 = 5).

لا يمكن قراءة أو كتابة الحالة لأكثر من 4051 دبوسًا في المرة الواحدة. ولكن يمكنك قراءة وكتابة الحالة من مخرجات الشريحة بسرعة كبيرة. ليست هناك حاجة للتأخير بين اختيار أو قراءة أو كتابة حالة 4051 دبابيس.

* Z ----- إشارة الإدخال أو الإخراج المشتركة (متصلة بـ Arduino I/O)
* E ----- تمكين الإدخال (السجل النشط "0") (متصل بالأرض (GND))
* Vee --- جهد الإمداد السلبي (متصل بالأرض (GND))
* GND --- ناقص مشترك (0 فولت)
* S0-S2 - اختيار المدخلات (متصلة بثلاثة دبابيس رقمية من Arduino)
* y0-Y7 - المدخلات/المخرجات المستقلة
*Vcc --- جهد الإمداد الإيجابي (5 فولت)



الصورة اليسرى أعلاه هي على سبيل المثال كيفية استخدام معدد إرسال 9 لقراءة 64 مدخلاً تناظريًا مع إدخال تناظري واحد فقط من Arduino.
الصورة اليمنى أعلاه هي مثال لكيفية استخدام اثنين من 4051s (أحدهما تم تكوينه كمزيل تعدد الإرسال والآخر كمضاعف إرسال) في مصفوفة 8 × 8 لاختبار 64 زرًا أو مدخلات رقمية أخرى من مدخل رقمي واحد فقط على Arduino (مع الإعداد الثاني يمكنك فقط استخدام زرين في نفس الوقت، وإلا فيجب عليك استخدام الإعداد الأول (الأيسر).

عينة من الرموز:

// مثال لاستخدام معدد الإرسال/مزيل تعدد الإرسال التناظري 4051
// بواسطة ديفيد ج.

إنت ليد = 13؛ // قم بإعداد مؤشر LED على الساق 13
كثافة العمليات r0 = 0 ; // القيمة حدد الدبوس إلى 4051 (S0)
كثافة العمليات r1 = 0 ; // القيمة حدد الدبوس إلى 4051 (S1)
كثافة العمليات r2 = 0 ; // القيمة حدد الدبوس إلى 4051 (S2)
صف صحيح = 0؛ // تخزين رمز الصندوق
عدد صحيح = 0؛ // فرشاة
int bin = ( 000, 1, 10, 11, 100, 101, 110, 111 ) ؛ // مصفوفة من الأرقام الثنائية تحدد عدد المدخلات/المخرجات المحددة لشريحة 4051، من 1 إلى 8.
إعداد باطل () (//التهيئة
pinMode(2, OUTPUT); // إخراج S0
pinMode(3, OUTPUT); // إخراج S1
pinMode(4, OUTPUT); // إخراج S2
الكتابة الرقمية (ليد، عالية)؛ // قم بإضاءة الصمام
beginSerial(9600); // سعر صرف UART
}

حلقة فارغة() (
for (count = 0 ; count ≥ 7 ; count ++) ( // التنقل بين عناصر المصفوفة من 1 إلى 8
صف = بن [عدد]؛
r0 = الصف & 0x01 ;
r1 = (صف >> 1) & 0x01 ; //
r2 = (صف >> 2) & 0x01 ; //
الكتابة الرقمية(2, r0);
الكتابة الرقمية(3, r1);
الكتابة الرقمية(4, r2);
Serial.println(bin);
تأخير (1000)؛