سلام
تو این پست قصد دارم تا فقط در مورد نحوه راه اندازی سنسورهای رطوبت و دمای DHT11 و DHT22 صحبت کنم و از کتابخونه یا برنامه آماده خبری نیست
همین اول خدمتتون عرض کنم که خروجی دیتای DHT11 و DHT22 با هم فرق دارند،بنابراین نمیشه اونها رو به جای هم به کار برد.(البته سخت افزاری مشابه هستند)
در این آموزش فرض بر اینه که خواننده با ماژول آشنایی نسبی داره.
خب اول نحوه ارتباط با DHT11 رو توضیح میدم و سپس تفاوتش با DHT22:
نحوه ارتباط ماژول با میکرو رو در بالا میبینید که پایه دیتا به هر یک از پین های I/O میکرو میتونه متصل بشه.ولتاژ کاریش هم میتونه 3.3 و 5 ولت استاندارد باشه،بنابراین به هر میکروکنترلری به راحتی میتونه متصل بشه.
همونطور که میبینید پایه دیتا pull up شده،یعنی خط در حالت عادی در وضعیت 1 منطقی قرار داره.
ماژول در حالت عادی هیچ دیتایی نمیفرسته،درواقع برای اینکه مقدار دما و رطوبت رو بدونیم باید از ماژول درخواست کنیم.
و اما درخواست به چه صورته؟
ابتدا باید پین دیتای میکرو رو خروجی تعریف کنیم و سپس خط رو به مدت حداقل 1ms صفر کنیم(برای اطمینان به مدت 20 میلی ثانیه صفر کنیم) و سپس دوباره خط رو یک کنیم . الآن ماژول باید پاسخ بده.برای اینکه بتونیم پاسخ رو دریافت کنیم باید دوباره پین دیتای میکرو رو ورودی تعریف کنیم.
خب حالا پاسخ ماژول به چه صورتیه؟
ابتدا 80 میکروثانیه خط رو صفر و سپس 80 میکروثانیه خط رو یک میکنه.این یعنی ارتباط درست برقرار شده و از این به بعد باید آماده دریافت دیتا باشیم.
باید دقت کنیم که ماژول برای ارسال هر بیت دیتا ابتدا خط رو به مدت 50 میکروثانیه صفر میکنه و سپس دیتا(بیت) رو میفرسته.
باید به این نکته توجه کرد که در این ارتباط صفر ها به هیچ وجه دیتا نیستند و فقط نشون دهنده این هستند که قراره بیتی از دیتا بعد اونها فرستاده بشه.
حالا صفر و یک دیتا چطوری مشخص میشه؟
اولاً دیتا فقط با یک کردن خط مشخص میشه.اگر طول یک بودن حدود 24 تا 26 میکروثانیه باشه(زیر 30 میکروثانیه) یعنی صفر منطقی و اگر حدود 70 میکرو ثانیه باشه یعنی یک منطقی.(اگر گیج شدید در پایین شکل دوباره مطالب رو مرور کردم)
ابتدا میکرو خط رو به مدت 20 میلی ثانیه صفر و سپس 20 تا 40 میکروثانیه یک میکنه.
بعد مدتی ماژول خط رو 80 میکروثانیه صفر و 80 میکروثانیه دوباره یک میکنه.
سپس برای ارسال هر بیت 50 میکروثانیه خط رو صفر میکنه.
اگر بعد 50 میکروثانیه خط کمتر از 30 میکروثانیه یک باشه یعنی صفر منطقی و بیشتر از این مدت یک باشه(حدود 70 میکروثانیه)یعنی یک منطقی.
حالا که با نحوه ارسال و دریافت دیتا آشنا شدیم،باید دیتای دریافتی رو بررسی کنیم.
ماژول 40 بیت دیتا میفرسته(5 بایت) که به ترتیب به صورت زیره:
قسمت صحیح رطوبت -> قسمت اعشاری رطوبت -> قسمت صحیح دما -> قسمت اعشاری دما -> checksum
اگر مجموع چهار بیت اول(هشت بیت کم ارزش تر در صورت 9 بیتی یا بیشتر شدن جواب جمع بایت ها) با checksum برابر بود یعنی دیتا به درستی دریافت شده،در غیر اینصورت دیتا باطله.
در dht11 تمام دیتا ها به صورت مستقیم ارسال میشه،یعنی اگر بایت اول 20 و بایت دوم 10 بود یعنی رطوبت برابر 20.1 درصده اما در DHT22 اینطور نیست و از رابطه ی زیر برای رطوبت و فرمول مشابه برای دما باید استفاده کنیم:
تو این پست قصد دارم تا فقط در مورد نحوه راه اندازی سنسورهای رطوبت و دمای DHT11 و DHT22 صحبت کنم و از کتابخونه یا برنامه آماده خبری نیست
همین اول خدمتتون عرض کنم که خروجی دیتای DHT11 و DHT22 با هم فرق دارند،بنابراین نمیشه اونها رو به جای هم به کار برد.(البته سخت افزاری مشابه هستند)
در این آموزش فرض بر اینه که خواننده با ماژول آشنایی نسبی داره.
خب اول نحوه ارتباط با DHT11 رو توضیح میدم و سپس تفاوتش با DHT22:
نحوه ارتباط ماژول با میکرو رو در بالا میبینید که پایه دیتا به هر یک از پین های I/O میکرو میتونه متصل بشه.ولتاژ کاریش هم میتونه 3.3 و 5 ولت استاندارد باشه،بنابراین به هر میکروکنترلری به راحتی میتونه متصل بشه.
همونطور که میبینید پایه دیتا pull up شده،یعنی خط در حالت عادی در وضعیت 1 منطقی قرار داره.
ماژول در حالت عادی هیچ دیتایی نمیفرسته،درواقع برای اینکه مقدار دما و رطوبت رو بدونیم باید از ماژول درخواست کنیم.
و اما درخواست به چه صورته؟
ابتدا باید پین دیتای میکرو رو خروجی تعریف کنیم و سپس خط رو به مدت حداقل 1ms صفر کنیم(برای اطمینان به مدت 20 میلی ثانیه صفر کنیم) و سپس دوباره خط رو یک کنیم . الآن ماژول باید پاسخ بده.برای اینکه بتونیم پاسخ رو دریافت کنیم باید دوباره پین دیتای میکرو رو ورودی تعریف کنیم.
خب حالا پاسخ ماژول به چه صورتیه؟
ابتدا 80 میکروثانیه خط رو صفر و سپس 80 میکروثانیه خط رو یک میکنه.این یعنی ارتباط درست برقرار شده و از این به بعد باید آماده دریافت دیتا باشیم.
باید دقت کنیم که ماژول برای ارسال هر بیت دیتا ابتدا خط رو به مدت 50 میکروثانیه صفر میکنه و سپس دیتا(بیت) رو میفرسته.
باید به این نکته توجه کرد که در این ارتباط صفر ها به هیچ وجه دیتا نیستند و فقط نشون دهنده این هستند که قراره بیتی از دیتا بعد اونها فرستاده بشه.
حالا صفر و یک دیتا چطوری مشخص میشه؟
اولاً دیتا فقط با یک کردن خط مشخص میشه.اگر طول یک بودن حدود 24 تا 26 میکروثانیه باشه(زیر 30 میکروثانیه) یعنی صفر منطقی و اگر حدود 70 میکرو ثانیه باشه یعنی یک منطقی.(اگر گیج شدید در پایین شکل دوباره مطالب رو مرور کردم)
ابتدا میکرو خط رو به مدت 20 میلی ثانیه صفر و سپس 20 تا 40 میکروثانیه یک میکنه.
بعد مدتی ماژول خط رو 80 میکروثانیه صفر و 80 میکروثانیه دوباره یک میکنه.
سپس برای ارسال هر بیت 50 میکروثانیه خط رو صفر میکنه.
اگر بعد 50 میکروثانیه خط کمتر از 30 میکروثانیه یک باشه یعنی صفر منطقی و بیشتر از این مدت یک باشه(حدود 70 میکروثانیه)یعنی یک منطقی.
حالا که با نحوه ارسال و دریافت دیتا آشنا شدیم،باید دیتای دریافتی رو بررسی کنیم.
ماژول 40 بیت دیتا میفرسته(5 بایت) که به ترتیب به صورت زیره:
قسمت صحیح رطوبت -> قسمت اعشاری رطوبت -> قسمت صحیح دما -> قسمت اعشاری دما -> checksum
اگر مجموع چهار بیت اول(هشت بیت کم ارزش تر در صورت 9 بیتی یا بیشتر شدن جواب جمع بایت ها) با checksum برابر بود یعنی دیتا به درستی دریافت شده،در غیر اینصورت دیتا باطله.
در dht11 تمام دیتا ها به صورت مستقیم ارسال میشه،یعنی اگر بایت اول 20 و بایت دوم 10 بود یعنی رطوبت برابر 20.1 درصده اما در DHT22 اینطور نیست و از رابطه ی زیر برای رطوبت و فرمول مشابه برای دما باید استفاده کنیم:
رطوبت=((مقدار صحیح رطوبت * 256) + مقدار اعشاری رطوبت) / 10
humidity=(( I_hmt * 256 ) + D_hmt ) / 10
امیدوارم مطلب مفید بوده باشه.humidity=(( I_hmt * 256 ) + D_hmt ) / 10
الّلهُمَّ صَلِّ عَلی مُحَمَّد وَآلِ مُحَمَّد وَعَجِّل فَرَجَهُم
دیدگاه