این پروژه در مورد چگونگی ساخت ضدعفونی کننده اتوماتیک با استفاده از ultrasonic و آردوینو است. مشکل اصلی ضد عفونی کننده دست مبتنی بر سنسور IR این است که نمی توانید آنها را زیر نور مستقیم خورشید قرار دهید زیرا نور خورشید با سنسور IR تداخل دارد. همچنین ، حداکثر فاصله سنسور IR برای تشخیص دست کمتر از 10 سانتی متر است اما در یک ضد عفونی کننده دست مبتنی بر حسگر ultrasonic می توان فاصله را بیش از 10 سانتی متر تنظیم کنید.
ابزار مورد نیاز
آردوینو uno
سنسور اولتراسونیک Hc-SR04
ترانزیستور TIP41c
پمپ آب DC
آداپتور 12v
سنسور ultrasonic چیست و چگونه کار می کند؟
سنسور ultrasonic نوعی حسگر صوتی است که از یک مبدل پیزو الکتریک برای فرستادن و گرفتن امواج صوتی استفاده میکند.هنگامی که شی در محدوده امواج سنسور قرار میگیرد، امواج به آن برخورد کرده و اکو تولید می شود. این اکو به سمت سنسور برگشته و خروجی سنسور را فعال میکند. این حسگرها با محاسبهٔ زمان بین فرستادن امواج صوت و گرفتن اکو، فاصلهٔ جسم را محاسبه میکنند.فرکانس مورد استفاده در این سنسور معمولا بین 60-40 کیلوهرتز میباشد که خارج از بازه شنوایی انسان میباشد. مزیت اصلی این سنسورها، تشخیص اجسام صرف نظر از رنگ و شکل به وسیله امواج ما فوق صوت است.
نحوه ی کار ضدعفونی کننده
ما از سنسور ultrasonic برای تشخیص دست استفاده می کنیم.به صورتی که هنگامی که سنسور دست را تشخیص داد ضدعفونی کننده ی دست روشن شود . برای این منظور از پمپ آب DC استفاده می کنیم. چون از یک پمپ 12 ولتی DC استفاده کرده ایم برای درایو کردن آن از یک ترانزیستور TIP41C استفاده می کنیم زیرا pinout خروجی آردوینو 5 ولت است.
بلوک دیاگرام دستگاه ضدعفونی کننده دست
دیاگرام مدار دستگاه ضد عفونی کننده دست
کد آردوینو
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
int pump=2; int trig_Pin=3; int echo_Pin=4; long Time; int distance; void setup() { Serial.begin(9600); pinMode(trig_Pin,OUTPUT); pinMode(echo_Pin,INPUT); pinMode(pump,OUTPUT); } void loop() { digitalWrite(trig_Pin,LOW); delayMicroseconds(2); digitalWrite(trig_Pin,HIGH); delayMicroseconds(10); digitalWrite(trig_Pin,LOW); Time=pulseIn(echo_Pin,HIGH); distance=Time*0.034/2; Serial.print("Distance:"); Serial.println(distance); if(distance<15) { digitalWrite(pump,HIGH); } else { digitalWrite(pump,LOW); } } |
توضیحات کد
1 2 3 |
int pump=2; int trig_Pin=3; int echo_Pin=4; |
در ابتدای کد تعیین می کنیم پین های Trig و Echo و پمپ آب به کدام پین های آردوینو متصل هستند.
1 2 |
long Time; int distance; |
یک متغیر برای ذخیره زمان (time)و یک متغیر برای ذخیره فاصله (distance) ایجاد می کنیم.
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); pinMode(trig_Pin,OUTPUT); pinMode(echo_Pin,INPUT); pinMode(pump,OUTPUT); } |
پین trig را به عنوان خروجی تنظیم کرده زیرا از این پین برای فعال کردن سنسور استفاده می کنیم. سپس پین echo را به عنوان ورودی تنظیم کرده زیرا از این پین برای دریافت داده های زمان از سنسور استفاده می کنیم.
1 2 3 4 5 6 |
void loop() { digitalWrite(trig_Pin,LOW); delayMicroseconds(2); digitalWrite(trig_Pin,HIGH); delayMicroseconds(10); digitalWrite(trig_Pin,LOW); |
برای فعال کردن سنسور ، باید منطق HIGH به مدت 10 میکرو ثانیه روی پین trig ارسال کنیم. ماژول 8 عدد پالس با فرکانس 40 کیلو هرتز ارسال میکند
وقتی که پالس ها ارسال شد پایه ECHO یک میشه و تا زمانی که پالس برگشت از جسم را دریافت نکند این پایه یک باقی می ماند.
1 2 |
Time=pulseIn(echo_Pin,HIGH); distance=Time*0.034/2; |
تابع ()pulsln مدت زمانی که پایه Echo در سطح منطقی 1 میماند را اندازه میگیرد. که در واقع برابر با مدت زمان رفت و برگشت صوت از ماژول به دست میباشد. پس از آن ، زمان رفت وبرگشت صوت را در سرعت صوت ضرب می کنیم تا فاصله ی آن را به دست بیاوریم چون ما زمان رفت +برگشت را داریم تقسیم به 2 می کنیم. 0.034 سرعت صوت برحسب سانتی متر به میکروثانیه است .
1 2 |
Serial.print("Distance:"); Serial.println(distance); |
با استفاده از دستور print ، فاصله را در مانیتور سریال چاپ می کنیم.
1 2 3 4 |
if(distance<15) { digitalWrite(pump,HIGH); } |
حال در این مرحله فاصله ی دست را تعیین می کنیم اگر فاصله ی دست کمتر از15cm بود پمپ ضدعفونی کننده روشن شود.
1 2 3 4 |
else { digitalWrite(pump,LOW); } |
اگر فاصله ی دست ما بیشتر از 15cm بود و یا اگر چیزی در جلوی سنسور وجود نداشت پمپ ضدعفونی کننده خاموش شود.
ارسال پاسخ