ماژول سنسور لمسی فلزی KY-036

(Metal Touch Sensor Module)

تشخیص لمسی و مجاورتی فلزات با حساسیت قابل تنظیم

ماژول سنسور لمسی فلزی یک ماژول حساس و قابل اطمینان برای تشخیص لمس یا نزدیکی فلزات است. این ماژول بر اساس تغییرات ظرفیت خازنی کار می‌کند و می‌تواند حتی از طریق یک لایه عایق نازک نیز فلز را تشخیص دهد. این محصول برای پروژه‌های تعاملی، کنترل لمسی و سیستم‌های امنیتی ایده‌آل است.


ویژگی‌های کلیدی

  • حساسیت قابل تنظیم: دارای پتانسیومتر برای تنظیم دقیق حساسیت

  • خروجی دوگانه: دارای خروجی دیجیتال (HIGH/LOW) و خروجی آنالوگ (برای تشخیص سطح حساسیت)

  • تشخیص از طریق عایق: قادر به تشخیص لمس فلز حتی از طریق پلاستیک، شیشه یا چوب نازک

  • LED نشانگر: چراغ LED وضعیت تشخیص را نمایش می‌دهد

  • نویزگیری داخلی: دارای فیلتر نویز برای عملکرد پایدار

  • نصب آسان: اتصال با کانکتور 3 پین استاندارد

  • مصرف برق پایین: مناسب برای پروژه‌های باتری‌دار


مشخصات فنی

  • ولتاژ کاری: 2.7V تا 5.5V DC (سازگار با آردوینو)

  • جریان مصرف: 3-5mA در حالت آماده‌باش

  • فرکانس پاسخگویی: 100Hz (تیپیکال)

  • دمای کاری: -20°C تا +85°C

  • سطح تشخیص: تا 1 سانتی‌متر (بسته به حساسیت تنظیم شده)

  • پین‌های خروجی:

    • DO: خروجی دیجیتال (TTL)

    • AO: خروجی آنالوگ

  • ابعاد: تقریباً 32mm × 14mm


کاربردهای اصلی

  • کلیدهای لمسی بدون مکانیک برای دستگاه‌های الکترونیکی

  • سیستم‌های امنیتی و هشدار (تشخیص دست‌زدن به تجهیزات)

  • کنترلرهای تعاملی برای هنرهای دیجیتال و نصب‌های هنری

  • رابط‌های کاربری لمسی برای ربات‌ها

  • تشخیص حضور فلز در خطوط تولید

  • پروژه‌های دانش‌آموزی در حوزه الکترونیک و رباتیک

  • کلید روشن/خاموش حساس به لمس برای گجت‌ها


نحوه اتصال به آردوینو

ماژول سنسور لمسی ← آردوینو
VCC ← 5V یا 3.3V
GND ← GND
DO ← پایه دیجیتال (مثلاً D2)
AO ← پایه آنالوگ (مثلاً A0) - اختیاری

اصول کارکرد

ماژول بر اساس تشخیص تغییر ظرفیت خازنی کار می‌کند. وقتی یک جسم فلزی (یا حتی دست انسان) به صفحه سنسور نزدیک می‌شود، ظرفیت خازنی مدار تغییر می‌کند. این تغییر توسط مدار الکترونیکی ماژول تشخیص داده شده و به سیگنال خروجی تبدیل می‌شود.

نکته: این سنسور تنها فلزات رسانا را تشخیص می‌دهد. مواد غیررسانا مانند پلاستیک یا چوب تاثیری ندارند.


کد پایه آردوینو (خروجی دیجیتال)

// آردوینو - تشخیص لمس فلز با خروجی دیجیتال
// اتصال: پایه DO ماژول به D2 آردوینو

const int touchSensorPin = 2; // پایه اتصال سنسور
int touchState = 0;           // وضعیت فعلی سنسور
int lastTouchState = 0;       // وضعیت قبلی سنسور
int touchCount = 0;           // شمارش تعداد لمس‌ها

void setup() {
  Serial.begin(9600);
  pinMode(touchSensorPin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT); // LED داخلی آردوینو
  
  Serial.println("Metal Touch Sensor Test");
  Serial.println("=======================");
}

void loop() {
  // خواندن وضعیت سنسور
  // توجه: در برخی ماژول‌ها، وضعیت لمس = LOW و عدم لمس = HIGH است
  touchState = digitalRead(touchSensorPin);
  
  // تشخیص لبه بالارونده (شروع لمس)
  if (touchState == LOW && lastTouchState == HIGH) {
    touchCount++;
    digitalWrite(LED_BUILTIN, HIGH);
    
    Serial.print("Touch Detected! Count: ");
    Serial.println(touchCount);
    
    // اجرای عملیات موردنظر
    playBeep();
  }
  
  // تشخیص لبه پایین‌رونده (پایان لمس)
  if (touchState == HIGH && lastTouchState == LOW) {
    digitalWrite(LED_BUILTIN, LOW);
    Serial.println("Touch Released");
  }
  
  // ذخیره وضعیت برای تشخیص لبه‌ها
  lastTouchState = touchState;
  
  delay(10); // تأخیر کوتاه برای پایداری
}

void playBeep() {
  // تولید صدای بوق کوتاه
  tone(8, 1000, 100); // بوق 1000Hz به مدت 100ms (پایه 8)
}

کد پیشرفته (خروجی آنالوگ + دیجیتال)

// آردوینو - استفاده همزمان از خروجی آنالوگ و دیجیتال
// اتصال: DO به D2، AO به A0

const int digitalPin = 2;
const int analogPin = A0;
const int ledPin = 13;
const int buzzerPin = 8;

// آستانه‌های حساسیت (بر اساس آزمایش تنظیم شود)
const int touchThreshold = 500;  // آستانه تشخیص لمس
const int proximityThreshold = 300; // آستانه تشخیص مجاورت

int analogValue = 0;
bool isTouched = false;
unsigned long touchStartTime = 0;
const unsigned long longTouchTime = 2000; // 2 ثانیه

void setup() {
  Serial.begin(9600);
  pinMode(digitalPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  
  Serial.println("Advanced Touch Sensor Monitor");
  Serial.println("=============================");
}

void loop() {
  // خواندن مقادیر
  int digitalState = digitalRead(digitalPin);
  analogValue = analogRead(analogPin);
  
  // نمایش اطلاعات
  Serial.print("Digital: ");
  Serial.print(digitalState == LOW ? "TOUCHED" : "FREE");
  Serial.print(" | Analog: ");
  Serial.print(analogValue);
  Serial.print(" | Status: ");
  
  // تحلیل داده‌ها
  if (digitalState == LOW) {
    if (!isTouched) {
      isTouched = true;
      touchStartTime = millis();
      Serial.println("TOUCH STARTED");
      digitalWrite(ledPin, HIGH);
      shortBeep();
    } else {
      // بررسی لمس طولانی
      if (millis() - touchStartTime > longTouchTime) {
        Serial.println("LONG TOUCH DETECTED!");
        longBeep();
      } else {
        Serial.println("TOUCH HOLDING");
      }
    }
  } else {
    if (isTouched) {
      isTouched = false;
      Serial.println("TOUCH ENDED");
      digitalWrite(ledPin, LOW);
    }
    
    // تشخیص مجاورت (بدون لمس)
    if (analogValue > proximityThreshold && analogValue < touchThreshold) {
      Serial.println("PROXIMITY DETECTED");
      digitalWrite(ledPin, LOW); // چشمک‌زن برای مجاورت
      delay(100);
      digitalWrite(ledPin, HIGH);
    } else if (analogValue < proximityThreshold) {
      Serial.println("NO OBJECT");
      digitalWrite(ledPin, LOW);
    }
  }
  
  delay(100); // تأخیر 100ms
}

void shortBeep() {
  tone(buzzerPin, 1500, 100);
}

void longBeep() {
  tone(buzzerPin, 2000, 500);
}

کد عملی: سیستم قفل دیجیتال با کلید لمسی

// آردوینو - قفل دیجیتال با کلید لمسی 4 رقمی
// اتصال: 4 سنسور لمسی به پایه‌های 2، 3، 4، 5

const int touchPins[] = {2, 3, 4, 5}; // پایه‌های سنسورها
const int ledPins[] = {6, 7, 8, 9};   // LED‌های نشانگر
const int relayPin = 10;               // رله قفل
const int buzzerPin = 11;              // بوق

// کد عبور صحیح (ترتیب سنسورها)
const int password[] = {1, 3, 2, 4}; // لمس سنسورهای 1، 3، 2، 4
int enteredCode[4];                  // کد واردشده
int codeIndex = 0;                   // شاخص کد واردشده
unsigned long lastTouchTime = 0;     // زمان آخرین لمس
const int timeout = 10000;           // زمان‌ات 10 ثانیه

void setup() {
  Serial.begin(9600);
  
  // تنظیم پایه‌ها
  for (int i = 0; i < 4; i++) {
    pinMode(touchPins[i], INPUT_PULLUP); // استفاده از مقاومت Pull-up داخلی
    pinMode(ledPins[i], OUTPUT);
  }
  
  pinMode(relayPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  
  digitalWrite(relayPin, HIGH); // قفل فعال (رله غیرفعال)
  
  Serial.println("Touch Keypad Lock System");
  Serial.println("========================");
  Serial.println("Touch the sensors in correct order");
}

void loop() {
  // بررسی زمان‌ات
  if (codeIndex > 0 && millis() - lastTouchTime > timeout) {
    resetSystem();
    Serial.println("Timeout! Code reset.");
  }
  
  // بررسی هر چهار سنسور
  for (int i = 0; i < 4; i++) {
    if (digitalRead(touchPins[i]) == LOW) {
      // سنسور لمس شده
      delay(50); // Debouncing
      
      if (digitalRead(touchPins[i]) == LOW) { // تأیید لمس
        enteredCode[codeIndex] = i + 1; // ذخیره شماره سنسور (1-4)
        
        Serial.print("Sensor ");
        Serial.print(i + 1);
        Serial.println(" touched");
        
        // بازخورد
        digitalWrite(ledPins[i], HIGH);
        tone(buzzerPin, 800 + (i * 100), 200);
        
        codeIndex++;
        lastTouchTime = millis();
        
        // اگر 4 رقم وارد شد
        if (codeIndex == 4) {
          checkPassword();
        }
        
        delay(300); // جلوگیری از تشخیص چندباره
        digitalWrite(ledPins[i], LOW);
      }
    }
  }
}

void checkPassword() {
  Serial.print("Entered Code: ");
  for (int i = 0; i < 4; i++) {
    Serial.print(enteredCode[i]);
    Serial.print(" ");
  }
  
  bool correct = true;
  for (int i = 0; i < 4; i++) {
    if (enteredCode[i] != password[i]) {
      correct = false;
      break;
    }
  }
  
  if (correct) {
    Serial.println("\nSUCCESS! Door unlocked.");
    
    // باز کردن قفل
    digitalWrite(relayPin, LOW);
    
    // نمایش موفقیت
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 4; j++) {
        digitalWrite(ledPins[j], HIGH);
      }
      tone(buzzerPin, 1500, 300);
      delay(300);
      for (int j = 0; j < 4; j++) {
        digitalWrite(ledPins[j], LOW);
      }
      delay(300);
    }
    
    delay(5000); // در باز به مدت 5 ثانیه
    
    // بستن قفل
    digitalWrite(relayPin, HIGH);
    
  } else {
    Serial.println("\nWRONG CODE! Access denied.");
    
    // هشدار خطا
    for (int i = 0; i < 5; i++) {
      tone(buzzerPin, 300, 500);
      digitalWrite(ledPins[0], HIGH);
      digitalWrite(ledPins[3], HIGH);
      delay(500);
      digitalWrite(ledPins[0], LOW);
      digitalWrite(ledPins[3], LOW);
      delay(500);
    }
  }
  
  resetSystem();
}

void resetSystem() {
  codeIndex = 0;
  for (int i = 0; i < 4; i++) {
    digitalWrite(ledPins[i], LOW);
    enteredCode[i] = 0;
  }
}

نکات مهم در استفاده

  1. تنظیم حساسیت: با پیچ گوشتی، پتانسیومتر روی ماژول را تنظیم کنید.

  2. نصب صفحه لمسی: برای پوشش زیباتر، یک صفحه فلزی نازک به پایه سنسور لحیم کنید.

  3. نویزگیری: در محیط‌های صنعتی از کابل‌های شیلددار استفاده کنید.

  4. آنتن‌گذاری: می‌توانید یک سیم به عنوان آنتن به پایه سنسور وصل کنید تا محدوده تشخیص افزایش یابد.

  5. برق‌رسانی پایدار: از منبع تغذیه با نویز پایین استفاده کنید.


تست و عیب‌یابی

مشکل علت احتمالی راه‌حل
سنسور همیشه فعال است حساسیت زیاد تنظیم شده پتانسیومتر را در جهت کاهش حساسیت بچرخانید
سنسور پاسخ نمی‌دهد حساسیت کم یا اتصال اشتباه حساسیت را افزایش دهید، اتصالات را بررسی کنید
عملکرد ناپایدار نویز الکتریکی از خازن 0.1μF بین VCC و GND نزدیک ماژول استفاده کنید
محدوده تشخیص کم صفحه فلزی کوچک صفحه فلزی بزرگتری وصل کنید

پروژه‌های خلاقانه پیشنهادی

1. آینه جادویی لمسی

// با لمس نقاط مختلف آینه، نورپردازی تغییر می‌کند

2. ساخت ساز موسیقی لمسی

// هر فلز نت متفاوتی تولید می‌کند

3. سیستم روشنایی هوشمند

// لمس پایه چراغ آن را روشن/خاموش می‌کند

4. جعبه راز مخفی

// فقط با لمس نقاط خاص باز می‌شود

خرید ماژول سنسور لمسی فلزی

این ماژول همراه با صفحه فلزی اضافی، کابل اتصال و راهنمای فارسی کامل در فروشگاه ما موجود است. برای خرید، مشاوره فنی یا دریافت ایده‌های پروژه بیشتر با ما تماس بگیرید.

سؤالات متداول:

  • آیا این سنسور دست انسان را نیز تشخیص می‌دهد؟

    • بله، به دلیل وجود آب و الکترولیت در بدن، دست انسان نیز مانند یک جسم رسانا عمل می‌کند.

  • حداکثر فاصله تشخیص چقدر است؟

    • معمولاً 1-2 سانتیمتر، اما با اضافه کردن آنتن می‌توان تا 10 سانتیمتر افزایش داد.

  • آیا از طریق شیشه هم کار می‌کند؟

    • بله، تا ضخامت 3-5 میلی‌متر شیشه یا پلاستیک.

  • چگونه می‌توانم حساسیت را تست کنم؟

    • از خروجی آنالوگ استفاده کنید و مقادیر را در Serial Monitor مشاهده کنید.