K tipi termokupl bazlı yüksek sıcaklık kontrolörü. Termokupl ve mikrokontrolör kullanarak sıcaklık ölçümü AVR Termokupl sensörlü ısıtma kontrolörü

ATmega8'de termometre ve DS18B20 sıcaklık sensörü

ATmega8 ve DS18B20 için termometre devresi

Dijital termometre DS18B20
Yedi segmentli LED göstergesi
Termometre program algoritması
DS18B20 için dijital termometre programı

Devre ve program çok basit Dijital termometre mikrodenetleyici kullanma ATmega8 ve sıcaklık sensörü DS18B20. Termometre, 0,1 derece çözünürlükle 0,5 derece hassasiyetle 0 ila 99 derece arasındaki sıcaklığı ölçmenizi sağlar

Termometrenin özellikleri çok basittir ve yalnızca "oda" sıcaklığını ölçmek için termometre olarak kullanılabilir. Bu tasarımda 8 kilobayt belleğe sahip bir mikrodenetleyici kullanmak elbette israftır; daha basit bir mikrodenetleyici kullanabilirsiniz. Ancak asıl mesele şu ki, bu tasarım, DS18B20 dijital sıcaklık sensörünü kullanan projenin daha da geliştirilmesinin temelini oluşturuyor. Bir sonraki makalede, yalnızca odadaki sıcaklığı değil, aynı zamanda "denize düşen" sıcaklığı da ölçmenize olanak tanıyan iki DS18B20 sensöründe başka bir termometrenin tasarımı yayınlanacak. Doğal olarak negatif sıcaklıkları ölçme yeteneği de eklenecek. Gelecekte tasarıma bir termostat işlevi, bir saat ve çeşitli yüklerle çalışma yeteneği eklenecek ve bu da "akıllı evin" temeli olan basit bir yapının bir araya getirilmesini mümkün kılacak. Evet, bugün bu serinin ilk makalesi.

ATmega8 ve DS18B20 sıcaklık sensörünü temel alan termometre devresi

Termometre diyagramına bakalım:

Gördüğünüz gibi devre çok basit; yalnızca gerekli minimum parça kullanılıyor.
Devre, okumaları belirtmek için yedi bölümlü üç basamaklı bir LED göstergesi kullanır.

Tasarım besleme gerilimi - 5 volt. Düşük voltajlı güç kaynağına sahip bir mikrodenetleyici kullanıyorsanız, yapının besleme voltajını düşürebilirsiniz ancak bu durumda gösterge segmentlerindeki sönümleme dirençlerinin değerini azaltmanız gerekebilir. Yaklaşık direnç değerleri alınabilir:
- 5 volt güç kaynağıyla - 200-300 Ohm
- 2,7 - 3 volt - 100-150 Ohm güç kaynağıyla


Transistörler- herhangi bir düşük güçlü NPN yapısı.
Sıcaklık sensörü -DS18B20
Yedi bölüm göstergesi - ortak katotlu herhangi bir üç basamaklı. Başkalarını ortak bir anotla kullanmak istiyorsanız, transistörleri PNP olanlarla değiştirmeniz ve programda değişiklikler yapmanız gerekecektir (göstergedeki sayıları görüntülemek için ikili kod dizisini değiştirin). Kırmızı bir parlama göstergesi kullandım ve aynı zamanda bir sonraki şema için aynısını mavi parlama rengiyle hazırladım.

Mikrodenetleyici ATmega ve DS18B20 üzerindeki termometrenin parçaları



ATmega8 mikrodenetleyici pin çıkışı:

Üç basamaklı yedi bölümlü gösterge FYT-5631AUR-21:

Sıcaklık sensörü DS18B20:

Transistörler BC547C:

ATmega ve DS18B20'deki termometre programının algoritması

Tüm mikrodenetleyici ayarları fabrika ayarlarıdır; FUSE bitlerine dokunulmasına gerek yoktur.

Programı çalıştırmak için iki mikrodenetleyici zamanlayıcı/sayıcı kullanılır:
sekiz bitlik T0
on altı bitlik T1
Kullanarak sekiz bitlik zamanlayıcı T0, bir taşma kesintisini çağıracak şekilde yapılandırılmıştır ve dahili frekans CK/8 (periyod 2 milisaniye) düzenlenmiştir:
- mevcut sıcaklığın hesaplanması
— DS18B20 sensörüyle sıcaklık ölçüm sonuçlarının dinamik çıktısı
Kullanarak on altı bitlik zamanlayıcı T1, düzenli bir şekilde CK/64 dahili frekansıyla (dönem 4 saniye) bir taşma kesintisi çağıracak şekilde yapılandırılmıştır:
— sıcaklığı ölçmek için DS18B20 sensörüne bir komut göndermek
- ölçülen sıcaklığın sensörden okunması
Prensip olarak, yine bir taşma kesintisini tetiklemek üzere yapılandırılmış, CK/8 dahili frekansı olan sekiz bitlik bir zamanlayıcı/sayıcı kullanabilir ve kesmeyi işlerken devrenin tüm çalışmasını organize edebilirsiniz. Ancak gerçek şu ki, bunun bir anlamı yok - DS18B20 sensörünün sıcaklığı dönüştürmek (belirlemek) için 1 saniyeden biraz daha az bir süreye (12 bit çözünürlükle) ihtiyacı var, yani sıcaklık verilerini daha fazla güncelleyemeyeceğiz. saniyede bir kereden fazla. Ayrıca bu tür sık ​​sıcaklık güncellemeleri sensörün ısınmasına ve dolayısıyla gerçek verilerin bozulmasına yol açacaktır. İkinci bir sayacın kullanılması, sıcaklık ölçümü için zaman aralıklarını ayrı ayrı ayarlamanıza olanak tanır.

Algorithm Builder'da programın ana kısmı şöyle görünüyor:

Nerede:

SP— yığının başlangıç ​​adresinin ayarlanması

Zamanlayıcı 0— T0 zamanlayıcısının ayarlanması:

Zamanlayıcı 1— zamanlayıcı T1'in ayarlanması:

TİMSK— zamanlayıcılardan kesintilerin ayarlanması:

Başlangıç_Görüntüsü- üç basamaklı yedi bölümlü bir göstergeye veri çıkışının dinamik gösteriminde yer alan bağlantı noktalarının bitlerini ayarlamak için alt program

1 —> ben- küresel kesinti etkinleştirme

Sorularınız varsa, anlaşılmayan bir şey varsa veya programla ilgili sorularınız varsa yazın, ben cevaplarım.

(2,4 KiB, 7.012 isabet)

Ancak yarı fiyatına kendiniz monte edebilirsiniz.
İlgilenen varsa cat'e hoş geldiniz.

Sırayla başlayalım.
Termokupl... termokupl gibi. Tam ölçüm, K tipi, 0-800C

Gövde içine gömülebilir, serbestçe dönen dişli kısmı mevcuttur. Çap 5,8 mm, aralık - 0,9~1,0 mm, M6 x 1,0 mm'ye benziyor. 10 kişilik anahtar teslimi


Her şey yolunda, bundan sonra ne yapmalı? Arduino ile okuyabilmek için sinyali (termogüç) dijital veya analog sinyale dönüştürmek gerekir. Bu bize yardımcı olacaktır. Bu, bize uygun bir arayüze sahip, dijitale K tipi termokupl sinyal dönüştürücüsüdür.
İşte kahramanımız geliyor - (4,20$)


Maliyeti 4,10$, ancak bu parti artık mevcut değil (aynı satıcı).

Arduino'ya bağlanacağız, basit olanı alabilirsiniz (5.25$, daha ucuzunu bulabilirsiniz, burada tam olarak bunu görüyorsunuz)


Verileri 1,25 $ kullanarak hafıza kartına yazacağız (ve aynı zamanda porta göndereceğiz).


Bu arada arayüz de SPI'dir. Ancak tüm kartlar bunu desteklemiyor. Başlamazsa, önce başka bir tane deneyin.
Teorik olarak, CS (CS veya SS - çip seçimi) hariç tüm SPI cihazları hatları (MOSI veya SI, MISO veya SO, SCLK veya SCK) Arduino'nun bir pinine bağlanabilir, ancak bu durumda MAX6675 bağlanmaz. yeterince çalışın. Bu yüzden her şeyi farklı pinlere ayırdım.
Taslak, .
MAX6675 için kütüphane ve taslak. MAX6675 bağlantı şeması:

#katmak
#katmak

Int birimleri = 1; // Okuma sıcaklığı birimleri (0 = F, 1 = C)
kayan nokta hatası = 0,0; // Sıcaklık telafisi hatası
şamandıra temp_out = 0,0; // Sıcaklık çıkış değişkeni

MAX6675 temp0(9,8,7,birimler,hata);

Kurulumu geçersiz kıl()
{
Seri.begin(9600);
Serial.print("SD kart başlatılıyor...");

PinMode(10, ÇIKIŞ);
if (!SD.begin(10)) (
Serial.println("başlatma başarısız oldu!");
geri dönmek;
}
Serial.println("Başlatma tamamlandı.");

// Data.csv dosyasının haritada var olup olmadığını kontrol edin; varsa silin.
if(SD.exists("temp.csv")) (
SD.remove("temp.csv");
}
// dosyayı aç. aynı anda yalnızca bir dosyanın açılabileceğini unutmayın;
//başka bir tane açmak için bunu kapatmanız gerekiyor.
myFile = SD.open("temp.csv", FILE_WRITE); // yazmaya açık


eğer (dosyam) (
Serial.print("Temp.csv'ye yazılıyor...");
// dosyayı kapat:
myFile.close();
Serial.println("tamamlandı.");
}
başka(


}

}
geçersiz döngü ()
{

Temp_out = temp0.read_temp(5); // Sıcaklığı 5 kez okuyun ve ortalama değeri var'a döndürün

Zaman = zaman + 1; // Süreyi 1 artır

Dosyam = SD.open("temp.csv", FILE_WRITE);

// eğer dosya normal bir şekilde açıldıysa, ona şunu yaz:
eğer (dosyam) (
//zamanı kaydet
myFile.print(zaman);
Seri.print(zaman);
//noktalı virgül ekle
myFile.print(";");
Seri.print(";");
// sıcaklığı ve satır beslemesini yaz
myFile.println(temp_out);
Serial.println(temp_out);
// dosyayı kapat:
myFile.close();
}
başka(
// ve eğer açılmazsa bir hata mesajı yazdırın:
Serial.println("temp.csv açılırken hata oluştu");
}
gecikme(1000); // Bir saniye bekle
}


İndirmek:

MK'de. Kalbi PIC16F628A mikrodenetleyicisidir. Termometre devresi ortak anotlu 4 haneli veya 2+2 LED gösterge kullanır. Kullanılan sıcaklık sensörü DS18B20 tipidir ve benim durumumda sensör okumaları 0,5*C doğrulukla görüntüleniyor. Termometrenin -55 ile +125*C arası sıcaklık ölçüm sınırları vardır, bu da tüm durumlar için yeterlidir. Termometreye güç sağlamak için, 13001 transistörlü bir IP'de cep telefonundan gelen normal bir şarj cihazı kullanıldı.

PIC16F628A mikrodenetleyici üzerindeki termometrenin şematik diyagramı:

PIC16F628A ürün yazılımını flaş etmek için ProgCode programını kullandım, bilgisayara kurdum ve ProgCode programlayıcıyı iyi bilinen şemaya göre topladım:

Kullanılan mikro denetleyicinin pinlerinin tanımı ve diğer bazı benzer MK'lerin pin çıkışı:

ProgCode programı ve adım adım ürün yazılımının fotoğraflarını içeren talimatlar forumdaki arşivde bulunmaktadır. Bu şema için gerekli tüm dosyalar da bulunmaktadır. Programda “her şeyi kaydet” butonunu açın ve tıklayın.Yaptığım cihazda fotoğraflardan da anlaşılacağı üzere tek kasada 2 termometre aynı anda monte edilmiş, üst gösterge evdeki sıcaklığı, alt gösterge ise evdeki sıcaklığı gösteriyor. dışarıdaki sıcaklığı gösterir. Odanın herhangi bir yerine yerleştirilir ve ekrandaki esnek bir kabloyla sensöre bağlanır. Malzeme ansel73 tarafından sağlanmıştır. Firmware düzenleyen: [)eNiS

PIC16F628A ve DS18B20 (DS18S20) mikro denetleyicisindeki termometre - hafıza termometresi devresinin ayrıntılı bir açıklamasını içeren bir makale ve ayrıca daha önce Yandex'in pichobbi.narod.ru sitesinde yayınladığım makalenin mantıksal bir devamı. Bu termometre kendini oldukça iyi kanıtladı ve biraz modernize edilmesine karar verildi. Bu yazımda sizlere şemada ve çalışma programında ne gibi değişiklikler yapıldığını anlatacağım, yeni fonksiyonları anlatacağım. Makale yeni başlayanlar için faydalı olacaktır. Daha sonra termometrenin mevcut versiyonunu .

PIC16F628A ve DS18B20 (DS18S20) mikro denetleyicisindeki termometre şunları yapabilir:

  • aşağıdaki aralıktaki sıcaklığı ölçün ve görüntüleyin:
    1 derecelik doğrulukla -55...-10 ve +100...+125 (ds18b20 ve ds18s20)
    - -9,9...+99,9 aralığında, 0,1 derece doğrulukla (ds18b20)
    -0,5 derece doğrulukla -9,5...+99,5 aralığında (ds18s20);
  • DS18B20 veya DS18S20 sensörünü otomatik olarak algılayın;
  • Sensörü arıza açısından otomatik olarak kontrol edin;
  • Ölçülen maksimum ve minimum sıcaklıkları hatırlayın.

Termometre ayrıca 7 bölümlü göstergenin OK'den OA'lı göstergeye kolayca değiştirilmesini sağlar. Mikrodenetleyicinin EEPROM belleğine yazmak için yumuşak bir prosedür düzenlenmiştir. Bu makalede kendini iyi kanıtlamış bir voltmetre anlatılmaktadır -.

Mikrodenetleyici üzerindeki dijital termometrenin devre şeması güvenilir ve uzun süreli kullanım için geliştirilmiştir. Devrede kullanılan tüm parçalarda eksiklik yok. Desenin takip edilmesi kolaydır ve yeni başlayanlar için mükemmeldir.

Termometrenin şematik diyagramı Şekil 1'de gösterilmiştir.

Şekil 1 - PIC16F628A + ds18b20/ds18s20'deki termometrenin şematik diyagramı

Termometrenin tüm devre şemasını anlatmayacağım, oldukça basit olduğu için sadece özellikleri üzerinde duracağım.

Mikrodenetleyici olarak kullanılır PIC16F628A Microchip'ten. Bu ucuz bir kontrolördür ve aynı zamanda tedarik sıkıntısı da yoktur.

Sıcaklığı ölçmek için dijital sensörler kullanılır DS18B20 veya DS18S20 Maxim'den. Bu sensörler ucuzdur, boyutları küçüktür ve ölçülen sıcaklıkla ilgili bilgiler dijital olarak iletilir. Bu çözüm, kabloların kesiti, uzunlukları vb. konusunda endişelenmemenizi sağlar. Sensörler DS18B20,DS18S20-55… +125 °C sıcaklık aralığında çalışabilmektedir.

Sıcaklık, ortak katotlu (OK) veya (OA) 7 segmentli 3 haneli LED göstergesinde görüntülenir.

Ölçülen maksimum ve minimum sıcaklıkları göstergede görüntülemek için SB1 düğmesine ihtiyacınız vardır. Belleği sıfırlamak için ayrıca SB1 düğmesine de ihtiyacınız vardır.

SA1 düğmesini kullanarak sensörleri (sokak, ev) hızlı bir şekilde değiştirebilirsiniz.

LED göstergesinin ortak kablosunu değiştirmek için bir atlama teli gereklidir. ÖNEMLİ! Gösterge uygunsa, jamper'ı şemaya göre alt konuma yerleştiririz ve VT1-VT3 transistörlerini p-n-p iletkenliği ile lehimleriz. LED göstergesi OA ise, jamper'ı şemaya göre üst konuma hareket ettiriyoruz ve VT1-VT3 transistörlerini n-p-n iletkenliği ile lehimliyoruz.

Tablo 1'de tüm parça listesini ve bunların bir analogla olası değiştirilmesini görebilirsiniz.

Tablo 1 – Termometrenin montajı için parça listesi
Pozisyon tanımı İsim Analog/yedek
C1, C2 Seramik kapasitör - 0,1 μFx50V -
C3 Elektrolitik kondansatör - 220μFx10V
GG1 Mikrodenetleyici PIC16F628A PIC16F648A
DD2,DD3 Sıcaklık sensörü DS18B20 veya DS18S20
GB1 Üç adet 1,5V AA pil
HG1 7 segmentli LED gösterge KEM-5631-ASR (OK) Dinamik gösterge için diğer düşük güçlü ve bağlantıya uygun.
R1,R3,R14,R15 Direnç 0,125W 5,1 Ohm SMD boyutu 0805
R2,R16 Direnç 0,125W 5,1 kOhm SMD boyutu 0805
R4,R13 Direnç 0,125W 4,7 kOhm SMD boyutu 0805
R17-R19 Direnç 0,125W 4,3 kOhm SMD boyutu 0805
R5-R12 Direnç 0,125W 330 Ohm SMD boyutu 0805
SA1 Herhangi bir uygun anahtar
SB1 İncelik düğmesi
VT1-VT3 OK'li gösterge için transistör BC556B/OA'lı gösterge için transistör BC546B KT3107/KT3102
XT1 3 kontak için terminal bloğu.

Dijital termometrenin ilk hata ayıklaması için Proteus'ta yerleşik bir sanal model kullanıldı. Şekil 2'de Proteus'un basitleştirilmiş modelini görebilirsiniz.

Şekil 2 - Proteus'taki PIC16F628A mikro denetleyicisindeki termometrenin modeli

Şekil 3-4 dijital termometrenin devre kartını göstermektedir

Şekil 3 – PIC16F628A mikrodenetleyici (altta) üzerindeki termometrenin ölçeklenmemiş baskılı devre kartı.

Şekil 4 – PIC16F628A mikrodenetleyici (üstte) üzerindeki termometrenin ölçeklendirilmemiş baskılı devre kartı.

Çalışma parçalarının bir araya getirildiği termometre hemen çalışmaya başlar ve hata ayıklamaya ihtiyaç duymaz.

Çalışmanın sonucu Şekil 5-7'dir.

Şekil 5 - Termometrenin görünümü

Şekil 6 - Termometrenin görünümü

Şekil 7 - Termometrenin görünümü

ÖNEMLİ! Termometre ürün yazılımında dikilmemiş reklam sizin zevkiniz için kullanılabilir.

Çalışma programında yapılan değişiklikler:

1 DS18B20 veya DS18S20 sensörünün otomatik tespiti;

2. EEPROM'daki yeniden yazma süresi (yeniden yazma koşulu karşılanırsa) 5 dakikadan 1 dakikaya düşürüldü.

3. Noktanın yanıp sönme sıklığı artırıldı;

Termometrenin çalışmasına ilişkin daha ayrıntılı bir açıklamayı bu makalenin sonunda indirebileceğiniz belgede bulabilirsiniz. İndirmek istemiyorsanız web sitesinde www.pichobbi.narod.ru Cihazın çalışması da mükemmel bir şekilde açıklanmıştır.

Bitmiş tahta Çin alarm saatine mükemmel bir şekilde uyuyor (Şekil 8, 9).

Şekil 8 – Çin alarm saatindeki tüm dolgular

Şekil 9 - Çin alarm saatindeki tüm dolgular

Video - PIC16F628A'da termometrenin çalışması

PIC16F676 Uygulama: lehimleme istasyonu, yüksek sıcaklık işlemlerinin kontrolü vb. ısıtma elemanının PID kontrol fonksiyonu ile

K tipi termokupl termometresi olan laminatörüme bir termometre yerleştirmeye karar verdim. Benim için daha bilgilendirici hale getirmek için, böyle bir cihazda yalnızca iki LED "GÜÇ" ve "HAZIR" yandığında bir hobi radyo amatörünün memnun olamayacağına inanıyorum. Eşarbımı detaylarıma göre ayarlıyorum. Her ihtimale karşı, ikiye bölme yeteneği ile (bu çok yönlülüktür). Hemen tristör üzerinde güç kısmı için bir yer var ama şimdilik bu kısmı kullanmıyorum, bu benim havya devrem olacak (uca termokuplun nasıl takılacağını bulduğumda)


Laminatörde yeterli alan yok (mekanizmalar çok sıkı yerleştirilmiş, biliyorsunuz Çin'de), yedi segmentli küçük bir gösterge kullanıyorum ama hepsi bu değil, tüm tahta da uymuyor, çok yönlülük burada Tahtanın büyük kısmı kullanışlı oluyor, ikiye böldüm (bir konektör kullanırsanız, üst kısım ur5kby'deki küçük bilgilerle ilgili birçok gelişmeye uyuyor.)


Ayarlıyorum, önce forumda belirtildiği gibi yapıyorum, termokuplda lehim yapmıyorum, 400 ayarlıyorum (gerçi bu parametre hafızadaysa bu madde kaybolacaktır), değişkenleri yaklaşık oda sıcaklığına ayarlıyorum ve tam olarak kaynama noktasına kadar,

Böyle bir kontrolör teorik olarak 999°C'ye kadar çalışır, ancak evde böyle bir sıcaklığın bulunması pek olası değildir, en fazla açık ateştir, ancak bu ısı kaynağı güçlü bir doğrusal olmama özelliğine ve dış koşullara karşı duyarlılığa sahiptir.

işte örnek bir tablo.
ve ayrıca netlik için

Dolayısıyla kontrol cihazı okumalarını ayarlamak için kaynak seçme konusunda çok az seçenek vardır.

Artık düğmelerle oynamaya gerek yok, her şey toplanabilir,
Çinli bir test cihazından bir termokupl kullandım. Ve forumdaki bir yazı bana bu termokuplun çoğaltılabileceğini, uzunluğunun neredeyse yarım metre olduğunu, 2 cm kestim.

Kömürle bükerek bir transformatör yapıyorum, bir top elde ediyorum ve iki ucu da bakır tel boyunca tamamen aynı, tellerime iyi lehimleme için.