Sensor suhu Arduino dan Digital DS18B20. Petunjuk Penggunaan Sensor Suhu DS18B20 Digital DS18B20 Sensor Suhu

Apakah Anda perlu mengukur suhu di lingkungan yang tidak menguntungkan untuk chip?

Sensor DS18B20 akan membantu Anda mengukur suhu air di akuarium atau di ketel. Anda dapat menggunakannya untuk mengukur suhu di jalan dan pada saat yang sama tidak takut bahwa sensor akan turun hujan. Dachnips akan menghargai kesempatan untuk mengukur suhu tanah di rumah kaca dan di situs.

Dalam memori permanen DS18B20, Anda dapat menghemat nilai suhu batas, ketika Anda keluar dari sensor akan beralih ke mode alarm. Pada total ban dari banyak sensor, mikrokontroler dapat mengetahui mana dari mereka yang beralih ke mode ini. Dengan demikian, menjadi mudah untuk menentukan area masalah di lingkungan yang dikendalikan.

Resolusi bacaan dikonfigurasi dan dapat dari 9 hingga 12 bit. Kurang resolusi - di atas laju transformasi.

Koneksi

Sensor sealant berdasarkan chip DS18B20 dapat dihubungkan dengan dua cara:

Untuk tiga kabel: makanan (merah), tanah (hitam) dan sinyal (putih).

Untuk dua kabel: Bumi dan sinyal. Dalam hal ini, sensor kadang-kadang dapat memberikan pembacaan yang salah yang mudah dikecualikan dari hasil akhir dengan filtrasi.

Terlepas dari metode koneksi, kawat sinyal harus terhubung ke daya melalui resistor 4,7 com. Ketika hanya satu sensor yang terhubung, resistor adalah 10 com.

Untuk menghubungkan sensor ke Arduino atau papan batch, akan mudah digunakan untuk menggunakan push terminal bar.

Untuk menghubungkan perangkat 1-kawat ke Arduino, ada perpustakaan jadi, dan itu dari DS18B20 untuk bekerja dengan DS18B20. Ada perpustakaan-superstruktur dari Miles Burton.

Karakteristik:
  • Catu daya: 3.0..5.5 di
  • Kisaran suhu: -55 ° C .. + 125 ° C
  • Akurasi pembacaan suhu: 0.5 ° C
  • Langkah kesaksian: 0,0625 ° с
  • Antarmuka: 1-kawat
  • Kawat Panjang: 1 meter
  • Konsumsi saat ini: 1mA

Sensor muncul dalam bermacam-macam toko kami temperatur Dallas 18b20 dalam perumahan kelembaban dengan berbagai macam suhu yang diukur dari -55 hingga + 125 ° C. Data pada perlindungan kelembaban dan suhu maksimum dalam +125 derajat segera bertindak berdasarkan pemikiran pada pengujian ekstrem dalam air mendidih. Kami akan menangani ini.

Komponen untuk pengulangan (beli di Cina):

Sensor ini bekerja pada bus 1-wire.

Setiap perangkat tersebut berisi kode "ROM" 64-bit yang unik, yang terdiri dari 8 bit yang mendefinisikan kode seri, 48 bit angka unik dan 8 bit kode CRC tahan noise.

Informasi tentang suhu yang diukur disimpan dalam memori operasional sensor, yang terdiri dari 9 byte.

1 dan 2 Byte menyimpan informasi suhu.

3 dan 4 Bytes disimpan sesuai dengan batas suhu atas dan bawah.

5 dan 6 Bytes dicadangkan.

7 dan 8 Bytes digunakan untuk pengukuran suhu ultra-ukur.

9 Byte menyimpan kode CRC yang tahan kebisingan dari 8 byte sebelumnya.

Perintah utama yang digunakan saat bekerja dengan perpustakaan:

cari (AddressArray)

Mencari perangkat 1-kawat berikutnya, jika perangkat ditemukan, maka dalam array 8 byte dari alamat, kode rom direkam, jika tidak mengembalikan false.

reset_search ()

Melakukan pencarian baru dari perangkat pertama.

reset ()

Melakukan reset ban, itu diperlukan sebelum menghubungkan ke sensor.

pilih (AddressArray)

Melakukan pilihan perangkat setelah reset, kode perangkat ROM dilewatkan.

tulis (byte)

Mentransmisikan byte informasi ke perangkat

tulis (byte, 1)

baca baca ()

Membaca byte informasi dari perangkat

cRC8 (dataArray, panjang)

Menghitung kode byte CRC dari array dataArray, panjang panjang

Menggunakan perintah WRITE, kami dapat mentransfer perintah kontrol ke sensor lokasi dalam bentuk byte, pertimbangkan utama dari mereka:

0x44. - Melakukan pengukuran suhu dan menulis data ke RAM

0x4e. - Rekam 3 byte dalam 3, 4 dan 5 byte RAM

0x48. - Salin byte ke-3 dan 4 RAM di EEPROM

0xb8. - Salin data dari EEPROM ke 3 dan 4Y RAM byte

Hubungkan ke Arduino.

Tiga kabel keluar dari sensor:

Merah: "+" kekuatan.

The Black:"-" Kekuasaan

Putih: Output output

Koneksi sensor:

Merah: Pada + 5 volt arduino.

The Black. Pada salah satu pin GND --- Arduino.

putih Pada setiap input digital Arduino (dalam contoh D10).

Untuk mengerjakan sensor, perlu untuk menghubungkan kawat sinyal dengan kawat daya dengan resistor dengan nilai nominal 4,7 com.

Untuk memulai, pertimbangkan yang paling contoh yang berguna Untuk bekerja dengan sensor, pembacaan suhu keluaran ke monitor port.

Contoh Kode Program.

#Include. Onewire ds (10); // terhubung ke 10 pin (resistor pada 4,7k wajib) void setup (void) (serial.begin (9600);) void loop (byte i; byte hadir \u003d 0; byte tipe_s; byte addr; float celcius, Fahrenheit; jika (! Ds.search ("tidak ada lagi alamat."); Serial.println (); ds.reset_search (); tunda (250); kembali;) Serial ("rom \u003d"); untuk (" \u003d 0; i< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // начало коммуникации delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем значение Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // смотрим 9 байтов data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразуем получненный данные в температуру // Используем int16_t тип, т.к. он равен 16 битам // даже при компиляции под 32-х битный процессор int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; if (data == 0x10) { raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }

Dallas18B20 Extreme Testing.

Seperti yang telah disebutkan, kami memutuskan untuk mengatur pengujian ekstrim sensor, tetapi hanya menghilangkan sensor dalam air mendidih tidak menarik. Posisikan sensor di gelas dan didihkan. Untuk kejelasan dalam monitor port, nilai suhu akan ditampilkan. Pada video terlampir di bawah ini, peningkatan suhu yang lancar dapat dilihat. Saya ingin mencatat Bahwa suhu air pada tekanan atmosfer normal tidak dapat di atas 100 ° C. Saat menguji sensor dalam air mendidih, suhu yang diakumulasikan oleh AS adalah 99,87 ° C. Tes dapat dianggap berhasil.

Skema ditambahkan ke relay, untuk secara otomatis mematikan boiler pada suhu 99,5 ° C. Agar tidak memotong kabel pada boiler, sambungkan melalui outlet, di dalamnya relai di atas berada.

Penting

Sensor suhu dalam kasus logam, transisi dari logam ke kabel diisolasi dengan tabung menyusut. Pada logam, tabung pas dengan sangat ketat, kabelnya lebih lemah, melalui tempat ini, setidaknya kemungkinan dan kecil, air bocor. Untuk menghindari situasi ini, kami menyarankan untuk tidak membenamkan sensor di seluruh air. Jika Anda masih memiliki kebutuhan seperti itu, kami sarankan untuk menunjukkan plot ini dengan lebih hati-hati.

Contoh Kode

#Include. Onewire ds (10); // terhubung ke 10 pyuse (resistor pada 4,7k wajib) void setup (void) (serial.begin (9600); pinmode (3, output); // nyalakan boiler digital (3, rendah);) void loop (void);) ) (Byte i; byte hadir \u003d 0; byte tipe_s; byte data; byte addr; float celsius, fahrenheit; jika (! Ds.search (addr)) (serial.println ("tidak ada lagi alamat."); Serial.println (" (); ds.reset_search (); menunda (250); kembali;) serial.print ("rom \u003d"); untuk (i \u003d 0; i;< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // начало коммуникации delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем значение Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // смотрим 9 байтов data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразуем получненный данные в температуру // Используем int16_t тип, т.к. он равен 16 битам // даже при компиляции под 32-х битный процессор int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; if (data == 0x10) { raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); // Если температура достигает температуры кипения (с погрешностью), отключаем кипятильник if (celsius > 99.5) (Digitalwrite (3, tinggi);))

#Include.

Onewire ds (10); // sambungkan sensor ke 10 pinus digital

void Setup (Void) (
Serial.begin (9600);
Pinmode (3, output);
// nyalakan boiler
DigitalWrite (3, Rendah);
}

void loop (void) (
Byte i;
Tipe byte;
Data byte;
Byte addr;
Mengapung Celcius, Fahrenheit;

// Kami mencari sensor supres
Jika (! Ds.search (ADDR)) (
Serial.println ("tidak ada lagi alamat.");
Serial.println ();
ds.reset_search ();
Penundaan (250);
Kembali;
}

// Memeriksa apakah tidak ada gangguan yang ditransmisikan
If (onewire :: CRC8 (addr, 7)! \u003d Addr) (
Serial.println ("CRC tidak valid!");
Kembali;
}
Serial.println ();

// tentukan seri sensor
Switch (Addr) (
Kasus 0x10:
Serial.println ("chip \u003d ds18s20");
Type_s \u003d 1;
Istirahat;
Kasus 0x28:
Serial.println ("chip \u003d ds18b20");
Type_s \u003d 0;
Istirahat;
Kasus 0x22:
Serial.println ("chip \u003d ds1822");
Type_s \u003d 0;
Istirahat;
Default:
Serial.println ("perangkat bukan perangkat keluarga DS18x20.");
Kembali;
}

ds.reset ();
dselect (addr);
ds.write (0xbe); // baca memori operasional sensor

untuk (i \u003d 0; i< 9; i++) {
Data [i] \u003d ds.read (); // isi array data baca
}

// data suhu terkandung dalam dua byte pertama, menerjemahkannya ke satu nilai dan kami mengkonversi ke dalam jumlah heksadesimal
Int16_t raw \u003d (data<< 8) | data;
if (tipe_s) (
Mentah \u003d mentah.<< 3;
Jika (data \u003d\u003d 0x10) (
RAW \u003d (RAW & 0XFFF0) + 12 - data;
}
}
LAIN (
Byte cfg \u003d (data & 0x60);
if (cfg \u003d\u003d 0x00) RAW \u003d RAW & ~ 7;
Lain jika (cfg \u003d\u003d 0x20) RAW \u003d RAW & ~ 3;
Lain jika (cfg \u003d\u003d 0x40) RAW \u003d RAW & ~ 1;
}
Celsius \u003d (float) RAW / 16.0;
Fahrenheit \u003d Celcius * 1,8 + 32.0;
Serial.print ("temp \u003d");
Serial.print (Celsius);
Serial.print ("c,");
Serial.print (fahrenheit);
Serial.println ("f");

// Jika suhu mencapai titik didih (dengan kesalahan), matikan boiler
If (Celcius\u003e 99.5)
{
Digitalwrite (3, tinggi);
}
}

Beli di Rusia

Sensor suhu di Arduino adalah salah satu jenis sensor yang paling umum. Pengembang proyek dengan termometer pada Arduino tersedia dalam banyak opsi berbeda, berbeda dalam prinsip tindakan, akurasi, pelaksanaan konstruktif. Sensor digital DS18B20 adalah salah satu sensor suhu paling populer, sering digunakan dalam kasus kedap air untuk mengukur suhu air atau cairan lainnya. Pada artikel ini, Anda akan menemukan deskripsi sensor DS18B20 dalam bahasa Rusia, kami akan mempertimbangkan fitur-fitur menghubungkan ke Arduino, prinsip pengoperasian sensor, deskripsi perpustakaan dan sketsa.

DS18B20 adalah sensor suhu digital dengan berbagai fitur yang bermanfaat. Intinya, DS18B20 adalah mikrokontroler keseluruhan yang dapat menyimpan nilai pengukuran, memberi sinyal output suhu untuk batas yang ditetapkan (batas-batas itu sendiri dapat diinstal dan diubah), mengubah keakuratan pengukuran, metode interaksi dengan pengontrol dan banyak lebih. Semua ini berada di sebuah bangunan yang sangat kecil, yang, selain itu, tersedia dalam kinerja tahan air.

Sensor suhu DS18B20 memiliki berbagai jenis perumahan. Anda dapat memilih salah satu dari tiga - 8-pin sehingga (150 mil), 8-pin μsop, dan 3-pin ke-92. Yang terakhir paling umum dan diproduksi dalam kasus perlindungan kelembaban khusus, sehingga dapat aman di bawah air. Setiap sensor memiliki 3 kontak. Untuk kasus to-92, Anda perlu melihat warna kabel: Hitam - Bumi, Merah - Makan dan Putih / Kuning / Biru - sinyal. Di toko online Anda dapat membeli modul DS18B20 yang sudah jadi.

Di mana untuk membeli sensor

Secara alami, DS18B20 lebih murah untuk membeli lebih murah di Aliexpress, meskipun dijual di toko online khusus Rusia dengan Arduino. Berikut adalah beberapa tautan misalnya:

Memori sensor terdiri dari dua jenis: operasional dan non-volatile - SRAM dan EEPROM. Catatan terakhir dari konfigurasi register dan register, TL, yang dapat digunakan sebagai register tujuan umum, jika tidak digunakan untuk menentukan kisaran nilai suhu yang diizinkan.

Tugas utama DS18B20 adalah menentukan suhu dan transformasi hasil yang diperoleh dalam tampilan digital. Kita dapat secara mandiri mengatur izin yang diperlukan dengan menetapkan jumlah akurasi Bit - 9, 10, 11 dan 12. Dalam kasus ini, resolusinya akan sama dengan 0,5 ° C, 0,25С 0,125С dan 0,065С.

Pengukuran suhu yang dihasilkan disimpan dalam sensor SRAM. 1 dan 2 byte mempertahankan nilai suhu yang dihasilkan, 3 dan 4 menghemat batasan pengukuran, 5 dan 6 dicadangkan, 7 dan 8 digunakan untuk penentuan suhu presisi tinggi, 9 byte terakhir menyimpan kode CRC yang tahan kode.

Koneksi ds18b20 ke arduino

DS18B20 adalah sensor digital. Sensor digital mentransmisikan nilai suhu yang diukur dalam bentuk kode biner tertentu, yang memasuki pin digital atau analog Arduino dan kemudian diterjemahkan. Kode dapat menjadi yang paling berbeda, DS18B20 berfungsi melalui protokol data 1-kawat. Kami tidak akan masuk ke detail protokol digital ini, kami menunjukkan hanya minimum yang diperlukan untuk memahami prinsip-prinsip interaksi.

Pertukaran informasi dalam 1-kawat disebabkan oleh operasi berikut:

  • Inisialisasi - definisi urutan sinyal dari mana pengukuran dan operasi lain dimulai. Guru itu menerapkan pulsa reset, setelah itu sensor harus menyerahkan impuls dari keberadaan yang melaporkan kesiapan untuk melakukan operasi.
  • Perekaman data - byte data ditransmisikan ke sensor.
  • Pembacaan data - byte mengambil dari sensor.

Untuk bekerja dengan sensor, kami akan memerlukan perangkat lunak:

  • Arduino IDE;
  • Perpustakaan OneWire Jika beberapa sensor digunakan di bus, Anda dapat menggunakan Perpustakaan Dallastemperature. Ini akan bekerja di atas OneWire.

Dari peralatan yang Anda butuhkan:

  • Satu atau lebih sensor DS18B20;
  • Mikrokontroler Arduino;
  • Konektor;
  • Resistor sebesar 4,7 kΩ (dalam kasus koneksi satu sensor, resistor akan berukuran dari 4 hingga 10k);
  • Papan sirkuit;
  • Kabel USB untuk menghubungkan ke komputer.

Untuk papan Arduino, sensor menghubungkan hanya: GND dari sensor termal terpasang ke GND Arduino, VDD terhubung ke 5V, data ke pin digital apa pun.

Diagram paling sederhana menghubungkan sensor digital DS18B20 disajikan pada gambar.

Algoritma untuk memperoleh informasi tentang suhu dalam sketsa terdiri dari langkah-langkah berikut:

  • Definisi alamat sensor, periksa koneksinya.
  • Sensor berfungsi sebagai persyaratan untuk membaca suhu dan menjabarkan nilai yang diukur ke register. Prosedur ini membutuhkan waktu lebih lama dari yang lain, dibutuhkan sekitar 750 ms.
  • Perintah disajikan untuk membaca informasi dari register dan mengirimkan nilai ke "Port Monitor",
  • Jika diperlukan, dikonversi ke derajat Celcius / Fahrenheit.

Contoh sketsa sederhana untuk DS18B20

Sketsa paling sederhana untuk bekerja dengan sensor digital adalah sebagai berikut. (Dalam sketsa kami menggunakan perpustakaan OneWire, yang akan dibicarakan lebih dari sedikit kemudian).

#Include. / * * Deskripsi interaksi dengan sensor digital DS18B20 * Menghubungkan DS18B20 ke Arduino melalui Pin 8 * / Onewire DS (8); // Buat objek OneWire untuk bus 1-wire, yang dengannya Anda akan bekerja dengan sensor Void Setup () (serial.begin (9600);) void loop () (// tentukan suhu dari sensor data DS18B20 byte ; // tempat untuk ds.reset ();; // berikan sensor DS18B20 untuk mengukur suhu. Nilai suhu itu sendiri belum - sensor akan memasukkannya ke dalam memori internal delay (1000); // MicroCircuit mengukur suhu, dan kami sedang menunggu. DS.RESET (); // Sekarang Anda sedang bersiap untuk mendapatkan nilai suhu DS.Write yang diukur (0xcc); ds.write (0xbe); // silakan mentransfer nilainya dari register dengan nilai suhu // dapatkan dan baca data \u003d ds.read () respons (); // baca nilai suhu data byte yang lebih muda \u003d ds.read (); // sekarang bentuk final // nilai I: // - nilai "lem" pertama, // - kemudian gandakan pada koefisien yang sesuai dengan resolusi (untuk 12 bit secara default - ini adalah 0,0625) suhu float \u003d ((data<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Sketsa untuk bekerja dengan sensor DS18B20 tanpa penundaan

Anda dapat menyulitkan program kecil untuk DS18B20 untuk menyingkirkan pengereman kinerja sketsa.

#Include. Onewire ds (8); // objek onewire int suhu \u003d 0; // nilai suhu variabel penyimpanan global dari ds18b20 long lastupdatetime \u003d 0 sensor; // variabel untuk menyimpan waktu baca terakhir dari const int temp_update_time \u003d 1000 sensor; // tentukan frekuensi pengaturan void setup () (serial.begin (9600);) void loop () (detecttemperature (); // tentukan suhu dari sensor serial.println DS18B20 (suhu); // tampilkan yang dihasilkan suhu // t. in. Variabel suhu memiliki tipe int, bagian fraksional hanya akan dibuang) int detecttemperature () (byte data; ds.reset (); ds.write (0xcc); ds.write (0x44) ; jika (milis () - lastupdateetime\u003e temp_updatetime \u003d millis (); ds.reset (); ds.write (0xcc); ds.write (0xbe); data \u003d ds.read (); ; // membentuk suhu nilai \u003d (data<< 8) + data; temperature = temperature >> 4; } }

Perpustakaan Dallastemperature dan DS18B20

Dalam sketsa Anda, kita dapat menggunakan perpustakaan Dallastemperature yang menyederhanakan beberapa aspek bekerja dengan sensor DS18B20 menjadi 1-wire. Contoh sketsa:

#Include. // Jumlah Arduino Pina dengan pin_ds18b20 #define yang terhubung 8 // Buat Obyek OneWire OneWire (PIN_DS18B20); // Buat objek Dallastemperature untuk bekerja dengan sensor, setelah mentransfernya tautan ke objek untuk bekerja dengan 1-wire. Dallastemperature Dallassensors (& OneWire); // objek khusus untuk menyimpan perangkat alamat deviCeaddress sensoraddress; Void loop (void) (// Permintaan untuk mengukur sensor suhu serial.print ("ukur suhu ..."); dallassensors.requesttemperature (); // Kami meminta DS18B20 untuk mengumpulkan data serial.println ("dieksekusi" ); // Permintaan untuk menerima nilai suhu printtemperature yang disimpan; dallassensors.gettempc (deveceaddress); serial.print ("temp c:"); serial.println (tempc);) // fungsi tambahan untuk menampilkan sensor DS18B20 Void Printaddress alamat (untuk (untuk (uint8_t i \u003d 0; i< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Perpustakaan OneWire untuk bekerja dengan DS18B20

DS18B20 menggunakan protokol 1-wire untuk bertukar informasi dengan Arduino, di mana perpustakaan yang sangat baik telah ditulis. Anda dapat dan Anda perlu menggunakannya agar tidak mengimplementasikan semua fungsi secara manual. . Untuk menginstal perpustakaan, unduh arsip, Buka kemasan direktori Arduino Anda di folder Perpustakaan. Perpustakaan menghubungkan menggunakan perintah #include

Semua sensor DS18B20 terhubung secara paralel, bagi mereka semua resistor yang cukup. Menggunakan perpustakaan OneWire, Anda dapat secara bersamaan membaca semua data dari semua sensor. Jika jumlah sensor yang terhubung lebih dari 10, Anda perlu memilih resistor dengan resistansi tidak lebih dari 1,6 com. Juga, untuk pengukuran suhu yang lebih akurat, Anda perlu meletakkan resistor tambahan per 100 ... 120 ohm antara output data pada Arduino dan papan data pada setiap sensor. Anda dapat mengetahui dari sensor mana ini atau nilai itu diperoleh dengan menggunakan kode seri 64-bit unik, yang akan dikeluarkan sebagai hasil dari eksekusi program.

Untuk menghubungkan sensor suhu dalam mode normal, Anda perlu menggunakan skema yang ditunjukkan pada gambar.

kesimpulan.

Dallas DS18B20 MicroCircuit adalah perangkat yang sangat menarik. Sensor suhu dan termometer, dibuat atas dasarnya, cocok untuk sebagian besar tugas dengan karakteristik yang dikembangkan oleh fungsional, relatif bukan jalan. Sensor popularitas khusus DS18B20 telah menurun sebagai perangkat tahan kelembaban untuk mengukur suhu cairan.

Untuk peluang tambahan, perlu untuk membayar kesulitan relatif bekerja dengan sensor. Untuk menghubungkan DS18B20, kami akan membutuhkan resistor dengan nilai nominal sekitar 5K. Untuk bekerja dengan sensor di Sketsa Arduino, Anda perlu menginstal perpustakaan tambahan dan mendapatkan keterampilan tertentu untuk bekerja dengannya - semuanya tidak cukup sepele di sana. Namun, Anda dapat membeli modul yang sudah siap pakai, dan untuk sketsa dalam banyak kasus, ada cukup banyak contoh sederhana yang diberikan dalam artikel ini.

Dalam proses mempelajari mikrokontroler, itu lebih cepat atau lambat ada kebutuhan untuk mengukur parameter meteorologis seperti itu, sebagai suhunya. Pasar komponen elektronik global modern menawarkan berbagai sensor suhu. Perbedaan utama di antara mereka terdiri dari kisaran suhu yang diukur, tegangan suplai, ruang lingkup aplikasi, ukuran keseluruhan, metode konversi suhu, antarmuka untuk berinteraksi dengan sistem kontrol pengguna. Jadi secara historis itu terjadi pada saat ini salah satu sensor suhu paling populer adalah sensor Ds18.B20.dallas Semiconductor Corporation. Tentang dia narasi berikut.

Ds18.B20.- Sensor suhu digital dengan resolusi konversi yang dapat diprogram.

Fitur khas:

1) menggunakan bus antarmuka bus 1-kawat untuk berinteraksi dengan sistem kontrol;
2) Kehadiran kode identifikasi berurutan 64-bit yang unik yang terletak di memori ROM internal dan ditujukan untuk sistem multipoint di mana sensor spesifik perlu ditangani;
3) Tegangan pasokan adalah 3-5.5V, yang memungkinkannya tidak hanya dalam sistem 5 volt, tetapi juga 3.3 (sebagian besar mikrokontroler);
4) Kisaran suhu yang diukur adalah -55 ... + 125 ° C;
5) Akurasi ± 0,5 o C, meskipun itu benar hanya untuk kisaran -10 ... + 85 o c;
6) Resolusi konversi ditentukan oleh pengguna dan 9 ... 12 bit;
7) Memiliki pemicu internal ambang pemicu atas dan bawah dengan alarm pembuatan alarm untuk sistem menggunakan logika kerja termostatik;
8) Sensor ini kompatibel secara terprogram dengan Ds1822. Dan banyak digunakan dalam regulator termostatik industri, sistem industri, dalam elektronik konsumen dan sistem sensitif termal lainnya.

Deskripsi dan prinsip operasi perangkat:

Dalam artikel saya, saya akan menjelaskan contoh bekerja dengan sensor yang dibuat di perumahan ke-92.

Sepertinya ini:

Di dalam, benda ini diatur dengan sangat sederhana, lihat:

Pertimbangkan secara lebih rinci diagram blok ini.

Namun, pemberian makan dengan cara ini membuat beberapa batasan pada parameter waktu sensor. Memegang garis data untuk beberapa waktu membahas kapasitor, yang akan mengarah pada de-energi dari garis VDD internal, dan sensor secara keseluruhan, masing-masing. Oleh karena itu, tingkat logis yang tinggi harus dipertahankan dalam waktu yang tidak digunakan pada garis DQ. Perlu dicatat sebagai salah satu komentar penting. Ketika mengonversi suhu dan menyalin data dari ScratchPad di EEPROM (dalam salah satu register), arus saat ini yang dikonsumsi oleh arus VDD saat ini dapat mencapai 1,5, yang merupakan kelemahan kondensor internal, dan akan ada penurunan tegangan besar. Pada resistor suspensi, yang akan secara tidak dapat diterima mempengaruhi pengoperasian perangkat secara keseluruhan. Untuk melakukan ini, perlu mengatur skema line DQ suspender yang kuat yang dilaksanakan oleh skema ini:

Setelah mengeluarkan tim Mengubah.T. atau Salinan.Papan penggaris. Anda harus mengaktifkan garis angkat MOSFET-transistor yang kuat DQ tidak lebih dari 10 mx (maks.), Menurut pengembang sensor, setelah waktu konversi (TCONV) atau waktu transfer data (TWR \u003d 10 MC), dan pada waktu itu Tidak ada tindakan dengan suspender yang kuat pada garis DQ seharusnya tidak!

Tentang makanan standar yang perlu Anda katakan sedikit, karena semuanya sederhana, dan bahkan MOSFET tidak diperlukan sama sekali:

Subsistem "64-bit ROM dan 1-kawat" berisi kode identifikasi seri 64-bit yang unik yang terletak di memori ROM non-volatile, juga dalam node ini ada antarmuka interaksi dengan sistem kontrol 1-kawat. Subsistem logika kontrol memori mentransmisikan data antara antarmuka 1-kawat dan memori scratchpad, yang pada gilirannya, memiliki akses ke register sensor suhu, alarm atas dan bawah, register konfigurasi dan register generator 8- mengunci checksum untuk melindungi sistem data yang salah.

Ketika daya dihidupkan secara default, sensor memiliki resolusi konversi 12 bit, dan segera memasuki mode daya berkurang. Untuk memulai konversi, Master harus lulus perintah Mengubah.T. . Setelah mengkonversi suhu ke kode digital, kode ini terletak di memori awal dalam bentuk kata byte ganda, dan sensor kembali ke mode hemat energi.

Konversi suhu.

Sekarang kita akan mencari tahu bagaimana suhu dalam sensor dikonversi. Bahkan, ADC terletak di dalam sensor suhu, dan output, yang terletak di register suhu, ditransfer ke memori Scratchpad. Data suhu memiliki format berikut:

Bendera ikon S digunakan untuk menunjukkan jumlah angka (S \u003d 0 - jumlah yang terkandung dalam bit 10-0 positif, dan S \u003d 1, jika angka yang terkandung dalam bit yang sama negatif, yaitu dalam hal ini, suhu tampaknya dalam kode tambahan (kode suplemen hingga dua)).

Saat mengkonfigurasi resolusi konversi 12 bit, semua 12 bit (bit 11-bit 0) terlibat dan mengandung data yang andal. Saat mengatur resolusi 11 bit, isi bit 0 tidak boleh diperhitungkan, ketika pengaturan 10 bit tidak boleh diperhitungkan 0 dan 1, dll.

Alarm adalah fungsi termostat.

Ini menyediakan 2 register 8-bit, th dan tl. Nilai ambang batas atas suhu, dan dalam TL, masing-masing, yang lebih rendah. Jika suhu di atas nilai TL atau di bawah ini diatur ke bendera alarm. Bendera alarm ini terdeteksi oleh perangkat terkemuka dengan mengeluarkan perintah. Pencarian alarm. pada garis DQ. Bendera alarm diperbarui pada setiap operasi konversi suhu. By the way, hanya bit dari 11 hingga register suhu ke-4 yang digunakan dibandingkan dengan register TL atau TL, berikut ini fungsi termostat hanya berfungsi untuk nilai suhu integer. Register secara fisik EEPROM dengan memori, sehingga mereka mempertahankan nilai-nilai mereka ketika daya dimatikan. Register itu sendiri mirip dengan register suhu, hanya mereka 8-bit, bendera S benar-benar nilai yang sama seperti dalam kasus sebelumnya:

Kode ini, seperti yang disebutkan sebelumnya, diperlukan untuk mengidentifikasi setiap perangkat pada baris dalam sistem pengukuran suhu multipoint.

Format memori ini adalah:

8 bit yang lebih muda dibuang untuk menunjuk keluarga, dan berisi nilai 0x28. 48 bit berikutnya berisi nomor seri unik perangkat. Byte tertua berisi nilai checksum CRC, dihitung untuk 56 bit yang lebih muda dari memori ROM.

Organisasi memori.

Memori sensor terdiri dari ruang memori notepad (scratchpad) dan memori EEPROM untuk menyimpan data konfigurasi dan nilai register ambang alarm atas dan bawah.

Ketika daya dimatikan, data byte 2, 3 dan 4 menghemat nilai mereka ke EEPROM. Nah, ketika dihidupkan, nilai di dalamnya tetap tidak berubah. Byte 0 dan 1 berisi nilai suhu yang dikonversi, byte 5, 6, 7 dicadangkan untuk penggunaan internal dan tidak dapat diakses oleh pengguna untuk kebutuhannya.

Byte ke-8 berisi nilai yang dihasilkan oleh logika bawaan formasi kode CRC untuk byte dari 0 hingga 7, yang meminimalkan kemungkinan penentuan suhu yang salah pada akhirnya.

Perlu dicatat bahwa jika fungsi termostat tidak digunakan, maka register TH dan TL dapat digunakan sebagai memori tujuan umum - Anda dapat menyimpan informasi apa pun di dalamnya.

Data direkam dalam byte 2, 3 dan 4 dimulai dengan bit bit 2 yang lebih muda menggunakan perintah Tulis Scratchpad.. Untuk memeriksa integritas data yang direkam, Anda dapat membacanya, yang perlu melewati perintah ke sensor Baca Scratchpad.Setelah itu master harus menerima data dari byte 0 yang lebih muda.

Untuk menyimpan data dari register senior, termostat junior serta register konfigurasi dalam memori EEPROM, Master harus lulus perintah ke perintah Salin Scratchpad..

Seperti disebutkan sebelumnya, data sudah direkam dalam EEPROM, ketika daya dimatikan, disimpan. Tetapi ketika daya dihidupkan dari sel EEPROM yang sesuai, nilai-nilai secara otomatis diunduh ke register memori scratchpad yang sesuai. Nyaman, bukan? :)

Selain itu, data yang direkam dalam EEPROM setiap saat ditimpa dalam memori scratchpad. Ini diperlukan misalnya, ketika Anda mengubah konfigurasi dalam proses, dan kemudian Anda harus naik pada "mode operasi standar", I.E. Kembalikan konfigurasi pekerjaan yang sebelum mengubah konten register memori scratchpad. Ini sebenarnya untuk ini, perangkat terkemuka harus melewati perintah ke sensor. Ingat E.2 .

Dalam register konfigurasi, hanya 2 bit yang dapat ditentukan: R0 dan R1. Bit-bit ini menentukan resolusi konversi suhu, dan secara default diatur ke 1, yang menentukan pengaturan awal ke resolusi konversi 12-bit.

Semua konfigurasi yang mungkin dari bit ini dan izin yang sesuai disajikan dalam tabel di bawah ini. Perlu dicatat bahwa semakin besar resolusi konversi, semakin banyak waktu konversi, misalnya, untuk resolusi 12-bit, waktu konversi adalah 750ms (maks.).

Interaksi dengan sistem kontrol.

DS18B20, seperti disebutkan sebelumnya, untuk berkomunikasi dengan perangkat yang digerakkan menggunakan bus data antarmuka 1-kawat. Oleh karena itu, untuk menghubungkannya, sistem kontrol harus menyediakan outlet outlet atau dengan status garis Hi-Z.

Konfigurasi antarmuka sensor internal ditunjukkan di bawah ini:

Dalam keadaan tidak aktif (dalam keadaan idle), garis DQ ditarik ke resistor ke daya "+". Dengan demikian, garis ini harus selalu disimpan dalam keadaan ini antara transaksi (transmisi data data). Jika karena alasan apa pun, transaksi harus ditangguhkan, garis DQ harus disimpan dalam tingkat logis yang tinggi jika transmisi ini berlanjut lebih lanjut. Dalam proses menghentikan transaksi, kita dapat menjaga garis DQ untuk waktu yang lama dalam tingkat logika yang tinggi, dimulai dengan 1 SC. Tetapi, jika bus data disimpan dalam level logika yang rendah lebih lama dari 480μs, reset penuh dari semua sensor yang ada pada bus ini akan terjadi.

Urutan operasi untuk pertukaran.

Setiap kali sistem kontrol diakses ke sensor, urutan tindakan berikut harus diikuti:

1) inisialisasi;
2) Komando ROM (diikuti oleh pembagian data yang diperlukan);
3) Perintah fungsional sensor (diikuti oleh pembagian data yang diperlukan).

Jika tidak ada langkah ketika mengakses sensor hilang - sensor tidak akan merespons. Pengecualiannya adalah tim Cari.ROM [ F.0 h.] dan Alarm.Cari. [ Ech.] , setelah eksekusi mereka, tuan harus kembali ke langkah pertama dari urutan kontrol.

Begitu. Semua transaksi dimulai dengan inisialisasi. Operasi ini disertai dengan pengembangan perangkat pulsa ulang yang digerakkan oleh perangkat yang digerakkan (dalam hal ini, sensor) mentransmisikan keberadaan adanya impuls yang dihubungkan dan siap bekerja.

Secara umum, bus antarmuka 1-kawat, diimplementasikan dalam sensor, menentukan beberapa jenis sinyal pada baris data: reset pulsa, denyut nadi, perekaman 0, catatan 1, membaca 0, membaca 1. Semua operasi ini mengimplementasikan perangkat master , dengan pengecualian denyut nadi. Ini hanya membentuk sensor.

Jadi, untuk permulaan, perangkat master beralih ke mode pemancar dan menetapkan garis DQ pada 0 untuk sementara setidaknya 480μs (disorot dalam huruf tebal). Ini mengatur ulang sensor. Kemudian garis harus dirilis, dan menerjemahkan perangkat master ke dalam mode penerima, sedangkan resistor pull-up akan mengatur garis data dalam level logis yang tinggi (disorot dalam warna hitam tipis). Setelah sensor menghormati bagian depan yang tumbuh, sensor akan menantikan 15-60μs dan akan mengatur ulang garis data ke 0, dan itu akan disimpan selama 60-240μs. Setelah waktu ini, sensor melepaskan garis dan akan dipasang di level logis 1 untuk setidaknya 480μs setelah mendeteksi sensor debit pulsa.

Sekarang mari kita bicara tentang bagaimana proses transfer data dilakukan. Secara umum, bit. Kasingnya selanjutnya. Segmen waktu diambil, dan selama ini master terlihat bahwa kita miliki di garis di sana, katakanlah 1 - itu berarti bahwa mereka merekam 1, jika 0 berarti itu dicatat nol. Tapi ini hanya penjelasan abstrak. Bahkan, ada beberapa nuansa yang terkait dengan kerangka temporer dari semua kasus ini.

Menonton gambar:

Semuanya dimulai dengan fakta bahwa presenter harus menghilangkan garis yang diberikan pada level logis yang rendah, dan dari titik ini pada, slot perekaman / membaca 1/0, yaitu dari 60 hingga 120 mx. Antara slot rekaman / baca, saluran data harus dipasang pada 1 sekaligus, tidak kurang waktu pemulihan (1μS). Untuk mengatur slot catatan 0, perlu untuk menjaga garis data dalam 0 semua slot waktu, tetapi jika Anda perlu menulis ke sensor 1, maka kami pertama-tama mengatur ulang baris data ke 0, maka kami sedang menunggu setidaknya 1 mx dan lepaskan garis dalam 1, selama slot rekaman 1 (60- 120μs) akan direkam 1 ke sensor (lihat gambar kanan atas).

Bahkan, jika untuk 15-60 μs, setelah awal, 1 akan terdeteksi pada garis data, maka 1 akan direkam, dan jika akan dirilis selama 60-240μs.

Pembacaan data disertai dengan perangkat terkemuka ketika mengatur ulang garis, menunggu setidaknya 1 MX, dan terlihat pada 15 mx yang terjadi: Jika tetap 0, sensor mentransmisikan ke 1, lalu 1.

Tim.

Tim ROM.

Perintah ini harus mengikuti urutan inisialisasi dan berisi petunjuk pencarian untuk sensor yang sesuai, dll. Pelepasan setiap perintah adalah 8bit. Setelah mengeksekusi perintah yang sesuai, Anda dapat mentransfer perintah fungsional ke sensor.

Cari rom

Ketika sistem pada awalnya terhubung, itu harus mengenali semua perangkat yang terhubung ke bus. Untuk ini, tim ini. Tapi, karena kami hanya memiliki satu sensor, kami tidak akan menggunakan perintah ini.

Baca Rom.

Perintah ini hanya digunakan ketika hanya ada satu sensor di bus. Ini memungkinkan perangkat terkemuka untuk membaca konten dari bit memori 64 ROM tanpa menggunakan perintah pencarian. Dan jika Anda mencoba menggunakan perintah ini ketika jumlah sensor terhubung, lebih dari 1, mereka semua akan mulai melewati isi memori ini, yang akan mengarah pada konsekuensi yang tidak diinginkan.

Cocok dengan rom

Ini adalah perintah konformitas ROM. Wizard melepaskan 64 bit memori ROM yang sesuai yang terhubung ke bus sensor, dan sudah ditentukan apa yang harus dilakukan dengannya (mengukur suhu, dll.). Sensor lain pada ban akan menunggu giliran mereka saat ini.

Lewati Rom.

Ini adalah perintah ROM. Tidak memperhitungkan alamat sensor tertentu di bus, dan segera mengajukan banding ke semua. Setelah perintah ini, Anda dapat memberi, misalnya, perintah konversi suhu, dan semua sensor akan memulai konversi. Namun, untuk menampilkan perintah baca memori setelah menelepon perintah ini akan menyebabkan hasil yang tidak terduga (karena sekaligus semua sensor akan mengirimkan data). Jadi, hanya dengan satu sensor yang terhubung adalah situasi seperti itu.

Pencarian alarm.

Perintah ini identik dengan yang pertama di tabel ini kecuali bahwa sensor mencari ban dengan set bendera alarm.

Tim fungsional.

Perintah-perintah ini melakukan operasi fungsional dari setiap proses, misalnya, peluncuran operasi konversi suhu, penyalinan memori, dll. Total perintah 6, pelepasan setiap 8bit.

Konversi T.

Menjalankan konversi suhu. Setelah mengeksekusi perintah ini, data 2-byte dimasukkan ke dalam daftar suhu.

Tulis Scratchpad.

Merekam data untuk mendaftar 2-4 dimulai dengan bit kedua yang lebih muda ke depan. Selama transmisi, data dalam tiga register harus dipantau sehingga wizard tidak menjatuhkan sensor, karena kehilangan data dimungkinkan.

Baca Scratchpad.

Ini memulai proses mentransfer data ke semua register memori scratchpad, dimulai dengan bit byte 0 dan berakhir dengan bit byte 8 (CRC) yang lebih lama.

Salin Scratchpad.

Perintah ini menyalin konten register byte 2, 3 dan 4 ke sel EEPROM yang sesuai.

Ingat E.2

Perintah ini menyalin data dari EEPROM ke tempat yang sesuai dalam catatan ScratchPad. Seperti disebutkan sebelumnya, ketika Anda menghidupkan daya, operasi ini terjadi secara otomatis.

Baca catu daya

Di sini, pada kenyataannya, semua kebijaksanaan bekerja dengan sensor suhu DS18B20. Untuk informasi yang lebih rinci, kami menarik ke Datashet (). Sekarang perlu untuk mengimplementasikan semua bisnis ini di perangkat keras.

Skema Perangkat:

Gambar perakitan papan sirkuit cetak (saya minta maaf untuk kualitas, saya hanya akan bekerja, untuk debugging):

Jangan lupa untuk memodifikasi biaya

Karena ini adalah tiruan, saya menariknya keluar dari proyek lama, jadi di papan tulis, yang di atas - sedikit tidak apa yang saya miliki (pada saya sekarang menghapus semuanya terlalu banyak dan itu menjadi persis seperti pada gambar di atas) .

Itulah yang terjadi pada saya:

Ternyata semacam sandwich

Kode sumber program ditulis dalam lingkungan pengembangan. Saya tidak mencoba menggunakan pustaka kompiler AVR-GCC yang maksimal, tetapi menulis semuanya seperti yang mereka katakan, "dengan tangan." Tujuan saya bukan untuk menunjukkan kepemilikan Virtuoso tentang SI, tetapi hanya contoh yang ditulis dalam satu jam yang mampu memberikan pendatang baru kepada presentasi umum tentang sensor.
Perangkat ini dimaksudkan untuk digunakan di dalam ruangan, oleh karena itu tidak menyediakan pengukuran suhu negatif.

Unduh Sumber dan Lay PCB di bawah ini

Semua pertanyaan tambahan, keinginan menunggu di alamat: [Dilindungi Email]

Namun, perusahaan "Dallas Semiconductor" taksi. Kami memproduksi banyak karya unik dan murah. Salah satunya adalah sensor suhu DS18B20 digital. Fucks sedikit lebih sedikit tulang ceri dengan tiga kesimpulan. Kesimpulan pertama adalah daya + 5 volt, yang kedua adalah umum (nol), tetapi yang ketiga adalah alarm, kode seri dihapus dari suhu proporsional. Sensor menyediakan pengukuran suhu dalam kisaran (-55 ... +125) ° C dengan kesalahan pengukuran ± 0.5 ° C pada kisaran (-10 ... +85) ° C. Semua proses pada ban dikendalikan oleh mikroprosesor pusat. Di dalam - skema kompleks dengan sensor, ADC, ROM, register penyimpanan, dan sistem output berurutan.

Fitur utama DS18B20 adalah konverter suhunya. Resolusi suhu transduser dapat diubah oleh pengguna dan 9, 10, 10, atau 12 bit, sesuai dengan kenaikan 0,5 ° C, 0,25 ° C, 0,125 ° C, dan 0,0625 ° C, dan 0,0625 ° C masing-masing. Kemampuan permisif default adalah 12-bit.

Saya berbaring di sekitar lima pengontrol PIC16F628 dan entah bagaimana menemukan bahwa saya memiliki semua termometer atau merkuri atau alkohol, yang dianggap sebagai gangguan yang jelas. Oleh karena itu, diputuskan untuk mengumpulkan beberapa skema pada sensor ini, untuk mengukur suhu di jalan, suhu di apartemen, well, saya masih akan membuat satu opsi mini untuk mengukur suhu seseorang, dan kemudian gelar elektronik farmasi ini tanpa Tuhan! Nah, sistem pengukuran suhu lain akan membutuhkan robot, sehingga dalam hal apapun akan dibutuhkan sebagai tes.

Dari kelemahan yang diperhatikan:

1. Resistensi termal yang tinggi. Artinya, tidak mungkin untuk mengukur dengan cepat. Tidak mungkin untuk mengukur perubahan cepat. Pada video itu bisa dilihat.

2. Kisaran suhu -55 - +125 jelas bukan industri, dan secara umum, katakanlah, penghargaan di Oymyakne atau tambang niobium bawah tanah pada TAAMYR (dan di sana -50-60 dan bahkan -70 itu terjadi) tidak menunjukkan suhunya. Artinya, bahkan seluruh rentang rumah tangga meliputi.

Biaya dibesarkan di satu sisi. Diizinkan sepasang tiang ketika kabel, akan dikoreksi dalam rilis selanjutnya.

Lihat dari atas. Donable Disonaktifkan - Minus Temperatures.

Tes. Dia mulai meniup pengering rambut untuk mengeringkan rambut, kemudian dimatikan. Itu tetap bahkan dalam kasus untuk mengatur. Biaya perangkat adalah catu daya $ 6 - dari ponsel lama.

Ini dapat dibuat opsi eksperimental dengan daya dari baterai surya pada indikator LCD untuk tidak mengganggu sama sekali dengan daya. Glit di jendela dan biarkan dirimu bekerja selamanya! Ngomong-ngomong, siapa yang membutuhkan firmware, tulis, saya tahu yang benar.

P. Hari ini membandingkan kesaksian dengan perangkat lain di mana sensor adalah termistor. Seperti yang kita lihat - semuanya bertepatan.