الأقطاب الرقمية Arduino






border="0"
data-original-height="800"
data-original-width="800"
height="640"
src="https://i.suar.me/rln0L/m"
width="640"
/>







style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
مقدمة






>إن GPIO تعتبر اختصارا لعبارة General-Purpose Input Output وتدل على
الأقطاب التي يمكن استخدامها كأقطاب دخل أو أقطاب خرج والتي يمكن
استخدامها كمداخل ومخارج رقمية عامة (ليست مخصصة لغرض وظيفي وحيد مثل
المقاطعات فقط أو التايمرات فقط ...الخ). >



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









style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>الأقطاب الرقمية >






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





border="0"
data-original-height="800"
data-original-width="800"
height="640"
src="https://i.suar.me/778ld/m"
width="640"
/>




>كما أنه في لوحة الأردوينو أونو يمكن استخدام الأقطاب التشابهية
كأقطاب رقمية. >









style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>ضبط نوع القطب >






>لضبط الأقطاب الرقمية على أنها أقطاب خرج، نستخدم التابع ()pinMode
لتحديد نوع القطب (خرج/دخل) >



class="language-cpp"
> pinMode(pin no, Mode)





pin no: ويتم مكانها كتابة رقم القطب الذي نريد ضبطه






>Mode: يتم مكانها كتابة نوع القطب





مثال 1: لتحديد القطب رقم 13 على أنه قطب خرج نكتب



class="language-cpp"
> pinMode(13, OUTPUT);




مثال 2: لتحديد القطب رقم 5 على أنه قطب دخل نكتب



class="language-cpp"
> pinMode(5, INPUT);







style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>المخارج الرقمية >






>بعد ضبط نوع القطب على أنه قطب خرج، نستطيع إعطاء إشارة رقمية على
خرجه من خلال استخدام التابع:



class="language-cpp"
> digitalWrite(pin no, Output Value);





pin no: يتم مكانها كتابة رقم القطب







Output Value: يتم مكانها كتابة حالة الخرج





مثال 1: إعطاء إشارة رقمية على القطب 13 بقيمة 5v أو 1 منطقي



class="language-cpp"
> digitalWrite (13, HIGH);




مثال 2: إعطاء إشارة رقمية على القطب 13 بقيمة 0v أو 0 منطقي



class="language-cpp"
> digitalWrite (13, LOW);







style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>المداخل الرقمية







>بعد ضبط نوع القطب على أنه قطب دخل، نستطيع قراءة حالة القطب من خلال
التابع:



class="language-cpp"
> digitalRead(pin no);





pin no: يتم مكانها كتابة رقم الفطب الذي نريد قراءة حالته





مثال 1: قراءة حالة القطب رقم 2



class="language-cpp"
> digitalRead(2);







style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>مقاومة الرفع







>في بعض الأحيان قد يؤدي التبديل من حالة الى أخرى أو استخدام الأقطاب
الرقمية في حالة مداخل رقمية بدون توصيل أي شيء عليها الى حالة مقاومة
عالية أو حالة عائمة، هذه الحالة تؤدي الى تغييرات عشوائية في القيمة
على مدخل القطب.



>لتجنب هذه الحالة يمكن إضافة مقاومة رفع (توصيل القطب مع مقاومة الى
5v) أو مقاومة خفض (توصيل القطب مع مقاومة الى الأرضي)، تساعد المقاومة
على تحديد حالة افتراضية في حال عدم وجود اشارة على دخل القطب.





border="0"
data-original-height="800"
data-original-width="800"
height="640"
src="https://i.suar.me/XZd51/m"
width="640"
/>




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



>مثال 1: لتحديد القطب رقم 3 على أنه قطب دخل مع تفعيل مقاومة الرفع (
بدون توصيل مقاومة خارجية)



class="language-cpp"
> pinMode (3, INPUT_PULLUP);



>مثال 2: لتحديد القطب رقم 3 على أنه قطب دخل بدون تفعيل مقاومة الرفع
(نحتاج لتوصيل مقاومة خارجية).



class="language-cpp"
> pinMode (3, INPUT);







style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>التأخير الزمني ()delay







>يقوم هذا التابع بإيقاف تنفيذ الكود لفترة زمنية يتم تحديدها بالمللي
ثانية، وتستخدم لعمل تأخير زمني مثل تشغيل وإطفاء ليد كل 1 ثانية.



>مثال: إعطاء خرج 1 منطقي لمدة 1 ثانية ومن ثم 0 منطقي بشكل دائم



class="language-cpp"
> digitalWrite (13, HIGH);
delay(1000);
digitalWrite (13, LOW);





ملاحظات:



