#include <DHT.h>
// includolom a DHT libraryt
#define DHTPIN 2
#define WIND_PIN 3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ezek a szél adatai
volatile unsigned int counter = 0;
const int jml_celah = 18; // Number of gaps in the sensor
const int period = 10000; // Measurement period (milliseconds)
const int rainSensorPin = A0;
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx and Anemometer test!"));
dht.begin();
// a szél inputja a 3-as, a a dht szenzor a kettes, itt beállítom a szélhez a bevitelt.
pinMode(WIND_PIN, INPUT);
digitalWrite(WIND_PIN, HIGH); // Enable internal pull-up resistor
attachInterrupt(digitalPinToInterrupt(WIND_PIN), addcount, CHANGE);
}
void loop() {
// itt történik a dht szenzor adatainak a beolvasása
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float f = dht.readTemperature(true);
int rainValue = analogRead(rainSensorPin);
// ha a dht szenzor valamelyik adatot nem jól olvassa ki, ahhoz itt van egy check
if (isnan(humidity) || isnan(temperature) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// a hőmérkséklet itt át van váltva fahrenheitbe
float hif = dht.computeHeatIndex(f, humidity);
// itt pedig celsiusba
float hic = dht.computeHeatIndex(temperature, humidity, false);
// itt történik a szél kiszámítása
unsigned long startTime = millis();
while (millis() < startTime + period) {
delay(2000);
}
float windSpeed = calculateWindSpeed();
// itt történik az összes szenzor adat kiírása, és ha lehetne innen küldeném el mqtt segítségével
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.print("Rain Sensor Value: ");
Serial.println(rainValue);
Serial.print(F("°F Wind speed: "));
Serial.print(windSpeed);
Serial.println(F(" m/s"));
}
void addcount() {
counter++;
}
float calculateWindSpeed() {
detachInterrupt(digitalPinToInterrupt(WIND_PIN));
unsigned int RPM = ((counter / jml_celah) * 60) / (period / 1000);
attachInterrupt(digitalPinToInterrupt(WIND_PIN), addcount, CHANGE);
const int radio = 90;
float speedwind = ((2 * PI * radio * RPM) / 60) / 1000;
return speedwind;
}