İçindekiler:

Arduino Tabanlı Termostat: 6 Adım
Arduino Tabanlı Termostat: 6 Adım

Video: Arduino Tabanlı Termostat: 6 Adım

Video: Arduino Tabanlı Termostat: 6 Adım
Video: Yerli Robot Geliştirme Kartı Wolfino ile Engelden Kaçan Araba Yaptım 2024, Kasım
Anonim
Arduino Tabanlı Termostat
Arduino Tabanlı Termostat
Arduino Tabanlı Termostat
Arduino Tabanlı Termostat
Arduino Tabanlı Termostat
Arduino Tabanlı Termostat

Bu sefer Arduino, sıcaklık sensörü ve röle tabanlı bir Termostat kuracağız. Github'da bulabilirsiniz.

Adım 1: Yapılandırma

Yapılandırma
Yapılandırma

Tüm konfigürasyon Config.h'de saklanır. Röleleri kontrol eden PIN'leri, okuma sıcaklığını, eşikleri veya zamanlamaları değiştirebilirsiniz.

Adım 2: Röleleri Yapılandırma

3 röleye sahip olmak istediğimizi varsayalım:

  • ID:0, PIN: 1, Sıcaklık ayar noktası: 20
  • ID:1, PIN: 10, Sıcaklık ayar noktası: 30
  • ID:2, PIN: 11, Sıcaklık ayar noktası: 40

Öncelikle, seçtiğiniz PIN'in henüz alınmadığından emin olmalısınız. Tüm pinler Config.h'de bulunabilir, DIG_PIN ile başlayan değişkenler tarafından tanımlanırlar.

Config.h'yi düzenlemeniz ve PIN'leri, eşikleri ve röle miktarını yapılandırmanız gerekir. Açıkçası bazı özellikler zaten var, bu yüzden onları düzenlemeniz gerekiyor.

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

const statik uint8_t RELAYS_AMOUNT = 3;

const statik int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Şimdi röleleri ve denetleyiciyi kurmamız gerekiyor, bu RelayDriver.cpp'de oluyor

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

Adım 3: Histerezis Denetleyicisi

Yukarıdaki örnekte seçilendir, birkaç ek konfigürasyonu vardır:

const statik uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 dakikaconst statik uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS, bir sonraki röleyi değiştirmek için bekleme süresi verir. Örneğimizdeki konfigürasyonun 40 derecelik bir ortamda çalışmaya başlayacağını hayal edin. Bu, üç rölenin de aynı anda etkinleştirilmesiyle sonuçlanacaktır. Bu, nihayetinde yüksek güç tüketimine yol açabilir - neyi kontrol ettiğinize bağlı olarak, örneğin elektrik motoru çalıştırma sırasında daha fazla güç tüketir. Bizim durumumuzda anahtarlama rölelerinin akışı şu şekildedir: birinci röle gider, 5 dakika bekler, ikincisi geçer, 5 dakika bekler, üçüncü geçer.

RHC_RELAY_MIN_SWITCH_MS histerezisi tanımlar, belirli bir rölenin durumunu değiştirmesi için minimum frekanstır. Açıldıktan sonra, en azından bu süre boyunca, sıcaklık değişimlerini göz ardı ederek açık kalacaktır. Bu, elektrik motorlarını kontrol ettiğinizde oldukça kullanışlıdır, çünkü her bir anahtarın canlı zaman üzerinde olumsuz etkisi vardır.

Adım 4: PID Denetleyicisi

PID Denetleyici
PID Denetleyici
PID Denetleyici
PID Denetleyici

Bu ileri düzey bir konu. Böyle bir denetleyiciyi uygulamak basit bir iştir, doğru genlik ayarlarını bulmak farklı bir hikaye.

PID denetleyicisini kullanmak için initRelayHysteresisController(…..) öğesini initRelayPiDController(….) olarak değiştirmeniz ve bunun için doğru ayarları bulmanız gerekir. Her zamanki gibi bunları Config.h'de bulacaksınız.

Java'da basit bir simülatör uyguladım, böylece sonuçları görselleştirmek mümkün. Klasörde bulunabilir: pidsimulator. Aşağıda iki PID ve P kontrolörünün simülasyonlarını görebilirsiniz. PID tam olarak kararlı değil çünkü doğru değerleri bulmak için herhangi bir karmaşık algoritma uygulamadım.

Her iki grafikte de gerekli sıcaklık 30'a (mavi) ayarlanmıştır. Mevcut sıcaklık okuma satırını gösterir. Rölenin AÇIK ve KAPALI olmak üzere iki durumu vardır. Devredeyken sıcaklık 1,5 düşer, devre dışıyken 0,5 yükselir.

Adım 5: Mesaj Yolu

Mesaj Yolu
Mesaj Yolu
Mesaj Yolu
Mesaj Yolu
Mesaj Yolu
Mesaj Yolu
Mesaj Yolu
Mesaj Yolu

Farklı yazılım modüllerinin birbirleriyle iletişim kurması gerekir, umarım her iki şekilde de olmaz;)

Örneğin:

  • istatistik modülü, belirli bir rölenin ne zaman açılıp kapanacağını bilmek zorundadır,
  • bir düğmeye basmak ekran içeriğini değiştirmeli ve ayrıca sensörden sıcaklık okuma gibi birçok CPU döngüsü tüketecek hizmetleri askıya almalıdır.
  • bir süre sonra sıcaklık okumasının yenilenmesi gerekir,
  • ve bunun gibi….

Her modül Message Bus'a bağlıdır ve belirli olaylar için kayıt yapabilir ve herhangi bir olay üretebilir (ilk diyagram).

İkinci diyagramda butona basıldığında olay akışını görebiliriz.

Bazı bileşenlerin periyodik olarak yürütülmesi gereken bazı görevleri vardır. Karşılık gelen yöntemleri ana döngüden çağırabiliriz, çünkü Message Bus'a sahip olduğumuz için sadece doğru olayı yaymak gerekir (üçüncü diyagram)

Adım 6: Lib'ler

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Sıcaklık…
  • https://github.com/maciejmiklas/ArdLog.git

Önerilen: