عداد اللمس RoboJax V2 باستخدام شاشة LCD1602-I2C
مقدمة
ستظهر لك هذه الدليل كيفية بناء عدّاد لمسة بسيط ولكنه يعمل بشكل رائع باستخدام لوحة أردوينو أونو، ومستشعر اللمس السعوي TTP223B، وشاشة LCD1602 مع دعم I2C. يُعرف هذا المشروع باسم Robojax Touch Counter V2، وهو نقطة انطلاق مثالية لأي شخص يتطلع إلى إضافة واجهة مدخلات تعتمد على اللمس إلى مشاريع الإلكترونيات الخاصة بهم. بدلاً من زر ميكانيكي، فإن لمسة بسيطة على وسادة المستشعر تزيد من العد، مع عرض العدد الحالي بوضوح على شاشة LCD. يسمح لك زر الضغط المنفصل بإعادة تعيين العد إلى الصفر في أي وقت.


هذا المشروع ليس مجرد تمرين تعليمي؛ بل له مجموعة واسعة من التطبيقات العملية. فيما يلي بعض الأفكار لإلهامك:
- عداد الأشخاص:إنشاء جهاز بسيط لعد عدد الأشخاص الذين يدخلون غرفة أو منطقة محددة.
- عداد خط الإنتاج:استخدمه لتسجيل العناصر أثناء عبورها نقطة على حزام ناقل صغير أو عملية تجميع.
- متعقب الحضور:قم بإنشاء نظام بسيط لتتبع الحضور في فصل دراسي أو حدث.
- تركيب فني تفاعلي:استخدمه كمكون في قطعة فنية تتفاعل مع عدد المرات التي يتم لمسها فيها.
- أداة تعليمية:علم أساسيات المستشعرات، والانقطاعات، وواجهات العرض بطريقة ممتعة وعملية.
بحلول نهاية هذا الدليل، سيكون لديك عداد لمس يعمل بالكامل وفهم قوي لكيفية دمج حساسات اللمس وشاشات I2C ومدخلات المستخدم في مشاريع آردوينو الخاصة بك.
مكونات الأجهزة
لبناء هذا المشروع، ستحتاج إلى المكونات التالية:
- اردوينو أونو (أو لوحة متوافقة)
- تي بي بي 223 بي أو تي تي بي 223 وحدة مستشعر اللمس السعوي (نسخة حمراء أو زرقاء)
- شاشة LCD1602 مع وحدة واجهة I2C
- زر الضغط (لإعادة الضبط)
- أسلاك التوصيل
- لوحة التجارب
دليل الأسلاك
التوصيلات لهذا المشروع بسيطة، لكن من المهم ملاحظة أن ترتيب الدبابيس في وحدات اللمس الحمراء والزرقاء مختلف. إليك تفصيل كيفية توصيل كل شيء.
أولاً، دعونا نربط حساس اللمس. بالنسبة لـوحدة زرقاء, ترتيب الدبابيس هو الإشارة، VCC، والأرضي. قم بتوصيل دبوس الإشارة بدبوس Arduino 2، وVCC بـ 5V، والأرضي بـ GND. من أجل الـالوحدة الحمراءترتيب دبابيس التوصيل هو الأرض، الإشارة، و VCC (في الفيديو عند 02:57). صل دبوس الأرض بجهاز GND، دبوس الإشارة (الوسط) بجهاز Arduino دبوس 2، ودبوس VCC بجهاز 5V (في الفيديو عند 03:01).
بعد ذلك، قم بتوصيل شاشة LCD. تستخدم واجهة I2C أربع أسلاك فقط. قم بتوصيل دبوس GND في الشاشة بدبوس GND في Arduino، ودبوس VCC بدبوس 5V، ودبوس SDA بدبوس A4 التناظري في Arduino، ودبوس SCL بدبوس A5 التناظري في Arduino (في الفيديو عند 03:55). هذه هي الدبابيس الصحيحة ل Arduino Uno. إذا كنت تستخدم لوحة مختلفة مثل Arduino Mega، فإن دبابيس SDA و SCL موجودة على 20 و 21 على التوالي (في الفيديو عند 04:18).
أخيرًا، قم بتوصيل زر إعادة التعيين. ضع الزر على لوحة الدائرة وقم بتوصيل أحد دبابيسه بأرضيّة Arduino والآخر بدبوس Arduino 12 (في الفيديو عند :33). ترتيب هذه الأسلاك لا يهم.
هذا المشروع لا يتطلب أي مقاومات لمستشعر اللمس أو الزر، حيث سيستخدم الكود مقاومة السحب الداخلية للاردوينو للزر.
شرح الشيفرة
الكود لهذا المشروع مصمم ليكون بسيطًا لفهمه وتعديله. الأجزاء الرئيسية القابلة للتكوين من قبل المستخدم تقع في أعلى الرسم التخطيطي.
إليك القسم من الشيفرة الذي ستحتاج على الأرجح إلى تخصيصه:
// start of settings for LCD1602 with I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C
const int touchPin = 2;// the input pin where touch sensor is connected
const int resetPin = 12;// the input pin for reset button
const int touchDelay = 500;//millisecond delay between each touch
int count=0;// variable holding the count numberدعونا نفصل ما تفعله كل من هذه الإعدادات:
- عنوان LCD:الم
lcd(0x27, 16, 2)تقوم الخطوط بإعداد العرض. الـ0x27عنوان I2C لوحدة LCD المحددة لديك. تستخدم معظم الوحدات هذا العنوان، ولكن إذا لم تعمل الشاشة الخاصة بك، فقد يكون السبب هو0x3Fيمكنك تغيير هذه القيمة لتتناسب مع شاشتك. - لمس الدبوسيحدد هذا الثابت دبوس أردوينو الذي يتصل به سلك الإشارة من مستشعر اللمس الخاص بك. يمكنك تغيير ذلك إذا كنت تريد استخدام دبوس مختلف.
- إعادة تعيين الرقم السرييُعرّف هذا الثابت دبوس Arduino لزر إعادة الضبط الخاص بك. يتم تعيينه على الدبوس 12 بشكل افتراضي.
- تأخير اللمسهذا إعداد حاسم. إنه يتحكم في الحد الأدنى من الوقت بالميلي ثانية بين لمستين مسجلتين (في الفيديو عند :13). قيمة 500 مللي ثانية تمنع العد غير المقصود لعدد مرات اللمس من لمسة واحدة أو من نقرات سريعة جدًا. إذا كنت ترغب في جعل العداد أكثر استجابة، يمكنك تقليص هذه القيمة إلى شيء مثل 100 مللي ثانية (في الفيديو عند :31).
الcountالمتغير هو عدد صحيح يحمل قيمة العد الحالية. يتم تهيئته على صفر ويزداد في كل مرة يتم فيها لمس المستشعر. الشيفرة نفسها تتعامل مع منطق قراءة المستشعر وتحديث العرض والتحقق من زر إعادة الضبط، لذا لا تحتاج للقلق بشأن ذلك. ببساطة قم بضبط الثوابت أعلاه لتناسب إعدادك المحدد والسلوك المطلوب.
عرض مشروع حي
بمجرد أن تكون قد قمت بتوصيل كل شيء وتحميل الكود على لوحة الأردوينو الخاصة بك، سيعمل المشروع على النحو التالي:
عند تشغيل الجهاز، ستظهر على الشاشة LCD عبارة "Robojax Touch" و "Counter V2" لبضع ثوانٍ قبل أن يبدأ العد. في كل مرة تلمس فيها لوحة المستشعر، ستزداد العدد بواحد، وسيتم عرض العدد الجديد في السطر السفلي من الشاشة LCD، بجوار كلمة "Touched:" (في الفيديو عند 07:51). نفس المعلومات تتم طباعتها أيضًا على شاشة المراقبة التسلسلية في Arduino IDE لأغراض تصحيح الأخطاء أو تسجيل البيانات.
لإعادة ضبط العداد، ما عليك سوى الضغط على زر الدفع. ستقوم الشاشة LCD بمسح البيانات وعرض "تم إعادة الضبط"، وسيعود العدد إلى الصفر (في الفيديو عند 08:49). أصبح الجهاز الآن جاهزًا للعد مرة أخرى. هذه الحلقة البسيطة والواضحة من التغذية الراجعة تجعل من السهل رؤية المشروع يعمل في الوقت الحقيقي.
فصول
- [00:00] مقدمة ونظرة عامة على المشروع
- :44 المكونات وكيف تعمل
- دليل التوصيلات لجهاز الاستشعار اللمسي والزر
- دليل الأسلاك لشاشة LCD
- [04:26] شرح الكود والإعداد
- فهم الحلقة الرئيسية ومنطق اللمس
- [09:25] عرض تجريبي مباشر واختبار
- [11:08] الخاتمة وأفكار مشاريع مستقبلية
//*
* This is Arduino touch counter V2 using TTP223/TTP223B and LCD1602-I2C
* This program will function as a counter. Every time the touch module is touched,
* the counter increments by 1. The count number is displayed on the LCD1602 display.
* We have a reset button to restart the counting from zero.
*
* Watch video instruction for this video: https://youtu.be/5A9jPD5nUCw
*
* Written by Ahmad Shamshiri on Saturday, 27th of October at 16:28 in Ajax, Ontario, Canada
* Get this code from Robojax.com
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// start of settings for LCD1602 with I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C
const int touchPin = 2;// the input pin where touch sensor is connected
const int resetPin = 12;// the input pin for reset button
const int touchDelay = 500;//millisecond delay between each touch
int count=0;// variable holding the count number
void setup() {
// Robojax.com Touch counter 20181027
// initialize the LCD
lcd.begin();
lcd.backlight();// turn the backlight ON for the LCD
lcd.print("Robojax Touch");
lcd.setCursor(0,1);
lcd.print("Counter V2");
Serial.begin(9600);// initialize serial monitor with 9600 baud
Serial.println("Robojax Touch Counter V2");
pinMode(touchPin,INPUT);// define a pin for touch module
pinMode(resetPin,INPUT_PULLUP);// define a pin for reset button
// see video ( link in the video description) on using PULLUP
delay(3000);// give time to user to read the display at the beginning
// Robojax.com Touch counter 20181027
}
void loop() {
// Robojax.com Touch counter 20181027
int touchValue = digitalRead(touchPin);// read touchPin and store it in touchValue
// if touchValue is HIGH
if(touchValue == HIGH)
{
count++;// increment the count
lcd.clear();// clear previous values from screen
lcd.print("Robojax TCV2");
lcd.setCursor(0,1);
lcd.print("Touched:");
lcd.setCursor(9,1);
lcd.print(count);
Serial.print("Touched ");//print the information
Serial.print(count);//print count
Serial.println(" times.");
delay(touchDelay);// touch delay time
}
// if reset switch is pushed
if(digitalRead(resetPin) == LOW)
{
lcd.clear();// clear previous values from screen
count =0;// reset the counter;
Serial.println("Counter Resetted.");//print the information
lcd.setCursor(0,0);
lcd.print("Robojax TCV2");
lcd.setCursor(0,1);
lcd.print("Resetted");
}
// Robojax.com Touch counter 20181027
}
الأشياء التي قد تحتاجها
-
أمازوناشترِ LCD1602-I2C من أمازونamzn.to
-
أمازون
-
إي بايشراء LCD1602-I2C من eBayebay.us
-
علي إكسبريساشترِ LCD1602-I2C من علي إكسبريسs.click.aliexpress.com
-
علي إكسبريسشراء 10 قطع من LCD1602-I2C من علي إكسبريسs.click.aliexpress.com
الموارد والمراجع
ملفات📁
Fritzing File
-
وحدة LCD LCD1602-I2C مع 4 أسلاك
LCD1602-I2C.fzpz0.01 MB
ملفات أخرى
-
كتيب بيانات TP223
robojax-0492_TTP223_Datasheet.pdf0.24 MB -
دليل المستخدم TTP223B
robojax-TTP223B_manual.pdf0.15 MB -
مكتبة الكريستال السائل LCD1602
robojax-LCD1602_LiquidCrystal.zip