در این پست از سایت اِمیک, ماژول سنسور رطوبت سنج خاک و زمین YL-69 را با استفاده از میکروکنترلر AVR راه اندازی خواهیم کرد. از این ماژول می توان برای ساخت گلخانه های هوشمند، سیستم های آبیاری اتوماتیک زمین های کشاورزی و باغات، آبیاری هوشمند گلدان های آپارتمانی و… استفاده کرد.
اشنایی با ماژول رطوبت سنج خاک و زمین YL-69 :
از این ماژول برای اندازه گیری رطوبت خاک استفاده می شود. با استفاده از ماژول رطوبت سنج خاک و زمین YL-69 به راحتی می توانید یک سیستم ابیاری اتوماتیک برای گلخانه ها, زمین های کشاورزی, گلدان های اپارتمانی و یا… بسازید. کافی است که قسمت سنسور این ماژول را درون خاک فرو کنید تا میزان رطوبت ان خاک توسط ماژول اندازه گیری شود. در زیر تصویری از این ماژول را مشاهده می کنید که دارای 4 پایه خروجی می باشد:
پایه 1: اتصال به VCC (مثبت تغذیه)
پایه 2: اتصال به GND (منفی تغذیه)
پایه 3: خروجی دیجیتال ماژول (D0)
پایه 4: خروجی انالوگ ماژول (A0)
میزان حساسیت ماژول را می توان با استفاده از پتانسیومتر روی ماژول تنظیم کرد. این ماژول دارای دو خروجی دیجیتال و انالوگ می باشد که بسته به نیاز می توان از خروجی دیجیتال یا انالوگ یا هر دو استفاده کرد. زمانی که ماژول نتواند میزان معینی از رطوبت در خاک را تشخیص دهد، خروجی دیجیتال DO مقدار یک منطقی و در غیر این صورت مقدار صفر را نشان می دهد.
برای اندازه گیری رطوبت خاک توسط خروجی انالوگ ماژول باید با استفاده از ADC میکروکنترلر, مقدار ولتاژ پایه انالوگ A0 را اندازه گیری کنیم که این ولتاژ متناسب با مقدار رطوبت خاک می باشد.
پروژه راه اندازی ماژول رطوبت سنج خاک و زمین YL-69 با میکروکنترلر AVR :
در این پروژه ما از میکروکنترلر ATmega16 به همراه ماژول رطوبت سنج خاک و زمین YL-69 و یک LCD کاراکتری 2*16 برای نمایش مقدار رطوبت خاک (به درصد) استفاده کرده ایم.
در این پروژه از هر دو خروجی انالوگ و دیجیتال این ماژول استفاده شده است. عملکرد این پروژه به این صورت می باشد که با فرو کردن سنسور ماژول در خاک, میزان رطوبت ان خاک به درصد روی یک ال سی دی کاراکتری نمایش داده می شود و همچنین در صورتی که رطوبت خاک از مقدار تعیین شده توسط ما (این مقدار توسط پتانسیومتر روی ماژول تنظیم می شود) کمتر شد یک بازر هشدار دهنده متصل به خروجی دیجیتال D0 ماژول فعال می شود.
در انتهای مطلب می توانید کلیپ تست پروژه را مشاهده کنید. در ادامه شماتیک این پروژه را مشاهده می کنید:
برای دیدن تصویر بالا در اندازه بزرگتر ان را ذخیره کنید. همانطور که مشاهده می کنید علاوه بر قطعات گفته شده در بالا از یک پتانسیومتر (RV1) برای تنظیم کنتراست (روشنایی) ال سی دی کاراکتری استفاده شده است. ترانزیستور (Q1) و مقاومت (R1) به منظور درایور کردن یا راه اندازی بازر(BUZZER) استفاده شده اند. بازر استفاده شده از نوع 5 ولت می باشد.
پایه خروجی انالوگ ماژول (پایه A0) به پین 40 میکروکنترلر (پین 0 از پورت A) متصل شده است و خروجی دیجیتال ماژول (پایه D0) نیز از طریق مقاومت R1 و ترانزیستور Q1 به بازر متصل شده است.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را فراموش نکنید به تغذیه 5 ولت متصل کنید و همچنین پایه های 30 و 32 میکرو را هم بدلیل استفاده از ADC ان باید به مثبت تغذیه متصل کنیم.
برنامه کدویژن :
در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> #include <delay.h> #include <alcd.h> #include <stdio.h> // sprintf براي استفاده از تابع stdio فراخواني کتابخانه // /* ايجاد مي شوند adc که توسط خود کدويژن با فعالسازي adc از خط 7 تا 16 دستورات مربوط به */ #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR)) unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | ADC_VREF_TYPE; delay_us(10); ADCSRA|=(1<<ADSC); while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); return ADCW; } void main(void) { float i ; //از خط 20 تا 22 سه متغير تعريف شده است که در برنامه از انها استفاده مي شود// int YL69 ; unsigned char lcd[16]; DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); ADMUX=ADC_VREF_TYPE; /* که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند adc از خط 30 تا 32 رجيسترهاي مربوط به */ ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0); SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); lcd_init(16); while (1) { i=read_adc(0); // i خواندن عددي بين 0 تا 1023 که نشان دهنده مقدار ولتاژ انالوگ روي ان پين ميکرو است و ريختن ان در متغير // YL69=100-(i*100)/1023 ; // دستور روبرو عدد خوانده شده بين 0 تا 1023 را در بازه ي 0 تا 100 تبديل مي کند // sprintf(lcd,"SM amount=%d",YL69); // براي نمايش روي ال سي دي کاراکتري lcd به رشته اي از کاراکتر و ذخيره ان در متغير YL69 تبديل مقادير موجود در متغير // lcd_gotoxy(0,0); // رفتن به ستون 0 و سطر 0 از ال سي دي کاراکتري // lcd_puts(lcd); //ذخيره کرده بوديم lcd نمايش مقدار رطوبت خاک (به درصد) که به صورت کاراکتر در متغير// lcd_putsf("%"); // % نوشتن کاراکتر // lcd_gotoxy(2,1); lcd_putsf("WWW.EMIC.IR"); delay_ms(500); lcd_clear(); } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
- در صورتی که با ADC در میکروکنترلر AVR و نحوه راه اندازی ان اشنا نیستید این پست را مطالعه کنید
- برای اشنایی با LCD کاراکتری و نحوه راه اندازی ان این پست را مطالعه کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
سلام
خط زیر را تضیح دهید؟ چرا باید عدد 100 کم کنیم؟ خیلی جاها برای رنج 0 تا 100 قرار گرفتن، عدد 100 کم نمی کنند؟
YL69=100-(i*100)/1023 ;
سلام, چون خروجی ماژول در حالت عادی (بدون رطوبت) یک منطقی است و پس از سنجش رطوبت خروجی ان به سمت صفر کاهش می یابد به همین خاطر به این صورت نوشته شده است.
سلام من چجوری ماژول رطوبت سنج رو yl 69 رو به کتابخانه پروتیوس اضافه کنم بلد نیستم میشه توضیح بدید بهم ممنون میشم ؟؟؟؟
سلام دوستان خوبید
میشه با اتمگا ۸ راه اندازی کرد؟
چطوری میشه چنتای دیگه سنسور اضافه کنیم برنامش چطوری میشه ؟؟
سلام مهندس خسته نباشین ببخشین میشه کتابخونه سنسور yl69در سایتتون قرار بدین ممنون میشم🌹🌹
سلام وقت بخیر و ممنون از آموزشتون
من این مدار رو تو پروتئوس بستم و جواب درست گرفتم ولی در واقعیت چیزی روی LCD نمایش داده نمیشه و فقط پیکسلای LCD روشن میشه . مشکل از چی میتونه باشه ممنون میشم راهنمایی کنید.
میتونه اون پتانسیومتره باشه .
این پتانسیومتر نقش مهمی توی کنتراست داره .
تست کنید شاید پتانسیومتره یا قطعه و یا خرابه
سلام وقت بخیر
من برنامه رو پروگرم کردم روی میکرو ولی ال سی دی فقط روشن میشه و چیزی نشون نمیده
برای تست پایه ADC رو با پورتی که LCD بهش متصل میشه رو عوض کردم و توی پروتئوس تست کردم و درست جواب گرفتم ولی باز هم بعد از پروگرم کردن و راه اندازی مدار، فقط بک گراند LCD روشن شد و پیکسل های ردیف دوم
ممنون میشم راهنمایی کنید
سلام, اتصالات خود را بررسی کنید و همچنین مطمئن شوید که میکرو به درستی پروگرام شده باشد. بهتر است برای پروگرام کردن میکرو از نرم افزار AVR Studio استفاده کنید. می توانید پست اموزش پروگرام کردن با این نرم افزار را در این پست مطالعه کنید. همچنین حتما از پتانسیومتر یا مقاومت روی پایه VEE ال سی دی برای تنظیم کنتراست ان استفاده کنید.
باسلام و خسته نباشید
برای تغییر کردن رطوبت خاک باید در برنامه شبیه سازی چکار کنیم؟
سلام, در عمل پروژه را تست کنید. برای تست در شبیه ساز باید یک ولتاژ انالوگ 0 تا 5 ولت توسط یک پتانسیومتر ایجاد کنید و به پایه 40 میکرو بدهید.
سلام مهندس ، وقتتون بخیر
توی فایل شبیه بعد از ران شدن عدد ۱۰۰ درصد رو توی الرسی دی نمایش میده ، اگر بخواهیم عددی کمتر مثلا ۲۰ درصد نمایش داده بشه باید چیکار کنیم؟
سلام خدا قوت چرا تو پروتئوس ران نمیشه؟
سلام مهندس خسته نباشید این مشخص کردن فعال شدن رله بوسیله پتانسیومتر به چه صورت است؟
سلام مهندس خسته نباشید و تشکر از مطالب عالی و اموزشتون.
مهندس من تخصص من این کار نیست فقط خواستم برای گلدون های حساسی که دارم یه رطوبت سنج راه بندازم و با خوندن مطالب سایتتون تحریک شدم دست به کار بشم فقطمهندس ممنون میشم اگه یه کمک بدین من از شیلد LCD مدل دکمه ای خرید کردم الان مجموعه رو سوار کردم فقط تو قسمت برنامه موندم .البته تو قسمت serial monitor با نگه داشتن یه کلید مقدار درصد رطوبت درست نمایش داده ممیشه تو محیط برنامه ولی روی ال سی دی هیچ کارکتری نمایش داده نمیشه
متشکر
سلام, اگر تجربه کار کردن با میکروکنترلر را ندارید توصیه می کنم از مدارات بدون میکرو مانند این مدار و این مدار استفاده کنید.
خیلی ممنون از سایت و پروژه های خوبتون
مهندس اگه بخواییم یه رله جهت واتر پمپ قرار بدیم کدوم قسمت از کد نویسی تغییر بدیم؟
متشکرم
رله را بجای بازر یا موازی با بازر قرار بده و به وسیله پتانسیومتر روی ماژول مشخص کن که چه زمانی رله فعال بشه