1- يمكن استخدام أقطاب الاردوينو في حالتين منبع للتيار أو مصرف
للتيار، في كلا الحالتين التيار الاعظمي الذي يتحمله القطب هو 40
مللي أمبير والذي يمكن من خلاله تشغيل أجهزة وعناصر بتيارات صغيرة
مثل ليد، تشغيل شاشة أو التحكم بترانزستور...الخ ولكن لا يمكن
تشغيل محرك أو تشغيل ريليه.




2- عند توصيل الاجهزة مع أقطاب خرج الاردوينو يفضل أن نستخدم
مقاومة لحماية الاقطاب من مرور تيار أكبر من المسموح، لأن مرور
تيار أكبر من 40 مللي أمبير قدي يسبب ضرر للمتحكم أو للقطب.








style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>تطبيقات عملية





style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>تشغيل وإطفاء ليد LED blinking








1. العناصر المستخدمة



  • لوحة أردوينو أونو

  • مقاومة 220 أوم

  • ليد LED

  • لوحة تجارب Bread Board

  • أسلاك توصيل male to male





2. مخطط التوصيل




border="0"
data-original-height="800"
data-original-width="800"
height="640"
src="https://i.suar.me/OXLKa/m"
width="640"
/>




3. الكود البرمجي



class="language-cpp"
>void setup() {
pinMode(13, OUTPUT); // sets the digital pin 13 as output
}

void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}




4. شرح الكود




في التابع الرئيسي()void setup قمنا بضبط القطب رقم 13 على أنه قطب خرج



class="language-cpp"
>void setup() {
pinMode(13, OUTPUT); // sets the digital pin 13 as output
}




في التابع التكراري ()void loop قمنا بتشغيل الليد من خلال إعطاء قيمة
HIGH أو واحد منطقي للقطب رقم 13 لمدة 1 ثانية، ومن ثم قمنا بإطفاء
الليد من خلال إعطاء قيمة LOW أو 0 منطقي للقطب رقم 13 لمدة 1 ثانية.



class="language-cpp"
>void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}



>سوف يتم تنفيذ ما بداخل () void loop بشكل متكرر بالتالي سوف تستمر
عملية وميض الليد.




style="
margin: 18px 0px 7px;
overflow-wrap: break-word;
padding: 0px;
text-align: justify;
"
>
>لتحكم بتشغيل وإطفاء الليد








1. العناصر المستخدمة



  • لوحة أردوينو أونو

  • مقاومة 220 أوم

  • ليد LED

  • كباس لحظي Push button

  • لوحة تجارب Bread Board

  • أسلاك توصيل male to male





2. مخطط التوصيل




border="0"
data-original-height="800"
data-original-width="800"
height="640"
src="https://i.suar.me/o270O/m"
width="640"
/>




3. الكود البرمجي



class="language-cpp"
>int pushButton = 2;
int LED = 13;

void setup() {
pinMode(pushButton, INPUT_PULLUP); //configure pin as input with pullup enabled for pushbutton
pinMode(LED, OUTPUT); //configure pin as output
}

void loop() {
int buttonState = digitalRead(pushButton); // read the input pin:
digitalWrite(LED, (!(buttonState))); //turn led on when switch pressed
delay(10); // delay in between reads for stability
}




4. شرح الكود




قمنا بتعريف متغيرين خاصة بأقطاب الليد والكباس، الغاية تخزين رقم
القطب في متغير هي سهولة تعديل الكود.



class="language-cpp"
>int pushButton = 2;
int LED = 13;



>في التابع الرئيسي()void setup قمنا بضبط القطب pushButton على أنه
قطب دخل مع تفعيل مقاومة الرفع الداخلية، والقطب LED على أنه قطب خرج



class="language-cpp"
>void setup() {
pinMode(pushButton, INPUT_PULLUP); //configure pin as input with pullup enabled for push button
pinMode(LED, OUTPUT); //configure pin as output for LED
}




>في التابع التكراري ()void loop قمنا بقراءة حالة القطب pushButton
وتخزينها في متغير جديد buttonState.



>بما أنه القطب pushButton تم تفعيله كقطب دخل مع مقومة رفع فإنه في
الحالة الطبيعية (عدم الضغط على الكباس) سوف يتم قراء HIGH لأنه موصول
مع مقاومة الى 5v، وعند الضغط على الكباس سوف يتم قراءة LOW لأنه يتم
توصيل القطب مع الأرضي.



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



class="language-cpp"
>void loop() {
int buttonState = digitalRead(pushButton); // read the input pin:
digitalWrite(LED, (!(buttonState))); //turn led on when switch pressed
delay(10); // delay in between reads for stability
}



>سوف يتم تنفيذ ما بداخل () void loop بشكل متستمر عند الضغط على
الكباس سوف يتم تشغيل الليد وعند إزالة الضغط عليه سوف يتم إطفاء
الليد.




المقال التالي المقال السابق
لا تعليقات
إضافة تعليق
رابط التعليق