راه‌‌اندازی سنسور لمسی خازنی 8-کلیدی CAP1188 با آردوینو

ویژگی‌های سنسور لمسی خازنی 8-کلیدی CAP1188

سنسور لمسی خازنی 8-کلیدی CAP1188 کاربرپسند است و می‌تواند تا هشت دکمۀ مختلف را تشخیص دهد (در صورت لمس شدن). برای راه‌اندازی آن هم نیازی نیست تخصص خاصی داشته باشید، از این رو گزینۀ مناسبی برای مبتدیان است. این سنسور در پروژه های DIY یا نمایشگرهای تعاملی کاربرد دارد. علاوه بر این، با میکروکنترلرهای مختلف به خوبی کار می‌کند.

برای دانلود دیتاشیت CAP1188 اینجا کلیک کنید

پین‌اوت سنسور لمسی خازنی 8-کلیدی CAP1188

سنسور لمسی خازنی 8-کلیدی CAP1188 دارای 26 پین است:
• VDD: ورودی منبع تغذیه برای ماژول CAP1188.
• GND: زمین.
• MOSI (Master Out Slave In): خط دادۀ سریال برای ارتباط با میکروکنترلرها.
• MISO (Master In Slave Out – SDA): خط دادۀ سریال برای ارتباط دو‌طرفه.
• CS (Chip Select): ارتباط با ماژول CAP1188 را فعال می‌کند.
• SCK SCL)): خط کلاک سریال برای همگام‌سازی انتقال داده.
• RST: ریست ماژول.
• IRQ: درخواست وقفه برای اینکه رویدادهای لمسی را به میکروکنترلر اطلاع دهد.
• 0-7 کانال: کانال‌های حساس به لمس جداگانه برای تشخیص ورودی لمسی.
• LED (0-7 کانال): کانال‌هایی برای کنترل LEDهای خارجی.
• ADR0: انتخاب آدرس برای پیکربندی آدرس I2C ماژول.
می‌توانید پین‌اوت این ماژول را در تصویر زیر مشاهده کنید.

لوازمی که احتیاج دارید

قطعات مورد نیاز

راه‌اندازی سنسور لمسی 8-کلیدی CAP1188 با آردوینو

گام اول: مدار

مدار را مطابق با تصویر زیر ببندید (نمایشگر را در صورت نیاز استفاده کنید).

گام دوم: نصب کتابخانه

این کتابخانه را روی آردوینو IDE خود نصب کنید.

برای استفاده از نمایشگر، این کتابخانه را نصب کنید.

گام سوم: کد

برای راه‌اندازی برد بدون نمایشگر، کد زیر را در آردوینو آپلود کنید.

/*
Create on January 16, 2024
Create by MohammedDamirchi base of https://electropeak.com/cap1188-capacitive-touch-module
<blockquote class="wp-embedded-content" data-secret="VY9DEetOs5"><a href="https://electropeak.com/learn/">Home</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="&#8220;Home&#8221; &#8212; Electropeak" src="about:blank" data-secret="VY9DEetOs5" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" data-rocket-lazyload="fitvidscompatible" data-lazy-src="https://electropeak.com/learn/embed/#?secret=Y7jPltRkaK#?secret=VY9DEetOs5"></iframe><noscript><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="&#8220;Home&#8221; &#8212; Electropeak" src="https://electropeak.com/learn/embed/#?secret=Y7jPltRkaK#?secret=VY9DEetOs5" data-secret="VY9DEetOs5" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></noscript>
*/
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_CAP1188.h>

// Use I2C, no reset pin!
Adafruit_CAP1188 cap = Adafruit_CAP1188();

void setup()
{
  Serial.begin(115200);
  Serial.println("CAP1188 test!");

  // Initialize the sensor, if using i2c you can pass in the i2c address
  // if (!cap.begin(0x28)) {
  if (!cap.begin())
  {
    Serial.println("CAP1188 not found");
    while (1)
      ;
  }
  Serial.println("CAP1188 found!");
}

void loop()
{
  uint8_t touched = cap.touched();

  if (touched == 0)
  {
    // No touch detected
    return;
  }

  for (uint8_t i = 0; i < 8; i++)
  {
    if (touched & (1 << i))
    {
      Serial.print("C");
      Serial.print(i + 1);
      Serial.print("\t");
    }
  }
  Serial.println();
  delay(50);
}
C++

پس از آپلود کد، سریال مانیتور را باز و دادۀ دریافتی را مشاهده کنید.

در صورت نیاز به راهنمایی برای راه‌اندازی نمایشگر، می‌توانید به این لینک مراجعه کنید.

برای راه‌اندازی برد با نمایشگر، کد زیر را در آردوینو آپلود کنید.

 
/*
Create on January 16, 2024
Create by MohammedDamirchi base of https://electropeak.com/cap1188-capacitive-touch-module
<blockquote class="wp-embedded-content" data-secret="VY9DEetOs5"><a href="https://electropeak.com/learn/">Home</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="&#8220;Home&#8221; &#8212; Electropeak" src="about:blank" data-secret="VY9DEetOs5" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" data-rocket-lazyload="fitvidscompatible" data-lazy-src="https://electropeak.com/learn/embed/#?secret=Y7jPltRkaK#?secret=VY9DEetOs5"></iframe><noscript><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="&#8220;Home&#8221; &#8212; Electropeak" src="https://electropeak.com/learn/embed/#?secret=Y7jPltRkaK#?secret=VY9DEetOs5" data-secret="VY9DEetOs5" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></noscript>
*/

#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_CAP1188.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
Adafruit_CAP1188 cap = Adafruit_CAP1188();

void setup()
{
  lcd.init(); // initialize the lcd
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  Serial.begin(115200);
  lcd.setCursor(4, 0);
  lcd.print("ElectroPeak");
  lcd.setCursor(0, 1);
  lcd.print("CAP1188 test!");
  lcd.setCursor(0, 2);
  // Initialize the sensor, if using i2c you can pass in the i2c address
  // if (!cap.begin(0x28)) {
  if (!cap.begin())
  {
    lcd.print("CAP1188 not found");
    while (1)
      ;
  }
  lcd.print("CAP1188 found!");
  delay(3000);
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("C1");
  lcd.setCursor(10, 0);
  lcd.print("C2");
  lcd.setCursor(0, 1);
  lcd.print("C3");
  lcd.setCursor(10, 1);
  lcd.print("C4");
  lcd.setCursor(0, 2);
  lcd.print("C5");
  lcd.setCursor(10, 2);
  lcd.print("C6");
  lcd.setCursor(0, 3);
  lcd.print("C7");
  lcd.setCursor(10, 3);
  lcd.print("C8");
}

void loop()
{
  uint8_t touched = cap.touched();

  if (touched == 0)
  {
    // No touch detected
    lcd.setCursor(5, 0);
    lcd.print("R");
    lcd.setCursor(15, 0);
    lcd.print("R");
    lcd.setCursor(5, 1);
    lcd.print("R");
    lcd.setCursor(15, 1);
    lcd.print("R");
    lcd.setCursor(5, 2);
    lcd.print("R");
    lcd.setCursor(15, 2);
    lcd.print("R");
    lcd.setCursor(5, 3);
    lcd.print("R");
    lcd.setCursor(15, 3);
    lcd.print("R");
    return;
  }
  else
  {

    for (uint8_t i = 0; i < 8; i++)
    {
      if (touched & (1 << i))
      {
        switch (i)
        {
        case 0:
          lcd.setCursor(5, 0);
          lcd.print("T");
          break;
        case 1:
          lcd.setCursor(15, 0);
          lcd.print("T");
          break;
        case 2:
          lcd.setCursor(5, 1);
          lcd.print("T");
          break;
        case 3:
          lcd.setCursor(15, 1);
          lcd.print("T");
          break;
        case 4:
          lcd.setCursor(5, 2);
          lcd.print("T");
          break;
        case 5:
          lcd.setCursor(15, 2);
          lcd.print("T");
          break;
        case 6:
          lcd.setCursor(5, 3);
          lcd.print("T");
          break;
        case 7:
          lcd.setCursor(15, 3);
          lcd.print("T");
          break;

        default:
          break;
        }
      }
      else
      {
        switch (i)
        {
        case 0:
          lcd.setCursor(5, 0);
          lcd.print("R");
          break;
        case 1:
          lcd.setCursor(15, 0);
          lcd.print("R");
          break;
        case 2:
          lcd.setCursor(5, 1);
          lcd.print("R");
          break;
        case 3:
          lcd.setCursor(15, 1);
          lcd.print("R");
          break;
        case 4:
          lcd.setCursor(5, 2);
          lcd.print("R");
          break;
        case 5:
          lcd.setCursor(15, 2);
          lcd.print("R");
          break;
        case 6:
          lcd.setCursor(5, 3);
          lcd.print("R");
          break;
        case 7:
          lcd.setCursor(15, 3);
          lcd.print("R");
          break;

        default:
          break;
        }
      }
    }
  }

  delay(50);
}
C++

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

آموزش های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.