Агуулгын хүснэгт:

DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй: 3 алхам (зурагтай)
DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй: 3 алхам (зурагтай)

Видео: DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй: 3 алхам (зурагтай)

Видео: DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй: 3 алхам (зурагтай)
Видео: How Not To Die: The Role of Diet in Preventing, Arresting, and Reversing Our Top 15 Killers 2024, Долдугаар сарын
Anonim
DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй
DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй
DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй
DIY мод бэлтгэх термометр нь 2 мэдрэгчтэй

Энэ төсөл бол миний өмнөх "DIY мод бэлтгэх термометр" төслийн сайжруулалт юм. Энэ нь температурын хэмжилтийг бичил SD картанд бүртгэдэг.

Тоног төхөөрөмжийн өөрчлөлт

Би DS18B20 температур мэдрэгчийг бодит цагийн модульд нэмсэн бөгөөд энэ төхөөрөмжийн хэвлэмэл хэлхээний самбар дээр тусгасан болно; RTC -ийн "DS" зүүгээс тохирох утсыг Arduino -ийн D2 дээр нэмэв.

Програм хангамжийн өөрчлөлт

Дараа нь би програмыг нэмж, өөрчилсөн. Гол өөрчлөлтүүд нь:

LCD дэлгэц нь "In" ба "Out" гэсэн хоёр температурыг харуулдаг.

SD карт дээр бүртгэгдсэн бүртгэлийн файлууд нь "температур In" ба "Out Out" гэсэн хоёр температурын талбартай байна.

SD карт дээр удаан бичлэг хийсэн тул EEPROM -ийн ажлын буфер томорч, үүний үр дүнд би санах ойн зөрчилдөөнтэй асуудалтай болж эхлэв. Би динамик санах ойн хэрэглээг бууруулахад чиглэсэн хэд хэдэн өөрчлөлт хийсэн бөгөөд үүнд String объектын оронд бүх мөрт тэмдэгт массив ашиглах боломжтой болсон.

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

Миний хийсэн туршилтын дагуу температурын датчикийг тодорхойлох, SD картыг салгах, солих хариу үйлдэл нь тасралтгүй ажиллаж байна.

Алхам 1: Програм хангамж хөгжүүлэх

Энэ алхам нь дууссан төслийн бүрэн програм хангамжийг танд өгөх болно. Би үүнийг Arduino IDE 1.6.12 ашиглан эмхэтгэсэн. Энэ нь програмын санах ойн 21, 400 байт (69%), динамик санах ойн 1, 278 байт (62%) ашигладаг.

Би юу болж байгааг тодорхой болгох болно гэж найдаж код дээр тайлбар оруулсан болно.

Алхам 2: Хоёр температур мэдрэгчтэй ажиллах - Дэлгэрэнгүй

Энэхүү програм хангамж нь "OneWire" номын санг ашигладаг. Энэ нь "DallasTemperature" эсвэл үүнтэй төстэй номын санг ашигладаггүй. Үүний оронд температур мэдрэгчийн өгөгдөл, өгөгдлийг ноорогоор хийдэг бөгөөд үүнийг амархан харж, ойлгох боломжтой байдаг. OneWire номын сангийн командын хэрэгтэй жагсаалтыг би олсон

www.pjrc.com/teensy/td_libs_OneWire.html

Хоёр (ба түүнээс дээш) температур мэдрэгч байгаа тохиолдолд аль нь аль болохыг тодорхойлох шаардлагатай болно.

Би хоёр мэдрэгчээ "оруулах" ба "гарах" гэж нэрлэсэн бөгөөд энэ нь ихэвчлэн "дотор" дэлгэцийн модульд мэдрэгчтэй, бусад мэдрэгчийг кабель дээр байрлуулсан арилжааны нэгжүүдийн хувьд ердийн зүйл юм. гаднах хана, ингэснээр "гаднаа" байх ёстой.

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

Миний зорилго бол програм хангамж нь мэдрэгчийг автоматаар таньж, "оруулах" ба "гарах" хэсэгт зөв хуваарилах явдал байв. Үүнийг тусад нь Arduino тээглүүр дээр зүүж хийхэд хангалттай хялбар юм. Энэхүү төсөлд A0 -аас A3, A6, A7 -ийг бүгдийг нь ашиглаагүй тул эдгээрийн аль нэгийг энэ тохиолдолд ашиглах боломжтой байсан. Гэсэн хэдий ч би нэг OneWire автобусанд хоёуланг нь мэдрэгчтэй автоматаар таних ажлыг хийж чадсан.

Энэ нь ингэж ажилладаг.

OneWire номын санд "OneWireObject.search (address)" гэсэн тушаал байдаг бөгөөд "address" нь 8 байтын массив бөгөөд "OneWireObject" нь өмнө нь үүсгэгдсэн OneWire объектын жишээний нэр юм. Энэ нь таны дуртай ямар ч нэртэй байж болно. Намайг "ds" гэж нэрлэдэг. Та энэ "хайх" командыг гаргах үед OneWire номын сан нь нэг утсан автобусанд дохио өгдөг. Хэрэв хариу өгөх мэдрэгч олдвол "ҮНЭН" логик утгыг буцааж, "байт" массивыг мэдрэгчийн 8 байтын өвөрмөц танигчаар бөглөнө. Энэхүү танигч нь гэр бүлийн код (эхэнд) болон чекийн дүнг (төгсгөлд) агуулдаг. Энэ хооронд 6 байт байдаг бөгөөд энэ нь гэр бүлийнхээ мэдрэгчийг өвөрмөц байдлаар тодорхойлдог.

Энэ тушаалыг өгөх бүрт OneWire автобус дээрх бүх төхөөрөмжөөр дугуй унах замаар нэг үр дүн (хаяг ба ҮНЭН буцах) гарна. Төхөөрөмж бүр хариу өгсний дараа дараагийн удаа "хайлт" хийх үед буцаалт нь "ХУДАЛ" байх бөгөөд энэ нь автобусанд байгаа төхөөрөмж бүр аль хэдийн хариу өгсөн болохыг харуулж байна. Хэрэв "хайлт" дахин гарвал эхний төхөөрөмж дахин хариу өгөх болно. Төхөөрөмжүүд үргэлж ижил дарааллаар хариу үйлдэл үзүүлдэг. Хариултуудын дараалал нь OneWire автобус дээрх төхөөрөмжүүдийн танигч дээр суурилдаг. Энэ нь төхөөрөмжийн таних тэмдгүүдийн хамгийн бага ач холбогдол бүхий битүүдээс эхэлсэн хоёртын хайлт юм шиг байна. Эдгээр таних тэмдгүүдийг олоход ашигладаг протокол нь нэлээд төвөгтэй бөгөөд https://pdfserv.maximintegrated.com/en/an/AN937.pd хаягаар pdf баримт бичиг болох "iButton Standards Book" баримт бичгийн 51-54 -р хуудсанд тайлбарласан болно. …

Би энэ хайлтын процессыг нэг автобусанд 1 -ээс 11 хүртэлх мэдрэгчээр туршиж үзсэн бөгөөд өгөгдсөн төхөөрөмжүүдийн хариу өгөх дараалал үргэлж ижил байсан боловч автобусны төгсгөлд шинэ төхөөрөмж нэмэхэд ямар ч арга байсангүй. Хайлтын дараалалд хаана харагдахыг би урьдчилан хэлж чадна. Жишээлбэл, миний нэмж оруулсан 11 -р мэдрэгч 5 -р байрлалд орсон; Миний автобусанд тавьсан анхны мэдрэгч бол хайлтын дарааллын сүүлчийнх юм.

Хоёр мэдрэгч бүхий энэхүү төсөлд тэдгээрийн нэг нь RTC модуль дээр гагнаж байна; нөгөө нь самбар дээрх эрэгтэй толгой, кабелийн эмэгтэй толгой ашиглан залгасан байна. Үүнийг амархан салгаж болно.

Кабелийн мэдрэгчийг ("гарах" мэдрэгч) салгахад "хайх" командыг ээлжлэн "ҮНЭН" ба "ХУДАЛ" буцаана.

Кабелийн мэдрэгчийг хавсаргахад "хайх" командаар 3 үе шаттай циклийг гаргадаг бөгөөд хоёр "ҮНЭН", нэг "ХУДАЛ" буцаана.

Миний процедур бол ХУДАЛ үр дүнг буцаах хүртэл 1, 2 эсвэл 3 "хайх" команд өгөх явдал юм. Дараа нь би "хайх" гэсэн 2 командыг нэмж өгдөг. Хэрэв хоёр дахь нь бүтэлгүйтвэл (өөрөөр хэлбэл ХУДАЛ) автобусанд ганцхан мэдрэгч байдаг бөгөөд энэ нь "оролт" мэдрэгч гэдгийг би мэднэ. Төхөөрөмжийн таних тэмдгийг бүртгэж, "оролт" мэдрэгчид хуваарилдаг.

Хожим нь, хэрэв эхний болон хоёр дахь өгөөж нь ҮНЭН бол автобусанд хоёр мэдрэгч байгааг би мэднэ. Би тэдний аль нь "оролттой" мэдрэгчтэй ижил төстэй болохыг шалгаж, нөгөөхийг нь "гарах" мэдрэгч болгон хуваарилдаг.

Нөгөө нэг жижиг зүйл бол хоёр мэдрэгчийн үр дүнг цуглуулах ажлыг "ROM алгасах" командыг ашиглан "хөрвүүлэлтийг эхлүүлэх" илгээсэн явдал юм. Бид нэг төхөөрөмжид (өвөрмөц танигчийг ашиглан) эсвэл автобусны бүх төхөөрөмжид командыг илгээх боломжтой (ROM алгасах). Код иймэрхүү харагдаж байна:

ds.reset (); //

// "skip ROM" командыг илгээх (ингэснээр дараагийн тушаал нь хоёр мэдрэгч дээр ажилладаг) ds.write (0xCC); // ROM командыг алгасах ds.write (0x44, 0); // хоёуланд нь хөрвүүлэлтийг эхлүүлэх temperatur_state = wait_convert; // хойшлуулах төлөв рүү очно уу

Шаардлагатай хойшлуулах хугацаа өнгөрөхөд температурыг мэдрэгч бүрээс тус тусад нь авна. Энд хоёр дахь мэдрэгчийн код байна (өөрөөр хэлбэл OUT мэдрэгч).

if (туг2) {

одоогийн = ds.reset (); ds.select (DS18B20_addr_out); ds. бичих (0xBE); // "out" шалгалтын өгөгдлийн Scratchpad -ийг унших [0] = ds.read (); өгөгдөл [1] = ds.read (); temperature_out = (өгөгдөл [1] << 8) + өгөгдөл [0]; temperature_out = (6 * temperature_out) + temperatur_out / 4; // 6.25 -аар үржүүлнэ үү} өөр {// туг биш2 - өөрөөр хэлбэл гаралтын мэдрэгч холбогдоогүй temperatur_out = 30000; // хэрэв температур мэдрэгч ажиллахгүй бол 300.00 C -д засна} // if if (flag2)

Би энэ програм хангамжийн ихэнх хэсгийг LCD, RTC, SD картны дэмжлэггүйгээр ямар ч температур мэдрэгчтэй бие даасан схемээр боловсруулсан. Энэхүү хөгжлийн тоймыг доорх файлд оруулсан болно.

Алхам 3: Урьдчилсан дүн

Урьдчилсан дүн
Урьдчилсан дүн

Энэхүү хүснэгт нь эхний хоёр өдрийн уншлагын хослол юм.

Зөвлөмж болгож буй: