كيف تتحكم فى منزلك بواسطة الكمبيوتر

How To Computerize Your House

كيف تتحكم فى منزلك بواسطة الكمبيوتر

By : Eng. Noor  Magdy

وصف المشروع:

المشروع يقدم شرح مع تجارب عملية لطرق إستخدام الكمبيوتر الشخصى فى التحكم فى البيئة المحيطة .

 

المحتويات :

1-شرح  تكوين مخرج التوازى (Parallel port)  وطرق إستخدامه .

2-شرح كيفية تصميم واجهه (Interface)  للتحكم  بواسطة مخارج الكمبيوتر الشخصى

3-شرح تكوين مخرج التوالى ( Serial Port) وطرق إستخدامه..

4-إستبدال الكمبيوتر الشخصى  بميكرو كنترولر  (micro controller ), وشرح كيفية برمجة الميكروكنترولر.

 

سيتم نشرهذه الأقسام الأربعة على هيئة أجزاء..

لأى إستفسار أو تعليق أو إقتراح أرجو مراسلتى على :

NoorEngineer@yahoo.com

 

الجزء الأول

مخرج التوازى (Parallel port)

 

المحتويات :

-         وصف مخرج التوازى

-         تقسيم مخرج التوازى

-         تجربة 1 إختبار الخارج

-         برنامج إختبار الخارج

-         شرح نظام العد الثنائى  والتحويل بينه وبين الHex

-         إستخدام دوال جاهزة للإخراج  MyOutPort

-         تجربة 2 إختبار الداخل

-         برنامج إختبار الداخل

-         إستخدام دوال جاهزة للإدخال , IfInport  MyInPort

-         تصميم دائرة التحكم للإخراج

-         شرح دائرة الريلاى (Relay).

-          تصميم دائرة التحكم للإدخال .

-          أفكار عملية.

-          دائرة منظم الجهد (Voltage Regulator)

 

    --------------------------------------------------------------------------------------------------------

تنبيه هام :

نظم التشغيل التى تعمل بنظام WinNT مثل ويندوز2000 , و ويندوز إكس بى (WinXP)  تمنع الدخول المباشر الى مكونات الجهاز الصلبة ,والتى منها مخارج الكمبيوتر . لذلك هذه البرامج التى فى هذا المقال لن تعمل مع هذه الأنظمة .. ويمكن تشغيلها مع الدوس أو ويندوز 95 أو 98 أو ميلينيوم .

 

 وصف مخرج التوازى :

مخرج التوازى هو المخرج الذى توصل به الطباعة , وقد يوجد أكثر من مخرج توازى فى الكمبيوتر الواحد  يكون أسماؤهم LPT1, LPT2,LPT3,

 

وصف المخرج :

·        25 إبرة أنثى .

·        تخصيص الإبر :                                             

شكل-1

 

النوع

الوصف

رقم الإبرة

خارج

خارج

خارج

خارج

خارج

خارج

خارج

خارج

خارج

داخل

داخل

داخل

داخل

خارج

داخل

خارج

خارج

أرضى

Strobe

Data0

Data1

Data2

Data3

Data4

Data5

Data6

Data7

ACK

Busy

Paper Empty

Select

Auto Feed

Error

Initialize Printer

Select Input

Ground(أرضى)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18-25

جدول –1

 

عادة ما يوصل  بمخرج التوازى  كابل (25إبرة ذكر-25 إبرة ذكر) ويسمىDB25  أو كابل (25إبرة ذكر-36 مشط) والأخير هو المستخدم عادة مع الطبّاعات . لكن سيكون الشرح دائما بالنسبة للنوعين من الكابلات.

طرف الكابل الأول يكون شكله كما فى شكل-2 وطرف الكابل الثانى يكون شكله كما فى شكل-3 .

  

  

شكل-2

 

شكل-3

 

ينقسم  مخرج التوازى منطقيا الى ثلاثة مخارج :

1-     مخرج المعلومات Data Port:

  وهو  8 بتات (8Bits) يستخدم كخارج (Output) , وعنوانه فى الذاكرة (وذلك بالنسبة لل LPT1) هو  378H

و "H  هذه تعنى أن الرقم مكتوب بالنظام ال Hex .. ومن الأفضل أن يتعلم القارىء هذا النظام للعد وكذلك نظام العد الثنائى Binary . لكن سأحاول قدر الإمكان أن يكون الشرح مفهوم لمن لا يعلم هذه الأشياء.

2-     مخرج التحكم  Control Port:

وهو 4 بيتات يستخدم كخارج (Output) . وعنوانه فى الذاكرة هو 379H.

3-مخرج الحالة  Status port:

وهو 5 بيتات  يستخدم كداخل ( Input)  . وعنوانه فى الذاكرة هو 37AH.

 

وكل مخرج منطقى منها يكون له عنوان فى الذاكرة بحيث عند وضع أى قيمة فى العنوان الخاص بالمخرج ترسل هذه القيمة الى المخرج الفعلى - اى الى الإبر الخاصة بالمخرج - على هيئة قيم كهربية . هذه القيم هى صفر فولت  فى حالة الصفر المنطقى , و 5 فولت فى حالة الواحد المنطقى .. وسيأتى تفصيل ذلك فى تجربة-1

 

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

رقم الإبرة فى الكابل ال 25-36

رقم الإبرة فى الكابل  ال25-25

رقم البيت Bit #

العنوان فى الذاكرةAddress

Line Name

2

2

0

378H

D0

3

3

1

D1

4

4

2

D2

5

5

3

D3

6

6

4

D4

7

7

5

D5

8

8

6

D6

9

9

7

D7

 

 

0

379H

  

Not Con

 

 

1

Not Con

 

 

2

Not Con

32

15

3

IN 3

13

13

4

IN 4

12

12

5

IN 5

10

10

6

IN 6

11

11

7*

IN 7

1

1

*0

37AH

OUT 0

14

14

*1

OUT 1

31

16

2

OUT 2

36

17

*3

OUT 3

 

 

4

Not Con

 

 

5

Not Con

 

 

6

Not Con

 

 

7

Not Con

جدول-2

الإبر الموصلة بالأرضى (Ground) أرقامها كالتالى :

-         بالنسبة للكابل )25-25  (فهى من الإبرة 18 الى الإبرة 25

-         بالنسبة للكابل )25-36   (فهى  من الإبرة 19الى 30 والإبر 33 , 16 , 17

  ملاحظات هامة :

-         يعمل مخرج التوازى على فولت مقداره 5 فولت لتمثيل الواحد المنطقى(Logic 1) و صفر فولت لتمثيل الصفر المنطقى ( Logic 0)

-         Not Con “ تعنى أن هذه غير موصلة . ولا تعنينا .

-         البيت السابعة من مخرج الحالة (status port)  التى عليها علامة حمراء هى معكوسة (Hardware inverted)  بمعنى أنك لو ادخلت عليها 5 فولت ( 1 منطقى) سيقرأها البرنامج 0 منطقى , والعكس لو أدخلت عليها 0 فولت (0 منطقى) سيقراها البرنامج 1 منطقى .

-         كذلك البتات رقم 0و1و3 من مخرج التحكم (Control port) والتى عليهم العلامة الحمراء فهم معكوسين (Hardware inverted) بمعنى أنك لو كتبت على أحدهم صفر منطقى ستجد على الإبرة المتصلة بها 5فولت (1منطقى) والعكس لو كتبت عليها واحد منطقى ستجد على الإبرة المتصلة بها 0 فولت ( 0منطقى).

-         يمكن معرفة عنواين أى مخرج فى جهاز الكمبيوتر عن طريق التالى :

من قائمة البدأ (Start ) أدخل على :

Startà Programsà accessoriesà systemTools

ثم أختار ((resources and I/O. ستجد قائمة بكل المخارج وغيرها للجهاز الكمبيوتر

تجربة 1 : إختبار الخارج :

وصل الدائرة التى بالشكل 4

شكل-4

شرح مكونات الدائرة بالشكل 4 :

-         المقاومات المستخدمه من الحجم 100 أوم .

-         ال LED   وتسمى أيضا Optical Diode هى لمبة صغيرة الحجم تستخدم عادة كلمبات بيان فى الدوائر الرقمية.

-         بعد توصيل الدائرة  توصل بمخرج التوازى (Parallel port)  بالأبر التى أرقامها موضحة بالشكل ..

 

لاحظ أن الإبر الموصلة فى الدائرة هى الإبر الخاصة بمخرج المعلومات (Data Port) . ولتجربتها نحتاج لكتابة برنامج صغير  لكى يرسل قيمة معينة الى  مخرج المعلومات . سنكتب نفس البرنامج بلغتين هما لغة البيزيك ولغة السى ,كما سنكتبه بلغة الآلة (Assembly language).

.الأوامر الخاصة بإرسال و قراءة المخارج  فى لغة البيزيك هى

Out  Address , (Value)   للإخراج

INP (Address)   للإدخال

.الأوامر الخاصة بإرسال و قراءة المخارج  فى لغة السى هى :

  outportb(Address,Value)    لإخراج

  inportb(address)

.الأوامر الخاصة بإرسال و قراءة المخارج  فى لغة الآلة  هى :

OUT DX,AL

IN AL,DX

حيث يوضح فى DX عنوان  المخرج  , ويكون فى AL  القيمة المراد إخراجها أو التى تم قراءتها .

لإستخدام الفيجوال بيسيك تحتاج لملف (VBASM.DLL) يمكنك تنزيله من هنا

- مستخدمى الفيجول بيسك 16 بت  Vb3) وما سبقة)

- ضع هذا الملف المرفق VBASM.DLL تحت الدليل Windows/System

- أكتب هذه الاسطر في ال Module تحت قسم General_Declaration

Declare Sub vbOut Lib "VBASM.DLL" (ByVal nPort As Integer, ByVal nData As Integer)

Declare Function vbInp Lib "VBASM.DLL" (ByVal nPort As Integer) As Integer 

- قم بكتابة هذا السطر لأرسال امر التشغيل :
vbOut 888, 1  

- قم بكتابة هذا السطر لأرسال امر التشغيل :
vbOut 888, 0

 - مستخدمي الفيجول بيسك 32 بت ( Vb4, Vb5 , Vb6 )

- ضع هذا الملف المرفق VBASM.DLL تحت الدليل Windows/System

- أكتب هذه الاسطر في ال Module تحت قسم General_Declaration

Declare Sub vbOut Lib "WIN95IO.DLL" (ByVal nPort As Integer, ByVal nData As Integer)

Declare Sub vbOutw Lib "WIN95IO.DLL" (ByVal nPort As Integer, ByVal nData As Integer)

Declare Function vbInp Lib "WIN95IO.DLL" (ByVal nPort As Integer) As Integer

Declare Function vbInpw Lib "WIN95IO.DLL" (ByVal nPort As Integer) As Integer 

- وبنفس الطريقة قم بكتابة هذا السطر لأرسال امر التشغيل :
vbOut 888, 1

 - قم بكتابة هذا السطر لأرسال امر التشغيل :
vbOut 888, 0

 ملاحظة : هذه الاوامر الموجودة في Module تعطيك امكانية التحكم في الارسال او القراءه من اي منفذ في كمبيوترك.

 

 

البرنامج الأول : إختبار المخارج :

 

وظيفة هذا البرنامج أن يقوم بإضائة جميع اللمبات الموصلة  فى الدائرة لمدة ثانية ثم يطفأها .

بلغة السى

#include<stdio.h>

#include<dos.h>

 

 void main()

    {

      outportb(0x378,0xff);

      delay(1000);

      outportb(0x378,0x00);

   }

 

شرح البرنامج :

-         السطر الأول والثانى يدرج الملفات التى سيستخدمها البرنامج  , الأول ضرورى لأى برنامج ,والثانى ضرورى للبرامج التى سنستخدم فيها أوامر قراءة وكتابة المخارج .

-         السطر الثالث هو ضرورى لأى برنامج بلغة سى , حيث هو يمثل الدالة الرئيسية التى سيبدأ البرنامج العمل منها .

-         السطر الخامس :  أمر  إخراج القيمة 0xff  (سنشرح بعد قليل دلالة هذه القيمة) من المخرج المنطقى للمعلومات (Data Port) الذى هو كما علمنا عنوانه هو0x378 .

-         السطر السادس: أمر وظيفته إيقاف تنفيذ البرنامج عنده للفترة المحددة بين الأقواس (بالملي ثانية) ,فهو هنا يعطى فترة زمنية مقدارها ثانية واحدة .

-         السطر السابع : أمر إخراج القيمة  0x00 من نفس المخرج .

 

بلغة البيزيك :

Out &H378 , &HFF

For i=1 to 10000

Next i

Out  &h378, &H00

بلغة الآلة :

MOV DX,378

MOV AL,FF

OUT DX,AL

ملاحظات على برنامج لغة الآلة :

-         تم حذف الجزء الخاص بعمل فترة زمنية (Delay) للتسهيل .ويمكن عمله بنفس طريقة برنامج البيزيك , بعمل Loop .

-         يمكنك كتابة برامج  لغة الآلة فى برنامج ال (debug) الموجود فى الويندوز و الدوس. . لكى تشغل هذا البرنامج أفتح موجهه دوس (Command prompt) إذا كنت موجود على الويندوز , وأكتب :

Debug

ستحتاج الى معرفة بعض الأوامر القليلة لكى تتعامل مع هذا البرنامج  ستجدها متوفرة على الإنترنت .

-     إذا كنت ستسخدم برنامج آخر غير ال (debug) فلا تنسى أن تكتب القيم الرقمية التى فى البرنامج بالنظام ال hex  

فمثلا إذا كنت تستخدم برنامج (Turbo Assembler) فستكتب H  بعد الرقم لكى يكون فى النظام ال Hex .  أى ستكتب مثلا (378H).

 

 

بالنسبة للقيم 0xff , 0x00 فهى قيم مكتوبة بنظام العد ال Hexadecimal   الجدول التالى يبين القيم بنظام العد العشرى (العادى) والثنائى وال Hex . إذا كنت ممن على دراية جيدة بهذا النظام فيمكنك اللإنتقال مباشرة الى "ملاحظة"

 

Hex

الثنائى binary

العشرى Decimal

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

جدول-3

وأسهل طريقة لإستخدام مخرج التوازى فى  كخارج أو داخل هو إستخدام نظام العد الثنائى (Binary) ..

شرح نظام العد الثنائى : والتحويل بينه وبين الHex

1-     بالنسبة لمخرج المعلومات (Data port) فإنه كما ذكرنا من قبل يتكون من 8 بيتات , لذلك نحتاج إلى تخصيص قيمة طولها ثمانية بتات بالنظام الثنائى لإرسالها عبر هذا المخرج .

2-     وبديهيا البيت التى نريد أن تكون قيمة الأبرة الخاصة بها 5 فولت (فنحن كما ذكرنا كل بت يقابلها إبرة –راجع  جدول2) سنجعل قيمة البيت المقابله لها  تساوى واحد .. ولنضرب مثال على الدائرة التى بالشكل-4  إذا أردنا أن تكون أول لمبة فقط تضىء ستكون القيمة التى سترسل الى المخرج هى (00000001 (  ثم بعد ذلك إذا أردنا أن نطفىء اللمبة الأولى وتضىء اللمبتين المتصلتين بالأبر رقم8و9  سنرسل القيمة ( 11000000) . وإذا أردنا إضاءة كل اللمبات سنرسل (11111111)

3-     لكى نحول هذه القيم المكتوبة  بالنظام الثنائى الى قيم مكتوبة بالنظام Hex  حتى يمكننا كتابتها فى سطور البرنامج سنقوم بالتالى: أولا لاحظ من جدول3 أن كل أربع خانات فى النظام الثنائى يتم تمثيلهم بخانة واحدة فى النظام Hex

لذلك سنمثل الثمانى خانات للقيم بالنظام الثنائى بخانتين من النظام الHex بطريقة عادية جدا ,وهو أن  أول أربع خانات من الرقم بالنظام الثنائى يتم تثميلهم باول خانة فى ال Hex  وثانى أربع خانات يتم تمثيلهم بثانى خانة فى النظام ال Hex . وذلك طبقا للجدول3 ..

  فمثلا القيمة (0000 0001) بالنظام الثنائى ستصبح (01) Hex .

والقيمة (01001010)  بالنظام الثنائى ستصبح (4A) Hex. لأن أول أربع خانات على اليمين يمثلون القيمة A , وثانى أربع خانات يمثلون القيمة 4 . أنظر الجدول 3.

 

ملاحظة :

إذا وجد القارىء أى صعوبة فى فهم او االتعامل مع هذه الطريقة , فهناك بديل أفضل وهو ملف مكتوب بلغة السى به بعض الدوال  أسهل كثيرا فى التعامل معها من الدوال التى ذكرناها. هذا الملف يمكنك تنزيله من هنا .. أسم الملف هو “intrface.c . يمكنك فتحه بأى مترجم(Compiler) للغة السى  او لغة   C++  مثل ( Borland C++) أو ( Turbo C) . والأول أفضل لكنه أكبر فى الحجم . اما االأخر  فيمكنك تنزيله من هنا مجانا ..

بعد فتح  الملف ستجد فى أخره مكتوب السطرين التاليين :

  // ضع سطور برنامجك هنا

  // Put Your code here

 

يمكنك كتابة سطور البرنامج الخاصة بك بعد هذين السطرين .يمكنك إستخدام الدوال التى ذكرناها سابقا أو إستخدام الدالة الآتية :

الدالة MyOutPort(portID, Value, Delay time):

وظيفتها إخراج معلومات الى المخرج .وهى يمكن إستخدامها مع كل من مخرج المعلومات (Data Port)  او مخرج التحكم (Control Port) .هذه الدالة تأخذ ثلاثة أشياء : عنوان المخرج (فى حالتنا هنا هو 0x378)  , و القيمة المراد إرسالها مكتوبة بالنظام الثنائى , اى كما ذكرنا الأبرة المراد جعلها 5 فولت نكتب فى البيت المقابلة لها 1 (انظر شرح نظام العد الثنائى المذكور سابقا ) , وتأخذ الدالة ثالثا الوقت بالمللىثانية  المراد تأخيره بعد إرسال القيمة المعينة .

نذكر مثال للتوضيح :  فى الدائرة التى بالشكل 4: إذا أردنا أن نضىء اللمبات المتصلة بالأبر رقم 2و4و9 لمدة ثلاثة ثوانى ثم إطفاؤهم وإضاءة اللمبة  المتصلة بالأبرة رقم ثلاثة فقط لمدة ثانية واحدة ثم إطفائها , سنكتب الكود التالى :

 

     MyOutPort(0x378, 10000101,3000);

     MyOutPort(0x378,10,1000);

     MyOutPort(0x378,0,0);

ملاحظات هامة  :

-         الأصفار التى على الشمال لا تكتب , وذلك ظاهر فى السطر الثانى فنحن لم نكتب (00000010) لأن ذلك سيسبب حدوث خطأ فى البرنامج .

-         إذا لم نرد أن تأخذ الدالة وقت (Delay time)  فنكتب فى المتغير الثالث "0" كما هو واضح فى السطر الثالث .

-         يمكن إستخدام هذه الدالة أيضا مع مخرج التحكم(Control port) لكن مع ملاحظة أن هذا المخرج هو 4 بتات فقط , وكذلك ملاحظة البتات المعكوسة (راجع ملاحظات على جدول-2) .

 

تجربة-2 : إختبار الداخل:

 كون هذه الدائرة البسيطة :

شكل-5

 

شرح التجربة :

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

 بالنسبة لأول سلك فإنه يوصل بالأبرة رقم 15 إذا كان الكابل المستخدم هو من النوع(25-25) , ويوصل بالأبرة 32 إذا كان الكابل المستخدم من النوع(25-36).

 ونُذّكر بما ذكرناه من قبل وهو أن البيت  رقم7 (وهى المتصلة هنا بالأبرة رقم 11)  معكوسة (Hardware inverted) راجع ملاحظات على الجدول2 .  لذلك إذا قرأنا المخرج وجميع المفاتيح مفتوحة (أى كما بالرسم) فإن الناتج سيكون 01111, وهو يساوى بالنظام العشرى 15, ويساوى بالHex     (0F) .

 

البرنامج الثانى : إختبار الداخل :

وظيفة هذا البرنامج هو أنه يقرأ مخرج الحالة ويطبع القيمة العشرية المقابلة للقيمة المقروءة.

 

بلغة السى :

#include<stdio.h>

#include<dos.h>

 

 void main()

     {

         int value=0;

         value=inportb(0x379);

         value=value>>3;

         printf( "%d  ",value);

                                                      }

     

شرح البرنامج :

السطر الأول يعرف متغير من النوع Integer  و السطر الثانى يقرأ مخرج الحالة ويحفظه فى هذا المتغير  . السطر الثالث يقوم بعمل إزاحة للقيمة المحفوظة فى المتغير قيمتها ثلاث خانات بالنظام الثنائى , وذلك لأنه بالرجوع لجدول 2 فإن مخرج  أول ثلاث بتات فى مخرج الحالة غير موصلة ونحن إذا قرأنا مخرج الحالة فإن نتيجة القراءة لابد أن تكون 8 بيتات (وذلك لأن الأمر importb يقرأ 8 بيتات ) . فمثلا بتجربة هذا البرنامج على الدائرة بالشكل 5    ستكون النتيجة المقروءة هى 01111xxx . أى أن الثلاث بيتات الأولى غير معلومة , لذلك نحتاج لعمل الإزاحة هذه لكى تصبح النتيجة المقروءة هى 01111. وهى القيمة الفعلية الموجودة على المخرج .

السطر الرابع يطبع القيمة المقروءة .

 

و يمكن بدلا من إستخدام هذه الطريقة التى قد تلتبس على البعض , ان تستخدم دوال جاهزة موجودة فى نفس الملف الذى ذكرناه من قبل فى تجربة الداخل (فى البرنامج الأول) . فى نفس الملف المسمى (intrface.c).ويتم التعامل معه كما ذكرنا من قبل .  هذه الدوال هى :

 

1-     الدالة MyInPort(Portid) :

وظيفتها قراءة معلومات من المخرج . هذه الدالة تأخذ رقم البورت ففى حالتنا هنا هو 0x379 . وترجع القيمة التى تم قراءتها فى متغير من النوع Integer . هذه الدالة لا تستخدم الا مع مخرج الحالة (Status Port)  . لأنها ستسبب خطأ إذا أستخدمت فى أى مخرج آخر حتى ولو كان مخصص للإدخال . ولن تحتاج هنا لعمل إزاحة للقيمة المقروءة فالدالة تقوم بذلك .

مثال :

   int value;  

  value=MyInport(0x379);

      2- الدالة IfInport(Protid , Value) 

وظيفتها قراءة المخرج (فى حالتنا هنا هو مخرج الحالة)  وتقارن القيمة المقروءة  بالقيمة المعطاة فى المتغير Value

إذا وجد القيمتين متساويتين ترجع قيمة=1 وإلا ترجع 0 . وهى أيضا لا تستخدم إلا مع مخرج الحالة .

مثال:  

   int temp;

   temp= IfInPort(0x379,1110) ;

   if (temp==1) printf(“Equal Values”);

   else printf (“Not Equal Values”);

 

 

البرنامج الثانى بلغة البيزيك :

  x% = INP(&H379)

  print  x

البرنامج الثانى بلغة الآلة :

 MOV DX,379

IN AL,DX

 

أمثلة لتجريب البرنامج الثانى مع الدائرة التى بالشكل 5 :

-         إذا أغلقنا المفتاح الأول(العلوى) ونجرب البرنامج سنجد أن القيمة المقرءة هى14 التى تقابل بالنظام الثنائى          (01110)

-         إذا إغلقنا المفتاح السفلى (مع فتح باقى المفاتيح) ونجرب البرنامج سنجد أن القيمة المقروءة هى 31 التى تساوى بالنظام الثنائى (11111) . لاحظ أن هذه البت التى وصلناها بالأرضى معكوسة كما ذكرنا .

 

 

تصميم دائرة التحكم للإخراج :

نحن الأن قد تعلمنا كيف نرسل ونقرأ معلومات من مخرج التوازى , وقد رأينا كيف تتحول القيم التى نرسلها الى المخرج (مخرج المعلومات (Data port) مثلا ) الى إشارات كهربية,  0 فولت فى حالة الصفر المنطقى و 5 فولت فى حالة الواحد المنطقى . وعلى العكس رأينا كيف تتحول الإشارات الكهربية التى نضعها على مخرج الحالة (Status port ) الى قيم يمكننا قراءتها داخل سطور البرنامج وإستخدامها كأن نجرى عليها بعض الحسابات وغيرها .   لكن كيف يمكننا أن نستخدم هذا الذى تعلمناه فى التحكم فى الأشياء التى خارج الكمبيوتر ؟ وهذا ما سنشرع فى شرحه الأن .

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

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

سنستخدم وحدة إلكترونية اسمها "ريلاى" (Relay) .  وهى عبارة عن جهاز صغير تصميمه من الداخل كما بالشكل6 :

)شكل-6(

من الرسم نلاحظ أنه هناك طرفان للدائرة (I1,I2) وظيفة هذين الطرفين هو التحكم فى غلق وفتح المفتاح الموصل بين الطرف المشترك (C)  وهو إختصار ل(Common) والطرفين الأخري (NC,NO) وهما إختصر ل                         (Normally Closed. Normally Open) ويتم هذا التحكم كالتالى :

-         عندما الدائرة الموصلة بطرفى التحكم(I1,I2) مفتوحة ,أى كما هو الوضع بالرسم الآن نجد أن الطرفين (C,NC) متصلين ببعض ,بينما الطرفين (C,NO) غير متصلين .

-         عند غلق الدائرة الموصلة بطرفى التحكم(I1,I2) , يصبح الطرفين (C,NC) غير متصلين ببعض ,بينما الطرفين (C,NO)  متصلين .

  هذا "الريلاى" ذو أهمية بالغة فى جميع دوائر التحكم سواء بالكمبيوتر أو غيره , لأنه يمكن عن طريق فولت صغير (من 1.5 الى 5 فولت عادة فى معظم الأنواع) يوصل بين طرفى التحكم أن تتحكم فى مرور فولت وتيار كبيرين بين الطرفين(C,NC) أو (C,NO) . وهو ما نريده فى مشروعنا هذا . فعن طريق الفولت الصغير الخارج من دائرة مخرج التوازى سنتحكم فى فتح وغلق الريلاى لنتحكم فى تشغيل أجهزة تعمل على فولتات عالية تصل الى 220 فولت .

هذا الريلاى متوفر  فى معظم الأماكن التى تبيع المكونات اللإلكترونية وشكله كما بالشكل 7

شكل-7

وهذا الريلاى إذا لم تتمكن من شراءه يمكنك نزعه من اى دائرة إلكترونية , حيث أنه يستخدم بكثرة فى الدوائر الكهربية (الكروت الإلكترونية) مثل كارت المودم (كارت الشبكة) .لكن نزعه  سيحتاج الى مهارة لكى لا تتلف أرجل الريلاى.

وقد يكون عدد أرجل الريلاى أكثر من التى فى شكل 7 .. ولا أعلم قاعدة لمعرفة أى من الأرجل هو أرجل التحكم(I1,I2) فما عليك إلا أن تجرب لمعرفة أرجل التحم وكذلك باقى الأرجل . لكن عادة ما يكون رجلى التحكم متجاورين إما فى جانب واحد أو فى جانيين متقابلين . ستعرف أنك قد توصلت الى طرفى التحكم الصحيحين بسماع صوت نقرة خفيفة داخل الريلاى عند توصيل مصدر جهد بهاذين الطرفين .هذه النقرة شبيهه بالتى تسمعها عندما يفتح المودم الخط .

 

مبدأيا نحتاج لكل بت (Bit)نحتاج لأستخدامها كمخرج الى دائرة كالتى بالشكل 8:

 

شكل-8

 

ملاحظات على الشكل-8:

-         بالنسبة للمكون المسمى(Diode)  فهو متوفر فى الأماكن التى تبيع المكونات الإلكترونية أسمه "ديود رقم 1N4001 . المكون الآخر الذى  أسفله هو ترانزستور ويمكنك شراءه عن طريق رقمه هذا الموضح بالدائرة .

-     بالنسبة لمصدر الجهد الذى يعطى ال 6 فولت فلا ينصح بإستخدام مصدر جهد يعطى تيار عالى لأن هذا قد يتسبب فى إتلاف دائرة مخرج التوازى . فممكن إستخدام بطارية صغيرة (مثل التى تستخدم فى الأجهزة الإلكترونية) أو إستخدام منظم فولت (Volt regulator).دائرته موجودة فى آخر هذا الملف فى الشكل 10 و الشكل 11.

-         الطرفان المسميان (pin2,pin19) يتم توصيلهم بمخرج التوازى , كلا منهما مع رقم الأبرة المماثل لها .

فى الشكل8 دائرة التحكم موصلة بالأبرة رقم 2 (التى تقابل البت الأولى فى مخرج المعلومات(Data port) ) . فعند إرسال واحد منطقى (Logic 1) الى هذه البت سيغلق الريلاى , وعند إرسال صفر منطقى (Logic 0) اليها سيفتح الريلاى . وكما هو موضح بالشكل-8 فإنه يمكن توصيل جهازين بالريلاى الواحد , أحدهما يعمل عندما الريلاى مفتوح(أى عندما الريلاى لا يمر به تيار) وهو الجهاز 1 فى الشكل  , والآخر يعمل عندما الريلاى مغلق( أى يمر به تيار) وهو الجهاز 2 فى الشكل .

 

 

تصميم دائرة التحكم للإدخال :

سنستغل خاصية فى مخرج التوازى  لتصميم دائرة الداخل , وهى أن جميع إبر مخرج الحالة (Status port)  إذا لم تكن موصلة بشىء فإنها يكون عليها 5 فولت (1 منطقى) وهذا تقريبا فى  كل الأجهزة . ويمكنك إختبار ذلك بقياس فرق الجهد بين إبر مخرج الحالة (راجع جدول 2) وبين أى إبرة من الإبر الموصلة بالأرضى وذلك قبل توصيلهم بأى شىء ,وتأكد من ان  فرق الجهد على كل إبرة من الإبر الخمسة مع الأرضى هو 5 فولت . إذا وجد غير ذلك (وهذا نادرا)  فلن تصلح الدائرة التى سنذكرها مع هذا الجهاز .

دائرة التحكم للإدخال هى التى فى شكل-9

شكل-9

ملاحظات على الدائرة :

-         يوصل بطرفى التحكم للريلاى (I1,I2) مفتاح ومصدر جهد , سواء كان بطارية كما بالشكل أو أى مصدر جهد آخر يعطى فولت فى حدود من 3 الى 6 فولت ,وذلك فى أغلب أنواع الريلاى .. وعادة ما يكون مكتوب على الريلاى الفولت اللازم توصيله بطرفى التحكم .

-         الطرفان المسميان (pin13,pin19) يتم توصيلهم بمخرج التوازى , كلا منهما مع رقم الأبرة المماثل لها .

-         الطرف الثالث للريلاى (NO) غير موصل بشىء .

 

فى الدائرة التى بالشكل9 عندما المفتاح مفتوح فإن الريلاى مفتوح  و الإبرة13 موصلة بالأرضى (الذى هو الإبرة19) , لذلك سيكون على الإبرة13  0فولت ( أى 0 منطقى) يمكن التأكد من ذلك وذلك بقراءة البت المقابلة لهذه الإبرة (البت الثانية) بالطرق التى ذكرناها من قبل . لكن عند غلق المفتاح فإن الريلاى سيغلق وتصبح الإبرة13 غير موصلة بشىء , لكن كما ذكرنا فإن إبر مخرج الحالة يكون عليها 5 فولت إذا لم تكن موصلة بشىء . وهذا الذى سيحدث هنا . ويمكن التأكد من ذلك بقراءة البت المقابلة لهذه الإبرة , ستجد عليها 1 منطقى . 

 

أفكار عملية :

بعدما تعلمنا كيف نخرج وندخل إشارات كهربية من مخرج التوازى لجهاز الكمبيوتر وذلك بكتابة سطور برمجية قليلة ,ماذا يمكننا أن نفعله بهذه الإمكانيات التى تعلمناها؟.إن عنوان مشروعنا هو "كيف تتحكم فى منزلك بواسطة الكمبيوتر" لذلك فأنت الآن بواسطة هذه المعلومات التى تعلمتهاتستطيع أن تجعل منزلك مدار بالكمبيوتر. وكذلك مصنعك تستطيع أن تجعل آلاته كلها يتم التحكم فيها بالكمبيوتر . المشكلة التى ستواجهك هو كيفية عمل واجهة بين تلك الأجهزة وبين دائرتى الخارج(شكل-8) والداخل (شكل-9) . وهى مشكلة بسيطة الى حد ما  فما عليك سوى أن تجعل مصدر الكهرباء للجهاز  يمر عن طريق ريلاى موصل كما فى الشكل-8  لكى يتم تشغيل وإيقاف الجهاز عن طريق الكمبيوتر . ولكى تجعل الجهاز يرسل إشارات الى الكمبيوتر وتستخدم هذه الإشارات لمعرفة حالة الجهاز مثلا فما عليك سوى أن تجعل الجهاز يفتح ويغلق دائرة بسيطة كالتى فى الشكل-9 .لكن حتى الآن لن تستطيع الحصول على عدد إبر خارج -تتحكم بها فى أجهزة - أكثر من 12 (8 لمخرج المعلومات , و 4 لمخرج التحكم)  وعدد إبر داخل- تقرأ منها مدخلات من الأجهزة-  أكثر من 5 (عدد إبر مخرج الحالة) .و يمكنك زيادة عدد إبر الداخل إذا كان مخرج التوازى فى جهازك يتيح خاصية ثنائية الإتجاه (Bi-directional) هذه الخاصية موجودة فى أغلب الأجهزة وهى تجعل مخرج المعلومات (Data port) يستخدم للإدخال والإخراج . وهذا الجزء سنتحدث عنه بالتفصيل فى الجزء القادم ..

 

دائرة منظم الجهد:

 

شكل-10

دائرة منظم 5 فولت بإستخدام مصدر جهد ثابت(DC) من 5 الى 18 فولت

 

 

شكل-11

دائرة منظم جهد . تعطى خارج 5 فولت و حوالى 100 ملى أمبير

للحصول على خارج جهد غير ال 5 فولت نستبدل الوحدة (7805)  بأخرى من العائلة (78xx) حيث آخر رقمين فى أسم الوحدة الإلكترونية تدل على الفولت الخارج منها , فمثلا (7803) تدل على أن الخارج هو 3 فولت .

 

 

إنتهى الجزء الأول بحمد الله ويليه الجزء الثانى وفيه:

1-     كيفية زيادة عدد إبر الخارج.

2-     كيفية زيادة عدد إبر الداخل.

3-     شرح مخرج التوالى .

لأى إستفسار أو تعليق أو إقتراح أرجو مراسلتى على :

NoorEngineer@yahoo.com

 

 

 

تعليقات

المشاركات الشائعة من هذه المدونة

مسدس اللحام Soldering Gun

فرامة خضار كهربائية من ريبون

كيفية عمل القرص الصلب