بازگشت

آموزش راه‌اندازی ماژول سنسور TMD27713 با آردوینو

مقدمه

اگر به حسگرها علاقه‌مند باشید، حتماً با سنسورهای تشخیص فاصله آشنا هستید. برای تشخیص فاصله، سنسورهای مختلفی با روش‌های اندازه‌گیری متفاوت وجود دارند؛ هر کدام با توانایی‌ها و محدودیت‌های خاص خود.

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

در این آموزش، شما را با ماژول تشخیص فاصله TMD27713 آشنا خواهیم کرد. چه یک مبتدی باشید یا یک فرد باتجربه و علاقه‌مند به الکترونیک و آردوینو، این آموزش مطالب مفیدی را برای راه‌اندازی گام به گام این حسگر به شما ارائه می‌دهد.

 

آنچه در این آموزش یاد می‌گیرید

  • آشنایی با حسگر تشخیص فاصله TMD27713
  • راه اندازی سنسور TMD27713 با آردوینو و تشخیص فاصله و شدت نور محیط

 

آشنایی با سنسور تشخیص فاصله TMD27713

تراشه TMD27713 یک حسگر فاصله‌سنج بر پایه مادون قرمز است. همچنین می‌توان از گیرنده آن به عنوان سنسور سنجش نور محیط نیز استفاده کرد. این تراشه شامل یک سنسور مجاورت دیجیتال، درایور LED و IR LED است که برای از بین بردن نیاز به کالیبراسیون، در کنار هم چیده شده‌اند.

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

می‌توانید دیتاشیت ماژول TMD2771 را از این لینک دانلود کنید.

 

پایه‌های (Pinout) ماژول TMD27713

ماژول TMD27713 دارای پایه‌های زیر است:

 

ویژگی‌های ماژول TMD27713

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

حسگر نور محیطی (ALS) Ambient Light Sensing :

  • سرعت پاسخ‌دهی؛ مشابه چشم انسان
  • ضریب تقویت آنالوگ قابل تنظیم
  • تابع وقفه قابل برنامه‌ریزی با حد آستانه بالا و پایین
  • تا 16 بیت رزولوشن
  • حساسیت بسیار بالا  (در پشت شیشه رنگی نیز کار می‌کند)
  • محدوده دینامیکی تا 1000000:1

تشخیص مجاورت:

  • کالیبره شده برای تشخیص 100 میلی متر
  • تعداد پالس‌های IR قابل تنظیم
  • جریان‌کشی قابل تنظیم بدون نیاز به مقاومت محدود‌کننده جریان
  • تابع وقفه قابل برنامه‌ریزی با حد آستانه بالا و پایین
  • اندازه کوچک: 3.94mm × 2.4mm × 1.35mm

 

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

CJMCU-88 TMD27713 IRLED + ALS + Proximity Sensor
1
Arduino UNO R3*
1
Male-to-Female Jumper Wire
1

*: از هر برد آردوینوی دیگری که دارای I2C باشد نیز می‌توانید استفاده کنید.

 

آموزش راه‌اندازی ماژول TMD27713 با آردوینو

در این قسمت، نحوه اندازه‌گیری فاصله با استفاده از سنسور TMD27713 و آردوینو را به صورت گام به گام توضیح می‌دهیم.

 

سیم‌بندی

ابتدا، ماژول TMD27713 را به صورت شکل زیر به برد آردوینو متصل کنید.

 

کد

کد زیر را در نرم‌افزار Arduino IDE کپی و بر روی برد خود آپلود کنید. توضیحات کد در کنار آن به صورت کامنت ذکر شده است.

#include <Wire.h>

// TMD2771 I2C address is 39(57)
#define Addr 0x39

void setup()
{
  // Initialise I2C communication as MASTER
  Wire.begin();
  // Initialise Serial Communication, set baud rate = 9600
  Serial.begin(9600);
  
  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x00 | 0xA0); // Select enable register
  
  Wire.write(0x0F); // Set power on, proximity and ALS enabled
  Wire.endTransmission();// Stop I2C Transmission

  
  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x01 | 0xA0); // Select ALS time register
  Wire.write(0xDB); // Atime = 101 ms
  Wire.endTransmission();  // Stop I2C Transmission

  
  Wire.beginTransmission(Addr); // Start I2C Transmission  
  Wire.write(0x02 | 0xA0); // Select proximity time register  
  Wire.write(0xFF); // Ptime = 2.72 ms  
  Wire.endTransmission();// Stop I2C Transmission

  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x03 | 0xA0); // Select Wait time register
  Wire.write(0xFF); // Wtime = 2.72 ms
  Wire.endTransmission();// Stop I2C Transmission
  
  
  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x0E | 0xA0); // Select pulse count register
  Wire.write(0x04); // Pulse count = 4
  Wire.endTransmission();// Stop I2C Transmission
  
  
  Wire.beginTransmission(Addr); // Start I2C Transmission  
  Wire.write(0x0F | 0xA0); // Select control register
  // 120 mA LED strength, Proximtiy uses CH1 diode, 1x PGAIN, 1x AGAIN
  Wire.write(0x20);  
  Wire.endTransmission();// Stop I2C Transmission
  delay(800);  
}

void loop()
{
  unsigned int data[6];
  
  
  Wire.beginTransmission(Addr); // Start I2C Transmission  
  Wire.write(0x14 | 0xA0); // Select data register  
  Wire.endTransmission();// Stop I2C Transmission
  
  // Request 6 bytes of data
  Wire.requestFrom(Addr, 6);
  
  // Read 6 bytes of data
  // c0Data lsb, c0Data msb, c1Data lsb, c1Data msb, proximity lsb, proximity msb
  if(Wire.available() == 6)
  {
    data[0] = Wire.read();
    data[1] = Wire.read();
    data[2] = Wire.read();
    data[3] = Wire.read();
    data[4] = Wire.read();
    data[5] = Wire.read();
  }
  
  // Convert the data
  int c0Data = (data[1] * 256) + data[0];
  int c1Data = (data[3] * 256) + data[2];
  double proximity = (data[5] * 256.0) + data[4];
  float CPL = (101.0) / 24.0;
  float luminance1 = (1 * c0Data - 2 * c1Data) / CPL;
  float luminance2 = (0.6 * c0Data - 1.00 * c1Data) / CPL;
  float luminance = 0.0;
  
  if((luminance1 > 0) && (luminance1 > luminance2))
  {
    luminance = luminance1;
  }
  else if((luminance2 > 0) && (luminance2 > luminance1))
  {
    luminance = luminance2;
  }
  
  // Output data to serial monitor
  Serial.print("Ambient Light luminance : ");
  Serial.print(luminance);
  Serial.println(" lux");
  Serial.print("Proximity of the device : ");
  Serial.println(proximity);
  delay(1000);
}

Arduino

پس از آپلود کردن کد فوق، ابتدا پورت COM و نوع برد خود را انتخاب کرده، سپس Serial Monitor را باز کنید. دقت داشته باشید که بادریت باید بر روی 9600 تنظیم شده باشد.

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

 

یک گام جلوتر

در این آموزش، شما با نحوه کار با ماژول تشخیص فاصله TMD27713 آشنا شدید. اگر به دیتاشیت این حسگر مراجعه کنید، می‌توانید در مورد رجیسترهایی که در کد این آموزش تنظیم کردیم اطلاعات بیشتری کسب کنید. مثلاً رجیسترهای 0x04 تا 0x0B برای تنظیم حد آستانه بالا و پایین در سیستم وقفه حسگر تشخیص فاصله و نور محیط به کار می‌روند. با تنظیم آنها و استفاده از پایه INT ماژول، می‌توانید یک کلید خودکار بسازید که با کم یا زیاد شدن نور یا فاصله، فعال یا غیر فعال شود.

این سنسور به دلیل اندازه کوچک، در پروژه‌های مختلف استفاده می‌شود. از جمله این کاربردها می‌توان به موارد زیر اشاره کرد:

  • پروژه‌های رباتیک؛ برای تشخیص موانع
  • تلفن‌های همراه؛ برای خاموش کردن صفحه نمایش در هنگام صحبت کردن
  • نمایشگرها؛ برای تنظیم نور پس‌زمینه

مقدمه

اگر به حسگرها علاقه‌مند باشید، حتماً با سنسورهای تشخیص فاصله آشنا هستید. برای تشخیص فاصله، سنسورهای مختلفی با روش‌های اندازه‌گیری متفاوت وجود دارند؛ هر کدام با توانایی‌ها و محدودیت‌های خاص خود.

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

در این آموزش، شما را با ماژول تشخیص فاصله TMD27713 آشنا خواهیم کرد. چه یک مبتدی باشید یا یک فرد باتجربه و علاقه‌مند به الکترونیک و آردوینو، این آموزش مطالب مفیدی را برای راه‌اندازی گام به گام این حسگر به شما ارائه می‌دهد.

 

آنچه در این آموزش یاد می‌گیرید

  • آشنایی با حسگر تشخیص فاصله TMD27713
  • راه اندازی سنسور TMD27713 با آردوینو و تشخیص فاصله و شدت نور محیط

 

آشنایی با سنسور تشخیص فاصله TMD27713

تراشه TMD27713 یک حسگر فاصله‌سنج بر پایه مادون قرمز است. همچنین می‌توان از گیرنده آن به عنوان سنسور سنجش نور محیط نیز استفاده کرد. این تراشه شامل یک سنسور مجاورت دیجیتال، درایور LED و IR LED است که برای از بین بردن نیاز به کالیبراسیون، در کنار هم چیده شده‌اند.

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

می‌توانید دیتاشیت ماژول TMD2771 را از این لینک دانلود کنید.

 

پایه‌های (Pinout) ماژول TMD27713

ماژول TMD27713 دارای پایه‌های زیر است:

 

ویژگی‌های ماژول TMD27713

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

حسگر نور محیطی (ALS) Ambient Light Sensing :

  • سرعت پاسخ‌دهی؛ مشابه چشم انسان
  • ضریب تقویت آنالوگ قابل تنظیم
  • تابع وقفه قابل برنامه‌ریزی با حد آستانه بالا و پایین
  • تا 16 بیت رزولوشن
  • حساسیت بسیار بالا  (در پشت شیشه رنگی نیز کار می‌کند)
  • محدوده دینامیکی تا 1000000:1

تشخیص مجاورت:

  • کالیبره شده برای تشخیص 100 میلی متر
  • تعداد پالس‌های IR قابل تنظیم
  • جریان‌کشی قابل تنظیم بدون نیاز به مقاومت محدود‌کننده جریان
  • تابع وقفه قابل برنامه‌ریزی با حد آستانه بالا و پایین
  • اندازه کوچک: 3.94mm × 2.4mm × 1.35mm

 

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

CJMCU-88 TMD27713 IRLED + ALS + Proximity Sensor
1
Arduino UNO R3*
1
Male-to-Female Jumper Wire
1

*: از هر برد آردوینوی دیگری که دارای I2C باشد نیز می‌توانید استفاده کنید.

 

آموزش راه‌اندازی ماژول TMD27713 با آردوینو

در این قسمت، نحوه اندازه‌گیری فاصله با استفاده از سنسور TMD27713 و آردوینو را به صورت گام به گام توضیح می‌دهیم.

 

سیم‌بندی

ابتدا، ماژول TMD27713 را به صورت شکل زیر به برد آردوینو متصل کنید.

 

کد

کد زیر را در نرم‌افزار Arduino IDE کپی و بر روی برد خود آپلود کنید. توضیحات کد در کنار آن به صورت کامنت ذکر شده است.

#include <Wire.h>

// TMD2771 I2C address is 39(57)
#define Addr 0x39

void setup()
{
  // Initialise I2C communication as MASTER
  Wire.begin();
  // Initialise Serial Communication, set baud rate = 9600
  Serial.begin(9600);
  
  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x00 | 0xA0); // Select enable register
  
  Wire.write(0x0F); // Set power on, proximity and ALS enabled
  Wire.endTransmission();// Stop I2C Transmission

  
  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x01 | 0xA0); // Select ALS time register
  Wire.write(0xDB); // Atime = 101 ms
  Wire.endTransmission();  // Stop I2C Transmission

  
  Wire.beginTransmission(Addr); // Start I2C Transmission  
  Wire.write(0x02 | 0xA0); // Select proximity time register  
  Wire.write(0xFF); // Ptime = 2.72 ms  
  Wire.endTransmission();// Stop I2C Transmission

  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x03 | 0xA0); // Select Wait time register
  Wire.write(0xFF); // Wtime = 2.72 ms
  Wire.endTransmission();// Stop I2C Transmission
  
  
  Wire.beginTransmission(Addr); // Start I2C Transmission
  Wire.write(0x0E | 0xA0); // Select pulse count register
  Wire.write(0x04); // Pulse count = 4
  Wire.endTransmission();// Stop I2C Transmission
  
  
  Wire.beginTransmission(Addr); // Start I2C Transmission  
  Wire.write(0x0F | 0xA0); // Select control register
  // 120 mA LED strength, Proximtiy uses CH1 diode, 1x PGAIN, 1x AGAIN
  Wire.write(0x20);  
  Wire.endTransmission();// Stop I2C Transmission
  delay(800);  
}

void loop()
{
  unsigned int data[6];
  
  
  Wire.beginTransmission(Addr); // Start I2C Transmission  
  Wire.write(0x14 | 0xA0); // Select data register  
  Wire.endTransmission();// Stop I2C Transmission
  
  // Request 6 bytes of data
  Wire.requestFrom(Addr, 6);
  
  // Read 6 bytes of data
  // c0Data lsb, c0Data msb, c1Data lsb, c1Data msb, proximity lsb, proximity msb
  if(Wire.available() == 6)
  {
    data[0] = Wire.read();
    data[1] = Wire.read();
    data[2] = Wire.read();
    data[3] = Wire.read();
    data[4] = Wire.read();
    data[5] = Wire.read();
  }
  
  // Convert the data
  int c0Data = (data[1] * 256) + data[0];
  int c1Data = (data[3] * 256) + data[2];
  double proximity = (data[5] * 256.0) + data[4];
  float CPL = (101.0) / 24.0;
  float luminance1 = (1 * c0Data - 2 * c1Data) / CPL;
  float luminance2 = (0.6 * c0Data - 1.00 * c1Data) / CPL;
  float luminance = 0.0;
  
  if((luminance1 > 0) && (luminance1 > luminance2))
  {
    luminance = luminance1;
  }
  else if((luminance2 > 0) && (luminance2 > luminance1))
  {
    luminance = luminance2;
  }
  
  // Output data to serial monitor
  Serial.print("Ambient Light luminance : ");
  Serial.print(luminance);
  Serial.println(" lux");
  Serial.print("Proximity of the device : ");
  Serial.println(proximity);
  delay(1000);
}

Arduino

پس از آپلود کردن کد فوق، ابتدا پورت COM و نوع برد خود را انتخاب کرده، سپس Serial Monitor را باز کنید. دقت داشته باشید که بادریت باید بر روی 9600 تنظیم شده باشد.

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

 

یک گام جلوتر

در این آموزش، شما با نحوه کار با ماژول تشخیص فاصله TMD27713 آشنا شدید. اگر به دیتاشیت این حسگر مراجعه کنید، می‌توانید در مورد رجیسترهایی که در کد این آموزش تنظیم کردیم اطلاعات بیشتری کسب کنید. مثلاً رجیسترهای 0x04 تا 0x0B برای تنظیم حد آستانه بالا و پایین در سیستم وقفه حسگر تشخیص فاصله و نور محیط به کار می‌روند. با تنظیم آنها و استفاده از پایه INT ماژول، می‌توانید یک کلید خودکار بسازید که با کم یا زیاد شدن نور یا فاصله، فعال یا غیر فعال شود.

این سنسور به دلیل اندازه کوچک، در پروژه‌های مختلف استفاده می‌شود. از جمله این کاربردها می‌توان به موارد زیر اشاره کرد:

  • پروژه‌های رباتیک؛ برای تشخیص موانع
  • تلفن‌های همراه؛ برای خاموش کردن صفحه نمایش در هنگام صحبت کردن
  • نمایشگرها؛ برای تنظیم نور پس‌زمینه
دیدگاه ها 0

درباره این مطلب دیدگاهی ارسال کنید