الوصف
مشفر دوار
تصف هذه القائمة مشفرًا دوارًا كهروميكانيكيًا تزايديًا من نوع KY-040. تتيح مخارج التربيع للمتحكم اكتشاف الدوران النسبي واتجاهه. ويمكن استخدام مفتاح الضغط المدمج للاختيار أو التأكيد.
🔧 المواصفات المذكورة
- التغذية: 5 V DC وفق القائمة
- النوع: مشفر دوار تزايدي بإشارات تربيع
- الدقة: عدة نبضات لكل دورة؛ ولا يرد عدد محدد
- مفتاح ضغط مدمج مفتوح عادةً (N.O.)
- شكل مدمج للوحات التحكم ومشاريع الروبوتات
⚙️ طريقة العمل
أثناء دوران المحور تتغير إشارتا CLK وDT بالتتابع. وتحدد مقارنة الإشارتين الاتجاه، بينما يتيح عد الانتقالات قياس الحركة النسبية. يؤدي الضغط على المحور إلى تشغيل مفتاح SW.
💡 الاستخدامات
- عناصر تحكم دوارة لواجهات المستخدم
- ضبط سرعة المحرك نسبيًا
- الملاحة الروبوتية
- الواجهات التفاعلية
- مشاريع إلكترونيات DIY
📌 مخطط الأطراف
- GND: الأرضي
- VCC: التغذية (5 V وفق القائمة)
- SW: خرج مفتاح الضغط (N.O.)
- DT: خرج التربيع B
- CLK: خرج التربيع A
🔌 الاستخدام مع Arduino Uno
صِل GND وVCC بأرضي Arduino ومصدر تغذية متوافق. صِل DT وCLK بمداخل رقمية لقراءة الدوران، وSW بمدخل رقمي لاكتشاف الضغط. أُبقيت الأمثلة أدناه كما وردت في قائمة المصدر؛ وقد تحتاج إلى معالجة ارتداد التلامس لضمان استقرار القراءات.
مثال Arduino أساسي
#define CLK 4
#define DT 3
#define SW 2
int counter = 0;
int currentStateCLK;
int lastStateCLK;
String currentDir = "";
void setup() {
Serial.begin(9600);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
lastStateCLK = digitalRead(CLK);
}
void loop() {
currentStateCLK = digitalRead(CLK);
if (currentStateCLK != lastStateCLK) {
if (digitalRead(DT) != currentStateCLK) {
counter--;
currentDir = "CCW";
} else {
counter++;
currentDir = "CW";
}
Serial.print("Direction: ");
Serial.print(currentDir);
Serial.print(" | Counter: ");
Serial.println(counter);
}
lastStateCLK = currentStateCLK;
int buttonState = digitalRead(SW);
if (buttonState == LOW) {
Serial.println("Button Pressed");
} else {
Serial.println("Button Released");
}
delay(50);
}
تقرأ الشيفرة اتجاه الدوران والعداد وتعرض حالة مفتاح الضغط في Serial Monitor.
مثال متقدم مع شاشة I2C LCD
#define CLK 4
#define DT 3
#define SW 2
int counter = 0;
int currentStateCLK;
int lastStateCLK;
String currentDir = "";
void setup() {
Serial.begin(9600);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
lastStateCLK = digitalRead(CLK);
}
void loop() {
currentStateCLK = digitalRead(CLK);
if (currentStateCLK!= lastStateCLK) {
if (digitalRead(DT)!= currentStateCLK) {
counter--;
currentDir = "CCW";
} else {
counter++;
currentDir = "CW";
}
Serial.print("Direction: ");
Serial.print(currentDir);
Serial.print(" | Counter: ");
Serial.println(counter);
}
lastStateCLK = currentStateCLK;
int buttonState = digitalRead(SW);
if (buttonState == LOW) {
Serial.println("Button Pressed");
} else {
Serial.println("Button Released");
}
delay(50);
}
يعرض هذا المثال الموضع النسبي والاتجاه على شاشة I2C LCD ويعرض حالة مفتاح الضغط.
المكونات
- Arduino Uno
- وحدة المشفر الدوار KY-040
- شاشة I2C LCD 1602
- أسلاك توصيل
شرح الشيفرة
- إدراج المكتبات:
#include <Wire.h>و#include <LiquidCrystal_I2C.h>للشاشة. - التهيئة: بدء الاتصال التسلسلي وتهيئة الشاشة وضبط أطراف المشفر.
- القراءة والعرض: قراءة إشارات المشفر وعرض الاتجاه والعداد النسبي على الشاشة وفي Serial Monitor.
التوصيلات المتقدمة
- VCC: 5V (Arduino)
- GND: GND (Arduino)
- CLK: D4 (Arduino)
- DT: D3 (Arduino)
- SW: D2 (Arduino)
- VCC الشاشة: 5V (Arduino)
- GND الشاشة: GND (Arduino)
- SCL الشاشة: A5 (Arduino Uno)
- SDA الشاشة: A4 (Arduino Uno)
تثبيت المكتبة
ثبّت مكتبة LiquidCrystal I2C من مدير المكتبات في Arduino IDE: افتح Sketch → Include Library → Manage Libraries، وابحث عن “LiquidCrystal I2C”، ثم ثبّتها.
تحقّق من علامات الأطراف قبل توصيل الوحدة. لا تذكر قائمة المصدر عدد النبضات الدقيق.









