اتصال سنسور رطوبت خاک به آردوینو
محتویات
سنسور رطوبت خاک اولین چیزی است که هنگام ساخت سیستم آبیاری هوشمند یا سیستم آبیاری خودکار گیاه به ذهن خطور می کند. با نصب این سنسور و کمی استفاده از آردوینو، میتوانیم سیستمی طراحی کنیم که بتواند گیاهان شما را در صورت نیاز آبیاری کند و همچنین از آبیاری بیش از حد جلوگیری کند.
در این مقاله قصد داریم حسگر رطوبت خاک را به یک آردوینو وصل کنیم و غلظت حجمی آب داخل خاک را اندازه گیری کنیم. این سنسور به گونه ای طراحی شده است که می تواند داده ها را در دو حالت دیجیتال و آنالوگ خروجی دهد. ما این داده ها را می خوانیم و وضعیت خروجی را با LED نمایش می دهیم و از نمایشگر سریال یا LED با سیگنال PWM برای نمایش خروجی آنالوگ استفاده می کنیم.
پیشنهاد میکنم مقاله آبیاری خودکار گیاه با آردوینو را مشاهده کنید.
سنسور رطوبت خاک
سنسور رطوبت خاک دارای چهار پین VCC، GND، Aout، Dout است. از این چهار پین می توان برای دریافت داده های رطوبت خاک از سنسور استفاده کرد، پین اوت سنسور رطوبت خاک به شرح زیر است:
- VCC پایه منبع تغذیه سنسور رطوبت خاک است که می تواند به 3.3 ولت یا 5 ولت منبع تغذیه متصل شود. اما توجه داشته باشید که خروجی آنالوگ بسته به ولتاژ تغذیه ارائه شده متفاوت خواهد بود.
- GND پایه زمین برد است و باید به پایه GND آردوینو متصل شود
- DOUT پین خروجی دیجیتال برد است، خروجی LOW نشان دهنده رطوبت خاک مناسب است و HIGH نشان دهنده رطوبت خاک کم است.
- AOUT پین خروجی آنالوگ برد است که سیگنال آنالوگ را بین VCC و GND به ما می دهد.
سنسور رطوبت خاک چگونه کار می کند؟
همانطور که در تصویر زیر می بینید، عملکرد سنسور رطوبت خاک بسیار ساده است. فقط باید پروب رسانای را به خاک وارد کنیم، زیرا پروب دارای دو صفحه رسانا است که به عنوان یک مقاومت متغیر عمل می کنند و مقاومت آن بسته به میزان آب خاک متفاوت است.
مقاومت پروب با رطوبت خاک دستگاه نسبت معکوس دارد. هر چه آب در خاک بیشتر باشد رسانایی بهتری دارد که در نتیجه مقاومت کمتری را به همراه خواهد داشت. هر چه آب در خاک کمتر باشد رسانایی ضعیفی دارد که به معنای مقاومت بالاتر است. این سنسور با توجه به مقاومت ولتاژ خروجی تولید می کند که با اندازه گیری آن می توانیم سطح رطوبت را تعیین کنیم.
انیمیشن GIF فوق حسگر رطوبت خاک نشان می دهد که چگونه خروجی آنالوگ سنسور بر اساس سطح آب در خاک تغییر می کند. همانطور که می بینید، با اضافه شدن آب به خاک، ولتاژ از 5 ولت به 0 ولت کاهش می یابد. همچنین می توانید ببینید که چراغ سیگنال روی برد زمانی که آب به خاک اضافه می شود روشن می شود. ما نشان ندادیم که پین دیجیتال در GIF بالا چگونه کار می کند تا همه چیز ساده باشد. هنگامی که آب به خاک اضافه می شود، پین دیجیتال از LOW (0 ولت) به HIGH (5 ولت) با کمک یک آپ امپ تغییر میکند. می توانید با استفاده از پتانسیومتر (آبی) روی ماژول، حساسیت این پین دیجیتال را کنترل کنید.
مدار راه اندازی سنسور رطوبت خاک با آردوینو
مدار شماتیک اتصال ماژول سنسور رطوبت خاک به آردوینو در زیر نشان داده شده است. شماتیک بسیار ساده است و برای ساخت به تعداد انگشت شماری از قطعات عمومی نیاز دارد. این بخش از مقاله به دو بخش تقسیم می شود که یکی خروجی آنالوگ و دیگری خروجی دیجیتال را نشان می دهد. بیایید با مدارهای آنالوگ شروع کنیم.
سنسور رطوبت خاک با خروجی آنالوگ:
برای کار با سنسور ابتدا باید سنسور را تغذیه کنیم، برای این کار از پین 5 ولت و GND برد آردوینو UNO استفاده می کنیم.
همانطور که در مدار سنسور رطوبت خاک آردوینو نشان داده شده است، ما یک LED را به پین دیجیتالی 6 آردوینو وصل کرده ایم و پین خروجی آنالوگ سنسور به پایه A0 برد آردوینو UNO وصل شده است. ما آردوینو را طوری برنامه ریزی می کنیم که روشنایی LED بسته به داده های رطوبت خاک تغییر کند.
سنسور رطوبت خاک با خروجی دیجیتال:
برای بخش ارتباط دیجیتال، ما از +5V و Ground آردوینو برای تغذیه ماژول رطوبت خاک استفاده می کنیم.
اتصال سنسور رطوبت خاک به آردوینو یا هر میکروکنترلر دیگر بسیار ساده است. همانطور که همه می دانیم سنسور سیگنال های آنالوگ و دیجیتال را خروجی می دهد و پردازش این سیگنال بسیار آسان است.
کد پروژه سنسور رطوبت خاک و آردوینو
کد سنسور رطوبت خاک مبتنی بر آردوینو بسیار ساده و قابل درک است. ما فقط داده های آنالوگ را از سنسور می خوانیم و روشنایی LED را با توجه به داده های دریافتی تغییر می دهیم. لطفاً به یاد داشته باشید که ما فقط داده های آنالوگ خارج شده از سنسور را پردازش می کنیم و برای داده های دیجیتالی می توانید چراغ LED موجود در ماژول را ببینید.
کد خود را با اعلام دو ماکرو مقداردهی اولیه می کنیم، اولی برای led است که در آن پین یک LED وصل می کنیم و دومی sensorPin است که از طریق آن داده های خارج شده از سنسور را می خوانیم.
#define ledPin 6 #define sensorPin A0
در مرحله بعد، تابع setup() خود را داریم. در تابع setup، سریال را با 9600 baud مقداردهی اولیه می کنیم. ما همچنین ledPin را به عنوان خروجی تنظیم می کنیم و پایه را در حالت پیشفرض LOW می کنیم.
void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); }
در مرحله بعد، تابع loop() خود را داریم، در ابتدا متن Analog output: را چاپ میکنیم. سپس تابع readSensor() را در داخل تابع Serial.println() فراخوانی می کنیم تا زمانی که تابع readSensor() اجرا شد، داده ها در سریال مانیتور چاپ شود.
void loop() { Serial.print("Analog output: "); Serial.println(readSensor()); delay(500); }
در نهایت، تابع readSensor() خود را داریم که مقدار آنالوگ خوانده شده از طریق پین A0 آردوینو را برمی گرداند. در خط اول این تابع، متغیری به نام sensorValue را تعریف کردهایم که در آن دادههای خام را قرار میدهیم که از طریق A0 در آردوینو خوانده میشود. این داده در فرمت 10 بیتی است و از 0 تا 1023 میرود. ما میخواهیم با استفاده از تابع map این مقدار را به محدوده 0 تا 255 تبدیل کنیم. پس متغیر دیگری outputValue را راهاندازی کردهایم و دادههای نگاشت شده را درون آن متغیر قرار میدهیم. در نهایت، ما از تابع داخلی analogWrite(ledPin، outputValue) آردوینو برای تولید یک سیگنال PWM که متناسب با داده های ورودی خوانده شده توسط ADC آردوینو است، استفاده کرده ایم.
int readSensor() { int sensorValue = analogRead(sensorPin); // خواندن خروجی سنسور int outputValue = map(sensorValue, 0, 1023, 255, 0); // تبدیل از 10 بیتی به 8 بیتی analogWrite(ledPin, outputValue); // ایجاد سیگنال PWM return outputValue; // برگرداندن مقدار }
گیف زیر سنسور رطوبت خاک را در حال کار نشان می دهد. در ابتدا میبینید که شدت نور LED کم است اما وقتی کمی آب به گلدان اضافه میشود، شدت نور LED افزایش مییابد و همزمان با آن، LED آنبرد ماژول نیز روشن میشود.
موارد موجود در فایل : سورس
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام مجدد
هیچ سیمی به پایه های 0 و 1 آردوینو متصل نیست و سریال مانیتور را هم بررسی کردم و مشکلی نداشت. ممکنه مشکل از نرم افزار باشه؟ یا اینکه برد آردوینو مشکل داره؟
مشکل از نرم افزار نیست بیشتر مربوط به اتصال کامپیوتر با برد هست. اگر دسترسی دارید با یک کامپیوتر دیگر تست کنید.
سلام
علت بروز خطای زیر چیست؟
Arduino: 1.8.19 (Windows 7), Board: “Arduino Uno”
Sketch uses 2528 bytes (7%) of program storage space. Maximum is 32256 bytes.
Global variables use 204 bytes (9%) of dynamic memory, leaving 1844 bytes for local variables. Maximum is 2048 bytes.
An error occurred while uploading the sketch
avrdude: ser_open(): can’t set com-state for “\\.\COM3”
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
سلام عزیز
بررسی کنید که هیچ سیمی به پایه های 0 و 1 آردوینو متصل نباشد همچنین هیچ نرم افزاری هم از ارتباط سریال استفاده نکند. بهتر هست یکبار سریال مانیتور را باز کنید و ببندید