آردوینوالکترونیکپروژه آردوینو

کنترل نور اتاق با سنسور آلتراسونیک SR04

مقدمه

کنترل نور با سنسور آلتراسونیک: می خواهیم به کمک تجهیزاتی که در پایین گفته خواهد شد دستگاهی بسازیم که هدف اصلی آن ذخیره و بهینه سازی انرژی است. به این صورت که در صورتی که کسی در اتاق باشد چراغ را روشن نگه دارد و وقتی اتاق خالی شد چراغ خاموش شود.

توجه: این پروژه در ارتباط مستقیم با برق ۲۲۰ولت شهری است. حتما اصول ایمنی را هنگام کارکردن رعایت کنید.

لوازم مورد نیاز

در ادامه تصویر  قطعات مورد استفاده را میبینید:

مدار

مدار را مانند شکل زیر ببندید. توجه داشته باشید که ماژول رله به صورت Avtive Low عمل می کند. به این معنی که برای فعال شدنش باید پایه آردوینو LOW شود.

نمایی از اتصالات مدار کنترل نور با سنسور آلتراسونیک
نمایی از اتصالات مدار کنترل نور با سنسور آلتراسونیک

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

نمایی از اتصالات لامپ و ماژول رله در کنترل نور با سنسور آلتراسونیک
نمایی از اتصالات لامپ و ماژو رله

در مرحله نهایی مدار مانند شکل زیر خواهد شد:

نمای کلی مدار کنترل نور با سنسور آلتراسونیک
نمای کلی مدار کنترل نور با سنسور آلتراسونیک

در اینجا آماده سازی سخت افزاری به پایان رسید. در ادامه برنامه ای با کاربرد زیر معرفی خواهیم کرد:

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

برای راه اندازی سنسور در اینجا از کتابخانه موجود در آدرس https://bitbucket.org/teckel12/arduino-new-ping/downloads استفاده کرده ایم.

دستورات زیر جهت محاسبه فاصله برحسب سانتی متر و یا اینچ به کار می روند:

sonar.ping_cm();
// Or
sonar.ping_inch();

سنسور فراصوت گاهی خطا دارد و فاصله را درست نشان نمیدهد…مانند شکل زیر:

نمایی از پنجره نمایش مقدار فاصله ها
نمایی از پنجره نمایش مقدار فاصله ها

که در این برنامه می تواند مشکل ساز شود و لامپ را در حالات ناخواسته خاموش یا روشن کند. برای حل این مشکل در کتابخانه مربوط به فراصوت یک فیلتری به نام median وجود دارد که اعداد خوانده شده را در یک آرایه ثبت می کند و مقدار وسط آرایه را انتخاب کرده و تحویل می دهد. دستور زیر این فیلتر را غعال می کند:

sonar.ping_median(unsigned byte numReadings); 

بلوک کد زیر برای وقتی است که چیزی جلوی سنسور نباشد و مقدار ۰ را برمی گرداند.

نمایی از برنامه مدار کنترل نور با سنسور آلتراسونیک گام یک
نمایی ازبرنامه مدار کنترل نور با سنسور آلتراسونیک

وقتی یک نفر از جلوی سنسور عبور کند باید در یک فاصله مشخص از آن قرار بگیرد که در اینجا کافیست این فاصله را برابر نصف عرض درب در نظر بگیریم. هم چنین می خواهیم وقتی یک نفر از جلوی سنسور عبور کرد لامپ تغییر حالت دهد و اگر کسی جلوی آن ایستاد تغییر حالت ندهد. بلوک کد زیر این عمل را پیاده سازی میکند:

نمایی از برنامه مدار کنترل نور با سنسور آلتراسونیک گام دوم
نمایی از برنامه مدار کنترل نور با سنسور آلتراسونیک گام دوم

برنامه

برنامه نهایی در زیر آورده شده است:

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 

#define RELAY_LINE1_PIN 8

#include "NewPing.h"

تعیین پایه ها و اضافه کردن کتابخانه

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

unsigned int distance = 0;	// Current distance of any object facing the ultrasonic sensor
int critical_distance_cms = 50;	// Cutoff distance at which the light will switch
bool state = 0;

تعریف متغییر ها

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

راه اندازی سریال

pinMode(RELAY_LINE1_PIN, OUTPUT);
	digitalWrite(RELAY_LINE1_PIN, HIGH);	// Turn the light off

تعریف پایه های رله به صورت خروجی

}

void loop() {
delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
	ReadDistance();
	Serial.print("Ultrasonic: ");
	Serial.print(distance); 
	Serial.println("cm");

خواندن فاصله و چاپ مقدار آن

// Someone is near the door
	if (distance < critical_distance_cms)
	{

شرط بررسی فاصله

while (distance < critical_distance_cms)
		{
			// Check if they moved away
			ReadDistance();	

			delay(5);	
		}

		state = !state; // Change the state of the relay

روشن یا خاموش شدن رله بر اثر تشخیص جابجایی

if (state)
		{
			Serial.println("Door Open!");
			digitalWrite(RELAY_LINE1_PIN, LOW);	// Turn the light on
		}
		else
		{
			Serial.println("Door Closed!");
			digitalWrite(RELAY_LINE1_PIN, HIGH);	// Turn the light off
		}

روشن | خاموش کردن چراغ ها

}
}

// Updates the value of the Ultrasonic reading
void ReadDistance()
{
	// Read 7 values from the ultrasonic and get the median value ( median filter )
	// Gets rid of noisy reading
	distance = sonar.convert_cm(sonar.ping_median(7));

فیلتر مقادیر نویزی

// The value 0 indicates that the ultrasonic sensor is reading nothing in front of it
	// Set this distance to max distance so the light doesn't switch unnecessarily
	if (distance == 0)
	{
		distance = MAX_DISTANCE;
	}
}

سخن پایانی

در این کد در صورت تغییر فردی چراغ ها روشن و خاموش می شوند. با این کار صرفه جویی زیادی در انرژی خواهید کرد.

امیدوارم از این آموزش لذت برده باشید.

نمایش بیشتر

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا