Terim: 4 telli direnç termometre sensörü

Bu yazıda, farklı sıcaklık sensörlerini ve bunların duruma göre nasıl kullanılabileceğini tartışacağız. Sıcaklık, derece cinsinden ölçülen fiziksel bir parametredir. Herhangi bir ölçüm sürecinin önemli bir parçasıdır. Doğru sıcaklık ölçümleri gerektiren alanlar arasında ilaç, biyolojik araştırma, elektronik, malzeme araştırması ve elektrikli ürünlerin termal performansı bulunur. Sıcaklıktaki fiziksel değişiklikleri tespit etmemizi sağlayan ısı enerjisi miktarını ölçmek için kullanılan bir cihaz, sıcaklık sensörü olarak bilinir. Dijital ve analogdurlar.

Ana sensör türleri

Genel olarak, veri elde etmenin iki yöntemi vardır:

1. İletişim... Temaslı sıcaklık sensörleri bir nesne veya maddeyle fiziksel temas halindedir. Katıların, sıvıların veya gazların sıcaklığını ölçmek için kullanılabilirler.

2. Temassız... Temassız sıcaklık sensörleri, bir nesne veya madde tarafından yayılan kızılötesi enerjinin bir kısmını yakalayarak ve yoğunluğunu algılayarak sıcaklığı algılar. Yalnızca katı ve sıvılarda sıcaklığı ölçmek için kullanılabilirler. Renksizlikleri (şeffaflıkları) nedeniyle gazların sıcaklığını ölçemezler.

Sensör seçim kuralları

Yerden ısıtma için sıcaklık sensörü, güç, üst kaplama türü, kurulum yöntemi ve ek işlevselliğe sahip ekipman gibi özellikler dikkate alınarak seçilir.

Güç

Değer kesinlikle sıcak zeminin gereksinimlerini ve yükünü karşılamalıdır. Aksi takdirde sensör düzgün çalışmayacaktır. Isıtma elemanının gücü regülatörün gücünden daha büyük olduğunda, artan yük nedeniyle cihaza zarar gelmesini önlemek için aralarına ek olarak bir manyetik yolverici takılması gerekli hale gelir.

Özellik seti

Sıcak zemin, ısıtma elemanlarının çalışmasını ayarlamanıza izin veren bir elektrik ünitesi tarafından kontrol edilir. Modern kontrolörler, sistemi başlatma ve enerjiyi kesme, sıcaklık koşullarını ayarlama ve ayrıca ısıtma elemanını bağlama ve ayırma sıklığını ayarlama gibi işlevlere sahiptir.

Kullanım kolaylığı

Programlamayı anlamayacağınızı düşünüyorsanız, karmaşık bir cihaz satın almamalısınız. Tüm işlevlerini hesaba katsa bile. Örneğin, yaşlı insanlar programlanabilir cihazlarla uğraşmayı oldukça sorunlu buluyor. Mekanik seçeneği seçseler iyi olur.

Bağlanması kolay

Termostatın beraberindeki dokümantasyon her zaman yerden ısıtma sensörünün nasıl bağlanacağını gösterir. Terminaller, kontrol ünitesinin bir tarafında kenarda bulunur. Elektrik kablolarını şemaya göre bağladıktan sonra, ısıtma sisteminin performansını kontrol etmek gerekli olacaktır. Bunu yapmak için, sıcaklık sensörünün ve ısıtma elektrik kablosunun terminallerindeki direnci ölçün veya sıcak bir zemin bağlayın ve sıcaklık değerlerini sıfırdan SNIP tarafından önerilen göstergeye, yani 30 ° C'ye yükseltin.

Görünüm

Bir termal sensör sadece işlevsel olarak anlaşılabilir değil, aynı zamanda tasarım açısından da çekici olmalıdır. Modern düğmeler, çeşitli renk ve şekillerde gelir. Odanın içi ile uyumlu bir seçenek seçebilirsiniz.

Sıcaklık sensörü türleri

Birçok farklı sıcaklık sensörü türü vardır.Bir termostatik cihazın basit açma / kapama kontrolünden, bitki yetiştirme işlemlerinde kullanılan ısıtma işlevine sahip karmaşık su kaynağı kontrol sistemlerine kadar. İki ana sensör türü, temaslı ve temassız, ayrıca dirençli, voltaj ve elektromekanik sensörlere ayrılmıştır. En sık kullanılan üç sıcaklık sensörü şunlardır:

  • Termistörler
  • Direnç termokuplları
  • Termokupl

Bu sıcaklık sensörleri, operasyonel parametreler açısından birbirinden farklıdır.

cihaz

Bu, algılama elemanının terminallerine bağlanan tellerden oluşan bir termokupldur (plaka veya çubuk).

Sıcaklık bilgisine bağlı olarak hassas parçanın direnci sırasıyla değişir, termostata verilen elektrik sinyali değişir. Böylece ortam sıcaklığının mutlak değeri belirlenir.

Sıcaklık sensörü bağlantı şeması

Harici (yerden ısıtma için harici sıcaklık sensörü), kural olarak, son kat döşemesinin altında bulunur ve sıcaklık göstergelerini ölçer. Regülatörün içinde bulunan dahili (yerleşik) ve hava ısıtma seviyesini belirler.

Sıcaklık sensörlerinin tasarımı, sistemin özelliklerine bağlı olarak seçilir:

Termistör

Termistör, fiziksel direncini sıcaklıkla değiştiren hassas bir dirençtir. Tipik olarak termistörler, kobalt, manganez veya nikel oksit gibi seramik bir yarı iletken malzemeden yapılır ve camla kaplanır. Herhangi bir sıcaklık değişikliğine nispeten hızlı tepki veren küçük, yassı, sızdırmaz disklerdir.

Malzemenin yarı iletken özelliklerinden dolayı, termistörler negatif bir sıcaklık katsayısına (NTC) sahiptir, yani. artan sıcaklıkla direnç azalır. Bununla birlikte, artan sıcaklıkla direnci artan PTC termistörleri de vardır.

Termistör programı

Termistörlerin avantajları

  • Sıcaklık değişimlerine yüksek tepki hızı, doğruluk.
  • Düşük maliyetli.
  • 2.000 ila 10.000 ohm aralığında daha yüksek direnç.
  • 300 ° C'ye kadar sınırlı bir sıcaklık aralığında çok daha yüksek hassasiyet (~ 200 ohm / ° C)

Direncin sıcaklık bağımlılıkları

Direncin sıcaklığa bağımlılığı aşağıdaki denklemle ifade edilir:

Nerede A, B, C - bunlar sabitlerdir (hesaplama şartları ile sağlanır), R - Ohm cinsinden direnç, T - Kelvin cinsinden sıcaklık. Dirençteki bir değişiklikten sıcaklıktaki değişikliği veya tersini kolayca hesaplayabilirsiniz.

Termistör nasıl kullanılır?

Termistörler, oda sıcaklığında (25 ° C) direnç değerleri için derecelendirilmiştir. Bir termistör pasif dirençli bir cihazdır, bu nedenle akım çıkış voltajının izlenmesini gerektirir. Kural olarak, şebeke gerilimi bölücü oluşturan uygun dengeleyicilerle seri olarak bağlanırlar.

Misal: 25 ° C'de 2,2K ve 80 ° C'de 50 ohm direnç değerine sahip bir termistör düşünün. Termistör, 5 V'luk bir besleme üzerinden 1 kΩ'luk bir dirençle seri olarak bağlanmıştır.

Bu nedenle çıkış voltajı şu şekilde hesaplanabilir:

25 ° C'de, RNTC = 2200 ohm;

80 ° C'de, RNTC = 50 ohm;

Bununla birlikte, oda sıcaklığında, doğrusal olmadıkları için farklı termistörler için standart direnç değerlerinin farklı olduğuna dikkat etmek önemlidir. Bir termistör, üstel bir sıcaklık değişimine ve dolayısıyla belirli bir sıcaklık için direncini hesaplamak için kullanılan bir beta sabitine sahiptir. Direnç çıkış voltajı ve sıcaklığı doğrusal olarak ilişkilidir.

LMT01 sıcaklık sensörlerinde iki telli akım arayüzünün özellikleri

İncir. 4. LMT01 ile mevcut arayüzün organizasyonu

Yukarıda bahsedildiği gibi, ölçüm sonucunu iletmek için LMT01, akım sayma darbeleri biçiminde bir bit dizisi üretir. Bunun için sensör sadece iki kabloya ihtiyaç duyar (Şekil 4). Akım darbelerini dijital mikro devrelere tanıdık biçime dönüştürmek için, bazı durumlarda tek bir direnç kullanabilirsiniz (ancak her zaman değil - aşağıda daha fazlası).

Güç verildikten sonra LMT01, 54 ms'ye kadar süren bir ölçüm döngüsü başlatır (Şekil 5). Bu süre zarfında, sensör çıkışında 28 ... 39 μA'lık düşük seviyeli bir akım oluşur. Bunu, 112 ... 143 μA genlikli akım darbeleri şeklinde ölçüm sonucunu aktarma döngüsü takip eder. Alıcı mikro denetleyici, örneğin yerleşik sayaç / zamanlayıcıyı kullanarak bu darbeleri saymalıdır. Sinyallerin frekansı yaklaşık 82 ... 94 kHz olduğundan, maksimum darbe sayısı (4095) ile iletim süresi 50 ms'ye ulaşabilir.

İncir. 5. LMT01 sensörünün zamanlama diyagramları

Sayılan darbe sayısı (PC) ile sıcaklık değeri formül 1'e göre belirlenebilir:

, (1)

Böylece, 0 ° C'de, sensör yaklaşık 800 darbe üretecektir.

Ne yazık ki, LMT01 sensöründeki minimum voltaj düşüşündeki sınırlama nedeniyle bir harici direnç kullanmak her zaman mümkün değildir. Ölçüm döngüsü sırasında sensördeki düşüş en az 2,15 V olmalıdır. Veri aktarım döngüsü sırasında voltaj düşüşü 2 V'a düşürülebilir. Bazı kaba hesaplamalar yapmak zor değildir.

Besleme voltajı Vdd = 3,3 V olan bir cihazı düşünün. Ölçüm döngüsü sırasında sensör boyunca izin verilen minimum düşüşü 2,15 V'a eşitlersek, direnç boyunca 1,15 V'den fazla olmayan bir sinyal gözlemlenecektir. kontrolörler için mantıksal birim 0, 7 ∙ Vdd'dir ve bizim durumumuz için 2.31 V olacaktır. Sonuç olarak, basit bir direnç kullanımı imkansız hale gelir, çünkü mikrodenetleyici basitçe bir mantıksal birim. Bu durumdan çıkış yolu, yerleşik bir karşılaştırıcıya veya seviye dönüştürme devrelerine sahip bir mikro denetleyicinin kullanılması olabilir.

Dirençli sıcaklık sensörleri

Sıcaklık direnç sensörleri (RTD'ler), elektrik direnci sıcaklığa göre değişen platin gibi nadir metallerden yapılır.

Dirençli sıcaklık dedektörleri, pozitif bir sıcaklık katsayısına sahiptir ve termistörlerin aksine, yüksek sıcaklık ölçüm doğruluğu sağlar. Ancak duyarlılıkları zayıftır. Pt100, 0 ° C'de 100 ohm'luk standart direnç değeriyle en yaygın olarak bulunan sensördür. Ana dezavantaj yüksek maliyettir.

Bu tür sensörlerin avantajları

  • -200 ila 650 ° C arasında geniş sıcaklık aralığı
  • Yüksek düşüş akımı çıkışı sağlayın
  • Termokupllara ve RTD'lere kıyasla daha doğrusal

Ek bileşenler ve sensör devresi

Ana diyot cihazlarına ek olarak, sıcaklık sensörü devresi bir dizi ek eleman içerir. Her şeyden önce, cihazı yabancı etkilerden koruyan bir kapasitördür. Gerçek şu ki, işlemsel yükselteç, değişen elektromanyetik alanların etkilerine karşı oldukça hassastır. Kondansatör, negatif geri besleme enjekte ederek bu bağımlılığı ortadan kaldırır.

Sıcaklık sensörü devresi

Bir transistör ve bir zener diyotun katılımıyla stabilize bir referans voltajı oluşur. Burada, daha yüksek doğruluk sınıfına sahip dirençler, düşük bir direnç katsayısı değeri ile kullanılır. Böylelikle, tüm şema ek istikrar kazanır. Sıcaklık koşullarında olası önemli değişiklikler olması durumunda, hassas dirençler ihmal edilebilir. Yalnızca küçük aşırı ısınmayı kontrol etmek için kullanılırlar.

Termokupl

Termokupl sıcaklık sensörleri en çok doğru olmaları, -200 ° C ila 2000 ° C arasında geniş bir sıcaklık aralığında çalışması ve nispeten ucuz olmaları nedeniyle kullanılır. Aşağıdaki fotoğrafta telli ve fişli bir termokupl:

Termokupl işlemi

Bir termokupl, sıcaklık üzerinde potansiyel bir fark oluşturmak için birbirine kaynaklanmış iki farklı metalden oluşur. İki bağlantı arasındaki sıcaklık farkından, sıcaklığı ölçmek için kullanılan bir voltaj üretilir. İki bağlantı arasındaki voltaj farkına Seebeck etkisi denir.

Her iki bileşik de aynı sıcaklıktaysa, farklı bileşiklerdeki farklılık potansiyeli sıfırdır, yani. V1 = V2. Bununla birlikte, bağlantılar farklı sıcaklıklarda ise, iki bağlantı arasındaki sıcaklık farkına göre çıkış voltajı, V1 - V2 farklarına eşit olacaktır.

Sıcaklık sensörü türleri

Elektronik-mekanik

En basit ve en ucuz regülatör türü. Ana çalışma parçası, sıcaklıktaki artış veya düşüşe tepki veren özel bir metal plakadır. Isıtma ve soğutma sırasında plakanın eğriliği değiştirilerek sistem açılır ve kapanır. Böyle bir regülatörde tam sıcaklık değerini ayarlamak işe yaramayacaktır.

Elektronik

Cihaz, özel bir sinyal üreten özel bir elemana sahiptir. Güç, doğrudan ortam sıcaklığının değerlerine bağlıdır. Bu tür cihazlarda, bir derecenin kesirine kadar doğru ısıtma sıcaklığı okumaları ayarlayabilirsiniz. Sistem, düğmeler ve küçük bir ekranla kontrol edilir.

Programlanabilir

Termokuplların en pahalısı. Üzerinde, tüm sistemin regülatör tarafından açılıp kapatıldığı belirli değerleri ayarlayabilirsiniz. Cihaz sayesinde, odada belirli bir kişiye uygun bir mikro iklim yaratılır. Termostatı, sistemin belirli bir zamanda açılmasını sağlayacak şekilde yapılandırmak mümkündür. Yani zeminler, sahibi eve gelmeden önce ısıtılır ve aynı zamanda mal sahibi olmadığında elektrik tüketilmez.

Pek çok model, parlak ve şık tasarımlara ve bilgileri görüntüleyen ve ince ayarı kolaylaştıran LCD ekranlara sahiptir.

Hazır kütüphanelerle çalışma

Bu nedenle, ağdaki DS18B20 sıcaklık sensörleriyle çalışmak için çok sayıda kitaplık bulabilirsiniz, ancak kural olarak en popüler iki tanesi kullanılır. Bir kütüphane ve bir kütüphanedir. Dahası, ikinci kitaplık birinciye göre daha uygun bir eklentidir ve onsuz kullanılamaz. Başka bir deyişle, DallasTemperature.h kitaplığını bağlamadan önce, OneWire.h dosyasını da bağlamanız gerekir. Arduino IDE'ye belirli kitaplıkların nasıl kurulacağı mümkündür.

Kitaplık OneWire.h

Önce OneWire.h kitaplığıyla çalışmayı düşünelim. Aşağıda, kısa bir açıklama ile işlevlerinin bir listesi bulunmaktadır.

  • OneWire temperatureSensor (uint8_t pinNumber)

Bu işlev, OneWire sınıfının yapıcısıdır ve bir temperatureSensor nesnesi oluşturur, ör. pinNumber pininde bir sensör veya bir sensör grubu ile bir iletişim kanalı açar. Örneklerimizde (Şekil 3-5) bu, Arduino Nano'nun "D2" pinidir. DQ DS18B20 veri yolunu bağladığımız da buydu.

Misal:

OneWire sıcaklık sensörü
(
D2
);
// D2 pinine bir sensör veya bir grup sensör bağlı

  • uint8_t search (addrArray)

İşlev, 1-Wire veri yolunda sonraki aygıtı arar ve bulunduğunda adres değerini addrArray dizisine girerek true değerini döndürür. Her sensörün benzersiz adresi 64 bit olduğundan, addrArray boyutu 8 bayt olmalıdır. Arama başarısız olursa, işlev yanlış döndürür. Bir veri yoluna birkaç sıcaklık sensörü bağlandığında, veri yolundaki tüm cihazlar numaralandırılıncaya kadar, arama işlevine yapılan her çağrı bir sonraki sensöre, ardından bir sonrakine vb. Adreslenecektir. Bu işlevin özelliği, önceden işlenmiş adresleri hatırlamaktır. Sırayı sıfırlamak için, aşağıda tartışılacak olan reset_search () işlevini çağırmanız gerekir.

Misal:

bayt addrArray
[
8
];
// 64 bitlik bir adres depolamak için dizi // Cihaz veriyolunda hiç yoksa veya tüm cihazlar numaralandırılmışsa // ilgili bilgileri bağlantı noktası monitöründe görüntüleyin
Eğer(!
Sıcaklık sensörü
.
arama
(
addrArray
))
Seri
.
println
(
"Başka adres yok."
);
// Aksi takdirde, sonraki aygıt iletişim durumu isteğine yanıt verdiyse, // 64 bit adresini bağlantı noktası izleyicisinde görüntüleyin
Başka{için(
ben
=
0
;
ben
<
8
;
ben
++)
Seri
.
Yazdır
(
addrArray
[
ben
],
HEX
);
}

  • geçersizreset_search ()

Yukarıda belirtildiği gibi, bu işlev 1-Wire veriyolundaki aygıtlar için sorgulama sırasını en başa sıfırlar. İkincisi yanlış döndürdüğünde her zaman arama işlevi ile birlikte kullanılmalıdır. Örneğin otobüste 5 sensörlü durumumuzda arama fonksiyonunu 5 defa arayarak 5 adres alabiliriz. Altıncı kez, arama işlevi bize yanlış döndürecektir ve bunu, kuyruk temizlenene kadar sonraki her ankette yapacaktır. Anlaşılmaz durumlardan kaçınmak için buna dikkat etmelisiniz.

Misal:

bayt addrArray
[
8
];
// 64 bitlik bir adres depolamak için dizi // Cihaz veriyolunda hiç yoksa veya tüm cihazlar numaralandırılmışsa // arama döngüsünü tekrarlamak için sorgulama kuyruğunu sıfırlayın
Eğer(!
Sıcaklık sensörü
.
arama
(
addrArray
))
Sıcaklık sensörü
.
reset_search
();

  • uint8_tSıfırla ()

1-Kablolu sıfırlama işlevi iletişim sürecini başlatır. Sıcaklık sensörü ile her iletişim kurmak istediğimizde denir. Dönüş değerleri doğru veya yanlış olabilir. Veriyolu üzerindeki en az bir sensör sıfırlamaya bir varlık darbesi ile yanıt verirse gerçek değeri alacağız. Aksi takdirde yanlış oluruz;

Misal:
Eğer(!
Sıcaklık sensörü
.
Sıfırla
())
Seri
.
println
(
"Otobüste sensör yok"
);Başka
Seri
.
println
(
"Sensör algılandı"
);

  • geçersizseçin (addrArray)

İşlev, şu anda çalışmak istediğimiz belirli bir cihazı seçmenize izin verir. Seçim, addrArray dizisine girilen 64 bitlik adresin açıkça belirtilmesiyle yapılır. Adres, bir diziye yazarak veya daha önce arama işlevi tarafından okunmuş olanı kullanarak açıkça ayarlanabilir. Seçme işlevi çağrılmadan önce sıfırlama işlevinin çağrılması gerektiği unutulmamalıdır. Bir sonraki sıfırlamayla, seçilen sensörle bağlantı, seçilecek bir sonraki çağrıya kadar kesilir.
Misal:
bayt addrArray
[
8
];
// 64 bitlik bir adres depolamak için dizi // Cihaz veriyolunda hiç yoksa veya tüm cihazlar numaralandırılmışsa // ilgili bilgileri bağlantı noktası izleyicisine verir
Eğer(!
Sıcaklık sensörü
.
arama
(
addrArray
))
Seri
.
println
(
"Başka adres yok."
);
// Aksi takdirde, sonraki cihaz iletişim durumu isteğine yanıt verdiyse, // sonraki çalışma için onu seçin
Başka{
Sıcaklık sensörü
.
Sıfırla ()
;
// temperatureSensor sıfırlama komutunu vermeyi unutmayın
.
seçin (addrArray)
;
// Okuma adresi ile bir dizi belirtin
}

  • geçersizatla ()

İşlev, yalnızca veri yolunda bir sensörle çalışırken geçerlidir ve basitçe cihaz seçimini atlar. Başka bir deyişle, arama işlevini kullanamaz ve bu nedenle tek sensörünüzle hızlı bir şekilde erişemezsiniz.

Misal:
Sıcaklık sensörü.
Sıfırla
();
// temperatureSensor lastiğini sıfırlayın
.
atlama
();
// Daha fazla çalışmak için tek sensörü seçin

  • geçersizyazmak (uint8_tbayt, uint8_t powerType = 0)

Fonksiyon, veri yolundaki seçili cihaza bir bayt veri gönderir. PowerType argümanı, sensörler için güç kaynağı türünü belirtir (0 - sensörler doğrudan harici bir kaynaktan beslenir; 1 - parazitik güçle çalışan bir bağlantı kullanılır). Varsayılan olarak 0 olduğundan, harici güç kullanılıyorsa ikinci parametre ihmal edilebilir.

Misal:

Sıcaklık sensörü
.
Sıfırla
();
// temperatureSensor lastiğini sıfırlayın
.
atlama
();
// Daha sonra onunla çalışmak için tek bir sensör seçin // Sıcaklığı dönüştürmek için bir komut gönderin, // temperatureSensor veri yolundan gelen parazitik güce sahip bir bağlantı kullanarak
.
yazmak
(
0x44
,
1
);

  • uint8_toku ()

Bu işlev, bağımlı cihaz (sensör) tarafından 1 Hatlı veri yoluna gönderilen bir bayt veriyi okur.

Misal:

// 1-Wire veri yolundan 9 baytlık veriyi okuyun ve sonucu dizi bayt dizisine yerleştirin
[
9
];için(
uint8_t i
=
0
;
ben
<
9
;
ben
++){
dizi
[
ben
]=
Sıcaklık sensörü
.
okumak
();}

  • statik uint8_t crc8 (const uint8_t * adres, uint8_t uzunluk);

İşlev, sağlama toplamını hesaplamak için tasarlanmıştır. Sıcaklık sensörüyle doğru iletişimi kontrol etmek için tasarlanmıştır. Burada adres, veri dizisinin göstericisidir ve len bayt sayısıdır.

Misal:

bayt addrArray
[
8
];
// 64 bitlik bir adres depolamak için dizi // Cihaz veriyolunda hiç yoksa veya tüm cihazlar numaralandırılmışsa // ilgili bilgileri bağlantı noktası izleyicisine verir
Eğer(!
Sıcaklık sensörü
.
arama
(
addrArray
))
Seri
.
println
(
"Başka adres yok."
);
// Aksi takdirde, sonraki cihaz durum talebine yanıt verdiyse, // adresinin sağlama toplamını kontrol edin
Başka{
// Sağlama toplamı eşleşmezse, bir hata mesajı göster
Eğer(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Seri
.
println
(
"CRC geçerli değil!"
);}}
OneWire.h kütüphanesinin her bir fonksiyonunu ayrı ayrı inceledik ve malzemeyi sabitlemek için, aşağıda parazitik bir güç devresi kullanılarak pin D2'ye bağlanacak olan bir grup DS18B20 sıcaklık sensöründen sıcaklığı okumak için bir taslak vereceğim. Taslak, gerekli tüm noktalar hakkında ayrıntılı yorumlar içerecektir.

#include // DS18B20OneWire ds termal sensörlerle çalışmak için kitaplığı bağlarız
(
2
);
// Arduino'nun D2 pinine bir sensör veya sensör grubu bağlı // PRESET FUNCTION void setup
(
geçersiz
){
Seri
.
başla
(
9600
);
// Seri port ile işin başlatılması} // ANA ÇEVRİM boşluk döngüsü
(
geçersiz
){
bayt i
;
// Bayt mevcut döngüleri için yardımcı değişken
=
0
;
// Sensörün iletişim bayt tipine hazır olup olmadığını belirleyen değişken
;
// Bayt veri yolunda termal sensör tipini tanımlamak için değişken
[
12
];
// Sensör bayt adresinden alınan bilgileri depolamak için dizi
[
8
];
// Float santigrat sensörünün 64 bit adresini depolamak için dizi
,
fahrenhayt
;
// Sıcaklığı hesaplamak için değişkenler // Veriyolundaki cihazlar bulunamazsa veya veri yolundaki tüm cihazlar numaralandırılırsa // ilgili bilgileri bağlantı noktası monitöründe görüntüleyin, kuyruğu sıfırlayın // ve 250 ms bekleyerek tekrar bir arama yapın
Eğer(!
ds
.
arama
(
addr
)){
Seri
.
println
(
"Başka adres yok."
);
Seri
.
println
();
ds
.
reset_search
();
gecikme
(
250
);dönüş;}
// Veriyolunda bir sonraki aygıt bulunursa, benzersiz adresini bağlantı noktası monitöründe // onaltılık biçimde görüntüleyin Seri
.
Yazdır
(
"ROM ="
);için(
ben
=
0
;
ben
<
8
;
ben
++){
Seri
.
yazmak
(
‘ ‘
);
Seri
.
Yazdır
(
addr
[
ben
],
HEX
);}
// Bulunan aygıtın adresinin sağlama toplamını kontrol edin // ve eşleşmezse ilgili bilgileri görüntüleyin
Eğer(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Seri
.
println
(
"CRC geçerli değil!"
);dönüş;}
Seri
.
println
();
// Belirli bir sıcaklık sensörü türü hakkında bilgi içeren // adresin sıfır baytını kontrol edin. Sıfır // bayt değerine bağlı olarak, çipin serisini port monitöründe görüntülüyoruz. Sıfır bayt bilinmeyen // bir değer içeriyorsa, bilinmeyen sıcaklık sensörü ailesi hakkında bir mesaj görüntüleyin.
değiştirmek(
addr
[
0
]){durum
0x10
:
Seri
.
println
(
"Çip = DS18S20"
);
tür_s
=
1
;kırmak;durum
0x28
:
Seri
.
println
(
"Çip = DS18B20"
);
tür_s
=
0
;kırmak;durum
0x22
:
Seri
.
println
(
"Çip = DS1822"
);
tür_s
=
0
;kırmak;varsayılan:
Seri
.
println
(
"Cihaz, DS18x20 ailesine ait bir cihaz değil."
);dönüş;}
ds
.
Sıfırla
();
// Veri alışverişini başlatmak için veri yolunu sıfırlayın
.
seç
(
addr
);
// Üzerinde çalışılacak geçerli adrese sahip sensörü seçin // Sıcaklığı dönüştürmek için komutu gönderin (0x44 belgelerine göre) // Verileri / aracılığıyla ilettiğimiz için ikinci parametre "1" 'i unutmayınız. / parazit güç kaynağı ile hat. ds
.
yazmak
(
0x44
,
1
);
// Sensör, dokümantasyona göre maks. 750ms // Güvenli tarafta olmak için, ё saniyelik bir gecikme molası düzenleyeceğiz
(
1000
);
// Sensörden bilgi okumak için veri yolunu tekrar sıfırlayın // mevcut ile daha fazla çalışmak için reset () işlevinin yanıtını mevcut değişkene kaydedin
=
ds
.
Sıfırla
();
ds
.
seç
(
addr
);
// Bir sıfırlama darbesi olduğu için sensörü adresine göre yeniden seçin // Teknik dokümantasyona göre 0xBE komutu, 9 bayttan oluşan sıcaklık sensörünün (Scratchpad) dahili belleğinin okunmasına izin verir. ds
.
yazmak
(
0xBE
);
// Seri sıcaklık sensörünün dahili belleğinden bağlantı noktası monitörüne 9 bayt okuyun ve görüntüleyin
.
Yazdır
(
"Veri ="
);
Seri
.
Yazdır
(
mevcut
,
HEX
);
Seri
.
Yazdır
(
» «
);için(
ben
=
0
;
ben
<
9
;
ben
++){
veri
[
ben
]=
ds
.
okumak
();
Seri
.
Yazdır
(
veri
[
ben
],
HEX
);
Seri
.
Yazdır
(
» «
);}
// Kontrol edin ve porta çıktı alın, alınan verinin sağlama toplamını izleyin Seri
.
Yazdır
(
"CRC ="
);
Seri
.
Yazdır
(
OneWire
::
crc8
(
veri
,
8
),
HEX
);
Seri
.
println
();
// Alınan verileri gerçek sıcaklığa dönüştürme işlemini başlatın, // bu 0 ve 1 bayt okuma belleğinde saklanır. Bunu yapmak için, bu iki // baytı bir 16 bitlik int16_t ham sayıyla birleştiriyoruz
=(
veri
[
1
]<<
8
)|
veri
[
0
];
// Daha fazla dönüştürme yapmadan önce, bu sensörün ait olduğu aileyi tanımlamanız gerekir // (daha önce sonucu type_s değişkenine kaydetmiştik). // Aileye bağlı olarak, sıcaklık farklı şekilde hesaplanacaktır, // çünkü DS18B20 ve DS1822 12 bitlik bir değer döndürürken, DS18S20 9 bitlik bir değer döndürür
Eğer(
tür_s
){
// Sensör DS18S20 ham ailesine aitse
=
çiğ
<<
3
;
// varsayılan çözünürlük 9 bittir
Eğer(
veri
[
7
]==
0x10
){
çiğ
=(
çiğ
&
0xFFF0
)+
12

veri
[
6
];}}Başka{
// Bu sensörün hangi ölçüm doğruluğuna göre yapılandırıldığını belirleyin byte cfg
=(
veri
[
4
]&
0x60
);
// Daha düşük çözünürlüklerde, en az önemli bitleri sıfırlayabilirsiniz, // çünkü erken tanımlanmadıkları için
Eğer(
cfg
==
0x00
)
çiğ
=
çiğ
&~
7
;
// 9 bit (dönüştürme 93,75 ms sürer)
BaşkaEğer(
cfg
==
0x20
)
çiğ
=
çiğ
&~
3
;
// 10 bit (dönüşüm 187,5 ms sürer)
BaşkaEğer(
cfg
==
0x40
)
çiğ
=
çiğ
&~
1
;
// 11 bit (dönüşüm 375 ms sürer) // Varsayılan hassasiyet 12 bittir (dönüşüm 750 ms sürer)
}
// Sıcaklık değerlerini hesaplayın ve santigrat bağlantı noktası monitörüne gönderin
=(
şamandıra
)
çiğ
/
16.0
;
fahrenhayt
=
santigrat
*
1.8
+
32.0
;
Seri
.
Yazdır
(
"Sıcaklık ="
);
Seri
.
Yazdır
(
santigrat
);
Seri
.
Yazdır
(
"Santigrat"
);
Seri
.
Yazdır
(
fahrenhayt
);
Seri
.
println
(
"Fahrenheit"
);}
Her şey doğru yapılırsa, bağlantı noktası izleme penceresinde aşağıdakine benzer bir şey görmeliyiz (Şekil 6):

Şekil 6 - OneWire.h kitaplığıyla çalışmanın sonucu

DallasTemperature.h Kütüphanesi

Bu kütüphane bir öncekine dayanmaktadır ve daha anlaşılır fonksiyonlar nedeniyle programlama sürecini biraz basitleştirir. Kurulumdan sonra, tüm durumlar için 14 iyi belgelenmiş kod örneğine erişebileceksiniz. Bu makale çerçevesinde tek sensörlü bir çalışma örneği ele alınacaktır.

Programın sonucu Şekil 7'de gösterilmektedir.

Şekil №7 - DallasTemperature.h kitaplığı kullanılarak sıcaklığın okunmasının sonucu

// Gerekli kitaplıkları bağlarız # include #include // Veri yolunu Arduino'nun 2. pinine bağlarız # tanımla ONE_WIRE_BUS 2 // Veriyolumuz için sınıfın bir örneğini ve ona bir bağlantı oluşturun OneWire oneWire
(
ONE_WIRE_BUS
);
DallasTemperature sensörleri
(&
tek tel
);
// ÖN AYAR FONKSİYONU geçersiz kurulum
(
geçersiz
){
Seri
.
başla
(
9600
);
// Seri port sensörlerini başlatın
.
başla
();
// Veriyolu başlat
}
// ANA DÖNGÜ
(
geçersiz
){
Seri
.
Yazdır
(
"Okuma Sıcaklığı ..."
);
// Sensörleri okumak için komutu gönderin
.
requestTemperatures
();
Seri
.
println
(
"Oku"
);
Seri
.
Yazdır
(
"Sensör Sıcaklığı 1:"
);
// Sıcaklık değerini göster Seri
.
Yazdır
(
sensörler
.
getTempCByIndex
(
0
));}

1-Wire arayüzlü sıcaklık sensörü KY-001

Bu sensör, doğru sıcaklık ölçümü için kullanılır. Sensörle iletişim, bir mikrodenetleyici pini [3-4] kullanarak birkaç benzer cihazı Arduino kartına bağlamanıza izin veren 1-Wire arayüz [1-2] aracılığıyla gerçekleştirilir. Modül, ds18b20 mikro devresine [5] dayanmaktadır.

Modül boyutu 24 x 15 x 10 mm, ağırlık 1.3 g Bağlantı için üç pimli bir konektör kullanılır. Merkezi kontak - güç kaynağı + 5V, kontak "-" - ortak, kontak "S" - bilgi amaçlı.

Kart, bilgi alışverişi yapılırken yanan kırmızı bir LED'e sahiptir.

Bilgi alışverişi sırasında akım tüketimi 0,6 mA ve bekleme modunda 20 μA.

Bu tip sensörlerin Arduino ya bağlanması birçok kaynakta iyi tanımlanmıştır [6-8]. Bu durumda, Arduino'nun ana avantajları tekrar ortaya çıkıyor - çok yönlülük ve çok miktarda referans bilgisinin varlığı. Sensörle çalışmak için OneWire Kitaplığına [9] ihtiyacınız olacak. Programı [8] 'den yükledikten sonra (programın ilk sürümünde bir hata var - kod başlığında #include kitaplık bağlantısı yok), seri bağlantı noktası monitöründe aşağıdaki bilgiler gözlemlenebilir.

Yazar ayrıca [7] 'deki kodu test etti, her şey hemen çalıştı, seri port monitöründe bağlı sensörün tipi ve gerçek sıcaklık verileri hakkında bilgi okuyabilirsiniz.

Genel olarak, pratikte 1-Wire arayüzünü tanımayı mümkün kılan çok kullanışlı bir sensör. Sensör doğru sıcaklık verilerini hemen verir, kullanıcının kalibre etmesi gerekmez.

Değerlendirme
( 1 tahmin, ortalama 4 nın-nin 5 )

Isıtıcılar

Fırınlar