Mündəricat:

2 Sensorlu DIY Giriş Termometri: 3 Addım (Şəkillərlə)
2 Sensorlu DIY Giriş Termometri: 3 Addım (Şəkillərlə)

Video: 2 Sensorlu DIY Giriş Termometri: 3 Addım (Şəkillərlə)

Video: 2 Sensorlu DIY Giriş Termometri: 3 Addım (Şəkillərlə)
Video: Home Assistant. Dərs 9.4 ADD-ON - Xiaomi Gateway 3, zigbee2mqtt inteqrasiyası 2024, Iyul
Anonim
2 Sensorlu DIY Giriş Termometri
2 Sensorlu DIY Giriş Termometri
2 Sensorlu DIY Giriş Termometri
2 Sensorlu DIY Giriş Termometri

Bu layihə, əvvəlki "DIY Giriş Termometri" layihəmin bir təkmilləşdirməsidir. Temperatur ölçmələrini bir mikro SD karta qeyd edir.

Avadanlıq dəyişiklikləri

DS18B20 temperatur sensorunu real vaxt saat moduluna əlavə etdim, burada bu cihaz üçün çap lövhəsində təminat var; və RTC -nin "DS" pinindən müvafiq teli Arduino D2 -yə əlavə etdi.

Proqram dəyişiklikləri

Sonra proqramı əlavə etdim və dəyişdirdim. Əsas dəyişikliklər bunlardır:

LCD ekranda "Giriş" və "Çıxış" iki temperaturu göstərilir.

SD karta yazılan qeyd sənədlərində iki temperatur sahəsi var: "Temperatur In" və "Temperatur Out".

SD kartda daha uzun qeyd olduğu üçün EEPROM üçün işləyən tamponlar daha böyük idi və bunun nəticəsində yaddaş problemi yaşamağa başladım. String obyekti əvəzinə bütün sətirlər üçün xarakter dizilərindən istifadə etmək də daxil olmaqla dinamik yaddaş istifadəsini azaltmağa yönəlmiş bir sıra dəyişikliklər etdim.

Proqramın temperatur alan hissəsində böyük dəyişikliklər var ki, bunların çoxu hansı probun "daxilində", hansının "kənarda" olduğunu müəyyən etməklə bağlıdır. Bu identifikasiya əsasən avtomatikdir. Nədənsə problar dəyişdirilərsə, "çıxan" probu çıxarıb yenidən qoşaraq düzəldə bilərsiniz. Mən bu dönüşü özüm yaşamamışam. Proqramçıya və ya istifadəçiyə sensor ünvanlarını yazmağa ehtiyac yoxdur, proqram özü temperatur sensoru ünvanlarını kəşf edir.

Etdiyim testlərə görə, temperatur problarının müəyyən edilməsi və SD kartın çıxarılmasına və dəyişdirilməsinə cavab hələ də problemsiz işləyir.

Addım 1: Proqram İnkişafı

Bu addım başa çatan layihə üçün tam proqram təminatı verir. Arduino IDE 1.6.12 istifadə edərək tərtib etdim. 21, 400 bayt proqram yaddaşı (69%) və 1, 278 bayt dinamik yaddaş (62%) istifadə edir.

Nə olduğunu aydınlaşdıracaq ümidlə koda şərhlər qoydum.

Addım 2: İki Temperatur Sensoru ilə İşləmək - Detallar

Bu proqram "OneWire" kitabxanasından istifadə edir. Heç bir "DallasTemperature" və ya oxşar kitabxanalardan istifadə etmir. Əksinə, temperatur sensörlərindən verilən əmrlər və məlumatlar eskizlə edilir və onları görmək və başa düşmək çox asandır. OneWire kitabxana əmrlərinin faydalı bir siyahısını tapdım

www.pjrc.com/teensy/td_libs_OneWire.html

İki (və ya daha çox) temperatur sensoru olduqda, hansının hansının olduğunu müəyyən etmək lazım gəlir.

İki sensorumuzu "daxil" və "çıxmaq" adlandırdım, bu, normal olaraq "içərisində" olan ekran modulunda bir sensoru olan və digər sensoru kabeldə yerləşdirmək üçün kommersiya qurğuları üçün xarakterikdir. xarici bir divar və buna görə də "kənarda" olun.

Fərqli probları müəyyən etmək üçün adi yanaşma, cihaz ünvanlarını kəşf etmək və onları müəyyən edən bir etiketlə birlikdə proqrama daxil etməkdir. Gördüyüm bütün digər layihələr DallasTemperature kitabxanasından istifadə etsələr də istifadə etməsələr də bu yanaşmadan istifadə edirlər.

Niyyətim, proqramın avtomatik olaraq sensorları müəyyən etməsi və onları "daxil" və "çıxmaq" üçün düzgün ayırmasıdır. Onları ayrı Arduino sancaqlarına taxaraq etmək kifayət qədər asandır. Bu layihədə A0 -dan A3 -ə və A6 və A7 -dən hamısı istifadə edilmir, buna görə də onlardan biri bu halda istifadə oluna bilərdi. Ancaq eyni OneWire avtobusunda sensorlar ilə avtomatik eyniləşdirmə işi aparmağı bacardım.

Bu kimi işləyir.

OneWire kitabxanasında "ünvan" 8 baytdan ibarət olan "OneWireObject.search (ünvan)" əmri var və "OneWireObject" əvvəllər yaradılmış OneWire obyektinin bir nümunəsidir. İstədiyiniz ad ola bilər. Mənimki "ds" adlanır. Bu "axtarış" əmrini verdiyiniz zaman OneWire kitabxanası bir telli avtobusda bəzi siqnallar verir. Cavab verən bir sensor taparsa, "DOĞRU" bir boolean dəyərini qaytarır və "ünvan" silsiləsini sensorun 8 baytlıq unikal identifikatoru ilə doldurur. Bu identifikatora ailə kodu (əvvəlində) və çek məbləği (sonunda) daxildir. Arasında, ailəsindəki sensoru bənzərsiz şəkildə təyin edən 6 bayt var.

OneWire avtobusundakı bütün qurğular arasında velosiped sürərkən bu əmr hər dəfə verildikdə bir nəticə (ünvan və DOĞRU qaytar) əldə edilir. Hər cihaz cavab verdikdən sonra, növbəti dəfə "axtarış" verildikdə, geri dönüş "YALAN" olur, bu da avtobusdakı hər cihazın artıq cavab verdiyini göstərir. "Axtarış" yenidən verilsə, ilk cihaz yenidən cavab verir - vəssalam. Cihazlar həmişə eyni qaydada cavab verir. Cavab sırası OneWire avtobusundakı cihazların identifikatorlarına əsaslanır. Cihaz identifikatorlarının ən az əhəmiyyətli bitlərindən başlayaraq ikili bir axtarış kimi görünür. Bu identifikatorları tapmaq üçün istifadə olunan protokol olduqca mürəkkəbdir və https://pdfserv.maximintegrated.com/en/an/AN937.pd ünvanındakı pdf sənəd olan "iButton Standartları Kitabı" sənədinin 51-54 -cü səhifələrində təsvir edilmişdir. …

Bu axtarış prosesini tək bir avtobusda 1 -dən 11 -ə qədər sensorlar ilə sınadım və müəyyən bir cihaz dəsti üçün cavab sifarişinin həmişə eyni olduğunu gördüm, ancaq avtobusun sonuna yeni bir cihaz əlavə etdiyim zaman heç bir yol yox idi Axtarış qaydasında harada görünəcəyini təxmin edə bilərdim. Məsələn, əlavə etdiyim 11 -ci sensor 5 nömrəli mövqedə gəldi; və avtobusa qoyduğum ilk sensör axtarış sırasındakı son hissə idi.

İki sensoru olan bu layihədə onlardan biri RTC modulunda lehimlənir; digəri lövhədə bir kişi başlığı və kabeldə bir qadın başlığı ilə bağlanır. Asanlıqla ayrıla bilər.

Kabeldəki sensor ("çıxan" sensor) ayrıldıqda, "axtarış" əmri alternativ "TRUE" və "FALSE" qaytarır.

Kabel üzərindəki sensor bağlandıqda, "axtarış" əmri 3 mərhələli bir dövr yaradır, iki "TRUE" və bir "FALSE" qaytarılır.

Mənim prosedurum YALAN nəticə qaytarana qədər 1, 2 və ya 3 "axtarış" əmrləri verməkdir. Sonra daha 2 "axtarış" əmri verirəm. İkincisi uğursuz olarsa (yəni FALSE) avtobusda yalnız bir sensor olduğunu və bunun "daxil" sensoru olduğunu bilirəm. Cihazın kimliyi qeydə alınır və "giriş" sensoruna ayrılır.

Daha sonra həm birinci, həm də ikinci geri dönüş HƏQİQƏTLİdirsə, avtobusda iki sensör olduğunu bilirəm. Hansı birinin "daxil" sensoru ilə eyni şəxsiyyətə sahib olduğunu yoxlayıram, digərini isə "çıxan" sensor olaraq ayırıram.

Digər kiçik bir nöqtə, iki sensordan alınan nəticələrin "ROMu atla" əmri ilə "çevrilməyə başla" göndərilməsi ilə edilməsidir. Əmrləri tək bir cihaza (özünəməxsus identifikatorundan istifadə etməklə) və ya avtobusdakı bütün cihazlara göndərmək seçimimiz var (ROMu atla). Kod belə görünür:

ds.reset (); //

// "skip ROM" əmrini göndərin (belə ki, növbəti əmr hər iki sensorda işləyir) ds.write (0xCC); // ROM əmrini atla ds.write (0x44, 0); // hər iki zondda çevrilməyə başla temperatur_state = gözləmə_dönüşü; // gecikmə vəziyyətinə keçin

Lazım olan gecikmə vaxtı keçdikdə, temperaturlar hər sensordan fərdi olaraq alınır. Budur ikinci sensorun kodu (yəni OUT sensoru).

əgər (bayraq2) {

indiki = ds.reset (); ds.seç (DS18B20_addr_out); ds.write (0xBE); // "out" probe məlumatlarının Scratchpadini oxuyun [0] = ds.read (); data [1] = ds.read (); temperature_out = (data [1] << 8) + data [0]; temperatur_çıxışı = (6 * temperatur_çıxışı) + temperatur_sayı / 4; // 6.25 ilə vurun} başqa {// bayraq2 deyil - yəni Çıxış sensoru bağlı deyil temperatur_out = 30000; // temperatur sensoru işləmirsə 300.00 C -də düzəldin} // if if (flag2)

Bu proqramın çox hissəsini yalnız LCD, RTC və SD kart dəstəyinin çətinlikləri olmadan, temperatur sensörləri olan müstəqil bir eskizdə hazırladım. Bu inkişaf eskizi aşağıdakı faylda.

Addım 3: İlkin Nəticələr

İlkin Nəticələr
İlkin Nəticələr

Bu qrafik oxuların ilk iki hissə gününün birləşməsidir.

Tövsiyə: