Isi kandungan:

Termostat Berdasarkan Arduino: 6 Langkah
Termostat Berdasarkan Arduino: 6 Langkah

Video: Termostat Berdasarkan Arduino: 6 Langkah

Video: Termostat Berdasarkan Arduino: 6 Langkah
Video: NGOBAAR #1 Pengatur Suhu Otomatis Arduino 2024, Julai
Anonim
Termostat Berdasarkan Arduino
Termostat Berdasarkan Arduino
Termostat Berdasarkan Arduino
Termostat Berdasarkan Arduino
Termostat Berdasarkan Arduino
Termostat Berdasarkan Arduino

Kali ini kami akan membina Thermostat berdasarkan Arduino, sensor suhu dan relay. Anda boleh dapatkan di github

Langkah 1: Konfigurasi

Konfigurasi
Konfigurasi

Seluruh konfigurasi disimpan di Config.h. Anda boleh menukar PIN yang mengawal geganti, suhu bacaan, ambang atau masa.

Langkah 2: Mengkonfigurasi Relay

Mari kita anggap bahawa kita ingin mempunyai 3 geganti:

  • ID: 0, PIN: 1, Titik suhu: 20
  • ID: 1, PIN: 10, Setpoint suhu: 30
  • ID: 2, PIN: 11, Titik set suhu: 40

Mula-mula anda harus memastikan bahawa PIN pilihan anda belum diambil. Semua pin boleh didapati dalam Config.h, ia ditentukan oleh pemboleh ubah yang bermula dengan DIG_PIN.

Anda harus mengedit Config.h dan mengkonfigurasi PIN, ambang dan jumlah geganti. Sudah tentu beberapa sifat sudah ada, jadi anda hanya perlu mengeditnya.

const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; const static uint8_t DIG_PIN_RELAY_2 = 11;

const static uint8_t RELAYS_AMOUNT = 3;

const static int16_t RELAY_TEMP_SET_POINT_0 = 20;

const static int16_t RELAY_TEMP_SET_POINT_1 = 30; const static int16_t RELAY_TEMP_SET_POINT_2 = 40;

Sekarang kita harus mengatur relay dan pengawal, ini berlaku di RelayDriver.cpp

initRelayHysteresisController (0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0); initRelayHysteresisController (1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresisController (2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

Langkah 3: Pengawal Histeresis

Yang dipilih dalam contoh di atas, ia mempunyai beberapa konfigurasi tambahan:

stat statik uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minit statik uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS memberi masa menunggu untuk menukar geganti seterusnya. Bayangkan bahawa konfigurasi dari contoh kita akan mula berfungsi dalam lingkungan 40 darjah. Ini akan menyebabkan ketiga-tiga relai diaktifkan pada masa yang sama. Ini akhirnya boleh menyebabkan penggunaan tenaga yang tinggi - bergantung pada apa yang anda kendalikan, mesin elektrik misalnya menggunakan lebih banyak kuasa semasa memulakan. Dalam kes kami, relay beralih mempunyai aliran berikut: geganti pertama berjalan, tunggu 5 minit, kedua terus, tunggu 5 minit, ketiga terus.

RHC_RELAY_MIN_SWITCH_MS mentakrifkan histeresis, ini adalah frekuensi minimum untuk geganti tertentu untuk mengubah keadaannya. Setelah dihidupkan, ia akan tetap menyala sekurang-kurangnya dalam jangka masa ini, mengabaikan perubahan suhu. Ini tenang jika anda mengawal motor elektrik, kerana setiap suis mempunyai kesan negatif pada waktu hidup.

Langkah 4: Pengawal PID

Pengawal PID
Pengawal PID
Pengawal PID
Pengawal PID

Ini adalah topik lanjutan. Melaksanakan pengawal sedemikian adalah tugas yang mudah, mencari tetapan amplitud yang tepat adalah cerita yang berbeza.

Untuk menggunakan pengawal PID, anda harus menukar initRelayHysteresisController (…..) menjadi initRelayPiDController (….) Dan anda perlu mencari tetapan yang tepat untuknya. Seperti biasa anda akan menjumpainya di Config.h

Saya telah melaksanakan simulator sederhana di Java, sehingga dapat memvisualisasikan hasilnya. Ia boleh didapati dalam folder: pidsimulator. Di bawah ini anda dapat melihat simulasi untuk dua pengawal PID P. P. PID tidak stabil sepenuhnya kerana saya tidak menggunakan algoritma canggih untuk mencari nilai yang tepat.

Di kedua-dua petak, suhu yang diperlukan ditetapkan pada 30 (biru). Suhu semasa menunjukkan garis baca. Relay mempunyai dua keadaan ON dan OFF. Apabila diaktifkan suhu turun 1.5, apabila dinyahaktifkan ia meningkat 0.5.

Langkah 5: Bas Mesej

Bas Mesej
Bas Mesej
Bas Mesej
Bas Mesej
Bas Mesej
Bas Mesej
Bas Mesej
Bas Mesej

Modul perisian yang berbeza harus berkomunikasi antara satu sama lain, semoga tidak kedua-duanya;)

Sebagai contoh:

  • modul statistik mesti mengetahui bila relay tertentu dihidupkan dan dimatikan,
  • menekan butang harus mengubah kandungan paparan dan juga harus menangguhkan perkhidmatan yang akan memakan banyak siklus CPU, misalnya pembacaan suhu dari sensor,
  • setelah beberapa lama bacaan suhu mesti diperbaharui,
  • dan sebagainya….

Setiap modul disambungkan ke Bus Mesej dan boleh mendaftar untuk acara tertentu, dan dapat menghasilkan sebarang acara (rajah pertama).

Pada rajah kedua kita dapat melihat aliran peristiwa pada menekan butang.

Beberapa komponen mempunyai beberapa tugas daripada yang perlu dilaksanakan secara berkala. Kita boleh memanggil kaedah yang sesuai dari gelung utama, kerana kita mempunyai Mesej Bas, hanya perlu menyebarkan peristiwa yang betul (rajah ketiga)

Langkah 6: Libs

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Temperature…
  • https://github.com/maciejmiklas/ArdLog.git

Disyorkan: