Mundarija:

DIY datchikli termometr 2 sensori bilan: 3 qadam (rasmlar bilan)
DIY datchikli termometr 2 sensori bilan: 3 qadam (rasmlar bilan)

Video: DIY datchikli termometr 2 sensori bilan: 3 qadam (rasmlar bilan)

Video: DIY datchikli termometr 2 sensori bilan: 3 qadam (rasmlar bilan)
Video: Фоторезистор. Датчик свет на фоторезисторе. Фоторезистор для уличного освещения. 2024, Iyul
Anonim
DIY datchikli termometr 2 ta sensori bilan
DIY datchikli termometr 2 ta sensori bilan
DIY datchikli termometr 2 ta sensori bilan
DIY datchikli termometr 2 ta sensori bilan

Bu loyiha mening oldingi "DIY log termometr" loyihamning yaxshilanishidir. Harorat o'lchovlarini micro SD -kartaga yozib qo'yadi.

Uskuna o'zgarishi

Haqiqiy vaqtda soat moduliga DS18B20 harorat sensori qo'shdim, bu erda bosilgan elektron kartada bu qurilma mavjud; va Arduino D2 ga RTC "DS" pinidan tegishli simni qo'shdi.

Dasturiy ta'minot o'zgaradi

Keyin men dasturiy ta'minotni qo'shdim va o'zgartirdim. Asosiy o'zgarishlar quyidagilar:

LCD displeyda ikkita harorat "Kirish" va "Chiqish" ko'rsatiladi.

SD -kartaga yozilgan jurnal fayllari ikkita harorat maydoniga ega: "harorat In" va "temperaturadan chiqish".

SD -kartadagi yozuv uzoqroq bo'lgani uchun, EEPROM uchun ishlaydigan buferlar kattaroq edi va buning natijasida menda xotira to'qnashuvi bilan bog'liq muammolar paydo bo'la boshladi. Men dinamik xotiradan foydalanishni qisqartirishga qaratilgan bir qator o'zgartirishlar kiritdim, shu jumladan String ob'ekti o'rniga barcha satrlar uchun belgilar majmuasidan foydalanish.

Haroratni ta'minlaydigan dasturiy ta'minot qismi katta o'zgarishlarga ega, ularning aksariyati qaysi prob "ichkarida" va qaysi "tashqarida" ekanligini aniqlash bilan bog'liq. Bu identifikatsiya asosan avtomatik. Agar biron sababga ko'ra problar almashtirilsa, uni "chiqib ketish" probini ajratib, keyin yana qayta ulash orqali to'g'rilash mumkin. Men o'zim bu o'zgarishlarni boshdan kechirmaganman. Dasturchi yoki foydalanuvchiga sensor manzillarini kiritish shart emas, dastur o'z -o'zidan harorat sensori manzillarini aniqlaydi.

Men o'tkazgan sinovlarga ko'ra, harorat o'lchagichlarini aniqlash va SD -kartani olib tashlash va almashtirishga javob hali ham muammosiz ishlaydi.

1 -qadam: dasturiy ta'minotni ishlab chiqish

Ushbu qadam sizga tugallangan loyiha uchun to'liq dasturiy ta'minotni beradi. Men uni Arduino IDE 1.6.12 yordamida tuzdim. U 21, 400 bayt dastur xotirasidan (69%) va 1, 278 bayt dinamik xotiradan (62%) foydalanadi.

Men nima bo'layotganini aniq ko'rsatadigan umidda kodga sharhlar yozdim.

2 -qadam: ikkita harorat sensori bilan ishlash - tafsilotlar

Ushbu dastur "OneWire" kutubxonasidan foydalanadi. U "DallasTemperature" yoki shunga o'xshash kutubxonalardan foydalanmaydi. Buning o'rniga, harorat sensorlaridagi buyruqlar va ma'lumotlar eskiz yordamida amalga oshiriladi va ularni ko'rish va tushunish juda oson. OneWire kutubxonasi buyruqlarining foydali ro'yxatini topdim

www.pjrc.com/teensy/td_libs_OneWire.html

Agar ikkita (yoki undan ko'p) harorat sensori bo'lsa, qaysi biri ekanligini aniqlash kerak bo'ladi.

Men ikkita datchikni "kirish" va "chiqish" deb atadim, bu odatda displey modulida sensori "ichkarida" bo'lgan tijorat birliklariga, boshqa sensori kabelda joylashganki, uni boshqa tomonga qo'yish mumkin. tashqi devor va shuning uchun "tashqarida" bo'ling.

Turli xil problarni aniqlashning odatiy usuli - bu qurilma manzillarini aniqlash va identifikator yorlig'i bilan birga dasturiy ta'minotga joylashtirish. Men ko'rgan boshqa barcha loyihalar DallasTemperature kutubxonasidan foydalanadimi yoki yo'qmi, bu yondashuvdan foydalanadi.

Mening maqsadim dasturiy ta'minot sensorlar avtomatik ravishda aniqlanishi va ularni "kirish" va "chiqish" uchun to'g'ri ajratilishi edi. Ularni alohida Arduino pinlariga o'rnatish orqali qilish juda oson. Ushbu loyihada A0 dan A3 gacha va A6 va A7 ishlatilmaydi, shuning uchun ulardan bittasini bu holatda ishlatish mumkin edi. Ammo men bitta OneWire avtobusida sensorlar bilan avtomatik identifikatsiyalash ishini bajarishga muvaffaq bo'ldim.

Bu shunday ishlaydi.

OneWire kutubxonasida "OneWireObject.search (manzil)" buyrug'i mavjud, bu erda "manzil" - 8 baytli massiv va "OneWireObject" - bu ilgari yaratilgan OneWire obyekti misolining nomi. Unda siz xohlagan ism bo'lishi mumkin. Meniki "ds" deb nomlanadi. Siz "qidirish" buyrug'ini berganingizda, OneWire kutubxonasi bitta simli avtobusda signal beradi. Agar u javob beradigan sensorni topsa, u "TRUE" boolean qiymatini qaytaradi va "manzil" qatorini sensorning 8 baytli yagona identifikatori bilan to'ldiradi. Bu identifikator oilaviy kodni (boshida) va chek summasini (oxirida) o'z ichiga oladi. Orasida 6 ta bayt bor, ular o'z oilasidagi sensorni aniqlaydi.

OneWire avtobusidagi barcha qurilmalarni aylanib o'tib, har safar bu buyruq berilganda bitta natija (manzili va TRUE qaytishi) olinadi. Har bir qurilma javob berganidan so'ng, keyingi safar "qidiruv" chiqarilganda, qaytish "FALSE" bo'lib, avtobusdagi har bir qurilma allaqachon javob berganligini ko'rsatadi. Agar "qidiruv" qayta chiqarilsa, birinchi qurilma yana javob beradi va hokazo. Qurilmalar har doim bir xil tartibda javob beradi. Javoblar tartibi OneWire avtobusidagi qurilmalarning identifikatorlariga asoslangan. Bu qurilma identifikatorlarining ahamiyatsiz bitlaridan boshlangan ikkilik qidiruvga o'xshaydi. Bu identifikatorlarni topish uchun ishlatiladigan protokol juda murakkab va https://pdfserv.maximintegrated.com/en/an/AN937.pd pdf hujjat bo'lgan "iButton standartlari kitobi" hujjatining 51-54 -betlarida tasvirlangan. …

Men bu qidiruv jarayonini bitta avtobusda 1 tadan 11 tagacha datchiklar yordamida sinab ko'rdim va ma'lum bir qurilmalar to'plamiga javob berish tartibi har doim bir xil bo'lganini topdim, lekin avtobus oxiriga yangi qurilma qo'shganimda boshqa yo'l yo'q edi Qidiruv tartibida qaerda paydo bo'lishini oldindan aytishim mumkin edi. Misol uchun, men qo'shgan 11 -sensor 5 -pozitsiyada keldi; va avtobusga qo'ygan birinchi sensori qidiruv tartibidagi oxirgi bo'lib qoldi.

Ikkita datchikli ushbu loyihada ulardan biri RTC modulida lehimlangan; ikkinchisi bortdagi erkak va ayol kabeliga ulangan. Uni osongina ajratish mumkin.

Kabeldagi sensor ("chiqish" sensori) ajratilganda, "qidirish" buyrug'i "HAQIQIY" va "FALSE" o'zgaruvchan qaytishlarni chiqaradi.

Kabeldagi sensor ulanganda, "qidirish" buyrug'i 3 bosqichli tsiklni hosil qiladi, ikkita "TRUE" va bitta "FALSE" qaytadi.

Mening protseduram FALSE natijasi qaytarilmaguncha 1, 2 yoki 3 ta "qidirish" buyruqlarini berishdir. Keyin yana ikkita "qidirish" buyrug'ini chiqaraman. Agar ikkinchisi ishlamasa (ya'ni FALSE), bilaman, avtobusda faqat bitta sensor bor va u "kirish" sensori. Qurilma identifikatori qayd qilinadi va "kirish" sensori uchun ajratiladi.

Keyinchalik, agar birinchi va ikkinchi qaytish HAQIQAT bo'lsa, avtobusda ikkita datchik borligini bilaman. Men ularning qaysi biri "kirish" sensori bilan tengligini tekshiraman, ikkinchisini "chiqish" sensori sifatida ajrataman.

Yana bir muhim jihat shundaki, ikkita sensordan natijalarni yig'ish "ROMni o'tkazib yuborish" buyrug'i bilan "konvertatsiyani boshlash" ni yuborish orqali amalga oshiriladi. Bizda buyruqlarni bitta qurilmaga (uning o'ziga xos identifikatoridan foydalanib) yoki avtobusdagi barcha qurilmalarga yuborish imkoniyati mavjud (ROMni o'tkazib yuborish). Kod quyidagicha ko'rinadi:

ds.reset (); //

// "skip ROM" buyrug'ini yuboring (shuning uchun keyingi buyruq ikkala datchikda ishlaydi) ds.write (0xCC); // ROM buyrug'ini o'tkazib yuborish ds.write (0x44, 0); // ikkala probda ham konvertatsiya qilishni boshlang temperatur_state = wait_convert; // kechiktirish holatiga o'ting

Kerakli kechikish vaqti o'tgach, harorat har bir sensordan alohida qabul qilinadi. Bu erda ikkinchi sensorning kodi (ya'ni OUT sensori).

agar (bayroq2) {

mavjud = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Scratchpad "out" probe ma'lumotlarini o'qing [0] = ds.read (); ma'lumotlar [1] = ds.read (); temperature_out = (ma'lumotlar [1] << 8) + ma'lumotlar [0]; temperatura_out = (6 * harorat_siz) + harorat_siz / 4; // 6.25 ga ko'paytiring} boshqa {// flag2 emas - ya'ni chiqish sensori ulanmagan temperatur_out = 30000; // harorat sensori ishlamasa 300.00 C da tuzatish} // if ning oxiri (flag2)

Men ushbu dasturiy ta'minotning ko'p qismini LCD, RTC va SD-kartani qo'llab-quvvatlamasdan, harorat sensorlaridagi mustaqil eskizda ishlab chiqdim. Ushbu rivojlanish eskizi quyidagi faylda.

3 -qadam: dastlabki natijalar

Dastlabki natijalar
Dastlabki natijalar

Ushbu jadval o'qishning birinchi ikki kunlik kunlarining kombinatsiyasi.

Tavsiya: