Spisu treści:

Termostat oparty na Arduino: 6 kroków
Termostat oparty na Arduino: 6 kroków

Wideo: Termostat oparty na Arduino: 6 kroków

Wideo: Termostat oparty na Arduino: 6 kroków
Wideo: Termostat na Arduino sterowany przez www - LabFun 2024, Listopad
Anonim
Termostat oparty na Arduino
Termostat oparty na Arduino
Termostat oparty na Arduino
Termostat oparty na Arduino
Termostat oparty na Arduino
Termostat oparty na Arduino

Tym razem zbudujemy Termostat w oparciu o Arduino, czujnik temperatury i przekaźnik. Znajdziesz na github

Krok 1: Konfiguracja

Konfiguracja
Konfiguracja

Cała konfiguracja jest przechowywana w Config.h. Możesz zmieniać PINy sterujące przekaźnikami, odczytywaniem temperatury, progów lub czasów.

Krok 2: Konfiguracja przekaźników

Załóżmy, że chcielibyśmy mieć 3 przekaźniki:

  • ID:0, PIN: 1, Nastawa temperatury: 20
  • ID:1, PIN: 10, Nastawa temperatury: 30
  • ID:2, PIN: 11, Nastawa temperatury: 40

Najpierw upewnij się, że wybrany przez Ciebie PIN nie jest już zajęty. Wszystkie piny znajdują się w Config.h, są one definiowane przez zmienne zaczynające się od DIG_PIN.

Musisz edytować Config.h i skonfigurować PINy, progi i ilość przekaźników. Oczywiście niektóre właściwości już istnieją, więc wystarczy je edytować.

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

const statyczny uint8_t RELAYS_AMOUNT = 3;

const statyczny int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Teraz musimy skonfigurować przekaźniki i kontroler, dzieje się to w 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

Krok 3: Kontroler histerezy

To ten wybrany w powyższym przykładzie, ma kilka dodatkowych konfiguracji:

const statyczny uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutesconst static uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS podaje czas oczekiwania na przełączenie kolejnego przekaźnika. Wyobraź sobie, że konfiguracja z naszego przykładu zacznie działać w środowisku 40 stopni. Spowodowałoby to jednoczesne włączenie wszystkich trzech przekaźników. Może to ostatecznie prowadzić do wysokiego zużycia energii - w zależności od tego, czym sterujesz, na przykład silnik elektryczny zużywa więcej mocy podczas rozruchu. W naszym przypadku przełączanie przekaźników przebiega następująco: pierwszy przekaźnik załącza, odczekaj 5 minut, drugi załącza, odczekaj 5 minut, trzeci załącza.

RHC_RELAY_MIN_SWITCH_MS określa histerezę, czyli minimalną częstotliwość zmiany stanu danego przekaźnika. Po włączeniu pozostanie włączony przynajmniej przez ten czas, ignorując zmiany temperatury. Jest to bardzo przydatne, gdy sterujesz silnikami elektrycznymi, ponieważ każdy przełącznik ma negatywny wpływ na czas życia.

Krok 4: Regulator PID

Regulator PID
Regulator PID
Regulator PID
Regulator PID

To jest zaawansowany temat. Zaimplementowanie takiego kontrolera jest proste, a znalezienie odpowiednich ustawień amplitudy to już inna historia.

Aby korzystać z kontrolera PID należy zmienić initRelayHysteresisController(…..) na initRelayPiDController(….) i znaleźć dla niego odpowiednie ustawienia. Jak zwykle znajdziesz je w Config.h

Zaimplementowałem prosty symulator w Javie, dzięki czemu możliwe jest wizualizowanie wyników. Można go znaleźć w folderze: pidsimulator. Poniżej można zobaczyć symulacje dla dwóch regulatorów PID i P. PID nie jest idealnie stabilny, ponieważ nie zastosowałem żadnego wyrafinowanego algorytmu, aby znaleźć właściwe wartości.

Na obu działkach wymagana temperatura jest ustawiona na 30 (kolor niebieski). Aktualna temperatura wskazuje linię odczytu. Przekaźnik ma dwa stany ON i OFF. Gdy jest włączony temperatura spada o 1,5, gdy jest wyłączony wzrasta o 0,5.

Krok 5: Magistrala wiadomości

Magistrala wiadomości
Magistrala wiadomości
Magistrala wiadomości
Magistrala wiadomości
Magistrala wiadomości
Magistrala wiadomości
Magistrala wiadomości
Magistrala wiadomości

Różne moduły oprogramowania muszą się ze sobą komunikować, miejmy nadzieję, że nie w obie strony;)

Na przykład:

  • moduł statystyk musi wiedzieć, kiedy dany przekaźnik włącza się i wyłącza,
  • naciśnięcie przycisku ma zmienić zawartość wyświetlacza, a także zawiesić usługi, które pochłaniałyby wiele cykli procesora, np. odczyt temperatury z czujnika,
  • po pewnym czasie odczyt temperatury należy powtórzyć,
  • i tak dalej….

Każdy moduł jest podłączony do magistrali komunikatów i może rejestrować się na określone zdarzenia oraz może generować dowolne zdarzenia (pierwszy diagram).

Na drugim diagramie widzimy przebieg zdarzenia po naciśnięciu przycisku.

Niektóre komponenty mają pewne zadania, które muszą być wykonywane okresowo. Moglibyśmy wywoływać odpowiadające im metody z pętli głównej, ponieważ mamy magistralę komunikatów, wystarczy tylko propagować właściwe zdarzenie (trzeci diagram)

Krok 6: Libs

  • https://github.com/maciejmiklas/Termostat
  • https://github.com/milesburton/Arduino-Temperatura…
  • https://github.com/maciejmiklas/ArdLog.git

Zalecana: