Sensor suhu Arduino dan Digital DS18B20. Sensor Suhu Digital dari Sensor Suhu Semikoduktur Dallas 18 20

Sensor suhu di Arduino adalah salah satu jenis sensor yang paling umum. Pengembang proyek dengan termometer di Arduino tersedia opsi yang berbedaberbeda pada 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. Konfigurasi terakhir register dan register direkam, TLS yang dapat digunakan sebagai register. tujuan umumJika tidak digunakan untuk menunjukkan rentang 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 Mengirimkan 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, cepat atau lambat ada kebutuhan untuk mengukur parameter meteorologi seperti itu. sekelilingnyaseperti 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 SalinanPapan 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 subsistem antarmuka 1-kawat dan memori scratchpad, yang pada gilirannya, memiliki akses ke register. sensor temperatur, Mendaftarkan ambang batas atas dan bawah dari alarm, register konfigurasi, dan register generator checksum 8-bit untuk melindungi sistem dari 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 kode sumber I. pCB. Berbaring di bawah ini

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

Dalam dua artikel sebelumnya, kami melihat dan. Dalam artikel ini, kami mempertimbangkan skema untuk menghubungkan satu atau lebih sensor ke mikrokontroler dan pemrograman operasi MK dengan sensor (sensor) di atas ban 1-kawat dengan catu daya eksternal

Skema koneksi sensor DS18B20 khas untuk mikrokontroler:


Seperti yang dapat dilihat dari skema, sensor DS18B20 (atau sensor) terhubung ke mikrokontroler jika mereka memiliki daya bersama, tiga konduktor:
- Kesimpulan Nomor 1 - Kawat Umum (Massa, Bumi)
- Output Nomor 2 - Ini DQ , untuk komunikasi mana antara MK dan DS18B20 terjadi, terhubung ke setiap kesimpulan dari setiap port MK. Output DQ harus "ditarik" melalui resistor ke power plus
- Nomor Output 3 - kekuatan sensor - +5 volt
Jika beberapa sensor suhu digunakan dalam perangkat, mereka dapat dihubungkan ke berbagai kesimpulan dari port MK, tetapi kemudian program akan meningkat. Sensor lebih baik untuk terhubung seperti yang ditunjukkan pada diagram - secara paralel, ke satu output dari port MK.
Biarkan saya mengingatkan Anda tentang besarnya ketat resistor:
"Perlawanan resistor harus dipilih dari kompromi antara resistansi kabel yang digunakan dan interferensi eksternal. Perlawanan resistor dapat dari 5.1 hingga 1 com. Untuk kabel resistansi tinggi, perlu untuk menggunakan resistensi yang lebih tinggi. Dan di mana gangguan industri hadir - pilih resistansi yang lebih rendah dan gunakan kabel dengan penampang yang lebih besar. Untuk mie telepon (4 vena) untuk 100 meter, resistor diperlukan 3,3 com. Jika Anda menerapkan "twisted pair" bahkan panjang 2 kategori dapat ditingkatkan ya 300 meter "

Pemrograman operasi mikrokontroler dengan sensor DS18B20

Bagaimana komunikasi sensor DS18B20 dengan mikrokontroler, kami akan melihat menggunakan program pembangun Dailure dan Algoritma sensor.

Urutan operasi komunikasi
Sangat penting untuk mengikuti urutan yang ditetapkan (yang terdiri dari tiga poin) setiap saat ketika mengakses DS18B20:
1. Inisialisasi
2. Komando ROM
3. Perintah fungsional DS18B20
Hanya dua tim yang dilakukan dalam dua langkah: Cari ROM. dan Cari kecelakaan.

Inisialisasi DS18B20.

Urutan inisialisasi terdiri dari dua bagian:
- Debit pulsa - yang membentuk mikrokontroler
- Kehadiran pulsa - Bentuk DS18B20 yang mana
Keadaan awal bus DQ, yang menurutnya MK dan komunikasi sensor terjadi - logis 1, karena bus DQ "diperketat" melalui resistor ke catu daya.
Di bus DQ, Anda dapat mendefinisikan apakah sensor terhubung ke mikrokontroler:
- Jika bus logis 1 adalah sensor yang terhubung
- Jika tidak logis 1 berarti sensor tidak terhubung (atau lupa untuk menghubungkan, atau memecahkan garis DQ)
Oleh karena itu, urutan inisialisasi dapat ditambahkan item lain - memeriksa koneksi sensor. Tetapi perhatikan bahwa pemeriksaan ini hanya dapat dilakukan dengan satu sensor.

Periksa koneksi sensor DS18B20:

Dimana:
- INI_DS18B20. - Inisialisasi program
- dq_pin. - Nama yang saya ditugaskan kategori port ke mana sensor terhubung (jika Anda melihat sesuai dengan skema, maka ini adalah port PB0 di)
- DQ_PIN \u003d 1 - Memeriksa koneksi sensor - jika pada output unit logis DQ_PIN, lalu pergi melalui panah, jika tidak, maka:
- 1-\u003e term_errorDi mana term_error adalah variabel di mana kode kesalahan dicatat dalam hal ini "1"
- show_term_error. - Pergi ke tampilan subprogram output kesalahan
Misalnya, saat menggunakan layar tujuh-segmen tiga bit, Anda dapat menampilkan baris seperti itu:
- ER1.Apa artinya - terjadi kesalahan, kode kesalahan-1 (sensor tidak terhubung)

Sekarang perhatikan sensor sensor dan lihat jadwal waktu prosedur inisialisasi:


Transfer jadwal ke kata-kata:
1. Tingkat awal bus DQ adalah unit logis (karena resistor pengetatan)
2. Mikrokontroler menghasilkan pulsa reset:
- MK menerjemahkan bus DQ dalam keadaan nol logis untuk sementara setidaknya 480 mikrodetik
- MK merilis ban (kami menerjemahkan output ke mode penerimaan), sedangkan bus DQ kembali masuk ke keadaan unit logis
3. DS18B20 Setelah menemukan setetes level pada bus (dari nol logis ke unit logis) setelah 15-60 microsecond mentransmisikan keberadaan pulsa - menerjemahkan bus DQ ke keadaan nol logis ke durasi 60-240 mikrodetik
4. Setelah menyelesaikan denyut nadi, DS18B20 mengembalikan bus DQ ke tingkat unit logis (dilihat dari grafik - setelah 480 mikrodetik, dari ujung pulsa reset, ban harus dikembalikan ke logis tingkat unit)

Sekarang kami akan menerjemahkan semuanya ke dalam bahasa program. Tetapi harus dicatat bahwa dua kesalahan lagi dapat terjadi selama proses inisialisasi:
- DS18B20 tidak mengeluarkan dorongan kehadiran
- Setelah hadirin dorongan dari DS18B20, bus DQ tidak kembali dalam keadaan unit logis.


Grafik menunjukkan karakteristik waktu minimum, jadi dalam program mereka agak terlalu tinggi atau diambil maksimal (dari minimum) nilai:
- Reset Impuls dari MK - bukan 480 A 500 mikrodetik
- Jeda dari ujung denyut nadi keluar ke dorongan kehadiran - 60 mikrodetik
- Pengembalian ban ke dalam keadaan unit logis setelah denyut nadi setelah 420 mikrodetik
Saya berharap dengan pertanyaan pertama - inisialisasi, kami tahu
Pergi ke langkah selanjutnya dari urutan wajib - "Komando ROM"

Tim ROM.

Langkah selanjutnya dari komunikasi kami dengan Ds18b20. Kita harus menyerahkannya yang diperlukan komando ROM
Saya mengingatkan Anda bahwa perintah ROM hanya lima:
1. Cari ROM. - Ini dapat digunakan (dan mungkin tidak diterapkan, misalnya, dalam banyak kasus saya tidak menggunakannya) dalam hal menggunakan beberapa sensor atau perangkat lain yang berkomunikasi dengan MK pada bus 1-kawat
2. Membaca ROM. - Digunakan dengan satu sensor yang terhubung untuk membaca kode 64-bitnya
3. Pencocokan ROM. - digunakan dalam sensor kasus lebih dari satu untuk menarik sensor tertentu
4. Lewati Rom. - Perintah ini digunakan untuk segera naik ke semua sensor (perangkat) yang terhubung ke MK. Ini hampir digunakan untuk mengirimkan perintah fungsional untuk mengonversi suhu (definisi suhu) oleh semua sensor yang terhubung secara bersamaan
5. Cari Alarm. - Jika kita mengatur batas suhu atas dan bawah DS18B20 yang perlu kita kontrol. Dalam hal ini, kami hanya akan menjawab sensor suhu yang diukur yang sesuai dengan batas yang ditentukan.

Setiap perintah ROM memiliki kode enam belas digit (serta perintah fungsional), jadi untuk kenyamanan dalam program ini Anda dapat sangat mengidentifikasi konstanta yang memiliki nama tim yang jelas, misalnya:


Tabel ini menetapkan konstanta yang diinginkan untuk bekerja dengan sensor perintah.
Setelah langkah pertama - inisialisasi, dan mentransmisikan sensor DS18B20 dari perintah ROM, sensor siap untuk melakukan perintah fungsional.
Pada artikel sebelumnya, saya memberi tahu secara rinci tentang perintah ROM, dan tim fungsional, saya tidak akan mengulangi (saya berbicara tentang perintah fungsional).

Dua contoh algoritma pekerjaan dengan DS18B20:
1. Saat menggunakan satu sensor:
- Lakukan inisialisasi

- Terapkan Tim Fungsi Sensor - "Konversi Suhu" (untuk mengukur suhu)
Dalam proses konversi, mengontrol pengoperasian sensor - jika pada bus nol, konversi tidak berakhir jika unit logis selesai pada ban.
Sekarang Anda dapat mempertimbangkan suhu dari sensor:
- Lakukan inisialisasi
- Mari kita berikan Command ROM sensor - "Lewati Rom"
- Terapkan perintah fungsi sensor - "membaca memori"
Menurut perintah "membaca memori", sensor mulai mengirimkan data dari memori-nya - sembilan byte. Tetapi kita hanya perlu dua byte pertama - suhu saat ini yang diukur dengan sensor dicatat di dalamnya. Karena itu, kami hanya membaca dua byte pertama dan keluar dari subrutin.

Sensor ini menggunakan protokol 1-kawat yang sangat besar - koneksi terbentuk, yang berkomunikasi di bus hanya menggunakan satu sinyal kontrol. Ban harus dihubungkan ke sumber daya melalui resistor pull-up.

Spesifikasi DS18B20.
ParameterNilai
Tipe output IC.Digital.
Rentang Akurasi Penginderaan.± 0.5 ° C
Rentang penginderaan suhu.-55 ° C hingga + 125 ° C
Arus suplai1mA.
Rentang tegangan suplai.3V ke 5.5V.
Resolusi (bit)9...12
Gaya Sensor Kasus.Ke-92.
Tidak. Pin.3
Nomor dasar18
Suhu pengoperasian Max.85 ° C.
Suhu pengoperasian min.-10 ° C.
Kisaran suhu operasi.-10 ° C hingga + 85 ° C
Output saat ini4mA.
Tipe output.Digital.
Paket / kasing.Ke-92.
Resolusi9...12
Jenis sensor / transduserSuhu.
Pasokan tegangan Max.5.5V.
Pasokan voltase min.3V.
Tipe terminasi.Melalui lubang.
Suhu pengoperasian, ° C0...+55
Kelembaban relatif operasi,%...55
ProduksiDallas / Maxim.
Masa operasi garansi12 bulan sejak tanggal pembelian
Berat, G.10

DS1820, DS18S20, DS18B20 - Sensor termal digital Dallas-Maxim populer dengan antarmuka 1-kawat kawat tunggal. Karena ambiguitas penandaan dan kelimpahan sirkuit pada data sensor termal digital, yang muncul dalam literatur amatir, kami menganggapnya perlu untuk memberikan beberapa penjelasan.
Chip DS1820 dihapus dari produksi Dan untuk penggantinya, disarankan mikro Ds18s20.. Namun, harus dibayarkan pada kenyataan bahwa chip DS18S20 dalam kasus ke-92 ditandai dengan tulisan "DS1820" (tanpa huruf s). MicroCircuit baru Perangkat lunak DS18S20 kompatibel dengan DS1820 lama Dan, menurut pabrikan, dalam banyak kasus itu dapat langsung digantikan oleh DS1820 lama. Mungkin menandai tanpa produsen huruf ingin menentukan kompatibilitas ini. Kompatibilitas program DS18S20 baru dengan DS1820 lama dijamin jika program diterapkan dari algoritma lembar data.
Seperti yang dapat dilihat dari tabel, mikrokirit DS18S20 baru dibuat dalam kasus standar ke-92, dan DS1820 lama memiliki perumahan memanjang. Atas dasar ini, Anda juga dapat memastikan bahwa penjual tidak "menekan" chip yang sudah ketinggalan zaman.
Microsiras dari DS18B20 yang sama selalu memiliki label yang sesuai "DS18B20" dan tidak dapat diganti oleh DS1820 / DS18S20 dan kembali tanpa mengubah kode program.

Spesifikasi sensor suhu pepatah digital
Sensor tipe.Ds1820. Ds18s20.Ds18b20.
MenandaiDs1820. Ds1820.Ds18b20.
PerumahanPR-35.
(Udlen. Ke-92)
Ke-92.Ke-92.
BIGNESS.9-bit 9-bit9 ... 12bit
Waktu konversi200 ms (tipe.)
500ns (maks)
750NS (maks)750NS (maks)
Akurasi pengukuran ± 0,5%
dalam kisaran suhu
0 .... + 70 ° с -10 .... + 85 ° с-10 .... + 85 ° с
Supply Voltage.
untuk akurasi pengukuran ± 0,5%
4.3-5.5v. 3.0-5.5v.3.0-5.5v.
Deskripsi

Ds18b20. - Dalc Dallas Digital Suhu Sensor. Mengirimkan data suhu hanya menggunakan satu output digital dan protokol khusus, yang disebut 1-wire. Anda dapat menghubungkan beberapa sensor ke satu kontak. Sensor mengukur suhu dalam derajat Celcius.

Spesifikasi DS18B20.

  • Sensor dapat digunakan dengan tegangan dari 3 hingga 5.5V
  • Sensor dapat mengukur suhu dari -55 hingga 125 ° C
  • Sensor ini memiliki resolusi digital dari 9 hingga 12 bit
  • Akurasi pengukuran +/- 0,5 ° C dalam kisaran dari -10 hingga 85 ° C
  • Akurasi pengukuran: + / - 2 ° C untuk kisaran dari -55 hingga 125 ° C
  • Pengukuran Drift +/- 0.2 ° C

Skema koneksi DS18B20.

Apa itu izin?

DI spesifikasi. Dilaporkan bahwa sensor DS18B20 dapat mengukur suhu dengan resolusi yang berbeda. Resolusi seperti penggaris: milimeter antara sentimeter. Juga, dengan resolusi DS18B20 adalah langkah antara langkah-langkah yang konsisten dari derajat Celcius.

Resolusi dipilih menggunakan jumlah bit. Rentang pilihan dari 9 hingga 12 bit. Pilihan izin mencakup konsekuensi tertentu. Semakin tinggi resolusinya, semakin lama Anda harus menunggu hasil pengukuran.

Untuk izin 9 bit, ada 2 langkah antara level sekuensial:

  • 0.0 ° C.
  • 0.5 ° C.

Untuk izin 10 bit ada 4 langkah antara tingkat sekuensial:

  • 0.0 ° C.
  • 0,25 ° C.
  • 0.5 ° C.
  • 0,75 ° C.

Dalam hal ini, kita membaca suhu dengan resolusi 0,25 ° C. Mengukur waktu untuk resolusi 10 bit adalah 187,5 ms, yang memungkinkan Anda melakukan pengukuran 5.3 per detik.

Untuk izin 11 bit, ada 8 langkah antara level yang konsisten:

  • 0.0 ° C.
  • 0,125 ° C.
  • 0,25 ° C.
  • 0,375 ° C.
  • 0.5 ° C.
  • 0,625 ° C.
  • 0,75 ° C.
  • 0,875 ° C.

Yaitu, resolusinya adalah 0,125 ° C. Mengukur waktu untuk izin 11 bit adalah 375 ms. Ini memungkinkan Anda untuk melakukan 2,6 pengukuran per detik.

Untuk izin 12 bit, ada 16 langkah antara level yang konsisten:

  • 0.0 ° C.
  • 0,0625 ° C.
  • 0,125 ° C.
  • 0,1875 ° C.
  • 0,25 ° C.
  • 0,3125 ° C.
  • 0,375 ° C.
  • 0,4375 ° C.
  • 0.5 ° C.
  • 0.5625 ° C.
  • 0,625 ° C.
  • 0,6875 ° C.
  • 0,75 ° C.
  • 0,8125 ° C.
  • 0,875 ° C.
  • 0,9375 ° C.

Akibatnya, resolusinya adalah 0,0625 ° C. Waktu pengukuran untuk izin 12 bit di area 750 ms. Artinya, Anda dapat membuat 1,3 pengukuran per detik.

Apa keakuratan pengukuran?

Tidak ada di dunia, dan terutama dalam elektronik, tidak sempurna. Anda hanya dapat mendekati kesempurnaan, menghabiskan lebih banyak dan lebih banyak uang dan kekuatan. Juga dengan sensor ini. Dia memiliki beberapa ketidakakuratan yang perlu Anda ketahui.

Karakteristik teknis mengatakan bahwa dalam kisaran pengukuran dari -10 hingga 85 ° C, sensor DS18B20 memiliki akurasi pada level +/- 0,5 ° C. Ini berarti bahwa ketika kita memiliki suhu 22.5 ° C di dalam ruangan, sensor dapat mengembalikan hasil pengukuran dari 22 hingga 23 ° C kepada kita. Artinya, itu bisa menunjukkan 0,5 ° C lebih atau kurang. Semua ini tergantung pada karakteristik individu sensor.

Dalam kisaran dari -55 hingga 125 ° C, kesalahan pengukuran dapat meningkat menjadi +/- 2 ° C. Artinya, ketika Anda mengukur sesuatu dengan suhu 100 ° C, sensor dapat menunjukkan suhu dari 98 hingga 102 ° C.

Semua penyimpangan ini bisa agak berbeda untuk setiap suhu, tetapi ketika mengukur suhu yang sama, penyimpangan akan selalu sama.

Apa itu pengukuran drift?

Pengukuran drift adalah bentuk ketidakakuratan paling buruk. Inti dari penyimpangan pengukuran adalah bahwa ketika mengukur suhu konstan - dengan satu pengukuran, sensor dapat menunjukkan satu suhu, dan setelah selanjutnya (dengan nilai drift).

Draf DS18B20 +/- 0.2 ° C. Misalnya, ketika suhu konstan 24 ° C di dalam ruangan, sensor dapat menghasilkan hasil dalam kisaran dari 23.8 ° C hingga 24.2 ° C.

(379.0 KB, diunduh: 913)