Төмс хадгалах Arduino термостат. Arduino дээрх өөр нэг термостат, гэхдээ OpenTherm-тэй


Хөргөгч хянагчийн гол ажил бол тасалгаанд заасан температурыг хадгалах явдал юм. Үүнийг температур хянагч Пелтье модулийн цахилгаан эрчим хүчийг өөрчлөх замаар хийнэ.

Өмнөх зааварт бид эрчим хүчний зохицуулагчийг боловсруулсан. Эрчим хүч ба температур зохицуулагчийн хоорондох холболт иймэрхүү харагдаж байна.

  • Температур хянагч нь хэмжсэн температурыг хүлээн авч, тогтоосон температуртай харьцуулж, цахилгаан хянагчийн тогтоосон чадлын утгыг тооцоолно.
  • Эрчим хүчний зохицуулагч нь өгөгдсөн хүчин чадалд тохирсон PWM үүсгэдэг.

Эрчим хүчний зохицуулагчийг зохицуулалтын нэгдсэн хуулийн дагуу барьсан. Температурыг тогтворжуулахын тулд бид илүү төвөгтэй хяналтын алгоритмыг ашиглах болно - пропорциональ-интеграл-дифференциал (PID) хянагч.

PID хянагч.

Өмнөх зааварт би энэ тухай ярьсан. Үүний давуу болон сул талуудыг онцлон тэмдэглэв.

Энэ зарчмаар ажилладаг зохицуулагч нь өндөр нарийвчлалтай байдаг. Бусад зохицуулалтын чанарын шалгуур үзүүлэлтүүд - гүйцэтгэл ба тогтвортой байдал нь стандартад нийцэхгүй байна.

Бүх шалгуурын өндөр гүйцэтгэлд хүрэхийн тулд янз бүрийн зохицуулалтын хуулиудыг нэгтгэсэн зохицуулагчийг ашиглах шаардлагатай.

Ийм төхөөрөмж нь пропорциональ интеграл дериватив (PID) хянагч юм. Энэ нь өөр өөр дамжуулах шинж чанартай гурван бүрэлдэхүүн хэсгийн нийлбэр болох гаралтын дохиог үүсгэдэг. Үүний ачаар PID хянагч нь өндөр чанарын хяналтыг хангаж, бие даасан шалгуурын дагуу хяналтыг оновчтой болгох боломжийг олгодог.

PID хянагч гаралтын дохиог бүрдүүлэхэд дараахь зүйлс оролцдог.

  • Пропорциональ бүрэлдэхүүн хэсэг- утга нь таарахгүй алдаатай пропорциональ байна (хяналттай параметрийн багц ба бодит утгын хоорондох зөрүү).
  • Нэгтгэх бүрэлдэхүүн хэсэгТохиромжгүй алдааны салшгүй хэсэг юм.
  • Ялгах бүрэлдэхүүн хэсэгЭнэ нь таарахгүй алдааны дериватив юм.

PID хянагч хуулийг бичих математик хэлбэр нь дараах байдалтай байна.

o (t) = P + I + D = K p e (t) + K i ∫e (t) dt + K d de (t) / dt

  • o (t) - гаралтын дохио;
  • P - пропорциональ бүрэлдэхүүн хэсэг;
  • I - нэгтгэх бүрэлдэхүүн хэсэг;
  • D - ялгах бүрэлдэхүүн хэсэг;
  • Kp, Ki, Kd - пропорциональ, нэгтгэх, ялгах холбоосын коэффициентууд;
  • e (t) - таарахгүй алдаа.

Схемийн хэлбэрээр PID хянагчийг дараах байдлаар дүрсэлж болно.

PID хүчдэлийн зохицуулагч U-ийн блок диаграмм нь иймэрхүү харагдаж байна.

  • Хэмжсэн хүчдэлийг Ureal (t) нь заасан Uset-аас хасна.
  • Үр дүнд нь үл нийцэх алдаа e (t) нь пропорциональ, нэгтгэх, ялгах холбоосуудаар тэжээгддэг.
  • Бүрэлдэхүүн хэсгүүдийн нийлбэрийн үр дүнд зохицуулалтын элементэд тэжээгддэг o (t) хяналтын үйлдлийг олж авдаг.

PID хянагчийн програм хангамжийг хэрэгжүүлснээр гаралтын дохиог тогтмол давтамжтайгаар тооцдог. Тэдгээр. зохицуулагч нь цаг хугацааны хувьд салангид байдаг. Тиймээс цаашид би илэрхийлэлүүдийг ашиглах болно: өмнөх дохионы төлөв, өмнөх утга гэх мэт. Бид өмнөх үеийн түүвэрлэлтийн системийн төлөв байдлын талаар ярьж байна.

PID хянагчийн бүрэлдэхүүн хэсгүүд.

Дахин. PID хянагчийн гаралтын дохио нь гурван бүрэлдэхүүн хэсгийн нийлбэр юм.

  • пропорциональ;
  • нэгтгэх;
  • ялгах.

Пропорциональ бүрэлдэхүүн хэсэг.

P (t) = K p * e (t)

Санах ойгүй, өөрөөр хэлбэл. гаралтын дохионы утга нь системийн өмнөх төлөвөөс хамаарахгүй. Зүгээр л таарахгүй алдааг хүчин зүйлээр үржүүлсэн үр дүн гаралт руу илгээгдэнэ. Гаралтын дохио нь хяналттай параметрийн хазайлтыг нөхдөг. Тохиромжгүй алдаа их байх тусам дохио их байх болно. Алдаа 0-тэй тэнцүү бол гаралтын дохио нь мөн 0-тэй тэнцүү байна.

Пропорциональ бүрэлдэхүүн хэсэг нь алдааг бүрэн нөхөх боломжгүй юм. Үүнийг томъёоноос харж болно. Гаралтын дохио нь алдааг Kp үржүүлсэн байна. Дараах алдаа нь 0-тэй тэнцүү бол зохицуулагчийн гаралтын дохио 0-тэй тэнцүү байна. Дараа нь нөхөх зүйл байхгүй.

Тиймээс пропорциональ хянагчдад статик гэж нэрлэгддэг алдаа үргэлж байдаг. Kp коэффициентийг нэмэгдүүлэх замаар үүнийг бууруулж болох боловч энэ нь системийн тогтвортой байдал буурах, тэр ч байтугай өөрөө хэлбэлзэлд хүргэдэг.

Пропорциональ хянагчийн сул талууд нь:

  • статик зохицуулалтын алдаа байгаа эсэх;
  • коэффициентийн өсөлттэй бага тогтвортой байдал.

Маш чухал давуу тал бий:

  • Өндөр хурдны зохицуулалт. Дараах алдааны пропорциональ хянагчийн хариу үйлдэл нь зөвхөн системийн дээж авах хугацаанд хязгаарлагддаг.

Зөвхөн пропорциональ хуулийн дагуу ажилладаг зохицуулагчдыг бараг ашигладаггүй.

PID хянагч дахь пропорциональ бүрэлдэхүүн хэсгийн гол үүрэг бол гүйцэтгэлийг сайжруулах явдал юм.

Нэгтгэх бүрэлдэхүүн хэсэг.

I (t) = K i ∫e (t) dt

Үл тохирох алдааны интегралтай пропорциональ. Зохицуулагчийн цаг хугацааны салангид байдлыг харгалзан дараах байдлаар бичиж болно.

I (t) = I (t -1) + K i * e (t)

  • I (t-1) нь өмнөх дээж авах цэг дээрх I утга юм.

Дараах алдааг хүчин зүйлээр үржүүлж, интеграторын өмнөх утгад нэмнэ. Тэдгээр. гаралтын дохио нь байнга хуримтлагддаг бөгөөд цаг хугацааны явцад объектод үзүүлэх нөлөөллийг нэмэгдүүлдэг. Тиймээс алдаа ба Ki коэффициентийн жижиг утгуудад ч үл нийцэх алдааг бүрэн нөхдөг. Тогтвортой төлөвт хянагчийн гаралтын дохиог нэгтгэх бүрэлдэхүүн хэсэг бүрэн хангадаг.

Интеграл зохицуулагчийн сул талууд нь дараахь зүйлийг агуулдаг.

  • бага гүйцэтгэл;
  • дунд зэргийн тогтвортой байдал.

Нэр төр:

  • Тохиромжгүй алдааг ямар ч олзоор бүрэн нөхөх чадвар.

Практикт интегралч хянагч (зөвхөн нэгтгэх нэр томъёо) ба пропорциональ-интеграцчлал (интеграл ба пропорциональ бүрэлдэхүүн хэсгүүд) ихэвчлэн ашиглагддаг.

PID хянагч дахь интеграторын гол үүрэг бол статик алдааг нөхөх, хяналтын өндөр нарийвчлалыг хангах явдал юм.

Ялгах бүрэлдэхүүн хэсэг.

D (t) = K d de (t) / dt

Дараах алдааны өөрчлөлтийн хурдтай пропорциональ. Үл тохирох алдааны хурдатгалын нэг төрлийн үзүүлэлт. Дериватив бүрэлдэхүүн хэсэг нь ирээдүйд хяналттай параметрийн хазайлтыг урьдчилан таамаглаж, энэ хазайлтыг эсэргүүцдэг. Дүрмээр бол энэ нь зохицуулагчийн объектод үзүүлэх нөлөөллийн саатлыг нөхөж, системийн тогтвортой байдлыг нэмэгдүүлдэг.

Хянагчийн цаг хугацааны салангид байдлыг харгалзан ялгах бүрэлдэхүүн хэсгийг дараах байдлаар тооцоолж болно.

D (t) = K d * (e (t) - e (t -1))

Энэ нь хянагчийн салангид байдлын нэг удаагийн нэгжийн хувьд таарахгүй алдааны утга хэр их өөрчлөгдсөнийг харуулдаг.

Нэг ялгах холбоосоос бүрдсэн зохицуулагчид байдаггүй.

PID хянагч дахь ялгах холбоосын гол ажил бол тогтвортой байдлыг нэмэгдүүлэх явдал юм.

PID хянагч тааруулах.

PID зохицуулагчийн зохицуулалтын чанар нь коэффициентийг хэрхэн оновчтой сонгохоос ихээхэн хамаардаг. PID хянагчийн коэффициентийг бодит объекттой системд сонголтоор практикт тодорхойлдог. Янз бүрийн тааруулах техникүүд байдаг. Би зөвхөн ерөнхий зарчмуудын талаар ярих болно.

Зохицуулалтын чанарыг зохицуулагчийн түр зуурын хариу үйлдэлээр үнэлдэг. Тэдгээр. цаг хугацааны явцад хяналттай параметрийн өөрчлөлтийн хуваарийн дагуу.

PID хянагчийг тааруулах дарааллын уламжлалт цэгүүдэд би юуны түрүүнд зохицуулалтын чанарын аль шалгуурыг илүүд үзэхийг шийдэх шаардлагатайг нэмж хэлье.

Өмнөх хичээл дээр цахилгаан зохицуулагчийг зохион бүтээхдээ бид хамгийн түрүүнд нарийвчлал, тогтвортой байдлыг сонирхож байсан. Мөн бид гүйцэтгэлийг зохиомлоор бууруулсан. Зарим зохицуулагчид ихээхэн хөндлөнгийн оролцоотой нөхцөлд ажилладаг бөгөөд тогтвортой байдал нь тэдэнд илүү чухал байдаг бол зарим нь нарийвчлалын зардлаар өндөр гүйцэтгэл шаарддаг. Оновчлолын шалгуур нь өөр байж болно. Ерөнхийдөө PID хянагч нь хяналтын гүйцэтгэлийн бүх шалгуурыг өндөр байлгахын тулд тохируулагдсан байдаг.

PID хянагчийн бүрэлдэхүүн хэсгүүдийг тусад нь тохируулдаг.

  • Интегратор болон ялгагчийг идэвхгүй болгож, пропорциональ олзыг сонгоно. Хэрэв зохицуулагч нь пропорциональ-интеграцчлагдсан бол (ялгаалах холбоос байхгүй) түр зуурын шинж чанарт хэлбэлзэл бүрэн байхгүй болно. Зохицуулагчийг өндөр хурдтай болгох үед хэлбэлзэл хэвээр үлдэж болно. Ялгах холбоос нь тэднийг нөхөхийг оролдох болно.
  • Ялгах холбоос холбогдсон байна. Түүний коэффициент нь зохицуулалтын параметрийн хэлбэлзлийг арилгах хандлагатай байдаг. Хэрэв энэ нь амжилтгүй болвол пропорциональ хүчин зүйл буурна.
  • Нэгтгэх холбоос нь үл нийцэх алдааг арилгадаг.

PID хянагчийг тааруулах нь давталттай байдаг. Тэдгээр. Хүлээн зөвшөөрөгдсөн үр дүнд хүрэх хүртэл коэффициент сонгох цэгүүдийг олон удаа давтаж болно.

Өндөр гүйцэтгэл, олон талт байдлаас шалтгаалан PID хянагч нь үйлдвэрлэлийн автоматжуулалтын системд өргөн хэрэглэгддэг.

Дараагийн хичээлээр бид PID температур хянагчийг хөгжүүлэх болно.

Arduino UNO, LM325 дээр суурилсан, 1602А дэлгэцтэй, температурын дэлгэц бүхий гар хийцийн дөрвөн сувгийн термостатын бүдүүвч диаграм нь дөрвөн тусдаа ачааллыг хянах боломжийг танд олгоно.

Энд бид төхөөрөмжийн шинэчилсэн хувилбарыг тайлбарласан бөгөөд энэ нь идэвхгүй хэмжилт, температурыг заахаас гадна эхний хувилбарт зөвхөн температурыг хэмжих боломжтой байсан дөрвөн өөр газар өгөгдсөн температурыг хадгалахын тулд дөрвөн халаагуурыг хянах боломжтой юм.

Дөрвөн сувгийн термометрийн ажиллагаа, түүний хөтөлбөрийг өмнөх нийтлэлд (L.1) маш дэлгэрэнгүй тайлбарласан байгаа тул энд бид зөвхөн дөрвөн сувгийн термостатын ажиллагааг хэрэгжүүлэх өөрчлөлтийн талаар ярих болно.

Бүдүүвч диаграмм

Схемийн диаграммыг 1-р зурагт үзүүлэв.

Цагаан будаа. 1. 1602А дэлгэцтэй Arduino UNO, LM325 дээрх термостатын бүдүүвч диаграмм.

Эхний хэлхээнээс (L.1) ялгаатай нь K1-K4 релений ороомог дээр ачаалагдсан дөрвөн транзисторын унтраалга байдаг бөгөөд тэдгээр нь дөрвөн өөр халаалтын төхөөрөмжийг (H1-H4) удирддаг. Эдгээр товчлууруудын удирдлагын командууд нь ARDUINO UNO хавтангийн D9-D12 дөрвөн дижитал портоос ирдэг.

Програм

Хөтөлбөрийг 1-р хүснэгтэд үзүүлэв.

Хүснэгт 1.

Эхний ялгаа нь халаагчийг удирдахын тулд портуудыг тохируулсан явдал юм. Эдгээр нь D9-D12 портууд бөгөөд тэдгээрийг энд тодорхойлсон болно:

pinMode (12, OUTPUT);

pinMode (11, OUTPUT);

pinMode (10, OUTPUT);

pinMode (9, OUTPUT);

Та бусад үнэгүй дижитал портуудыг сонгож болно, индикаторыг холбосны дараа D8 ба D13 хэвээр байна. Гэхдээ зохиогч эдгээрийг сонгосон: D9, D10, D11, D12. Хоёрдахь ялгаа нь халаагчийг хянахын тулд харьцуулагч if функцийг ашигладаг. Мөрүүдэд:

хэрэв (тем< -15)digitalWrite(12, HIGH);

хэрэв (температур> -15) digitalWrite (12, БАГА);

хэрэв (темпи< 1)digitalWrite(11, HIGH);

хэрэв (темпи> 1) digitalWrite (11, БАГА);

хэрэв (темп2< 20)digitalWrite(10, HIGH);

хэрэв (temp2> 20) digitalWrite (10, LOW);

хэрэв (tem3< 10)digitalWrite(9, HIGH);

хэрэв (temp3> 10) digitalWrite (9, LOW);

Эдгээр мөрүүд нь холбогдох порт дээр ямар температур, ямар логик түвшин байх ёстойг заана. Жишээлбэл, эхний мэдрэгчийн температур (T1) -15 хэмээс доош байвал D12 порт нь логик нэгж болно. Хоёрдахь мэдрэгчийн (T2) температур 1 хэмээс доош байвал D11 порт нь логик нэгж болно.

Гурав дахь мэдрэгчийн (ТЗ) температур 20 хэмээс доош байвал D10 порт дээр логик нэгж байх болно. Дөрөв дэх мэдрэгчийн (T4) температур 10 хэмээс доош байвал D9 порт нь логик нэгж болно. Мэдээжийн хэрэг, температурыг тохируулж, огт өөр байж болно - энэ төхөөрөмжийн тодорхой хэрэглээнд шаардлагатай бүх.

Түүнээс гадна аль хэдийн бэлэн болсон төхөөрөмжид шаардлагатай бол тэдгээрийг өөрчлөхөд хялбар байдаг. Үүнийг хийхийн тулд та хувийн компьютерээ ARDUINO UNO хавтангийн USB порт руу холбож, температурын босго дээрх бусад өгөгдөлтэй програмыг ачаалах хэрэгтэй. Зарчмын хувьд, үүний тулд USB холбогчийг бэлэн төхөөрөмжийн орон сууцанд суулгаж болно.

Ихэвчлэн "ердийн" термостатад гистерезисийн гогцоо, өөрөөр хэлбэл халаагчийн температур ба бус температурын хоорондох ялгааг үүсгэдэг хэлхээ байдаг. Энэ нь халаагчийг байнга асаах / унтраахгүйн тулд зайлшгүй шаардлагатай. Хэрэв халаагчийг цахилгаан соронзон реле удирддаг бол энэ нь ялангуяа чухал юм.

Учир нь релений контактууд нь ийм үйлдлийн горимд зориулагдаагүй бөгөөд нуман хаалганы улмаас хурдан шатаж чаддаггүй. Гэхдээ гистерезис нь термостатын ажиллагаанд алдаа гаргадаг. Энд гистерезис үүсгэхгүй байхаар шийдсэн боловч реле контактууд хэт олон удаа шилжихгүй байхын тулд төхөөрөмжийн ажиллагааг удаашруулна уу. Үүнийг хийхийн тулд мөрөнд:

дэлгэцийн хугацаа гурван секунд хүртэл нэмэгдсэн. Үүний үр дүнд хэмжилтийг гурван секундын хугацаанд давтан хийдэг бөгөөд ямар ч тохиолдолд реле гурван секунд тутамд нэгээс олон удаа солигддоггүй.

Дэлгэрэнгүй мэдээлэл

Цахилгаан соронзон реле K1-K4 нь ямар ч 12V ороомогтой, тусгай халаагуурыг удирдах хангалттай хүчтэй контакттай ашиглаж болно.

Гаралтын үе шатуудыг бусад схемийн дагуу, жишээлбэл, опто-мистор дээр хийж болно. Энэ тохиолдолд ARDUINO UNO хавтангийн холбогдох портууд нь гүйдэл хязгаарлах резисторууд, опто симуляторуудын LED эсвэл "хатуу төлөвт реле" гэж нэрлэгддэг төхөөрөмжөөр холбогддог.

Каравкин В.РК-08-17.

Уран зохиол: 1. Каравкин В. - ARDUINO UNO дээрх дөрвөн сувгийн термометр, RK-06-17.

Эхлээд Arduino дээр энгийн зүйлийг бүтээцгээе. В 12-р бүлэгБид аль хэдийн цэвэр аналог бүрэлдэхүүн бүхий термостатуудыг зохион бүтээсэн. Одоо та энэхүү ашигтай бизнест дижитал технологийг хэрхэн оролцуулж болохыг харцгаая.

Бид аль хэдийн дурдсан (харна уу. 18-р бүлэг) AVR-хянагч нь 10 битийн олон сувгийн ADC-г агуулдаг. Arduino самбар дээр түүний зүүг аналог оролт гэж тусгайлан тэмдэглэсэн байдаг (үсгээр Атэгээс тав хүртэлх тоогоор). Тэдгээрийг 14-өөс 18 хүртэлх тоотой энгийн дижитал хэлбэрээр ашиглаж болохыг анхаарна уу, бид тэдгээрийг энэ хүчин чадлаар ашиглах болно. Бид температурыг хэмжихийн тулд эдгээр оролтын аль нэгийг ашиглах бөгөөд дижитал гаралтын аль нэгээс ачааллын холболтыг хянах болно.

Бидэнд хэрэгтэй нийт:

□ Arduino Uno самбар (бусад аль ч үүнийг хийх болно);

Би температур мэдрэгч болгон термистортой. Жишээлбэл, одоо байгаа

□ "Amperke" B57164-K 103-J, 25 ° C-д 10 кОм нэрлэсэн эсэргүүцэлтэй - түүний шинж чанарыг дараахь байдлаар өгсөн болно. 13-р бүлэгтермисторын шинж чанарын дүрслэл болгон;

хувьсах резистор 10 кОм, тогтмол эсэргүүцэл 620 Ом;

□ гүйцэтгэх реле - цахилгаан соронзон (заавал өсгөгч транзисторын унтраалгатай, доороос үзнэ үү) эсвэл хатуу төлөвт.

Зах зээл дээр 5 вольтын цахилгаан соронзон реле дээр суурилсан, Arduino гаралтаас удирдахад тусгайлан тохируулсан модулиуд байдаг. Цахилгаан соронзон реле нь өөрөө нэлээд том хяналтын гүйдэл шаарддаг (мөн энэ нь илүү хүчтэй, реле нь илүү хүчтэй байдаг - зөвхөн хамгийн бага чадлын зэгсэн реле нь логикоор шууд ажиллах боломжтой), иймээс ийм релений бүх модулиуд нь транзистор өсгөгчтэй байх ёстой. солих. Жишээлбэл, Amperka нь HLS8L - DC5V - S - C реле дээр суурилсан ийм модулийг зардаг. Хэрэв цахилгаан соронзон реле танд тохирохгүй бөгөөд та хэлхээний хамгийн энгийн байдлыг эрэлхийлж байгаа бол хатуу төлөвт реле хайж болно - жишээлбэл, Crydom-ийн CX240D5R эсвэл 3-15 В-ийн хариу хүчдэлтэй ижил төстэй реле. Тэдгээр нь оролт бүрт 5 вольтоор 15 мА-ийн хяналтын гүйдэлтэй байдаг бөгөөд энэ нь AVR-ийн хувьд зөвшөөрөгдөхүйц, учир нь тэдгээрийн удирдлагын оролтыг Arduino-ийн дижитал зүүтэй шууд холбож болно. Үнэн бол 220 вольтын хүчдэлийн үед CX240D5R нь киловаттаас дээш хүчин чадалтай ачааллыг сольж чадахгүй, гэхдээ бидэнд энэ ажилд илүү их зүйл хэрэггүй.

Arduino Uno термостатын хэлхээг Зураг дээр үзүүлэв. 21.2.

Цагаан будаа. 21.2. Термостатын хэлхээ асаалттай Arduino Uno

Диаграммд K1 релений ороомог (ихэвчлэн нээлттэй контакттай) нь ердийн байдлаар Arduino-ийн дижитал гаралттай шууд холбогдсон байдаг - энэ нь шаардлагатай шинж чанартай, өмнө нь дурдсан хатуу төлөвт реле эсвэл зүгээр л удирдлага юм. дууссан реле модулийн хавтангийн оролт. Хэлхээний төлөвийг хянахын тулд LED нь халаагчтай нэгэн зэрэг идэвхждэг. Үүнтэй төстэй схемийн дагуу термостатын програм нь маш энгийн:

Эсэргүүцлийн утгууд нь 25 ° C (103 - J) температурт 10 кОм-ийн нэрлэсэн эсэргүүцэлтэй B57164 - K термистортой тохирч байна. Хөтөлбөрийн дагуу реле нь 500-тай тэнцэх ADC гаралтын утгын ойролцоо ажиллах болно. Энэ нь ойролцоогоор 10 битийн хүрээний дунд байна (бүхэл бүтэн масштаб нь 1024 градус), өөрөөр хэлбэл энэ утгыг тогтооно. дээд ба доод эсэргүүцэл нь AO оролттой ойролцоогоор тэнцүү байх үед (энэ оролтын хүчдэл ойролцоогоор 2.5 вольт байх болно).

Аль аль нь функцтэй гэдгийг анхаарна уу хэрэвердийн зүйлээр бүү дуус өөр... Үсрэхээс сэргийлэхийн тулд программд гистерезис нэвтрүүлсэн: кодын утга 510-аас хэтэрсэн үед реле асдаг, 490-д хүрэх үед унтардаг. Энэ хооронд өмнөх төлөвөө хадгална. Хорин кодын нэгж (юу байна 12-р бүлэгбид дуудсан Үхлийн бүс) нь ойролцоогоор 10 милливольттой тохирч байна, өөрөөр хэлбэл 30-40 градусын температурт гистерезис нь градусын аравны нэгээс арай бага байх болно (хүснэгт 13.1-ийг ашиглан өөрөө шалгана уу). 13-р бүлэг).

Эдгээр параметрүүдтэй R2 резисторын хариу урвалын температурыг ойролцоогоор 22-96 хэмийн хооронд тохируулах боломжтой. Мэдээжийн хэрэг практикт ийм өргөн хүрээг тохируулах шаардлагагүй тул R2-ийн утгыг багасгахыг зөвлөж байна. R1-ийн утгыг R1 ба R2-ийн нэрлэсэн утга нь хүссэн температурын хязгаарын доод утгын термисторын эсэргүүцлийг нэмнэ (Хүснэгт 13.1-ийн дагуу). Илүү нарийвчлалтай тохируулахын тулд та ердийн термометрээр тогтмол температурыг хэмжих замаар програмын босго утгыг тохируулж, өөрчилж болно.

Хэрэв та энэ хэлхээнд бусад мэдрэгч ашигладаг бол температурын коэффициентийн тэмдгийг мартаж болохгүй. Диодын холболт дахь ердийн диод эсвэл транзистор (хэлхээний адил 13-р бүлэг) нь мөн шинж чанарын сөрөг налуутай байдаг тул тэдний хувьд зөвхөн гох босгоны тоон утгыг программд өөрчлөх шаардлагатай болно. Гэхдээ TMP35 төрлийн хагас дамжуулагч мэдрэгч (харна уу. 13-р бүлэг) эсвэл зүгээр л металл эсэргүүцлийн термометр (зохион байгуулалттай адил 17-р бүлэг) эерэг температурын коэффициенттэй тул гох нөхцөлийг өөрчлөх шаардлагатай болно. Түүнээс гадна "илүү" -ийг "бага" болон эсрэгээр нь өөрчлөхөөс гадна гистерезисын босгоны харьцааг өөрчлөх - шинэ нөхцөл байдалд, утга нь доод босгоос бага байвал халаагчийг асаах шаардлагатай болно. илүү том бол унтраа.

Тэрээр температур мэдрэгч, LCD дэлгэц, мэдээжийн хэрэг Arduino-ийн оролцоотойгоор ухаалаг сэнсний эргэлтийн хянагч бүтээх туршлагаас хуваалцах болно.

Хэдэн сарын өмнө би Arduino-ийн тухай хэд хэдэн нийтлэл уншиж, энэ төхөөрөмжийг нэлээд сонирхож, удалгүй нэгийг нь худалдаж авахаар шийдсэн. Би микроэлектроникоос хол байгаа тул самбар нь ашиглахад харьцангуй хялбар байдгаараа хамгийн түрүүнд ялсан гэдгийг тэмдэглэх нь зүйтэй. LED болон "Сайн уу ертөнц"-тэй тоглож байхдаа би Arduino-ийн боломжуудтай илүү дэлгэрэнгүй танилцахын тулд практик зүйл хийхийг хүссэн. 2010 оны ер бусын халуун зуныг санаж, LCD дэлгэц дээр холбогдох бүх шинж чанаруудыг харуулсан температураас хамааран сэрүүн хурд хянагч угсрах санаа гарч ирэв. Энэ схем эсвэл түүний хувилбарууд нь хэн нэгэнд хэрэг болно гэж найдаж байна, тиймээс би өөрийн тойм зургуудаа нийтлэхээр шийдлээ.

Энэ схемийн хувьд бидэнд хэрэгтэй:

  • Удирдах зөвлөл өөрөө Arduinoэсвэл түүнтэй адилтгах;
  • Талхны хавтанхэлхээний бүрэлдэхүүн хэсгүүдийг угсрах зориулалттай;
  • Шүргэх резистор асаалттай WH1601A-NGG-CT дэлгэц 20 кОмэсвэл үүнтэй төстэй;
  • Эсэргүүцлүүд - 220 ом, 10 кОм, 4.7 к Ом;
  • Хоёр туйлт транзистор SS8050Dэсвэл үүнтэй төстэй;
  • Дижитал температур мэдрэгч DS18B20;
  • Диод 1N4148эсвэл түүнтэй адилтгах;
  • Фентэнхлэгийн гурван утас (12V дээр), жишээлбэл - компьютер;
  • Сокет холбогч тэжээл 2.1 / 5.5 мм.

Компьютерийн хөргөгч байдаг гурван утас, тэдгээрийн хоёр нь - улаан (+ 12V) ба хар (GND) нь тэжээлийн хангамжид ашиглагддаг бөгөөд гурав дахь (шар) нь Холл элемент дээр суурилуулсан тахометрээр холбогддог. Харамсалтай нь самбараас гарах 5V нь бидний хувьд хангалттай биш боловч Arduino-ийн 6 дижитал гаралт нь PWM горимд ажиллах боломжтой (тэдгээрийг самбар дээр цагаан дөрвөлжин эсвэл PWM үсгээр тэмдэглэсэн байдаг) тул бид дохиог зохицуулж чадна. самбарыг реле рүү шилжүүлж, энэ нь сэнсэнд нийлүүлсэн хүчдэлийг өөрчлөх үүрэгтэй.

Хэрэгжилтэд үндэслэн өөрчилсөн аргыг ашиглан тахометрийн гурав дахь утаснаас эргэлтүүдийн талаарх мэдээллийг бид хүлээн авах болно. тасалддаг, энэ нь ихэнх Arduinos дээр дижитал зүү 2 (тасалдал 0) ба 3 (тасалдал 1) дээр ирж болно. Дашрамд хэлэхэд Arduino Mega нь тасалдлыг хүлээн авах чадвартай 4 нэмэлт зүүтэй.

Одоо та байр сууриа олох хэрэгтэй дижитал температур мэдрэгч, өгөгдөл нь дижитал гаралтад нийлүүлсэн хүчдэлийг PWM-ээр зохицуулах, улмаар сэнсний хүчдэлийн сувгийг "нээх" зорилгоор ашиглах болно. Даллас мэдрэгчийн хувьд өөрийн гэсэн Arduino номын сан байдаг - DallasTemperature, бид үүнийг дараа нь тойм зураг дээр холбох болно. Номын санг arduino-0018 / libraries / лавлах руу задлах ёстой.

Хамгийн сүүлд үлдсэн зүйл - LCD холбоно, бид температур болон сэнсний хурдны талаарх бүх мэдээллийг харуулах болно. Би WH1601A дэлгэцийг угсрахдаа ашигласан тул утас дэлгэцийн асуудал гарч болзошгүй. Тэдгээрийг арилгахын тулд бид LiquidCrystalRus номын санг ашиглах бөгөөд үүнийг arduino-0018 / libraries / лавлах руу задлах ёстой.

// Дулааны мэдрэгчийн номын санг холбоно уу#оруулна // LCD-д зориулсан номын сан оруулах#оруулна # PowerPin 9-г тодорхойлох // сэнсний хүчийг хянах зүү# HallSensor 2-г тодорхойлох // сэнсний хурд мэдрэгчийн зүү (тасалдал)# TempPin 7-г тодорхойлох // температур мэдрэгчийн зүү LiquidCrystalRus lcd (12, 11, 10, 6, 5, 4, 3); // LCD Dallas температур мэдрэгчийг холбох; int NbTopsFan, Calc, fadeValue; // тооцооллын бүхэл тоон хувьсагчхөвөх уур; // температурыг хадгалах бодит хувьсагч typedef бүтэц ( // Фенүүдэд зориулсан шинэ төрлийн хувьсагчийг нэвтрүүлэх char fantype; unsigned int fandiv; ) фенүүд; // Шинэ төрлийн хувьсагчийн массив fanspec fanspace = ((0,1), (1,2), (2.8)); // Сэнсний мэдрэгчийн төрлийг сонгох үүрэгтэй хувьсагч (1 - нэг туйлт танхим мэдрэгч, 2 - хоёр туйлт танхим мэдрэгч) char фен = 2; // Энэ функцийг тасалдал бүрт дууднахүчингүй эргэлт () (NbTopsFan ++;) // PWM-тэй дижитал зүүнд хэрэглэсэн хүчдэлийг тооцоолох функцхүчингүй температур () (fadeValue = мин (int (temper * 7), 255); // Температурыг хүчин зүйлээр үржүүлнэ // бүтээгдэхүүнээс бүхэл тоо авна } // Учир нь хамгийн их PWM утга нь 255 байвал тэжээх нь утгагүй болно - бид дор хаяж хоёрыг авдагхүчингүй тохируулах() (tempSensor.begin (TempPin); // Температур мэдрэгчийг ажиллуул lcd.begin (16, 2); // LCD-ийн шинж чанарыг тохируулах lcd.setDRAMModel (LCD_DRAM_WH1601); // Мөн дэлгэцийн төрөл pinMode (HallSensor, INPUT); // Тасалдал хүлээн авахын тулд зүүг тохируулна уу attachInterrupt (0, rpm, RISING); // Бид 0 дугаарт байгаа тасалдлыг функцдээ холбодог бөгөөд дохио өөрчлөгдөх бүрт энэ нь тооцоолно) хүчингүй болно гогцоо() (темпер = tempSensor.getTemperature (); // Температурыг авна уутемператур (); // PWM-д өгсөн хүчдэлийг тооцоол analogWrite (PowerPin, fadeValue); // Үүнийг тэжээх NbTopsFan = 0; // Хувьсагчийг агуулсан хувьсагчийг тэглэнэ үүсаатал (1000); // 1 секунд хүлээнэ үү Calc = ((NbTopsFan * 60) /fanspace.fandiv); // 60 секундын эргэлтийг сэнсний үржүүлэгчид хуваана lcd.print (Calc, DEC); // Тооцоолсон утгыг аравтын хэлбэрээр харуулна lcd.print ("rpm -"); lcd.print (ааштай); // Температурыг харуулах lcd.home (); )

Гарчгийн эхний хэсгийг уншиж байхдаа та нарын олонх нь удаан хүлээсэн Arduino дээрх өөр нэг термостат гэж бодсон байх. Тэгээд ... Энэ нь үнэн - тийм ээ, энэ бол өөр бойлер, өөр байшинд зориулсан өөр термостат, гэхдээ энэ нь зөвхөн хэсэгчлэн үнэн юм - нийтлэлд би төхөөрөмж дээр анхаарлаа төвлөрүүлэхийг хүсэхгүй байна - үнэхээр олон зүйл байдаг (нийтлэл) . Би термостатыг тайлбарлах нь дамжиггүй, гэхдээ би өөрөө микроконтроллерийг бойлертой хэрхэн холбосон талаар илүү дэлгэрэнгүй ярихыг хүсч байна. Тэгэхээр хэн сонирхож байна - гуйя ...

Энэ бүхэн хэрхэн эхэлсэн

Юуны өмнө би огт програмист биш, жинхэнэ микроконтроллертэй ямар ч холбоогүй гэдгээ хэлмээр байна. Би MK AVR (мөн үнэндээ MK-тай) анх ахлах сургуульд байхдаа энэ нууцлаг зүйл хэрхэн ажилладагийг мэдэхийг хүсч байсан. Би хэд хэдэн нийтлэл уншсан бөгөөд тэр цагаас хойш миний санах ойд зөвхөн DDR ба PORT гэсэн хоёр үгээр дүрсэлж болох хэсгүүд л үлдсэн - миний мэдлэг энд дууссан. Дараа нь их сургууль байсан, 5-р курс - "Програмчлалын микроконтроллерууд" бид бүгд виртуал орчинд MSC51-тэй танилцсан. Аль хэдийн тасалдал, цаг хэмжигч, бусад бүх зүйл байсан. За тэгээд ийм их мэдлэгтэй байж байгаад асуудалд хүрлээ. Энэ намтар тэмдэглэлээ дуусгаад илүү сонирхолтой хэсэг рүүгээ орцгооё.

Үнэн хэрэгтээ термостат хэрхэн бий болсон бэ - хийн бойлероор бие даасан халаалтыг суурилуулсны дараа би олон хүмүүсийн нэгэн адил ердийн асуудалтай тулгарсан - байшингийн температур нь гадаа цаг агаараас ихээхэн хамааралтай байсан - хүйтэн жавар - энэ нь орон сууцанд хүйтэн бол та батерей дахь хөргөлтийн температурыг нэмэгдүүлэх хэрэгтэй, энэ нь илүү дулаарсан - эсрэгээр. Ийм хэнгэрэгтэй бүжиг надад тийм ч их тохирохгүй байсан, tk. бойлерыг тохируулах нь хаалганы ард суурилуулсан бөгөөд хаалгыг богино долгионы зууханд бэхэлсэн бөгөөд овоолсон хог хаягдал байсан тул төвөгтэй байв. Өндөгний зүү, нугас дахь өндөг гэх мэт санааг та ойлгож байна.

Энэ асуудлыг маш энгийнээр шийдсэн - OTC (Гадна температурын нөхөн олговор) мэдрэгч нь бойлерт холбогдсон бөгөөд гаднах температураас хамааран хөргөлтийн температурыг автоматаар тохируулах боломжийг олгодог. Асуудал шийдэгдсэн мэт санагдаж байсан ч бойлерийн үйлчилгээний гарын авлагыг уншсан (Ferolli Domiproject C24D) миний итгэл найдварыг хурдан дарав - энэ загварт гадаад температур мэдрэгчийн холболтыг оруулаагүй болно. Бүх зүйл? Бүх зүйл. Одоо, магадгүй, дуусгах боломжтой байсан ч зун, аадар борооны үеэр уурын зууханд хяналтын самбар нь надад ойлгомжгүй байдлаар шатаж, үйлчилгээний ажилтантай ярилцаж байна (самбарыг дараа нь зассан) би OTC-ийг миний бойлер руу холбох боломжтой эсэхийг асуусан уу? Тэд гадны термостат ашиглан холбогдож байна гэж тэр хариулав. Энэ нь миний ой санамжинд үлдсэн боловч хүйтэн цаг агаар эхлэх хүртэл би үүнд анхаарлаа төвлөрүүлээгүй бөгөөд дараа нь ижил асуудал үргэлжилсэн.

Үйлчилгээний ижил зааварчилгааг уншиж, термостат хэрхэн холбогдож байгааг харахын тулд "OpenTherm зохицуулагч" нь ижил терминалуудтай холбогдсон байгааг анзаарсан. Дараа нь би ойлгосон - энд байна! "OpenTherm Arduino" гэж Google-н хайлт намайг дахин бухимдууллаа - онцгой мэдрэмжтэй зүйл алга. Мессежийг хянах төхөөрөмж байсан, гэхдээ энэ нь тийм биш юм - надад сонсох зүйл алга - надад термостат хэрэгтэй.