Forum AstroCD http://www.astrocd.pl/forum/ |
|
Arduino w Astronomii - Sterownik grzałek http://www.astrocd.pl/forum/viewtopic.php?f=105&t=5866 |
Strona 1 z 2 |
Autor: | Radosław Deska [ niedziela, 12 maja 2019, 15:28 ] |
Tytuł: | Arduino w Astronomii - Sterownik grzałek |
Założenia dla sterownika i potrzebne elementy Założenia na początek bardzo proste i podstawowe.
Potrzebne elementy dla układu modelowego (wyjściowego)
Schemat układu Załącznik: Opis działania Układ ma za zadanie dokonywać pomiaru temperatury i wilgotności za pomocą czujnika DHT22. Na podstawie zmierzonych wartości program dokonuje obliczeń temperatury punktu rosy. Mając te dane i na ich podstawie program steruje grzałką. Czerwona dioda LED sygnalizuje (symuluje) włączenie grzałki. Zielona dioda LED sygnalizuje brak roszenia. Program nie ma zdefiniowanego pinu / pinów do sterowania grzałką / grzałkami (układ pełni na chwilę obecną zadanie modelowe, eksperymentalne). Komunikacja szeregowa (COM) służy jako "monitor" działania programu - docelowo może być wyłączona w celu oszczędności pamięci programu. Funkcje:
Wykorzystane biblioteki:
Kod programu Kod: // Automatyczny sterownik grzałek // // Funkcje: // - Pomiar temperatury // - Pomiar wilgotności // - Obliczenie punktu rosy // - Sterowanie grzałką teleskopu - włącz / wyłącz // - Sygnalizacja błędu odczytu z czujnika DHT // // Biblioteki: // - Adafruit Unified Sensor (Adafruit) // - DHT Sensor Library (Adafruit) // // Uwagi: // - Program demonstruje działanie automatycznego sterownika grzałek. // - Czerwona dioda LED sygnalizuje (symuluje) włączenie grzałki // - Zielona dioda LED sygnalizuje brak roszenia // - Program nie ma zdefiniowanego pinu / pinów do sterowania grzałką / grzałkami // - Komunikacja szeregowa (COM) służy jako "monitor" działania programu - docelowo może być wyłączona w celu oszczędności pamięci programu // - Rozwiązanie programowe absolutnie nie jedynie słuszne // - Za uszkodzenia wynikające z działania programu nie odpowiadam, program stworzony został jako przykład dla urządzenia modelowego (bez grzałki) // // Autor: // Radosław Deska // // Wersja: // - 1.0 (12.05.2019) // // ------------------------------------------------------------------------------------------------------------------------------------------------- #include "DHT.h" // Biblioteka DHT #define LED_R_PIN 3 // Czerwona dioda LED do pinu cyfrowego nr 3 (sygnalizacja pracy grzałki) #define LED_G_PIN 4 // Zielona dioda LED do pinu cyfrowego nr 4 (sygnalizacja braku rosy) #define DHTPIN 5 // Czujnik DHT podłaczony do pinu cyfrowego nr 5 #define DHTTYPE DHT22 // Rodzaj czujnika DHT22 DHT dht(DHTPIN, DHTTYPE); // Funkcja obliczająca temperature punktu rosy na podstawie pomiarów temperatury i wilgotności - wynik typu float float pktRosy(float humi, float temp) { float k; k = log(humi/100) + (17.62 * temp) / (243.12 + temp); return 243.12 * k / (17.62 - k); } void setup() { Serial.begin(9600); // Włączenie komunikacji szeregowej - ustawienie prędkości transmisji Serial.println("Automatyczny sterownik grzałek \n"); // Tekst na powitanie pinMode(LED_R_PIN, OUTPUT); // Konfiguracja pinu cyfrowego nr 3 jako wyjście pinMode(LED_G_PIN, OUTPUT); // Konfiguracja pinu cyfrowego nr 4 jako wyjście dht.begin(); // Włączenie i inicjalizacja komunikacji z czujnikiem DHT } void loop() { delay(500); // Odczekaj 0,5 sekundy float h = dht.readHumidity(); // Odczyt wilgotności h - typ zmiennej float float t = dht.readTemperature(); // Odczyt temperatury t - typ zmiennej float // Kontrola odczytu danych z czujnika DHT, sygnalizacja błędu czerwoną diodą LED if (isnan(h) || isnan(t)) { Serial.println("Błąd odczytu z czujnika DHT!"); // Wyślij komunikat o błedzie digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diode LED delay(150); // Odczekaj 150ms digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diode LED return; } float td = pktRosy(h, t); // Wywołanie funkcji pktRosy z wartościami h i t, przypisanie wyniku do zmiennej td // Wysłanie na port COM danych o temperaturze (t), wilgotności (h) i temeraturze punktu rosy (td) Serial.print("Wilgotność: "); Serial.print(h); Serial.print("% Temperatura: "); Serial.print(t); Serial.print("°C "); Serial.print(" Punkt rosy: "); Serial.print(td); Serial.print("°C \n"); // Sprawdzamy na podstawie wyliczonego punktu rosy (td) i mierzonej temperatury z czujnika DHT czy należy włączyć grzałkę // Jeżeli td > t = uruchamiamy grzałkę, w przeciwnym razie td < t = wyłączamy grzałkę // W układzie modelowym czerwona dioda LED sygnalizuje pracę grzałki, zielona dioda LED brak rosy. // Jeżeli spełniony jest warunek td > t wówczas zaświeci się czerwona dioda LED (grzałka pracuje), zielona dioda LED zgaśnie (rosa) if (td > t) { digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa } else{ digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diodę LED - grzałka nie pracuje digitalWrite(LED_G_PIN, HIGH); // Włącz zieloną diodę LED - brak rosy } } Starałem się maksymalnie opisać komentarzami program. Sama idea wcale nie jest jedyna i słuszna. Jest to wersja 1.0, modelowa i ma służyć jako punkt wyjścia do w pełni działającego urządzenia. Dlatego sygnalizację działania oparłem na dwóch diodach LED. Miejcie litość nigdy nigdzie nie publikowałem swoich programów więc nie biorę odpowiedzialności za wszelkie uszkodzenia czy to programowe czy też sprzętowe ![]() |
Autor: | Marek Substyk [ niedziela, 12 maja 2019, 18:36 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Radku. Super robota. Jutro zabieram się za konstrukcję. |
Autor: | Radosław Deska [ niedziela, 12 maja 2019, 18:45 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
To tylko pierwsza wersja programu. Jak się uda zmieścić w 8kB programu spokojnie finalnie można wrzucić to do tego maleństwa ![]() ATTINY85 + PCB + czujnik + kilka elementów i małe sprytne urządzenie gotowe ![]() Wersja 1.0 programu bez wysyłania komunikatów na port COM zajmuje 3,8kB |
Autor: | Radosław Deska [ niedziela, 12 maja 2019, 21:58 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Jeszcze dobrze nie ostygła wersja 1.0 a już jest aktualizacja do wersji 1.1 programu. Robiąc test pracy wrzuciłem układ do zamrażarki na kilka minut. Następnie wyjąłem układ i podłączyłem do zasilania. Wim, wiem, ryzykowne ale czego to się nie robi. Całość ładnie się "zmoczyła" i efekt jaki uzyskałem to brak sygnalizacji, że grzałka działa (czerwona dioda LED). Wynik z tego co pokazywał serial monitor: Kod: Wilgotność: 99.00% Temperatura: 06.70°C Punkt rosy: 06.69°C Wilgotność: 99.00% Temperatura: 06.70°C Punkt rosy: 06.69°C Wilgotność: 99.00% Temperatura: 06.71°C Punkt rosy: 06.70°C Wilgotność: 99.00% Temperatura: 06.72°C Punkt rosy: 06.71°C Przy warunku td > t po prostu nie miało prawa zadziałać. Zmieniłem warunek na td+1 > t, mała prosta modyfikacja sprawiająca, że układ modelowy zadziałał. Teraz ważne pytanie do mądrych głów. Na ile przed "zbliżającym się" punktem rosy powinien układ włączyć grzałkę i w którym momencie ją wyłączyć ? Poniżej kod dla wersji 1.1 wraz z komentarzami. Kod: // Automatyczny sterownik grzałek
// // Funkcje: // - Pomiar temperatury // - Pomiar wilgotności // - Obliczenie punktu rosy // - Sterowanie grzałką teleskopu - włącz / wyłącz // - Sygnalizacja błędu odczytu z czujnika DHT // // Biblioteki: // - Adafruit Unified Sensor (Adafruit) // - DHT Sensor Library (Adafruit) // // Uwagi: // - Program demonstruje działanie automatycznego sterownika grzałek. // - Czerwona dioda LED sygnalizuje (symuluje) włączenie grzałki // - Zielona dioda LED sygnalizuje brak roszenia // - Program nie ma zdefiniowanego pinu / pinów do sterowania grzałką / grzałkami // - Komunikacja szeregowa (COM) służy jako "monitor" działania programu - docelowo może być wyłączona w celu oszczędności pamięci programu // - Rozwiązanie programowe absolutnie nie jedynie słuszne // - Za uszkodzenia wynikające z działania programu nie odpowiadam, program stworzony został jako przykład dla urządzenia modelowego (bez grzałki) // // Autor: // Radosław Deska // // Wersja: // - 1.1 (12.05.2019) // // Poprawki do wersji: // - zmieniono warunek kiedy ma zostać włączona grzałka // - dodano komunikat wysyłany na port COM o włączonej / wyłączonej grzałce (ON/OFF) // // ------------------------------------------------------------------------------------------------------------------------------------------------- #include "DHT.h" // Biblioteka DHT #define LED_R_PIN 3 // Czerwona dioda LED do pinu cyfrowego nr 3 (sygnalizacja pracy grzałki) #define LED_G_PIN 4 // Zielona dioda LED do pinu cyfrowego nr 4 (sygnalizacja braku rosy) #define DHTPIN 5 // Czujnik DHT podłaczony do pinu cyfrowego nr 5 #define DHTTYPE DHT22 // Rodzaj czujnika DHT22 DHT dht(DHTPIN, DHTTYPE); // Funkcja obliczająca temperature punktu rosy na podstawie pomiarów temperatury i wilgotności - wynik typu float float pktRosy(float humi, float temp) { float k; k = log(humi/100) + (17.62 * temp) / (243.12 + temp); return 243.12 * k / (17.62 - k); } void setup() { Serial.begin(9600); // Włączenie komunikacji szeregowej - ustawienie prędkości transmisji Serial.println("Automatyczny sterownik grzałek \n"); // Tekst na powitanie pinMode(LED_R_PIN, OUTPUT); // Konfiguracja pinu cyfrowego nr 3 jako wyjście pinMode(LED_G_PIN, OUTPUT); // Konfiguracja pinu cyfrowego nr 4 jako wyjście dht.begin(); // Włączenie i inicjalizacja komunikacji z czujnikiem DHT } void loop() { delay(500); // Odczekaj 2 sekundy float h = dht.readHumidity(); // Odczyt wilgotności h - typ zmiennej float float t = dht.readTemperature(); // Odczyt temperatury t - typ zmiennej float // Kontrola odczytu danych z czujnika DHT, sygnalizacja błędu czerwoną diodą LED if (isnan(h) || isnan(t)) { // Serial.println("Błąd odczytu z czujnika DHT!"); // Wyślij komunikat o błedzie digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diode LED delay(150); // Odczekaj 150ms digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diode LED return; } float td = pktRosy(h, t); // Wywołanie funkcji pktRosy z wartościami h i t, przypisanie wyniku do zmiennej td // Wysłanie na port COM danych o temperaturze (t), wilgotności (h) i temeraturze punktu rosy (td) Serial.print("Wilgotność: "); Serial.print(h); Serial.print("% Temperatura: "); Serial.print(t); Serial.print("°C "); Serial.print(" Punkt rosy: "); Serial.print(td); Serial.print("°C "); // Sprawdzamy na podstawie wyliczonego punktu rosy (td) i mierzonej temperatury z czujnika DHT czy należy włączyć grzałkę // Jeżeli td > t = uruchamiamy grzałkę, w przeciwnym razie td < t = wyłączamy grzałkę // W układzie modelowym czerwona dioda LED sygnalizuje pracę grzałki, zielona dioda LED brak rosy. // Jeżeli spełniony jest warunek td > t wówczas zaświeci się czerwona dioda LED (grzałka pracuje), zielona dioda LED zgaśnie (rosa) if (td+1 > t) { // Zmodyfikowany warunek. Do punktu rosy (td) dodałem jeden (testy zamrażarka) digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print(" ON "); // Znacznik grzałki - ON (kiedy dt+1 > t) } else{ digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diodę LED - grzałka nie pracuje digitalWrite(LED_G_PIN, HIGH); // Włącz zieloną diodę LED - brak rosy Serial.print(" OFF "); // Znacznik grzałki - OFF (kiedy dt+1 < t) } Serial.print("\n"); } |
Autor: | Grzegorz Czernecki [ poniedziałek, 13 maja 2019, 15:17 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
A kiedy wersja z PWM i sterowaniem mocą grzałki zależnie od temperatury i punktu rosy ? ![]() |
Autor: | Radosław Deska [ poniedziałek, 13 maja 2019, 16:02 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
PWM dorzucimy ![]() |
Autor: | Grzegorz Czernecki [ poniedziałek, 13 maja 2019, 17:59 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Przykładowo jak temperatura zbliżała by się do punktu rosy dajmy na to na 2 stopnie to grzałka załączałą by się na 30% , 1 stopień 50% punkt rosy 60% itd |
Autor: | Radosław Deska [ poniedziałek, 13 maja 2019, 18:53 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
To tak napisze program żeby w taki sposób działał. Podejrzewam, że opcja ustawiania progów działania grzałki bylaby ciekawym pomysłem. |
Autor: | Marek Substyk [ środa, 15 maja 2019, 19:31 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Wersja na ATTINY85 powinna być rewelacyjna! |
Autor: | Radosław Deska [ środa, 15 maja 2019, 20:53 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Marek Substyk napisał(a): Informuje, że doszedłem już do tego punktu Super, że się udało!Marek Substyk napisał(a): Wersja na ATTINY85 powinna być rewelacyjna! Tez mam takie zdanie. Jest szansa na małe urządzenie. Limit 8kB programu jest jak najbardziej możliwy.Za nim dojdziemy do tego etapu trzeba dopracować program i jego działanie tak by wszystko działało zgodnie z planem. Grzegorz Czernecki napisał(a): Przykładowo jak temperatura zbliżała by się do punktu rosy dajmy na to na 2 stopnie to grzałka załączałą by się na 30% , 1 stopień 50% punkt rosy 60% itd Trzeba teraz napisać wrunek tak by grzałka działała z zalożeniami jakie podsunąl Grzegorz. Oczywiście sterowanie PWM.
|
Autor: | Radosław Deska [ sobota, 18 maja 2019, 22:51 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Dzisiaj powstała wersja 1.2 z obsługą PWM. Poprawki do wersji 1.2
Całkowicie został przebudowany blok warunku sprawdzającego jak "przesuwa się" punkt rosy Kod: if ((t - td <= 7) && (t - td >= 5)) { // Jeżeli różnica t-td jest mniejsza lub równa 7 i większa lub równa 5 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - sygnalizacja pracy grzałki digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 2); // PWM - wypełnienie 2 (grzałkę symuluje dioda LED) Serial.print("PWM 2, 7 - 5"); // Wyślij tekst o wypełnieniu PWM i zakresie } else if ((t - td < 5) && (t - td >= 3)) { // Jeżeli różnica t-td jest mniejsza 5 i większa lub równa 3 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 32); // PWM - wypełnienie 2 (grzałkę symuluje dioda LED) Serial.print("PWM 32, 5 - 3"); // Wyślij tekst o wypełnieniu PWM i zakresie } else if ((t - td < 3) && (t - td > 1)) { // Jeżeli różnica t-td jest mniejsza 3 i większa 1 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 64); // PWM - wypełnienie 64 (grzałkę symuluje dioda LED) Serial.print("PWM 64, 3 - 1"); // Wyślij tekst o wypełnieniu PWM i zakresie } else if (t - td == 1) { // Jeżeli różnica t-td jest równa 1 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 255); // PWM - wypełnienie 255 (grzałkę symuluje dioda LED) - grzałka pracuje pełną mocą Serial.print("PWM 255, 1"); // Wyślij tekst o wypełnieniu PWM i zakresie } else { digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diodę LED - grzałka nie pracuje digitalWrite(LED_G_PIN, HIGH); // Włącz zieloną diodę LED - brak rosy Serial.print("OFF\t"); // Znacznik grzałki - OFF (kiedy td+1 < t) analogWrite(HEATER, 0); // PWM - wypełnienie 0 (grzałkę symuluje dioda LED) Serial.print("PWM 0"); // Wyślij tekst o wypełnieniu PWM } Warunek oparty został na różnicy między temperaturą (t) i temperaturą punktu rosy (td). W zależności jaki wynik otrzymujemy odpowiednio sterujemy PWM na pinie nr 6. Stopień wypełnienia jest "na oko" z tego względu, że zamiast grzałki do pinu nr 6 podłączyłem diodę LED symulującą już samą grzałkę. Podłączenie identyczne jak pozostałe diody LED (przez rezystor). Oczywiście absolutnie nie podłączajcie grzałki bezpośrednio do pinu nr 6! To nadal układ modelowy bez końcówki wykonawczej dla samej grzałki! Czekam na uwagi, propozycje zmian ![]() Cały kod wersji 1.2 poniżej Kod: // Automatyczny sterownik grzałek // // Funkcje: // - Pomiar temperatury // - Pomiar wilgotności // - Obliczenie punktu rosy // - Sterowanie grzałką teleskopu - włącz / wyłącz // - Sygnalizacja błędu odczytu z czujnika DHT // // Biblioteki: // - Adafruit Unified Sensor (Adafruit) // - DHT Sensor Library (Adafruit) // // Uwagi: // - Program demonstruje działanie automatycznego sterownika grzałek. // - Czerwona dioda LED sygnalizuje (symuluje) włączenie grzałki // - Zielona dioda LED sygnalizuje brak roszenia // - Program nie ma zdefiniowanego pinu / pinów do sterowania grzałką / grzałkami // - Komunikacja szeregowa (COM) służy jako "monitor" działania programu - docelowo może być wyłączona w celu oszczędności pamięci programu // - Rozwiązanie programowe absolutnie nie jedynie słuszne // - Za uszkodzenia wynikające z działania programu nie odpowiadam, program stworzony został jako przykład dla urządzenia modelowego (bez grzałki) // // Autor: // Radosław Deska // // Wersja: // - 1.2 (18.05.2019) // // Poprawki do wersji 1.2 // - poprawiono komentarze // - zmieniony został blok związany z obsługą grzałki, inna budowa warunku // - dodanie pinu obsługującego grzałkę (pin cyfrowy nr 6) // - dodanie funkcji PWM dla pinu nr 6 // - zmienione zostały typy zmiennych t, h, td z float na int // - zmieniono warunek braku komunikacji/danych z czujnika DHT // // Poprawki do wersji 1.1 // - zmieniono warunek kiedy ma zostać włączona grzałka // - dodano komunikat wysyłany na port COM o włączonej / wyłączonej grzałce (ON/OFF) // // ------------------------------------------------------------------------------------------------------------------------------------------------- #include "DHT.h" // Biblioteka DHT #define LED_R_PIN 3 // Czerwona dioda LED do pinu cyfrowego nr 3 (sygnalizacja pracy grzałki) #define LED_G_PIN 4 // Zielona dioda LED do pinu cyfrowego nr 4 (sygnalizacja braku rosy) #define HEATER 6 // Pin sterujący pracą grzałki (pin cyfrowy nr 6, PWM) #define DHTPIN 5 // Czujnik DHT podłaczony do pinu cyfrowego nr 5 #define DHTTYPE DHT22 // Rodzaj czujnika DHT22 DHT dht(DHTPIN, DHTTYPE); // Funkcja obliczająca temperature punktu rosy na podstawie pomiarów temperatury i wilgotności - wynik typu float float pktRosy(float humi, float temp) { float k; k = log(humi / 100) + (17.62 * temp) / (243.12 + temp); return 243.12 * k / (17.62 - k); } void setup() { Serial.begin(9600); // Włączenie komunikacji szeregowej - ustawienie prędkości transmisji Serial.println("Automatyczny sterownik grzałek \t Wersja 1.2 \n"); // Tekst na powitanie pinMode(LED_R_PIN, OUTPUT); // Konfiguracja pinu cyfrowego nr 3 jako wyjście pinMode(LED_G_PIN, OUTPUT); // Konfiguracja pinu cyfrowego nr 4 jako wyjście pinMode(HEATER, OUTPUT); // Konfiguracja pinu cyfrowego nr 6 jako wyjście dht.begin(); // Włączenie i inicjalizacja komunikacji z czujnikiem DHT } void loop() { delay(500); // Odczekaj 500 ms int h = dht.readHumidity(); // Odczyt wilgotności h - typ zmiennej int int t = dht.readTemperature(); // Odczyt temperatury t - typ zmiennej int if (h == 0 || t == 0) { Serial.println("Błąd odczytu z czujnika DHT!"); // Wyślij komunikat o błedzie digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diode LED delay(150); // Odczekaj 150ms digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diode LED return; } // Wywołanie funkcji pktRosy z wartościami h i t, przypisanie wyniku do zmiennej td (int) int td = pktRosy(h, t); // Wysłanie na port COM danych o temperaturze (t), wilgotności (h) i temeraturze punktu rosy (td) Serial.print("Wilgotność: "); // Wyślij tekst Serial.print(h); // Wartość wilgotności - zmienna h Serial.print("°%"); // Wyślij tekst Serial.print("\t"); // Znak tabulatora Serial.print("Temperatura: "); // Wyślij tekst Serial.print(t); // Wartość temperatury - zmienna t Serial.print("°C"); // Wyślij tekst Serial.print("\t"); // Znak tabulatora Serial.print(" Punkt rosy: "); // Wyślij tekst Serial.print(td); // Wartość punktu rosy - zmienna td Serial.print("°C"); // Wyślij tekst Serial.print("\t"); // Znak tabulatora Serial.print("t-td = "); // Wyślij tekst Serial.print(t - td); // Oblicz różnicę między zmienną t i zmienną td i wyświetl Serial.print("\t"); // Znak tabulatora // Sprawdzamy na podstawie wyliczonego punktu rosy (td) i mierzonej temperatury z czujnika DHT czy należy włączyć grzałkę // Jeżeli td > t = uruchamiamy grzałkę, w przeciwnym razie td < t = wyłączamy grzałkę // W układzie modelowym czerwona dioda LED sygnalizuje pracę grzałki, zielona dioda LED brak rosy. // Jeżeli spełniony jest warunek td > t wówczas zaświeci się czerwona dioda LED (grzałka pracuje), zielona dioda LED zgaśnie (rosa) // !!! UWAGA !!! Do pinu nr 6 podłączona jest dioda LED wraz z rezystorem 220Ohm jako symulator grzałki if ((t - td <= 7) && (t - td >= 5)) { // Jeżeli różnica t-td jest mniejsza lub równa 7 i większa lub równa 5 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - sygnalizacja pracy grzałki digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 2); // PWM - wypełnienie 2 (grzałkę symuluje dioda LED) Serial.print("PWM 2, 7 - 5"); // Wyślij tekst o wypełnieniu PWM i zakresie } else if ((t - td < 5) && (t - td >= 3)) { // Jeżeli różnica t-td jest mniejsza 5 i większa lub równa 3 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 32); // PWM - wypełnienie 2 (grzałkę symuluje dioda LED) Serial.print("PWM 32, 5 - 3"); // Wyślij tekst o wypełnieniu PWM i zakresie } else if ((t - td < 3) && (t - td > 1)) { // Jeżeli różnica t-td jest mniejsza 3 i większa 1 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 64); // PWM - wypełnienie 64 (grzałkę symuluje dioda LED) Serial.print("PWM 64, 3 - 1"); // Wyślij tekst o wypełnieniu PWM i zakresie } else if (t - td == 1) { // Jeżeli różnica t-td jest równa 1 digitalWrite(LED_R_PIN, HIGH); // Włącz czerwoną diodę LED - grzałka pracuje digitalWrite(LED_G_PIN, LOW); // Wyłącz zieloną diodę LED - rosa Serial.print("ON\t"); // Wyślij tekst - ON i dodaj tabulator analogWrite(HEATER, 255); // PWM - wypełnienie 255 (grzałkę symuluje dioda LED) - grzałka pracuje pełną mocą Serial.print("PWM 255, 1"); // Wyślij tekst o wypełnieniu PWM i zakresie } else { digitalWrite(LED_R_PIN, LOW); // Wyłącz czerwoną diodę LED - grzałka nie pracuje digitalWrite(LED_G_PIN, HIGH); // Włącz zieloną diodę LED - brak rosy Serial.print("OFF\t"); // Znacznik grzałki - OFF (kiedy td+1 < t) analogWrite(HEATER, 0); // PWM - wypełnienie 0 (grzałkę symuluje dioda LED) Serial.print("PWM 0"); // Wyślij tekst o wypełnieniu PWM } Serial.println(" "); // Przejdz do następnego wiersza (Serial Monitor) } Niestety forum nie zgadza się na przyjęcie pliku z rozszerzeniem *.ino dlatego muszę prezentować kod w pełnej okazałości zamiast gotowego piku do pobrania. |
Autor: | Jarosław Grzegorzek [ niedziela, 9 czerwca 2019, 10:14 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Mam pytanie związane DHT22. Stosuję go już od kilku lat i zauważyłem związane z nim ciekawe (a właściwie nieciekawe ![]() |
Autor: | Radosław Deska [ niedziela, 9 czerwca 2019, 20:09 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Radosław Deska napisał(a): Mam pytanie związane DHT22. Stosuję go już od kilku lat i zauważyłem związane z nim ciekawe (a właściwie nieciekawe ![]() Osobiście nie spotkałem się z takim objawem w przypadku mojego czujnika ponieważ stosunkowo krótko go posiadam i nie pracuje on non stop. Z tego co udało mi się natknąć w czeluściach internetu powód takiego działania to po prostu sama konstrukcja czujnika i to z czego jest wykonany ma zasadniczy wpływ na jego żywotność i wiarygodność. Osobiście zauważyłem, że mój egzemplarz zawyża temperaturę o około 2 stopnie i to trochę nieliniowo. Przy okazji kto znajdzie dwa błędy w kodzie (sposobie działania) dostanie za każdy znaleziony błąd piwo ![]() |
Autor: | Grzegorz Czernecki [ niedziela, 16 czerwca 2019, 22:09 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Jarosław Grzegorzek napisał(a): Mam pytanie związane DHT22. Stosuję go już od kilku lat i zauważyłem związane z nim ciekawe (a właściwie nieciekawe U mnie jest podobnie mam go w astropudełku i raz wogóle nie chciał działać a innym razem pokazywał dziwne wartości wilgotności i punktu rosy
![]() |
Autor: | Radosław Deska [ niedziela, 23 czerwca 2019, 10:39 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Zamówiłem czujnik DHT21 więc będzie możliwość porównania jak się sprawuje na tle DHT22. |
Autor: | Jarosław Grzegorzek [ niedziela, 4 sierpnia 2019, 02:37 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Poczytałem sobie trochę na temat czujników (higrometrów). Okazuje się, że faktycznie DHT22 mają problem z długoterminową stabilnością. Po pewnym czasie najzwyczajniej "padają". Z różnych źródeł dowiedziałem się, że bardzo dobrze oceniany jest natomiast BME280. W Botlandzie go mają, ale bardzo drogo (prawie 100 zł), więc sprowadzę kilka sztuk z "dalekich krajów". Aż tak mi się nie spieszy i mogę poczekać. Przetestuję i dam znać czy jest lepiej. ![]() |
Autor: | Radosław Deska [ niedziela, 4 sierpnia 2019, 20:12 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Jarek to koniecznie daj znać jak przyjdą czujniki jak się spisują. Na marginesie w jakich układach i do czego wykorzystujesz, bo domyślam się, że w podobnym charakterze jak w temacie wątku. Do mnie dotarł już HTU21D wiec będzie można porównać "żywotność" w warunkach bojowych. |
Autor: | Jarosław Grzegorzek [ niedziela, 4 sierpnia 2019, 23:37 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Radek. Oczywiście, będę informował o tym jak się sprawują. Do czego je stosuję ? W moim obserwatorium używam ich w dwóch systemach: Pierwszy to kamera AllSky, którą skonstruowałem kilka lat temu. Czujnik monitoruje wilgotność pod jej kopułką i dzięki temu wiem kiedy powinienem zregenerować/wymienić silica gel, który również umieszczony jest wewnątrz obudowy kamery. Drugi to system podgrzewania 3 punktów mojego newtona - lusterka wtórnego, głównego oraz reduktora ogniskowej do poziomu temperatury powyżej punktu rosy, czyli coś zbliżonego do tematu tego wątku. |
Autor: | Radosław Deska [ poniedziałek, 5 sierpnia 2019, 18:00 ] |
Tytuł: | Re: Arduino w Astronomii - Sterownik grzałek |
Jarosław Grzegorzek napisał(a): Drugi to system podgrzewania 3 punktów mojego newtona - lusterka wtórnego, głównego oraz reduktora ogniskowej do poziomu temperatury powyżej punktu rosy, czyli coś zbliżonego do tematu tego wątku. Oczywiście już mnie ciekawi rozwiązanie sterownika, a zwłaszcza wzoru, z którego korzystasz do obliczania punktu rosy, samej końcówki "mocy" do sterowania grzałkami. Jarosław Grzegorzek napisał(a): Poczytałem sobie trochę na temat czujników (higrometrów). Okazuje się, że faktycznie DHT22 mają problem z długoterminową stabilnością. Po pewnym czasie najzwyczajniej "padają". Z różnych źródeł dowiedziałem się, że bardzo dobrze oceniany jest natomiast BME280. W Botlandzie go mają, ale bardzo drogo (prawie 100 zł), więc sprowadzę kilka sztuk z "dalekich krajów". Aż tak mi się nie spieszy i mogę poczekać. Przetestuję i dam znać czy jest lepiej. Zauważ, że cały moduł BME280 to odsłonięta elektronika, warto byłoby zabezpieczyć ją przed czynnikami atmosferycznymi. Oczywiście dbając by samego sensora nie "upaćkać". Połączenie elektryczne muszą być zabezpieczone, jak sam dobrze o tym wiesz. Jakiś sprawdzony sposób zawsze mile widziany. |
Strona 1 z 2 | Strefa czasowa: UTC + 2 |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |