Мазмуну:

DIY сенсордук термометр 2 сенсор менен: 3 кадам (сүрөттөр менен)
DIY сенсордук термометр 2 сенсор менен: 3 кадам (сүрөттөр менен)

Video: DIY сенсордук термометр 2 сенсор менен: 3 кадам (сүрөттөр менен)

Video: DIY сенсордук термометр 2 сенсор менен: 3 кадам (сүрөттөр менен)
Video: Термопара Устройство Неисправности Лайфхаки по ремонту 2024, Июль
Anonim
DIY сенсордук термометр 2 сенсор менен
DIY сенсордук термометр 2 сенсор менен
DIY сенсордук термометр 2 сенсор менен
DIY сенсордук термометр 2 сенсор менен

Бул долбоор мурунку "DIY Logging Thermometer" долбоорунун өркүндөтүүсү. Бул температуранын өлчөөлөрүн микро SD картага каттайт.

Аппараттык өзгөрүүлөр

Мен DS18B20 температура сенсорун реалдуу убакыт саатынын модулуна коштум, ал жерде бул түзмөктүн басылган платасында камтылган; жана Arduino D2 ге RTC "DS" пининен тиешелүү зымды кошту.

Программалык камсыздоонун өзгөрүшү

Андан кийин мен программалык камсыздоону кошуп, өзгөрттүм. Негизги өзгөрүүлөр:

ЖК дисплейде "In" жана "Out" эки температурасы көрсөтүлөт.

SD картага жазылган журнал файлдарында эки температура талаасы бар: "Температура Кирүү" жана "Температура Чыгуу".

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 (дарек)" буйругу бар, мында "адрес" 8 байттан турган массив жана "OneWireObject" мурда түзүлгөн OneWire объектисинин аталышы. Сиз каалаган ысымга ээ боло аласыз. Меники "ds" деп аталат. Бул "издөө" буйругун бергенде, OneWire китепканасы бир зымдуу автобуста сигнал берет. Эгер ал жооп берүүчү сенсорду тапса, анда ал "TRUE" логикалык маанисин кайтарат жана сенсордун 8 байт уникалдуу идентификатору менен "дарек" массивин толтурат. Бул идентификатор үй -бүлөлүк кодду (башында) жана чек суммасын (аягында) камтыйт. Арасында 6 байт бар, алар уникалдуу түрдө үй -бүлөсүндөгү сенсорду аныктайт.

OneWire автобусундагы бардык түзмөктөрдү айланып, бул буйрук берилген сайын бир жыйынтык (дарек жана ЧЫНДЫК кайтаруу) алынат. Ар бир түзмөк жооп бергенден кийин, кийинки жолу "издөө" чыгарылганда, кайтаруу "ЖАЛГАН" болуп саналат, бул автобустагы ар бир шайман буга чейин жооп бергенин билдирет. Эгерде "издөө" кайра берилсе, анда биринчи түзмөк кайра жооп берет - ж.б.у.с. Түзмөктөр дайыма бир тартипте жооп беришет. Жооптордун тартиби OneWire автобусундагы түзмөктөрдүн идентификаторлоруна негизделген. Бул түзмөктүн идентификаторлорунун эң аз биттеринен башталган экилик издөө окшойт. Бул идентификаторлорду табуу үчүн колдонулган протокол абдан татаал жана https://pdfserv.maximintegrated.com/en/an/AN937.pd дарегиндеги PDF документи болгон "iButton Стандарттар Китеби" документинин 51 - 54 -беттеринде сүрөттөлгөн. …

Мен бул издөө процессин бир автобуста 1ден 11ге чейин сенсорлор менен сынап көрдүм жана берилген түзмөктөрдүн жооп берүү тартиби дайыма бирдей экенин байкадым, бирок автобустун аягына жаңы түзмөк кошкондо, эч кандай жол жок болчу Мен издөө тартибинде кайда пайда болорун алдын ала айта алам. Мисалы, мен кошкон 11 -сенсор No5 позицияда келди; жана автобуска койгон биринчи сенсор издөө тартибинде акыркы болуп калды.

Бул сенсорго ээ болгон бул долбоордо, алардын бири RTC модулунун ордуна ширетилген; экинчиси тактадагы эркек башын жана аялдын башын кабель аркылуу туташтырат. Аны оңой эле ажыратууга болот.

Кабелдеги сенсор ("сенсор") ажыратылганда, "издөө" буйругу кезектешип "ЧЫН" жана "ЖАЛГАН" кайтарууларды чыгарат.

Кабелдеги сенсор тиркелгенде, "издөө" буйругу 3 баскычтуу циклди чыгарат, экөө "ЧЫН" жана бир "ЖАЛГАН" кайтарат.

Менин жол -жобом 1, 2 же 3 "издөө" буйруктарын берүү, ЖАЛГАН жыйынтык чыкмайынча. Андан кийин дагы 2 "издөө" буйругун чыгарам. Эгерде экинчиси иштебей калса (б.а. ЖАЛГАН), мен автобуста бир гана сенсор бар экенин жана ал "кирген" сенсор экенин билем. Түзмөктүн инсандыгы жазылат жана "in" сенсоруна бөлүнөт.

Кийинчерээк, эгер биринчи жана экинчи кайтуу ЧЫНДЫК болсо, мен автобуста эки сенсор бар экенин билем. Мен алардын кайсынысынын "кирүү" сенсоруна барабар экенин текшерем, экинчисин "чыгуу" сенсору катары бөлөм.

Дагы бир кичинекей жагдай, эки сенсордун жыйынтыгын чогултуу "ROMду өткөрүп жиберүү" буйругу менен "конверсияны баштоо" жөнөтүү аркылуу жасалат. Бизде бир түзмөккө (анын уникалдуу идентификаторун колдонуу менен) же автобустагы бардык түзмөктөргө буйруктарды жөнөтүү мүмкүнчүлүгү бар (ROMду өткөрүп жиберүү). Код мындай көрүнөт:

ds.reset (); //

// "skip ROM" командасын жөнөтүү (андыктан кийинки буйрук эки сенсордо тең иштейт) ds.write (0xCC); // Skip ROM командасы ds.write (0x44, 0); // эки зонддо тең конверсияны баштаңыз temperatur_state = wait_convert; // кечиктирүү абалына өтүү

Керектүү кечиктирүү убактысы өткөндө, температуралар ар бир сенсордон жекече кабыл алынат. Бул жерде экинчи сенсордун коду (б.а. OUT сенсор).

if (flag2) {

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

Мен бул программалык камсыздоонун көбүн ЖК, RTC жана SD карта колдоосунун татаалдыктары жок, жөн гана температура сенсорлору бар өзүнчө эскизде иштеп чыктым. Бул өнүгүү эскизи төмөнкү файлда.

3 -кадам: Алдын ала жыйынтыктар

Алдын ала жыйынтыктар
Алдын ала жыйынтыктар

Бул диаграмма окуунун алгачкы эки күндүк күнүнүн жыйындысы.

Сунушталууда: