
Мазмуну:
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51


Бул долбоор мурунку "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 -кадам: Алдын ала жыйынтыктар

Бул диаграмма окуунун алгачкы эки күндүк күнүнүн жыйындысы.
Сунушталууда:
Байланышсыз термометр / портативдүү термометр катары смартфонду колдонуңуз: 8 кадам (сүрөттөр менен)

Смартфонду контактсыз термометр / портативдүү термометр катары колдонуңуз: термо тапанча сыяктуу контактсыз / контактсыз дене температурасын өлчөө. Мен бул долбоорду түздүм, анткени Thermo Gun азыр абдан кымбат, ошондуктан DIY жасоого альтернатива алышым керек. Ал эми максаты аз бюджеттик версиясы менен жасалат.SuppliesMLX90614Ardu
DIY Geiger эсептегич ESP8266 жана сенсордук экран менен: 4 кадам (сүрөттөр менен)

ESP8266 жана сенсордук экраны бар DIY Гейгер эсептегич: ЖАҢЫРТУУ: WIFI ЖАНА БАШКА ӨЗГӨРТҮЛГӨН ЖАҢЫ ЖАНА МЫКТЫ ВЕРСИЯЛАР HEREI Geiger Counterди иштеп чыккан жана курган - иондоштуруучу радиацияны аныктай турган жана колдонуучусун коркунучтуу радиациянын деңгээли жөнүндө эскертет. өтө тааныш эмес басуу
Сенсордук экран менен тараза (Arduino): 7 кадам (сүрөттөр менен)

Сенсордук экран менен таразага тартуу (Arduino): Сиз качандыр бир убакта сенсордук экран менен таразаны түзүүнү кааладыңыз беле? Эч качан ойлогон эмес белеңиз? Жакшылап окуңуз жана бирин курууга аракет кылыңыз … Сиз TFT сенсордук экраны жана Load Cell деген эмне экенин билесизби? Ооба, эгер 1 -кадамга өтсөңүз, Intro.Introduction: Эмне мен
Сенсордук сенсорлор жана MIDI менен LED тутулушу: 9 кадам (сүрөттөр менен)

Сенсордук сенсорлор жана MIDI менен LED тутулушу: LED тутулушу - бул LED, сыйымдуу сенсордук сенсорлор жана интерактивдүү инструмент, бардыгы Arduino Uno менен башкарылат. Сиз аппаратты ар кандай жолдор менен программалай аласыз. Бардык колдонмолор боюнча идея дээрлик бирдей:
DIY сенсордук мээлей үчүн DIY арзан жана так альтернатива: 8 кадам (сүрөттөр менен)

DIY сенсордук мээлей үчүн DIY арзан жана так альтернатива: Саламатсыздарбы, бул менин биринчи үйрөткүчүм жана бул көрсөтмөдө мен сизге арзан жана так ийкемдүү сенсор мээлейин жасоону үйрөтөм. Мен ийкемдүү сенсорго көптөгөн альтернативаларды колдондум, бирок алардын бири да мен үчүн иштеген жок. Ошентип, мен googled жана жаңысын таптым