قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 27-01-2013, 03:52 PM المشاركة 1   
افتراضي تعلم كيفية التعامل مع التاتش Touch وانواعه ((Resistive Touch ودعاً Push Button)) ج2 Twitter FaceBook Google+



بسم الله الرحمن الرحيم

سوف نتحدث فى هذه المجموعه ان شاء الله
عن التاتش Touch وانواعه وكيفية التعامل معه
من خلال لغه الميكروسى MikroC وباستخدام ميكروكنترولر من عائلة PIC
وسوف يكون هناك تطبيق عملى ان شاء الله لهذه الانواع


اولا
دة رابط الجزء الاول وهو التعريف بالانواع

http://www.qariya.com/vb/showthread.php?t=122315

ثانيا
فى هذا الجزء سوف نتحدث ان شاء الله عن Resistive Touch

فى البداية سوف نتحدث عن كيفية سير الشرح

1 - شرح المبادئ وكيف تعمل هذه التقنيةومما تتكون.
2 - مميزات وعيوب هذا النوع.
3 - من اين يمكن الحصول عليها.
4 - فديوهات تجربة لها.
5 - اكواد الميكروسى وكيفية استخدامها مع ملف لمخطط الدائرة.



((1))
من اسم هذه التقنية نعلم انها تعمل بالمقاومة ولكن كيف هذا

بكل بساطة هى مجرد مقاومة متغيرة شفافة ان صح التعبير



فالكهرباء تدخل من طرفين احدهم سالب والاخر موجب
ويتم قياس الفولت من الطرف الاوسط وعلى حسب مكان الزراع تكون قيمة المقاومة
وبالتالى قيمة الفولت ايضا



ولوحة اللمس تعمل بنفس الطريقة فلا فرق
ولكن كما قلت شفافة

انظرو الى الصورة التالية



هكذا تعمل بالضبط
ولكن هذا فى محور واحد فقط ((سيتم التوضيح بعد قليل))

ولمعرفة ما اقصدة هنا يجب ان نعلم مما تتكون هذه الوحة

هى تتكون من 3 طبقات
طبقتان تعملان كا مقاومة متغيرة شفافة يتكونوا من البلاستيك
المغطى بمواد موصلة ((لن ندخل فى التفاصيل اكثر))
وطبقة فى الوسط تتكون من كرات ومساحات فارغه تعمل على فصل الطبقتين
عن بعضهم البعض
وعند الضغط على اى طبقة من الاثنين تلتصق بالاخرى ويتم قياس الفولت
وعند زوال الضغط تعمل الكرات فى الطبقة الوسطى
على اعادة الطبقتين الى موضعهما لهذا تعمل هذه التقنية
مع اى شىء سواء صوابعنا او اقلام او اى شىء يمكنة الضغط على الوحة

انظروا الى الصورتين



كما نرى عند الضغط تنزل احدى الطبقات للمس الاخرى ويتم قياس الفولت
ويتم تحديد مكان الضغطة او اللمسة على حسب قياس الفولت

وهنا ايضا



وهنا ايضا



فكما نرى طبقة تاخذ موجب من طرف وطرف اخر سالب
والطبقة الاخرى نقيس من خلالها الفولت لتحديد مكان اللمسة بالظبط

اذن يمكن القول ببساطة لكل لمسة قيمة فولت تشير الى مكانها

اذا ماذا نحتاج الان !! لنذهب ونحول كل اغرادنا لكى تعمل باللمس

لا انتظر هناك مشكلة

وهى انك ان قمت بقياس الفولت من اللوحة من طبقة واحدة فهذا يعنى انك
حددت مكان اللمسة فى اتجاة واحدة اى فى بعد واحد
وهذا يعنى انك حددت مكان اللمسة فى البعد الافقى او البعد الراسى
بمعنى اخر مكان اللمسة بالطول او بالعرض وهذا غير دقيق بالمرة

وهذا لن يكفى لاننا هكذا لم نحدد مكان اللمسة كا نقطة محدد على الشاشة
فقط نقطة فى بعد واحد وهذا لا يكفى بل يجب تحديدها كا نقطة تقع بين
محورين اى احداثياتها فى المحور X والمحور Y اى مكان اللمسة
بالطول ومكانها بالعرض لنحدد مكان النقطة بالظبط على الشاشة او اللوحة

ولتوضيح اكثر
تخيل معى
اننا قمنا بقياس الفولت الناتج من للمسة من خلال طبقة من اقصى اليمين
وكان القياس يساوى 5 فولت

ولكن اذا كانت اللمسة فى الاعلى وكانت اقصى اليمين سيكون القياس ايضا 5 فولت
واذا كانت اللمسة فى الاسفل وكانت اقصى اليمين سيكون القياس ايضا 5 فولت

ولهذا لن تستطيع ابدا تحديد النقطة الا فى اتجاة واحد وهو
اقصى اليمين او اقصى اليسار ولن تسطيع تحديدها اذا كانت فى الاعلى او الاسفل

وهذا ما ااقصدة بالظبط



اذن ما الحل لهذه المشكلة

الحل بسيط جدا وهو ان نستعمل طبقتان فى نفس الوقت
طبقة نقيس من خلالها قيمة اللمسة فى محور X ((يسارا ويمينا))
وطبقة نقيس من خلالها قيمة اللمسة فى محور Y ((اعلى واسفل))

انظر الى الصور التالية



هنا ندخل الفولت على الوحة ونقيس قيمة الفولت لنحدد الاحداثيات بالنسبة
للمحور X ((يسارا ويمينا))

وهنا



ندخل الفولت على الوحة ونقيس قيمة الفولت لنحدد الاحداثيات بالنسبة
للمحور Y ((اعلى واسفل))

وعند جمع الطبقتين معا هنا يمكننا قياس الاحداثيات لكلا المحورين
ويمكننا الان تحديد مكان اللمسة بدقة على اللوحة

سواء اعلى او اسفل او يمينا او يسارا
فاذا كان القياس فى اقصى اليمين سنحتاج لمعرفة ان كان فى الاعلى ام فى الاسفل
وهنا يمكننا تحديد نقطة اللمسة

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

اذن عندنا طبقة بنقيس من خلالها المحور X وطبقة بنقيس من خلالها المحور Y

ودة فديو لتوضيح اكثر


__________________________________________________ ____________X
.................................................. .................................................. ........
__________________________________________________ ____________Y

((2))

مميزات هذا النوع :

1 - رخص ثمنة .
2 - يمكن استخدام اى شئ للتعامل معه مثل الاصابع والاقلام الى اخرة .
3 - الدقة الى حد ما .
4 - سهولة تصنيعه .
5 - سهولة استخدامة .
6 - يمكن تركيبة ولصقة على اى شىء.
7 - لا يتاثر بالماء .

عيوب هذا النوع :

1 - يتلف مع الوقت والاستعمال بشكل اسرع من غيرة .
2 - اذا تلفت نقطة واحدة منة يتلف كلة .
3 - لا يعمل مع اكثر من للمسة فى نفس الوقت بطريقة مباشرة .
4 - يحتاج الى الضغط علية الى حد ما لكى يتم الاحساس باللمس .
5 - يستهلك الكثير من الكهرباء بالمقارنة مع انواع اخرى .
6 - لا يمرر الضوء بنسبة %100 بل اقل من ذلك .
__________________________________________________ ____________X
.................................................. .................................................. ........
__________________________________________________ ____________Y

((3))

يمكن الحصول على هذا النوع عن طريق بعض المحلات والشركات مثل رام

http://ram-e-shop.com/oscmax/catalog...oducts_id=2253

ولكن ثمنه فى رام 65 جنية

وهذا لا يحقق الاسم الموجود فى العنوان ودعاً Push Button

بكل بساطة اذهب الى اى محل لتصليح الموبايل
وقل لة اريد التاتش بتاع اى موبايل صينى او لو الراجل بيفهم ههههههه ولونو نادر
قلة تاتش Resistive بتاع موبايل

ولمعرفة انه Resistive يجب ان يعمل بالقلم او بالاصبع او اى شىء اخر
وليس الاصبع البشرى فقط او اقلام خاصة بة فهذا نوع اخر
وهكذا نعرف الانواع التى تعمل بهذا النوع من التاتش

ستجد سعر الصغير منة ب 5 جنية واكبر حجم كبير جدا ب 10 جنية

وهكذا يمكننا التعويض عن الازرار وعن الكيباد بسعر رخيص جدا
وبشكل اقوى والتصميم على مزاجنا وكمان شىء حديث

ونقدر نقول بثقة ودعاً Push Button

__________________________________________________ ____________X
.................................................. .................................................. ........
__________________________________________________ ____________Y

((4))

اول فديو ودة تجربتى الخاصة

http://www.youtube.com/watch?v=MOCys...ature=youtu.be


وهنا فديو اخر مع تركيبة على الشاشة

والتحكم فى الليد

http://www.youtube.com/watch?v=MfkL9...ature=youtu.be

وهنا فديو لفكرة عمل الكيباد
فقط قم بالرسم على ورقة ولزقها اسفل اللوحة
او اطبع صور وقم بلزقها ايضا او ورق عادى اى شىء يمكنك الطباعه والرسم علية
والازرار بالحجم والون والشكل الذى تريد



__________________________________________________ ____________X
.................................................. .................................................. ........
__________________________________________________ ____________Y

((5))


قبل الاكواد لازم نعرف شىء مهم عن النوع دة

اولا
هذا النوع ينقسم الى ثلاثة انواع وكلهم يادون نفس الغرض مع امكانيات اكثر

النوع الاول يكون ب 4 اطراف فقط وهذا ما نتعامل معه هنا .
النوع الثانى يكون ب 5 اطراف وسوف نتعرف علية .
النوع الثالث ب 8 اطراف وسوف نتعرف علية .

النوع الاول هو ما كنا نتحدث عنة طوال هذا الموضوع
وهو المتكون من طبقتين يتم من خلالهما قياس الفولت وتحديد اين تم اللمس



ولهذا له 4 اطراف فقط لكل طبقة 2 طرف

اما النوع المكون من 5 اطراف
فهو بكل بساطة عبارة عن طبقة واحدة لها 4 اطراف
وهم لتوصيل الفولت موجب وسالب لكل محور
ويتم التبديل فى كل مرة نقوم فيها بالقياس
اى مرة نوصل السالب والموجب للمحور Y ومرة اخرى للمحور X

اما الطرف الخامس فا من خلالة يمكننا قياس الفولت
للمحورين

اما النوع الثالث ذو 8 اطراف
فهو مثل الرابع ولكن بدقة اكثر منة
وطبقات مقسمة

ناتى الان الى الجزء الخاص بالتعامل مع اللوحة وبرمجتها وما الى ذلك

فى البداية يجب ان نعلم اننا سوف نحتاج الى قناتان من محول ADC Module
قناة للمحور X وقناة للمحور Y

هذه صورة لاحدى هذه الوح




وكما نرى هناك 4 اسلاك وكما قلت فى الاعلى لماذا هم 4

سوف نقوم بتوصيل هذه الاسلاك الاربعه باى سلوك عادية لكى تلحم على البوردة
او يمكننا استخدام محول مثل هذا



كما تريد المهم توصل السلوك للوحة

بالنسبة لمعرفة اطراف الطبقات
اى الطبقة الخاصة بالمحور X والطبقة الخاص بالمحور Y

لان كل طبقة لها 2 طرف

بكل بساطة اول طرف وثالث طرف خاصين بالطبقة Y
والطرف الثانى والرابع خاصين بالطبقة X

لا توجد قطبية بينهم

مثل هذه الصورة



ناتى الان الى كيفية التعامل معها وكيفية كتابة الكود

الامر فى غاية البساطة والسهولة
سوف نقوم بادخال سالب وموجب على اطارف الطبقة X
وبعد ذلك نقوم بالقياس من خلال احد اطراف الطبقة Y

وبعد ذلك نقوم بعكس العملية
اى نقوم بادخال سالب وموجب على اطراف الطبقة Y
ونقوم بالقياس من خلال اطراف الطبقة X

وهكذا باستمرار نحصل على الحداثيات من المحورين

ولفعل هذه المهمة هناك طريقتين
الاولى وهى الافضل والادق والاصح

ان نقوم بصنع دائرة تتكون من 5 ترنسيزتورات مع بعض المقومات

وهذه صورة الدائرة



الجزء المظلل بالون الاسود

وهذة الطريقة تعطى دقة وتوفر طرفين من الميكرو
بحيث انك ب 2 طرف تتحكم فى دخول وخروج الكهرباء من والى اللوحة
والطرفين الاخرين تقيس من خلالهما الفولت وتقدر الاحداثيات
وبهذه الطريقة سنيتهلك 4 اطراف فقط من البك

وهذه الدوائر تباع جاهزة لمن يريدها

http://www.mikroe.com/add-on-boards/...troller-proto/

او هنا من رام

http://ram-e-shop.com/oscmax/catalog...roducts_id=822

وهناك طريقة اخرى ولكن تستهلك 6 اطراف 4 للكهرباء الخاصة بالوحة
و2 لقياس الفولت للطبقتين

وهذه هى الدائرة التى استخدمها انا شخصيا




يجب توصيل 2 مقاومة 10 كيلوا على الارضى على كل قناه لكى تعمل الدائرة باستقرار

حمل الكود من هنا وقمت باستخدام PIC16f877a وكريستالة 4 ميجا

وهذا هو الكود

كود:
#define X1 PORTB.f0
#define X2 PORTB.f1

#define Y1 PORTB.f2
#define Y2 PORTB.f3

int natg,natg2;
char txt[7],txt2[7];

void getX(){TRISB.f2=1;TRISB.f3=1;TRISB.f0=0;TRISB.f1=0;X1=0;X2=1;natg=ADC_Read(0);}
void getY(){TRISB.f2=0;TRISB.f3=0;TRISB.f0=1;TRISB.f1=1;Y1=0;Y2=1;natg2=ADC_Read(1);}

void AD(){
getX();getY();
          }

void main(){
trisb=0;portb=0;
ADC_Init();
while(1){
AD();
if(550>natg&&natg>300&&550>natg2&&natg2>300){PORTB.f7=~PORTB.f7;delay_ms(350);}
      }
    }

فى البداية قمت بالتعويض عن اسماء الاطراف ب X1 , X2 , Y1 , Y2

لكى نعمل بسهولة

وبعد ذلك قمت بتعريف المتغيرات

ثم قمت بعمل دوال void getX و void getY

وبكل بساطة عند قياس المحور X اقوم بجعل اطرافة خرج
واقوم باخراج 0 فولت على طرف و5 فولت على طرف اخر للمحور X

ثم اجعل اطراف المحور Y دخل حتى لا تؤثر على القياس

واقوم بالقياس من القناة الاولى والى متوصلة على طرف واحد من المحور Y

وبعد ذلك احفظ الناتج فى متغير natg

واقوم بعد ذلك بتكرار العملية ولكن معكوسة اى الدخل خرج والخرج دخل
وهكذا

وبعد ذلك جعلت البورت b خرج
وقمت بعمل حلقة تكرار ثم الذهاب الى الدالة AD
لكى تقوم بالحسابات وتعود لى بالاحداثيات

وللعلم الاحداثيات تاتى على شكل رقم يقع بين 0 الى 1023
وهى تعبر عن 0 فولت الى 5 فولت كما نعلم جميعا

وبعد ذلك اختبر النواتج اذا كانت تقع بين ارقام محددة يقوم البك بانارة الليد
او ينفذ اى تعليمة تريدها

ولكن بهذه الطريقة يكون القياس صعب بعض الشىء
لاننى احتاج الى العرض على شاشة لكى احدد اين بالزبط
يمككنى ان احدد مكان اللمس المطلوب لاضاءة الليد

هناك اكثر من طريقة لحل هذه المشكلة
فمثلا اذا كنت ستركب اللوحة على شاشة ونريد التعامل بالبكسل
اى اقول لة اذا كان القياس من البكسل كذا لكذا قم بالامر الاتى
اى تحويل الفولت الى وحدة البكسل

بكل بساطة نقوم بهذا الامر بعد قراءة الاحداثيات اى داخل دالة AD

كود:
 
void AD(){
getX();getY();

natg = (natg * 128) / 1024;
natg2 = 64 -((natg2 *64) / 1024);
}
الارقام 128 او 64 هذه ارقام بكسل الشاشة الطول فى العرض

بهذه الطريقة نسطتيع التحكم من خلال البكسل
اى بدل القول اذا كان القياس يقع بين 0 الى 1023 لا سنقول مثلا اذا كان يقع بين
30 الى 100 بكسل

جيد حتى الان

ولكن اذا احتجنا التحويل الى وحدة اللملى متر
حيث اننا لا نريد التحكم من خلال شاشة بل صورة مطبوعة اسف لوحة اللمس

بكل بساطة اكتب قياس الطول الخاص بك بالمللىمتر او اى وحدة تريد
مكان 128
والعرض ايضا مكان 64

وهكذا يتم التوحويل والقياس باى وحدة نريد

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

تم الامر بحمد الله

اذا كان هناك اى شىء صعب ويحتاج للشرح فلا تترددوا
وان كان الشرح صعب
ساحاول ان اشرحة بشكل افضل ان شاء الله لنرى هل فهمتم الموضوع ام لا اولا ..
لان الصراحة انا حاسس انوا مش كامل او صعب او فية غموض
زيادة عن اللزوم


اعلانات

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 27-01-2013, 05:53 PM المشاركة 2   
افتراضي


ماشاء الله تبارك الله
ماذا عساني ان اقول ابداعت واتعبت من بعدك...

جزاك الله خير وكثر من امثالك اخي المبارك

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية 3bkarino medo
3bkarino medo
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
الدولة: دمنهور البحيرة
المشاركات: 272
نشاط [ 3bkarino medo ]
قوة السمعة:0
قديم 27-01-2013, 06:39 PM المشاركة 3   
افتراضي


بارك الله فيك وزادك الله علماَ
مفهوم والله الموضوع ولا يوجد اي غموض وشرحك دائما متميز ورائع


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 27-01-2013, 07:36 PM المشاركة 4   
افتراضي


بعد اذن صاحب الموضوع بارك الله فيه هذا رابط ممتاز يوضح التوصيلات
اضغط next page اسفل الصفحة لتشاهد الموضوع كامل بارك الله في الجميع

http://www.pyroelectro.com/tutorials...ace_resistive/


الصورة الرمزية mahmosha
mahmosha
:: مهندس جيد ::
تاريخ التسجيل: Sep 2011
الدولة: مصر
المشاركات: 213
نشاط [ mahmosha ]
قوة السمعة:0
قديم 27-01-2013, 08:26 PM المشاركة 5   
افتراضي


شكرا جزلا اخي بارك الله فيك و في امثالك


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 27-01-2013, 08:30 PM المشاركة 6   
افتراضي


بسم الله الرحمن الرحيم

3bkarino medo

جزاك الله كل خير يا اخى الحمد لله انة مفهوم عقبال ما نشوف تطبيقاتك
ان شاء الله وشكرا لك على كلامك الطيب



ennng

جزاك الله كل خير يا اخى وانا اعلم انى مقصر معك والله ولن اتحدث فى الموضوع

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


mahmosha

شكرا جزيلا لك يا اخى وبارك الله فيك ايضا


التعديل الأخير تم بواسطة : funky112233 بتاريخ 27-01-2013 الساعة 08:33 PM

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 27-01-2013, 09:00 PM المشاركة 7   
افتراضي


أسأل الله لك التوفيق والسداد اخي المبارك

حبيت اعرض هذه الصورة وهي توضيح للكود الذي وضعته

كود:
void getX(){TRISB.f2=1;TRISB.f3=1;TRISB.f0=0;TRISB.f1=0;X1=0;X2=1;natg=ADC_Read(0);}
void getY(){TRISB.f2=0;TRISB.f3=0;TRISB.f0=1;TRISB.f1=1;Y1=0;Y2=1;natg2=ADC_Read(1);}


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 27-01-2013, 09:09 PM المشاركة 8   
افتراضي


بسم الله الرحمن الرحيم

بارك الله فيك يا اخى نعم الصورة توضح الفكرة
ولكن القياس ADC فى الصورة
يجب ان يكون على الناحية السالبة عند التحويل مثل X1
لان هكذا سوف تقيس طرف 0 وطرف اخر 1023
وايضا للثبات فى النواتج يجب ان يكون هناك مقوماتان 10 كيلوا الى الارضى
على اطراف القياس

كما وضحت فى الصورة بالاعلى

جزاك الله كل خير يا اخى
وان كان هناك اى شىء يساعد على الفهم اكثر
ياريت تشاركنا بية

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 06:34 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025