میتوان سنسور دمای DS18B20 رو تایمر و DMA میکروکنترلر STM32 راه اندازی کرد ، با برنامه ای که در اون تابع تاخیر یا delay وجود ندارد .

پیوند های این نوشته :
- آموزش نماوایی ( ویدئویی ) راه اندازی تند کتابخانه ی SR04 در یوتوب
- آموزش نماوایی ( ویدئویی ) به زبان انگلیسی : نوشتن کتابخانه راه اندازی SR04 با STM32 بدون تابع تاخیر و تنها با 3 کانال تایمر در یوتوب
- آموزش فارسی راه اندازی SR04 در دوره آموزش پیشرفته ی STM32F1
- بارگیری برنامه AM2303 / DHT22 با STM32f103 از گیت هاب
آشنایی با چگونگی کارکرد سنسور دوری سنج التراسونیک HC-SR04 ( حسگر دوری سنج فراسدا )
حسگر دمای دیجیتال DS18B20 در گلخانه های بکار میره و سه پایه داره.
- پایه ی 1 : vcc = 3.3 v
- پایه 2 : این پایه باید با یک مقاومت 1K بالاکش ( پول آپ ) بشه و نه حسگر و نه میکرو نباید بتونند این پایه رو به VCC ببندند.
- پایه 4 : زمین
بسامد نمونه برداری این حسگر هم 2s هست ، هر 2 ثانیه میتونیم دما و رطوبت رو بخونیم .

چگونگی کارکرد
پروتکل ارتباطی این سنسور 1-wire هست ، و داده روی یک سیم جابجا میشه ، این سیم هیچ وقت نباید به VCC بسته بشه و تنها دو حالت داره:
- بالاکش شده ( پول آپ شده ).
- بوسیله ی حسگر یا میکرو به زمین بسته شده.

- برای آغاز هر اندازه گیری ، میکرو باید به اندازه 1ms پایه ی دیتا رو زمین کنه و سپس پایه رو رها میکنه تا بالاکش بشه . سپس میکرو منتظر حسگر میمونه تا باس رو زمین کنه .
- حسگر به اندازه ی 80us باس رو زمین میکنه و سپس 80us هم باس رو رها میکنه ، این یعنی حسگر میخواد فرستادن داده رو آغاز کنه.
- حسگر 40 پالس میفرسته که بیانگر 40 بیت دما و رطوبت هستند . از روی زمان یک بودن هر پالس میفهمیم بیت فرستاده شده ، یک هست یا هیچا ( صفر ) .
- پس از فرستادن بیت آخر ، یک بار دیگر هم سنسور باس رو زمین میکنه و سپس باس رو رها میکنه .
بیت 1 یا 0 :
- اگر زمان یک بودن پالس 26-28us باشه ، بیت 0 توسط سنسور DHT22 فرستاده شده .
- اگر زمان یک بودن پالس 70us باشه ، بیت 1 توسط سنسور DHT22 فرستاده شده .

در 40 بیت دریافت شده از سنسور دما و رطوبت DHT22 / AM2302 :
- 16 بیت اول رطوبت
- 16 بیت دوم دما
- 8 بیت آخر چک سام checksum
برای محاسبه ی checksum باید چهار بایت اول را جمع کنید . 8 بیت کم ارزش حاصل جمع میشه chechsum .

بارگیری برنامه و راه اندازی حسگر دوری سنج SR04 با میکروکنترلر STM32
ویژگی های برنامه ای که نوشتم :
- فرستادن و دریافت پالس بدون دست اندرکاری CPU و به شکل سخت افزاری با کانال های تایمر انجام میشود .
- این برنامه بدون بکارگیری کتابخونه ی HAL هست ولی شما میتونید در هر برنامه ای چه با HAL چه بدون آن، این کتابخونه رو بکاربگیرید.
- این برنامه TIM3 و TIM4 و DMA1_CH1 و DMA1_CH4 و پایه های PB4 و PB6 رو بکارمیگیره ، در بخش های دیگه ی برنامه ی خودتون هیچ کاری درباره ی این بخش ها نکنید .
بارگیری برنامه راه اندازی سنسور فاصله سنج التراسونیک از github
گام به گام راه اندازی :
- فایل am.c را در پوشه ی src و فایل am.h را در پوشه ی header بگذارید.
- فایل am.h را بر فایل main.c افزون کنید (include کنید) .
- کارنوشت ( تابع ) am_init را در کارنوشت main فراخوانی کنید.
- دما و رطوبت بصورت خودکار در دو پویای جهانی ( متغیر گلوبال ) به نام های am_RH و am_TMP نوشته میشود .
اگر میخواهید یادبگیرید که از پایه چجوری باید این کتابخونه رو بنویسید ، دوره ی آموزش پیشرفته ی STM32F103 رو ببینید .
چگونگی کارکرد تایمر برای فرستادن و دریافت جهند ( پالس ) به سنسور دوری سنج HC-SR04
- در این پروژه ، SR04 را با STM32 با روشی راه اندازی میکنیم که AVR نمیتونه ، چون تایمر های AVR توانایی تایمر های STM32 رو ندارند .
- هنگامی که تنها یک قطعه رو با میکروکنترلر راه اندازی میکنید، وجود کارنوشت دیرکرد ( تابع تاخیر یا delay ) در برنامه مشکل ساز نیست . ولی وقتی پروژه شلوغ میشه ، هزار تا مشکل درست میکنه . قدرت STM32 هم به همینه که میتونی delay بکار نبری.
- اگر بلد باشی چجوری از امکانات پیرارونگ ها ( پریفرال ها ) استفاده کنی ، میشه در پروژه delay بکار نبرد .
در راه اندازی حسگر دوری سنج فراسدای HC-sr04 با میکروکنترلر STM32 ، به پایه های GPIO نیاز نداریم و نیازی نیست که خود CPU بخواهد پایه های تریگ را 0 و 1 کند یا زمان یک بودن پایه ی echo را اندازه بگیرد . بلکه همه ی این کارها را پیرارونگ ( پریفرال ) تایمر انجام میدهد .

کانال 3 تایمر یک در کارگون PWM ( حالت کاری ) رو برای ساخت پالس تریگ هر 100ms بکار میبرم . تا این کانال هر 100 میلی ثانیه یک جهند ( پالس ) 10us روی پایه ی تریگ بیندازد.

کانال 1 و 2 تایمر یک رو در کارگون IC input capture برای اندازه گیری زمان یک بودن جهند ( پالس ) روی پایه ی echo بکار میگیرم .

کانال 3 تایمر ، جهند ( پالس ) تریگر رو میفرسته و کانال های 1 و 2 هم هنگامی که لبه روی پایه ی اکو رخ میده ، اندازه ی شمارنده ( رجیستر CNT ) رو برمیدارند ، در اینتراپ ( بازداری ) کانال 2 تایمر ، با کم کردن اندازه ی CCR1 از CCR2 زمان یک بودن جهند اکو بدست میاد .
- در راه اندازی SR04 با AVR ، بخش CPU میکروکنترلر از آغاز تا پایان نمونه برداری درگیر کار هست.
- در راه اندازی SR04 با STM32 ، بخش CPU میکروکنترلر تنها در پایان نمونه برداری باید یک عملیات تفریق انجام بده .
اگر میخواهید یادبگیرید که از پایه چجوری باید این کتابخونه رو بنویسید ، دوره ی آموزش پیشرفته ی STM32F103 رو ببینید .
- التراسونیک = فراسدا .
- فاصله سنج = دوری سنج .
- جهند = پالس .
- پیرارونگ = رونگ پیرامونی = مدار جانبی = پریفرال
- کارگون = حالت کاری

