شما به اینترنت متصل نیستید.
معرفی و نحوه راه‌اندازی سنسورهای پرکاربرد اینترنت اشیا (IoT)
نویسنده:
امتیاز دهید

معرفی و نحوه راه‌اندازی سنسورهای پرکاربرد اینترنت اشیا (IoT)

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

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

برد آردوینو UNO R3
برد آردوینو UNO و کابل رابط
1 عدد
فوتوسل
1 عدد
ماژول سنسور تشخیص شعله و آتش مادون قرمز
سنسور شعله
1 عدد
سنسور لرزش پیزوالکتریک با حساسیت بالا LDT0-028K
سنسور پیزوالکتریک
1 عدد
ماژول فرستنده و گیرنده سنسور IR اینفرارد
ماژول مادون قرمز
1 عدد
فرستنده مادون قرمز
1 عدد
گیرنده مادون قرمز
1 عدد
ماژول سنسور گاز الکل - تشخیص الکل MQ-3
سنسور گاز MQ-3
1 عدد
سنسور تشخیص کربن مونوکسید MQ-9
سنسور گاز MQ-9
1 عدد
ماژول سنسور تشخیص حرکت HC-SR 501
سنسور تشخیص حرکت PIR
1 عدد
LED نوری
1 عدد
مقاومت 220Ω
1 عدد
مقاومت 1kΩ
1 عدد
مقاومت 1MΩ
1 عدد
بردبورد
1 عدد
سیم جامپر(بسته)
2 عدد

سنسور نور (فوتوسل)

فوتوسل یا همان LDR که مخفف Light Dependent Resistor است، یک قطعه حساس به میزان روشنایی است. همان طور که از اسم آن هم می‌توان فهمید، فوتوسل یک مقاومت متغیر است که مقدار آن با تغییر نور محیط تغییر می‌کند. بنابراین با توجه به میزان مقاومت فوتوسل می‌توانید مقدار روشنایی محیط را اندازه بگیرید. از آنجا که مقاومت را نمی‌توان مستقیما اندازه گرفت، مقاومت را با یک مدار تقسیم‌کننده، به ولتاژ ربط داده و مقدار آن را اندازه می‌گیریم. از این نظر فوتوسل مثل یک پتانسیومتر عمل خواهد کرد.

فوتوسل

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

مدار فوتوسل

کد زیر را در آردوینو آپلود کنید و نتیجه را ببینید. کد اول برای کالیبره کردن فوتوسل است که باید نتیجه آن را در کد دوم قرار بدهید.

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define photocellPin A5

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(analogRead(photocellPin));
  delay(1000);
}

مقدار به دست آمده از کد قبل را در متغیرmaxLightجایگذاری کنید:

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define photocellPin A5
#define maxLight 870
#define minLight 0

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int photocellRead = analogRead(photocellPin);
  Serial.print("Light intensity is: ");
  Serial.print(map(photocellRead, minLight, maxLight, 0, 100) );
  Serial.println(" %");
  delay(2000);
}

سنسور شعله

سنسور شعله یک ماژول آماده است که به امواج فروسرخ یعنی طول موج‌های بین ۷۰۰ تا ١٠٠ نانومتر حساس است. این ماژول ۴ پایه دارد که دو پایه آن Vcc و GND و دو پایه دیگر خروجی سنسور هستند.

سنسور شعله

این ماژول خروجی را به دو صورت دیجیتال و آنالوگ می‌دهد. در صورتی که می‌خواهید از خروجی آنالوگ استفاده کنید پایه Vcc را به 5V و اگر از خروجی دیجیتال استفاده می‌کنید به 3.3V آردوینو وصل کنید. این سنسور تا فاصله ۸۰ سانتی‌متری عمل می‌کند. توجه داشته باشید که نزدیک کردن بیش از حد شعله به سنسور می‌تواند به آن آسیب برساند. شکل زیر نحوه اتصال سنسور به آردوینو در حالت آنالوگ را نشان می‌دهد:

مدار سنسور شعله

قبل از نوشتن برنامه مطمئن شوید که سنسور به درستی کار می‌کند. برای این کار یک شعله را روبروی سنسور بگیرید. در صورتی که ماژول سالم باشد، باید چراغ موجود بر روی آن روشن شود. خروجی آنالوگ را در آردوینو به صورت عددی بین ٠ تا ١٠٢٣ می‌توانید ببینید که هرچه این عدد کوچکتر باشد یعنی میزان تشعشع موج فروسرخ بیشتر است. خروجی دیجیتال فقط وجود یا عدم وجود شعله را به صورت HIGH یا LOW نشان می‌دهد. در ادامه کد استفاده از سنسور شعله ابتدا در حالت آنالوگ و سپس در حالت دیجیتال را مشاهده می‌کنید:

کد آنالوگ سنسور شعله:

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
#define flameSensorPin A5

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int flameState = analogRead(flameSensorPin)/342;
  switch (flameState)
  {
  case 2:
  Serial.println("Safe");
    break;
  case 1:
  Serial.println("Warning!");
  break;
  case 0:
  Serial.println("Danger!!!");
  break;
  }
  delay(1000);
}

کد دیجیتال سنسور شعله:

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define flameSensorPin 2

void setup()
{
  Serial.begin(9600);
  pinMode(flameSensorPin,INPUT);
}

void loop()
{
  int flameState = digitalRead(flameSensorPin);
  switch (flameState)
  {
  case LOW:
  Serial.println("Safe");
    break;
  case HIGH:
  Serial.println("Danger!!!");
    break;
  }
  delay(1000);
}

سنسور مادون قرمز

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

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

ماژول مادون قرمز

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

مشاهده تصویر
مدار ماژول مادون قرمز

کد زیر را بر روی آردوینو آپلود کنید. سپس سنسور را به ترتیب روبروی یک جسم تیره و روشن قرار داده و نتیجه را ببینید.

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define IR 9

void setup()
{
  Serial.begin(9600);
  pinMode(IR, INPUT);
}

void loop()
{
  Serial.println(digitalRead(IR));
  delay(1000);
}

یکی از کارهای جالبی که می‌توان با سنسور مادون قرمز انجام داد تشخیص مانع است. برای این کار نیاز به یک فرستنده و یک گیرنده مادون قرمز دارید. فرستنده مادون قرمز یک موج با فرکانس 38kHz را ارسال می‌کند. برای مثال اگر فرستنده و گیرنده مادون قرمز را دو طرف درب ورودی خانه قرار دهید، با قطع شدن سیگنال ارسالی، متوجه ورود شخصی به خانه خواهید شد. دقت کنید که فرستنده و گیرنده مادون قرمز باید دقیقا روبروی هم قرار گرفته باشند. قطعات را به صورت زیر به آردوینو وصل کنید:

مشاهده تصویر
مدار سنسور مانع

حالا کد زیر را بر روی آردوینو آپلود کنید:

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define IRSender 9
#define IRReciever 11
bool state = 1;

void setup()
{
  Serial.begin(9600);
  pinMode(IRSender, OUTPUT);
  pinMode(IRReciever, INPUT);
}

void loop()
{
if(digitalRead(IRReciever))  Serial.println("Clear");
else Serial.println("Obstacle!");
delay(500);
}

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

مشاهده تصویر
فرستنده و گیرنده مادون قرمز

برای کار با سنسور مادون قرمز به کتابخانهIRRemoteنیاز خواهید داشت. اگر این کتابخانه را ندارید می‌توانید از لینک زیر آن را دانلود کنید:

32KB
نام فایل: IRremote.rar

ابتدا یک گیرنده مادون قرمز را به آردوینو وصل کرده و کد زیر را بر روی آن بارگذاری کنید. سپس هر کدام از کلیدهای کنترل را فشرده و مقدار نشان داده شده در نمایشگر سریال را یادداشت کنید.

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#include <IRremote.h>
IRrecv irrecv(11);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() 
{
  if (irrecv.decode(&results)) 
    {
      Serial.println(results.value);
      irrecv.resume();
    }
}

در کتابخانه مادون قرمز دستور (irrecv.decode(&results مقدار ١ را در صورت دریافت سیگنال و در غیر این صورت مقدار ٠ را می‌دهد. همچنین برای اینکه سنسور دریافت سیگنال را ادامه دهد از دستور()irrecv.resumeاستفاده کنید.

حالا باید برنامه‌ای بنویسید و مقادیری که قبلا یادداشت کرده‌اید را در آن تعریف کنید. در این صورت می‌توانید برای هر کلید یک وظیفه مشخص تعریف کنید. مثلا در برنامه زیر با فشردن کلید + و – میزان روشنایی LED کم و زیاد می‌شود. LED را به پایه ۹ و سنسور را به پایه ١١ وصل کنید.

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
#include <IRremote.h>
#define ledPin 9
int lastLedState = 0;
IRrecv irrecv(11);
decode_results results;

void ledset(const String &input)
{
  int currentLedState;
  if (input == "VOL-")
    currentLedState = lastLedState - 30;
  if (input == "VOL+")
    currentLedState = lastLedState + 30;
  if (currentLedState < 0)
    currentLedState = 0;
  else if (currentLedState > 255)
    currentLedState = 255;
  analogWrite(ledPin, currentLedState);
  lastLedState = currentLedState;
}

String readIR()
{
  String characterIR;
  if (irrecv.decode(&results))
  {
    switch (results.value)
    {
    case 3810010651:
      characterIR = "CH-";
      break;
    case 5316027:
      characterIR = "CH";
      break;
    case 4001918335:
      characterIR = "CH+";
      break;
    case 1386468383:
      characterIR = "PREV";
      break;
    case 3622325019:
      characterIR = "NEXT";
      break;
    case 553536955:
      characterIR = "PLAY/PAUSE";
      break;
    case 4034314555:
      characterIR = "VOL-";
      break;
    case 2747854299:
      characterIR = "VOL+";
      break;
    case 3855596927:
      characterIR = "EQ";
      break;
    case 3238126971:
      characterIR = "0";
      break;
    case 2538093563:
      characterIR = "100+";
      break;
    case 4039382595:
      characterIR = "200+";
      break;
    case 2534850111:
      characterIR = "1";
      break;
    case 1033561079:
      characterIR = "2";
      break;
    case 1635910171:
      characterIR = "3";
      break;
    case 2351064443:
      characterIR = "4";
      break;
    case 1217346747:
      characterIR = "5";
      break;
    case 71952287:
      characterIR = "6";
      break;
    case 851901943:
      characterIR = "7";
      break;
    case 465573243:
      characterIR = "8";
      break;
    case 1053031451:
      characterIR = "9";
      break;

    default:
      break;
    }
    irrecv.resume();
  }
  return characterIR;
}

void setup()
{
  irrecv.enableIRIn();
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  String characterIR = readIR();
  ledset(characterIR);
}

در این برنامه تابعreadIRسیگنال مادون قرمز را دریافت کرده و کلید فشرده شده را تعیین می‌کند. مقادیری که از برنامه قبل به دست آورده بودید را در این قسمت وارد کنید. همچنین تابعledsetمیزان روشنایی LED را تنظیم می‌کند.

سنسور لرزش پیزوالکتریک

در آموزش راه‌اندازی بازر با آردوینو مواد پیزوالکتریک را معرفی کردیم. پیزوالکتریک‌ها دسته‌ای از مواد هستند که خاصیت تبدیل ولتاژ الکتریکی به جابجایی (اگر بخواهیم دقیق‌تر بگوئیم، کرنش) و برعکس را دارند. این یعنی اگر به دو سر پیزوالکتریک ولتاژ بدهید، دچار تغییر شکل شده و اگر آن را دچار تغییر شکل کنید، دو سر آن ولتاژ ایجاد می‌شود. این ولتاژ و تغییر شکل با یک ضریب به هم مرتبط هستند که بسته به نوع ماده و راستای تغییر شکل، تفاوت می‌کند. با استفاده از این خاصیت سنسورهای مختلفی مثل سنسور ضربه، سنسور ارتعاشات، سنسور خمش و … ساخته شده است.

مشاهده تصویر
سنسور لرزش پیزوالکتریک

استفاده از این سنسور ساده است چرا که تنها دو پایه دارد. یک پایه را به زمین و پایه دیگر را به A5 وصل کنید. خم کردن سنسور در یک جهت ولتاژ مثبت و در جهت دیگر ولتاژ منفی تولید می‌کند. اندازه ولتاژ منفی در این سنسور کوچکتر از ولتاژ مثبت است به همین دلیل اگر جای پایه‌های آن را عوض کنید مشاهده خواهید کرد که اندازه سیگنال‌ها تغییر می‌کند. دقت کنید که هرچند سیگنال تولید شده توسط پیزوالکتریک توان ناچیزی دارد اما در اثر تغییر شکل‌های بزرگ، سیگنال‌های لحظه‌ای بزرگی تولید کرده و می‌تواند به آردوینو آسیب بزند. به همین دلیل باید از آردوینو در برابر سیگنال‌های ولتاژ بالا محافظت کنید. راههای زیادی برای این کار وجود دارد. یک روش ساده این است که یک مقاومت بزرگ مثلا 1MΩ بین دو سر سنسور قرار دهید.

مشاهده تصویر
مدار سنسور لرزش پیزوالکتریک

کد زیر را بر روی آردوینو آپلود کنید. برای اینکه نتیجه را بهتر ببینید می‌توانید از منوی Tools پنجره Serial Plotter را باز کرده و نحوه تغییرات سیگنال در پین آنالوگ آردوینو را ببینید.

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define piezoelectricPin A0

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  float piezoV = analogRead(piezoelectricPin) * 5.0 / 1023.0;
  Serial.println(piezoV);
}
مشاهده تصویر
خروجی سنسور لرزش

سنسورهای تشخیص گاز

سنسورهای تشخیص گاز، قطعه‌ای هستند که به میزان وجود انواع خاصی از گازها در محیط حساس هستند. سری MQ برای تشخیص چگالی گازهای مختلف بسیار مورد استفاده قرار می‌گیرند. این سری انواع مختلفی دارد که هر کدام برای تشخیص گاز خاصی طراحی و ساخته شده است. برای مثال سنسور MQ-3 به الکل، متانول و دود و نیز سنسور MQ-9 به کربن مونوکسید و گازهای قابل‌اشتعال حساس است.

مشاهده تصویر
سنسور گاز

برای نمونه در اینجا از سنسور MQ-3 استفاده خواهیم کرد اما نحوه استفاده از این سنسورها یکسان است. این ماژول نیز مانند بسیاری از ماژول‌های دیگر خروجی آنالوگ و دیجیتال دارد. همچنین بر روی آن یک پتانسیومتر قابل تنظیم وجود دارد که حد اشباع خروجی دیجیتال را تعیین می‌کند. درون این سنسور یک هیتر وجود دارد که باید قبل از اولین استفاده پیش‌گرم شود. طبق توصیه سازنده برای پیش‌گرمایش باید سنسور را به مدت حداقل ۴۸ ساعت به ولتاژ متصل کنید. پس از آن باید طبق اطلاعات موجود در کاتالوگ محصول آنرا کالیبره کنید. درون این سنسور یک مقاومت متغیر وجود دارد که با تغییر چگالی گازهای مورد نظر تغییر می‌کند. ابتدا سنسور را به صورت زیر به آردوینو وصل کرده و در یک محیط با هوای پاک قرار داده و به مدت ١۵ دقیقه صبر کنید تا دیتای آن ثابت شود.

مشاهده تصویر
مدار سنسور الکل

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

مشاهده تصویر
نمودار سنسور الکل
/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
#define sensorPin A0
#define RL 200
#define R0ratio 0.9914

float sensorRead()
{
  int i = 0;
  float VRL = 0;
  do
  {
    VRL = VRL + analogRead(sensorPin);
    i++;
  } while (i < 100);
  return (VRL / 100);
}

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  float VRL = sensorRead() * 5 / 1023;
  float Rs = RL * (5 - VRL) / VRL;
  float R0 = Rs / R0ratio;
  Serial.print("R0 = ");
  Serial.println(R0);
  delay(1000);
}

در این کد R0 مقدار مقاومت سنسور در شرایط هوای پاک است. پارامتر R0ratio مقدار نسبت Rs/R0 است که باید در شرایط هوای پاک از روی نمودار به دست آورید. محاسبه Rs از طریق مقدار RL که برای این سنسور 200kΩ است، ولتاژ خوانده شده و نیز رابطه زیر انجام می‌شود:

مشاهده تصویر
رابطه سنسور الکل

همچنین برای دقت بیشتر در محاسبات، تابعsensorReadمقادیر از سنسور میانگین‌گیری می‌کند. در این قسمت از حلقهdo…whileاستفاده شده است. ویژگی این نوع حلقه این است که یک بار دستورات حلقه انجام شده و سپس شرط ادامه حلقه بررسی می‌شود. پس از به دست آوردن R0 می‌توانید کد زیر را آپلود کرده و مقدار لحظه‌ای الکل را بر حسب mg/L به دست آورید:

/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/

#define sensorPin A0
#define RL 200
#define R0 1471

float Alcohol_density(float ratio)
{
  float density = (0.2333 * ratio + 0.2499) / (pow(ratio, 2) +0.1666 * ratio -0.003644);
  return density;
}

float sensorRead()
{
  int i = 0;
  float VRL = 0;
  do
  {
    VRL = VRL + analogRead(sensorPin);
    i++;
  } while (i < 100);
  return VRL / 100;
}

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  float VRL = sensorRead() * 5 / 1023;
  float Rs = RL * (5 - VRL) / VRL;
  float ratio = Rs / R0;
  float density = Alcohol_density(ratio);
  Serial.print("Alcohol density is = ");
  Serial.print(density);
  Serial.println("mg/L");
  if (density < 3)
    Serial.println("Safe");
  else if (density > 3 && density < 6)
    Serial.println("Warning");
  else if (density > 6 && density < 10)
    Serial.println("Danger");
  else if (density > 10)
    Serial.println("Extremely high");
  Serial.println("\n\n");
  delay(1000);
}

در این برنامه مقدار R0 که قبلا به دست آورده بودید را وارد کنید. برای اینکه بتوانید مقدار چگالی الکل را به دست آورید باید رابطه بین Rs/R0 و چگالی را با استفاده از نمودار الکل داشته باشید. برای داشتن دقت کافی من ترجیح دادم تا با استفاده از نرم‌افزار متلب این تابع را به دست آورده و وارد کد آردوینو کنم. تابعAlcohol_densityمقدار چگالی الکل را محاسبه می‌کند. در صورت نیاز می‌توانید همین کار را برای گازهای دیگر نیز تکرار کرده و مقدار چند گاز را در هر لحظه به دست آورید.

سنسور حرکت

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

مشاهده تصویر
سنسور حرکت

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

توجه: سنسور PIR فقط به اجسام گرم مثل بدن انسان حساس است. بنابراین حرکت سایر اجسام با استفاده از این سنسور قابل تشخیص نیست.

مشاهده تصویر
عملکرد سنسور حرکت

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

مشاهده تصویر
لنز فرنل

اتصال سنسور حرکت به آردوینو ساده است. کافیست که مثبت و منفی آن را به 5V و GND و پایه سیگنال را به یک پین دیجیتال آردوینو وصل کنید.

مشاهده تصویر
پایه های سنسور حرکت

سنسور حرکت چند قابلیت خاص دارد که قبل از راه‌اندازی باید آنها را مد نظر داشته باشید. اول از همه دو پیچ تنظیم است که یکی برای تغییر میزان حساسیت و دیگری برای تعیین زمان روشن بودن سنسور است. چرخاندن در جهت عقربه‌های ساعت حساسیت سنسور را افزایش می‌دهد. در این سنسور دو پارامتر مهم وجود دارد: زمان روشن بودن (Tx) و زمان تاخیر (Ti). زمان روشن بودن که با چرخاندن پیچ مربوطه در جهت عقربه‌های ساعت افزایش می‌یابد، زمانی است که پس از تشخیص یک حرکت، پایه سنسور HIGH باقی می‌ماند. پس از زمان روشن بودن، پایه سنسور به میزان خاصی زمان، در حالت LOW قرار می‌گیرد. این مقدار ثابت است. کمترین و بیشترین مقدار زمان Tx، برابر با ۲.۲ و ۲۵۰ ثانیه است.

مشاهده تصویر
تنظیم سنسور حرکت

بر روی این سنسور یک جامپر هم مشاهده می‌کنید. در صورتی که جامپر در حالت L باشد، non-retriggering و اگر در حالت H باشد، retriggering خواهد بود. وقتی سنسور در وضعیت retriggering است، همواره به حرکت اجسام حساس بوده و متناسب با آن خروجی را تعیین می‌کند در حالی که در وضعیت non-retriggering سنسور تا پایان زمان تاخیر، دستور جدیدی را نمی‌پذیرد.

مشاهده تصویر
retriggering

توجه: خروجی سنسور PIR ولتاژ 3.3V است. پس توجه داشته باشید که اگر می‌خواهید از خروجی آن برای راه‌اندازی ماژول دیگری استفاده کنید، ماژول یا برد مورد نظر باید حساس به ولتاژ 3.3V باشد.

سنسور تشخیص حرکت را به صورت زیر به آردوینو متصل کرده و کد زیر را بر روی آردوینو آپلود کنید:

مشاهده تصویر
مدار سنسور حرکت
/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
int ledPin = 9;
int pirPin = 2;
int lastState = LOW;
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  if (digitalRead(pirPin))
  {
    digitalWrite(ledPin, HIGH);
    if (!lastState)
    {
      Serial.println("Somebody is here!");
      lastState = !lastState;
    }
  }
  else
  {
    digitalWrite(ledPin, LOW);
    if (lastState)
    {
      Serial.println("Went away!");
      lastState = !lastState;
    }
  }
}

نتیجه‌گیری

در این آموزش با تعدادی از مهمترین سنسورهای اولیه مورد استفاده در پروژه‌های اینترنت اشیا آشنا شده و نحوه کار با آنها را یاد گرفتید.

در آموزش بعدی در مورد نحوه استفاده از رله و کاربردهای آن صحبت خواهیم کرد.

معرفی و راه‌اندازی انواع رله با آردوینو
معرفی و راه‌اندازی انواع رله با آردوینو
در این آموزش انواع رله معرفی شده و نحوه راه اندازی آن با آردوینو را بررسی خواهیم کرد.
زمان مطالعه: 23 دقیقه

نظرات شما باعث بهبود محتوای آموزشی ما می‌شود. اگر این آموزش را دوست داشتید، همین‌طور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.

آیا این مطلب برایتان مفید بود؟
بله خیر
تاکنون هیچ نظری ثبت نشده است.
برای ثبت نظر وارد حساب کاربری خود شوید.