Skocz do zawartości

AdamK

Użytkownik
  • Liczba zawartości

    121
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    3

Odpowiedzi dodane przez AdamK

  1. Dzięki jolo !

    Miałem pewne problemy w którym miejscu umieścić te kilka linii kodu, ale już jest OK i układ działa.

    Rzeczywiście, nie wziąłem pod wzgląd, że można skorzystać z wilgotności zmierzonej.

    Teraz pozostaje tylko umieścić to w obudowie i dość przydatny gadżet gotowy.

  2. Z kodów przedstawionych tu przez Jola skleciłem program, który pokazuje na wyświetlaczu temperaturę powietrza, wilgotność oraz temperaturę punktu rosy.

    Wszystko działa. Zapakuję to w pudełko i będę używał jako mini stację pogodową ostrzegającą o możliwości wystąpienia rosy.

    Na razie żadnej automatyki... grzałki jak dotąd będę włączał ręcznie.

    Żeby ten układ należycie spełniał swoją funkcję alarmową chciałbym jeszcze dodać mrugającą czerwoną diodę LED w momencie kiedy wystąpi możliwość roszenia.

    I tu mam problem jak taki warunek dopisać do istniejącego programu - nie potrafię sam tego zrobić.

    Czy ktoś mógłby mi pomóc dopisać taką sekwencję?

    Zastanawiam się też jak bardzo temperatura powietrza musi się zbliżyć do temperatury punktu rosy, żeby warunek włączenia alarmu został spełniony?

    Dwa, jeden, a może ułamek stopnia Celsjusza?

    Arduino1.thumb.JPG.91574e13c388e93af5844

    Uwaga do foto: w momencie robienia zdjęcia w układzie brakowało DHT22

    Poniżej program, który z pewnością zawiera błędy (przepraszam znawców tematu), ale działa.

    Dołączyłem do niego linię w części setup():

    digitalWrite(7, LOW);           //LED czerwony - możliwość powstania rosy

    więcej w temacie mrugającej diody nie potrafię...

     

    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <Timer.h>
    #include <dht.h>
    #include <EEPROM.h>
    #include <LiquidCrystal.h>

    #define DS8120_PIN 6
    #define DHT22_PIN 9

    OneWire oneWire(DS8120_PIN);
    DallasTemperature sensors(&oneWire);
    DeviceAddress insideThermometer;
    dht DHT;
    Timer timer;
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


    boolean DS1820connected = false;
    boolean DHT22connected = false;
    float currentTemp;               // bieżąca temperatura z czujnika DHT
    float currentHum;                // bieżąca wilgotność z czujnika DHT
    float currentDewpoint;           // obliczony punkt rosy na podstawie danych z czujnika DHT
    float currentDSTemp;             // bieżąca temperatura z czujnika DS przymocowanego do lustra

    void setup() {
      int chk = DHT.read22(DHT22_PIN);
      if(chk == DHTLIB_OK) DHT22connected = true; {
      pinMode(9, OUTPUT);             // dwa wiersze do regulacji kontrastu wyświetlacza
      analogWrite(9, 100);            // regulacja
      }
      digitalWrite(7, LOW);           //LED czerwony - możliwość powstania rosy
     
      sensors.begin();
      DS1820connected = sensors.getAddress(insideThermometer, 0);  
      if(DS1820connected) sensors.setResolution(insideThermometer, 10);
     
     
      lcd.begin(16, 2);
     
      timer.every(1000, updateSensors);
    }

    void loop() {  
      timer.update();
    }

    void printData() {
      Serial.println(currentTemp);
    }

    void updateSensors() {
      if (DS1820connected) {
        sensors.requestTemperaturesByAddress(insideThermometer); // przy 10 bitowej dokładności trwa 188ms
        timer.after(188, readTemp);
        currentDSTemp = sensors.getTempC(insideThermometer);
      }
      if (DHT22connected) {
        DHT.read22(DHT22_PIN);
        currentTemp = DHT.temperature;
        currentHum = DHT.humidity;
        currentDewpoint = dewPoint(currentTemp, currentHum);  
      }
    }

    void readTemp() {
      currentTemp = sensors.getTempC(insideThermometer);
      updateLCD();
    }

    // dewPoint function NOAA
    // reference (1) : http://wahiduddin.net/calc/density_algorithms.htm
    // reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm
    //
    double dewPoint(double celsius, double humidity)
    {
      // (1) Saturation Vapor Pressure = ESGG(T)
      double RATIO = 373.15 / (273.15 + celsius);
      double RHS = -7.90298 * (RATIO - 1);
      RHS += 5.02808 * log10(RATIO);
      RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
      RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
      RHS += log10(1013.246);

            // factor -3 is to adjust units - Vapor Pressure SVP * humidity
      double VP = pow(10, RHS - 3) * humidity;

            // (2) DEWPOINT = F(Vapor Pressure)
      double T = log(VP/0.61078);   // temp var
      return (241.88 * T) / (17.558 - T);
    }

    void updateLCD() {
      lcd.clear();
      lcd.print("Temp [C]= ");
      lcd.print(currentTemp);
     
        lcd.setCursor(0, 1);
      lcd.print("RH=");
      lcd.print(currentHum,0);
      lcd.print("% DP=");
      lcd.print(currentDewpoint,1);
      lcd.print("C");
    }

     

    • Like 3
  3. Też wybudowałem swoją astrobudkę z pierem za miastem na działce ogrodniczej. Jednak obecnie nie zaryzykowałbym pozostawienie tam nawet części sprzętu w obawie przed kradzieżą czy dewastacją. Ciągłe przenoszenie całego sprzętu tam i spowrotem oraz jego każdorazowy montaż i demontaż jest dość wkurzające na dłuższą metę...

    Zastanawiałem się nad zbudowaniem solidnej stalowej osłony montażu... Założenie refraktora z pozostałym osprzętem byłoby już "bułką z masłem".

    Napiszcie jakie stosujecie zabezpieczenia sprzętu przed zakusami meneli i złodzieji...

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.

© Robert Twarogal * forumastronomiczne.pl * (2010-2023)