#include "DHT.h" // βιβλιοθηκη για τον sensor DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302) δηλωση σταθερας τυπου αισθητηρα
#define DHTPIN 2 // to pin της συνδεσης μας για το DHT22 (uno:2)
#define LED_PIN 6 //pin για led φως (uno:6)
int buzzerPin = 7; //pin για buzzer (uno:7)
int linecounter=0; //μετρητής γραμμων εξοδου-outputs!
float FLAG_TEST_FIRE=1; //when 0 δεν επιτελεί κάποια διεργασία, when 1, ελεγχος fire λειτουργίας
DHT dht(DHTPIN, DHTTYPE); //DHT22 λειτουργια
/*
- H συνάρτηση setup ορίζει την ψηφιακή θύρα ανάγνωσης καθώς και τα components που είναι συνδεδεμένα
-όπως ορίζει και το όνομά της, εκτελείται 1 μόνο φορά κατά την εκκίνηση του προγράμματος
-ξεκινησε ο αισθητηρας DTH22 και οριστηκαν τα pin του buzzer και του LED
*/
void setup() {
Serial.begin(9600); //USB connection
dht.begin();
pinMode(LED_PIN, OUTPUT); //η αντισταση στο σχημα τοποθετηθηκε για ασφαλεια απο υπερταση του LED!
pinMode(buzzerPin, OUTPUT);//η αντισταση στο σχημα τοποθετηθηκε για ασφαλεια απο υπερτασεη του buzzer!
}
/*
- H συνάρτηση printData εκτυπώνει στην οθόνη του arduino τις τιμές των αισθητήρων
*/
void printData(float temperature, float humidity) {
linecounter++; //αυξάνει τον μετρητή γραμμών
Serial.print("\n Output Natsis, line: ");
Serial.print(linecounter);
Serial.print("\t Humidity: ");
Serial.print(temperature);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(humidity);
}
/*
- H συνάρτηση sensorNotifications ανάβει LED και ειδοποιεί τον χρήστη μέσω buzzer
*/
void sensorNotifications() {
analogWrite(LED_PIN,100); //η τιμή 100 100 επιλέχθηκε τυχαία και αφορά την φωτεινότητα του LED--> αναβει LED
tone(buzzerPin, 50); //η τιμή 50 σαν επιλογή ήχου παραγωγής
delay(1000); // αναμονή κάποια δευτερόλεπτα ώστε να ακουστεί ο ήχος
analogWrite(LED_PIN,0); //0 για να κλεισει το φως
noTone(buzzerPin);//κλεισε ηχος
}
/*
- H συνάρτηση loop εκτελείται συνεχώς, είναι δηλαδή σαν να είχαμε στην main συνάρτηση while (true)
-Καθε φορα που γινεται επιτυχως output αναβει το φωτακι! και κανει μπαζζζ
*/
void loop() {
delay(1000); // αναμονή κάποιο χρονικό διάστημα ώστε να εμφανίζονται ορθώς οι τιμές στο output
//delay: σε miliseconds --> https://www.arduino.cc/reference/en/language/functions/time/delay/
float h = dht.readHumidity();//διαβάζει την μέτρηση της υγρασίας του χώρου
float t = dht.readTemperature();//διαβάζει την μέτρηση της θερμοκρασίας του χώρου
//στην συνέχεια με βάση τις τιμές του αισθητήρα, ελέγχουμε ΑΝ είναι ορθές οι μετρήσεις
//σε περίπτωση σφάλματος, δλδ ειναι null/nan, τότε σταματά τη εκτέλεση του κώδικας
//σε περίπτωση μη σφάλματος, εμφανίζεται στην οθόνη του χρήστη το αποτέλεσμα και παράγεται ήχος
if (isnan(h) || isnan(t)) {
Serial.println(F("ERROR reading sensor data!")); //μήνυμα σφάλματος
return; //τελος εκτελεσης
}
else {
printData(h,t) ; //εκτύπωση δεδομένων αισθητήρα στην οθόνη
sensorNotifications(); //για επιτυχές print των δεδομένων των αισθητήρων, LED φως και ήχος από buzzer
if (h>70 || FLAG_TEST_FIRE==1) {
tone(buzzerPin, 60); //η τιμή 60 σαν επιλογή ήχου παραγωγής
Serial.print("\n FIRE! ALERT!");
//φως LED αναβοσβηνει για να τονισει στον χρηστη τη σοβαροτητα της ειδοποιησης!
while(true){
delay(1000); // αναμονή κάποιο χρονικό διάστημα ώστε να εμφανίζονται ορθώς οι τιμές στο output
analogWrite(LED_PIN,50); //η τιμή 50 επιλέχθηκε τυχαία και αφορά την φωτεινότητα του LED--> αναβει LED
delay(1000); // αναμονή κάποιο χρονικό διάστημα ώστε να εμφανίζονται ορθώς οι τιμές στο output
analogWrite(LED_PIN,0); //0 για να κλεισει το φως
}
}
}
}
//@Coded by Christos Natsis!