Af Louise Sjodsholm og Ricco Flyckt

Introduktion

Vi har valgt at lave en tutorial til at få et smartere og mere energi effektivt hjem, hvor der også er fokus på et bedre indeklima. Det har været i førersæde at energi kun skal bruges når brugeren er i sit eget hjem. Dette sikrer også at brugeren ikke kan glemme at slukke lyset eller ventilationen. Alt er automatiseret, og ventilationen bliver reguleret ud fra hvor varmt det er. Brugeren får desuden også en alarm hvis der skulle være en for høj luftfugtighed, mens vinduet åbnes, for at regulere luftfugtigheden indendørs. Når der registreres at en bruger er hjemme, kører systemet på baggrund af en timer. Dette sørger for at der slukkes for hele hjemmet, når brugeren har forladt det. Ved hjælp af et RTC-modul og I2C kommunikation, times hvornår der sidst er registreret en person, således en timer sørger for at hjemmet slukkes efter den angivne tid, hvis ikke der registreres en igen. Dette sørger for at optimere energiforbruget.

Nedenstående ses et galleri af den færdige prototype, som der kan forventes at få, hvis tutorialen udføres.

Videogennemgang af løsningen

Opbygning af hardware – fra TinkerCad

Til at opbygge smarthome løsningen anvendes 11 komponenter fra “Elegoo The most Complete Starter kit”, disse er kategoriseret i nedenstående skema, som værende henholdsvis en sensor, aktuator eller andet. Derudover anvendes der modstande, ledninger, breadboards og en Arduino Uno.

Tabel der beskriver hvilke sensorer, aktuatorer og andet der anvendes i tutorialen.

Opbygningen af hvert enkelt delkredsløb af det samlede system er beskrevet herunder med begrundelser for valg i processen, og beskrivelser af krav til brug af komponenterne. Til sidst er hele kredsløbet vist som helhed.

Servo motor der anvendes til at åbne vindue

Servo motor og Arduino

Da Servo motoren har et indbygget reguleringssystem, vil det ikke være nødvendigt at anvende diode eller transistor. Det er derfor så enkelt som at sætte en 5V spænding, ground og et signal Pin, her Pin 10, til Servo motoren, for at kunne styre motoren 180 grader.

LCD der anvendes til at vise temperatur og luftfugtighed

LCD display og Arduino

I Tinkercad var det ikke muligt at finde netop det LCD display der anvendes i denne tutorial.

Hvis der arbejdes med LCD’et fra denne tutorial skal LCD’en sættes op således:

Tabel over hvordan at vores LCD display er sat op med Arduinoen.

Buzzer til alarmering om for høj luftfugtighed

Buzzer og Arduino

Buzzeren er et enkelt komponent, der kun kræver en spænding og at det er groundet. Der anvendes en Pin fra Arduinoen til at kontrollere hvornår at buzzeren skal have en spænding, så den kun laver lyde når vi er interesserede i det. Denne pin er Pin 9.
Yderligere anvendes der en modstand på 200 Ohm. Denne er fundet ved trial and error, og kan ændres hvis man ønsker en højere eller en lavere lydstyrke.

LDR til at vurdere hvor lyst det er udenfor

LDR modstand og Arduino

LDR’en varierer modstanden afhængigt af mængden af lys på den. Den sættes op i et spændingsdeler kredsløb. Der er i datasheetet angivet at modenstanden varierer mellem 18k ohm og 50 k ohm. Spændingsdelerformlen anvendes til at beregne den spænding der vil kunne måles efter photoresistoren.

Tages der udgangspunkt i 50 k Ohm modstanden

Dermed kan spændingen der måles, variere op til næsten 5 V, hvilket giver stor variation da størrelsen på hvert enkelt step vil udregnes til at være 0,0049, grundet signalet kan variere mellem 0 og 1023.

Dermed er det muligt at adskille værdierne meget præcist da hvert enkelt step er meget småt.

Signalet hentes fra den analoge pin A0.

LED der tændes når det er mørkt udenfor

LED Dioder og Arduino

Belysningen i Smart-Home’et er lavet ved hjælp af to LED pærer. Disse er parallelt forbundet, og vil derfor kun kræve et output fra Pin 13. Var de derimod serielt forbundet, ville en pære kunne springe, og det ville slukke alt lyset i huset. Disse to LED pærer er mest optimale omkring 30mA [1]. Hertil kan der udregnes hvilken modstand der kræves med et output fra Arduino’en på 5V.

Dette betyder at der skal anvendes en modstand tæt på 200 ohm. Beregnes strømmen der vil komme gennem pærerne, hvis der anvendes en 200 ohm modstand med ohms lov, vil dette være 25 mA, som ses af nedenstående beregning.


[1] Elegoo Datasheet LED

DC motor til ventilatoren

DC Motor og Arduino

DC motoren kræver en højere strøm[1] end Arduino boardet kan give fra en pin[2]. Hertil anvendes der en transistor, for at forstærke strømmen.

Desuden kan der forekomme at når der slukkes for strømmen, kan der komme en negativ strøm fra DC-motoren, hvilket kan beskadige transistoren. Hertil anvendes en diode, der har til formål at kun tillade at føre strøm i en retning. Desuden anvendes der også en 200 Ohm modstand til at begrænse strømmen ind i transistoren


[1] 70mA unloaded, 250 mA Loaded Current (Max) – Fra Elegoo DC-motor Datasheet

[2] Arduino kan maks give 40 mA ampere fra en Pin -https://playground.arduino.cc/Main/ArduinoPinCurrentLimitations/

PIR sensor til at registrere om der er en i hjemmet

PIR Sensor og Arduino

PIR sensoren har tre ben, en til 5V, en til ground og en til at læse sensorens værdi. Her anvendes Pin 8 til at læse sensorens værdi, efterfølgende er den sat til 5V fra Arduino’en og til sidst er den grounded.

DHT temperatur og luftfugtighedssensor til måle temperatur og luftfugtighed

TMP Sensoren i Tinkercad burde være en DHT11 sensor, men konceptet er det samme

Det var ikke muligt at anvende temperatur sensoren (DHT11) i Tinkercad, men ovenstående ses det på samme måde som det er opsat i Smart-home’et. Den er sat til pin 7, fra signaldelen af sensoren.

Efterfølgende er der 5V sat til, og til sidst er sensoren groundet.

RTC modul, til at holde styr på tiden

RTC Modul og Arduino

RTC modulet tæller sekunder, minutter, timer, dag i måneden, måned, ugedage og år. I denne tutorial anvendes den til at holde styr på hvornår der er gået x antal tid siden en person er detekteret. Modulet anvender kommunikation i form af I2C som serielt interface. Dette betyder at modulet skal kobles til pins’ne SDA og SCL, hvor SCL er signalet der synkroniserer dataoverførslen fra slaven (RTC modulet) til masteren (Arduinoen), mens SDA er selve dataen. Modulet skal derudover sættes til 5V og GND.

Det samlede kredsløb

Ovenstående ses et billede af hele systemet. Dette system er fysisk over to etager i Smart-home’et, da f.eks. blæseren giver bedst mening at være oppe i loftet, og skærmen giver bedst mening at være så brugeren kan se den. Dette kan ses længere nede i tutorialen.
Hele systemet bliver kontrolleret af ét script ved hjælp af én Arduino. Dette kan ses på flow diagrammet  nedenstående.

Opbygning af program

Systemets opførsel er beskrevet i diagrammet, hvor der først læses fra PIR sensoren, for at vurdere hvorvidt der er en hjemme. Når den ikke har registret noget, og detekterer LOW, betyder det der ikke er en hjemme. Detekteres der i stedet HIGH, gemmes tidspunktet som læses fra RTC modulet, og der laves en variable som indeholder det tidspunkt systemet skal slukke. Herfra læses værdien fra den analoge LDR modstand, hvor det vurderes om det er så mørkt at lyst skal tænde. Hvis det ikke skal tænde fortsættes der til at kigge på temperatur og luftfugtighed. Dette er ligeledes næste step, efter at have tændt lyset, hvis det er mørkt. Det vurderes hvorvidt temperaturen er over 20 grader, hvis den er tændes ventilatoren, hvis ikke kigges der på om tidspunktet for at systemet skal slukke er nået. Ved luftfugtighed over 50% tændes buzzeren for at informere brugeren om at der er høj luftfugtighed, mens vinduet åbnes, ved at ændre servo motorens position. Samtidigt skrives temperaturen samt luftfugtigheden på LCD-displayet. Sidst kigges der på om tiden er gået, hvis tiden er gået betyder det brugeren ikke er hjemme, og PIR sensorens værdi læses igen. Hvis tiden ikke er gået, da der er detekteret en bruger på ny, og derved sat en ny sluk tid, betyder det brugeren er hjemme, og tidspunktet gemmes derfor, inden programmet fortsætter i loopet igen.

Funktioner

Arduino scriptet vil blive fremvist, funktion for funktion. Ønskes der at se hele scriptet, ses det nederst på siden i denne tutorial.

Igennem programmet testes der først for om der er en bruger hjemme. Dette gøres ved hjælp af funktionen ”BrugerHjemme()”. Her anvendes en PIR sensor, og hvis PIR sensorens output er ”HIGH” betyder det at der er en person som er gået forbi PIR sensoren. Hertil ses funktionen:

bool BrugerHjemme()
{
  return digitalRead(pirPin) == HIGH;
}

Da vi nu er klar over at brugeren er hjemme, sætter vi en timer, fra hvornår vi igen skal teste om brugeren stadigvæk er hjemme.  Se loop delen af scriptet nedenstående.

Efterfølgende sættes booleanen hjemme til at være lig med true.

Herefter er både Timeren større end ”now” hvilket er klokken på nuværende tidspunkt, og ”hjemme” er sat til true. Dette betyder at vi hopper ind i sætningen der starter vores smarthome.  Her bliver startSmartHome() funktionen kaldt, hvis de 30 minutter stadigvæk ikke er gået, samtidig bliver der løbende testet om brugeren igen er til at se. Hvis brugeren er det, laves en ny Timer, på tiden vi har nu, plus den tid vi vil have at der skal gå før systemet slukker.

void loop() 
{
  DateTime now = rtc.now(); //Tager tiden der er lige nu
  DateTime future (now + TimeSpan(0,HJEMME_TID_TIMER,HJEMME_TID_MINUTTER,HJEMME_TID_SEKUNDER)); //Tager tiden + Den tid der skal lægges til 
  if (BrugerHjemme()) //Tester med PIR sensor om brugeren er hjemme, hvis brugeren er hjemme er det true - Funktionskald
  {
    Timer = future; //Sætter timeren til sluktidspunktet
    hjemme = true; //Det er nu sandt at der er en hjemme 
  }

  if (Timer >= now && hjemme) //Der er nu en forskel fra vores satte timer og tidspunktet nu og der er en hjemme.
  {
    startSmartHome(); //Kalder startSmartHome funktionen, der tænder for sensorer og aktuatorer
  
    if (BrugerHjemme()) //Er brugeren stadigvæk hjemnme?  Hvis ja, Lav en ny timer
    {
      Timer = future;
      hjemme=true;
    }
  }
  else 
  {
      slukSmartHome();
      hjemme = false; // Hjemme er ikke længere sand.
  }

}

Start SmartHome Funktionen kan ses nedenstående.

void startSmartHome()
{
  if (solLys()) //Er der sol? Funktions kald til LDR modstand
  {
    digitalWrite(ledPin, LOW);  //Slukker lys hvis der er sollys
  }
  else
  {
    digitalWrite(ledPin,HIGH); //Tænder hvis der ikke er sollys
  }
  
  int chk = DHT.read11(DHT11_PIN); // Aflæser temperatur og humidity sensor
  delay(500); //Delay så LCD skærmen kan følge med
  
  if (DHT.humidity > 50) //Er der mere end 50 i luftfugtighed? Kald en alarm fra buzzeren
  {
  minServo.write(90);
  tone(buzzer, 1000); 
  delay(500);        
  noTone(buzzer);     
  delay(500);        
  }
   else //Luft fugtigheden er under 50, og vi har derfor en OK luftfugtighed.
  {
    minServo.write(0); //Lukker vinduet, da der er en okay luft fugtighed. 
  }
  delay(1000);
  int temp = DHT.temperature; //Tager temperaturen fra sensoren
  fanSpeed(temp); //Kontrollerer hastigheden på blæseren, alt efter hvor varmt det er 
  opdaterLCD(DHT.temperature,DHT.humidity); //Opdaterer LCD skærmen med temperaturen og humidity som parameter
}

Som ovenstående set er dette funktionen som kører hele smart home funktionaliteten i hjemmet. Smarthome funktionen anvender andre funktioner i programmet, b.la. tjekkes der ved hjælp af funktionen ”solLys()” for om det er sandt at LDRpinnens output er større end 200. Hvis ja sendes der true tilbage.

bool solLys ()
{
  return analogRead(LDRPin) > 200; //Sender true hvis LDR har målt over 200
}

Hertil slukkes lyset, som set i startSmartHome funktionen, inde i huset hvis der er detekteret lys udenfor, og omvendt hvis der ikke er detekteret lys over en grænseværdi på 200.

Efterfølgende læses humidity og temperatur sensorens værdi. Hvis luftfugtigheden er over 50%, åbnes vinduet i hjemmet, og der kommer en alarm, så brugeren er opmærksom på at luftfugtigheden er høj.

Hvis der derimod ikke er en høj luftfugtighed lukkes vinduet.

Sensorens temperatur værdi anvendes til at styre ventilationssystemet, bestående af en DC motor. Her er der lavet en funktion der hedder ”fanSpeed()”, der tager temperaturen som parameter, og ud fra temperaturen vil hastigheden af blæseren ændres. Denne funktion ses nedenstående

void fanSpeed(int temperature)
{
  if (temperature > 30)
  {
    analogWrite(dcMotorPin,255); 
  }
  else if (temperature > 28)
  {
    analogWrite(dcMotorPin,150);
  }
  else if (temperature > 20)
  {
    analogWrite(dcMotorPin,75);
  }
  else
  {
    analogWrite(dcMotorPin,0);
  }
}

Til sidst opdateres LCD’et.  Dette er en simpel funktion der tager temperatur og luftfugtigheden som parameter, og skriver dette på skærmen, se billede nedenstående. Når setCursor funktionen fra lcd librariet sættes til 0,1, går vi ned på næste linje.

void opdaterLCD(int temp, int humidity)
{
  lcd.setCursor(0,0); 
  lcd.print("Temperatur:");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Luft H2O:  ");
  lcd.print(humidity);
  lcd.print("%");
}

Dette udgør samlet set startSmartHome funktionen.

Når tiden er gået, hoppes der ind i else sætningen i loop delen af scriptet. Her slukkes systemet. Dette indebærer både at alt fjernes på LCD skærmen, alt lyset slukkes i huset, blæseren slukkes og vinduerne lukkes.

void slukSmartHome()
{
  lcd.clear(); //Fjerner alt fra LCD skærmen
  digitalWrite(ledPin, LOW); //Slukker alt lyset i huset 
  analogWrite(dcMotorPin,0); //Slukker blæseren
  minServo.write(0); //Lukker vinduet når der ikke er nogle hjemme.
}

Prioriteringer

Programmets vigtigste ydeevne er at sikre at der kun bruges energi, når brugeren er hjemme. Af denne grund er det højeste i hierarkiet at tjekke om Brugeren rent faktisk er hjemme, ved hjælp af PIR sensoren. Hvis brugeren ikke er blevet senset af PIR sensoren, vil programmet aldrig kunne hoppe ind i ”startSmartHome()” funktionen. Desuden hvis brugeren ikke er detekteret, når timeren er gået vil programmet ligeledes slukke alt, for at spare energi, og starter herved kun igen når en bruger er blevet detekteret.

Opbygning af den samlede fysiske prototype

I tutorialen er Smart Home’et fordelt på to etager.

Dette skyldes f.eks. at en ventilator ventilerer et rum bedst fra loftet, hvor Temperatur og luftfugtighedssensoren giver den bedste måling i rummet hvor brugeren er i.  På samme måde er LED dioderne placeret i loftet, for at give den bedste udstråling.
Desuden er Buzzeren og LCD skærmen også placeret i stuen, for at brugeren kan få feedback på hvad der sker i systemet, havde buzzeren været placeret på loftet ville brugeren ikke kunne høre alarmen, ligesom de ikke ville kunne aflæse skærmen hvis ikke den var i stuen.
PIR sensoren er sat på bagvæggen i stuen, for at kunne sense hele rummet, så uanset hvor brugeren er vil brugeren blive detekteret. Den kunne ligeledes placeres i loftet for bedre at kunne detekterer i hele rummet, der var dog ikke plads på prototypen derfor placeres den på bagvæggen.

Klokken har ikke en direkte påvirkning på brugerens opfattelse af systemet, og er af den grund blevet placeret på loftet, så det ikke fylder.
LDR modstanden kunne både være placeret inde i stuen og udenfor. Der blev valgt at LDR modstanden skulle være placeret udenfor, og hvis der var sol udenfor kunne man konkludere der ikke behøves lys inde i stuen. På den anden side kan man reflektere over om, det var en bedre repræsentation af om der er nok lys i selve huset hvis LDR modstanden var inde i huset, og ikke udelukkende kigger på udenfor som helhed.

Servo motoren der åbner vinduet er placeret som hængselsled på vinduet, under vinduet i det ene hjørne af vinduet. Dette sikrer at vinduet åbner udad.  Rent mekanisk set åbner vinduet kun 90 grader, for at sikre at vinduet ikke rammer på noget udenfor, men det vil være muligt at ændre det til mere end 90 grader hvis dette ønskes.  

Herunder ses et billede af servo motorens placering, samt når vinduet er åbent og lukket

Alt som ikke skal være i det rum brugeren befinder sig i er placeret på loftet, og kan ses af nedenstående billede. Dette dækker over, Arduinoen, RTC modulet, breadboard, samt LED’er og DC motor der er placeret i loftet så det kan ses i stuen.

Loftet i huset

I stuen er placeret de sensorer og aktuatorer som er relevante for systemets funktions og brugerens mulighed for at aflæse temperatur og luftfugtighed. Disse kan ses nedenstående

Stuen i huset

Konklusion

Tutorialens problemstilling var at være så energi effektiv som muligt, og automatisere så mange opgaver som muligt, hvilket gør at brugeren får et lettere og bedre liv. Dette indebærer også at indeklimaet altid vil blive reguleret ved hjælp af servo motor, samt DHT11 – luftfugtighed og temperatur sensor. Yderligere skal brugeren ikke tænde og slukke for ventilatoren, alt efter om der kommer sol og gør rummet ekstra varmt. Ventilatoren reguleres nemlig alt efter hvor varmt der er inde i huset.
Desuden har brugeren mulighed for at få status på hvor vi befinder os i programmet, ved hjælp af LCD-skærmen og LED pærerne i loftet, som samtidig også kun tændes når der mørkt udenfor (LDR modstand)
Alt dette havde til formål at kun køre når brugeren er hjemme i huset, og derved spare energi. Dette er blevet løst ved hjælp af PIR sensoren, der gør at systemet kun aktiveres når en person er blevet detekteret.

Det kan derfor konkluderes at ved hjælp af Servo motor der åbner vindue når luftfugtigheden er for høj og buzzer der informerer brugeren om dette, samt DC motor der ventilerer rummet når temperaturen er for høj, vil der forekomme et bedre indeklima for brugeren.

Ligeledes kan der konkluderes at hjemmet er et mere energi effektivt hjem, da hele systemet kun kan køre, når en bruger er i huset, og lyset kun tændes når der er mørkt udenfor.

Perspektivering

Der kan perspektiveres over forskellige forbedringer til systemet. En forbedring kunne være, en anden måde at registrere hvorvidt brugeren er hjemme. Dette kunne løses ved at anvende et RFID modul, eller et membrane switch module, hvor brugeren enten scanner et kort eller skriver en kode når de kommer hjem. Således skal systemet køre indtil brugeren har forladt hjemmet, og skrevet en kode for at låse, eller scannet sit kort. Dette vil forhindre det mulige problem der er i den nuværende løsning, hvor systemet slukker, hvis ikke PIR sensoren har set en person indenfor tidsgrænsen. Hvis der tilføjes en af de nævnte løsninger til at vurdere om en person er hjemme, ville der kunne placeres en PIR sensor i hvert rum, og derved spares energi, da der kunne tændes for systemerne og lyset lokalt. Desuden ville det være spændende at automatisere vanding af blomster. Hertil kunne man måle på fugtigheden af jorden, og når jordens fugtighed var under en fundet grænseværdi kunne man tænde for en kontrollerbar vandslange.

Alt Arduino Kode

Nedenstående ses hele Arduino koden, som er beskrevet del for del i opbygningen af programmet.

#include <LiquidCrystal.h> // LCD Skærm
#include <dht.h> // Humidity/Temperature sensor
#include <Wire.h> // I^2C kommunikation
#include "RTClib.h" // Clock
#include <Servo.h>
//Clock
DateTime Timer; //Timer for hvornår tiden er gået.
RTC_DS1307 rtc; 

//LCD Skærm
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

//LED
int ledPin = 13; 

//PIR sensor
int pirPin = 8;
int pirVal = 0;

//DHT sensor
dht DHT;
int DHT11_PIN =  7;


int dcMotorPin = 6;
int servoMotorPin = 10;
int buzzer = 9;
int LDRPin = A0;

bool hjemme;


const int HJEMME_TID_SEKUNDER =0 ;
const int HJEMME_TID_MINUTTER = 30;
const int HJEMME_TID_TIMER = 0;
Servo minServo;
void setup() {
  Wire.begin();
  rtc.begin();
  lcd.begin(16, 2);
  lcd.print("Starting....");
  lcd.setCursor(0,1);
  lcd.print("....  ");

  pinMode(ledPin, OUTPUT);    //LED er et output
  pinMode(pirPin, INPUT);     // PIR tager et input
  pinMode(buzzer, OUTPUT);    // Buzzer laver et output
  pinMode(dcMotorPin,OUTPUT);   //Motor laver et output
  pinMode(LDRPin,INPUT);      //LDR tager et input
  minServo.attach(servoMotorPin);
  minServo.write(0); //Kalibrering af Servo Motor
  SetupClock(); //Funktionskald der Opsætter klokken
  lcd.clear();
}
void loop() 
{
  DateTime now = rtc.now(); //Tager tiden der er lige nu
  DateTime future (now + TimeSpan(0,HJEMME_TID_TIMER,HJEMME_TID_MINUTTER,HJEMME_TID_SEKUNDER)); //Tager tiden + Den tid der skal lægges til 
  if (BrugerHjemme()) //Tester med PIR sensor om brugeren er hjemme, hvis brugeren er hjemme er det true - Funktionskald
  {
    Timer = future; //Sætter timeren til sluktidspunktet
    hjemme = true; //Det er nu sandt at der er en hjemme 
  }

  if (Timer >= now && hjemme) //Der er nu en forskel fra vores satte timer og tidspunktet nu og der er en hjemme.
  {
    startSmartHome(); //Kalder startSmartHome funktionen, der tænder for sensorer og aktuatorer
  
    if (BrugerHjemme()) //Er brugeren stadigvæk hjemnme?  Hvis ja, Lav en ny timer
    {
      Timer = future;
      hjemme=true;
    }
  }
  else 
  {
      slukSmartHome();
      hjemme = false; // Hjemme er ikke længere sand.
  }

}

void SetupClock()
{
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    Serial.begin(9600);
   while (!Serial); // for Leonardo/Micro/Zero

  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
  
}
}

bool BrugerHjemme()
{
  return digitalRead(pirPin) == HIGH;
}

bool solLys ()
{
  return analogRead(LDRPin) > 200; //Sender true hvis LDR har målt over 300
}

void fanSpeed(int temperature)
{
  if (temperature > 30)
  {
    analogWrite(dcMotorPin,255); 
  }
  else if (temperature > 28)
  {
    analogWrite(dcMotorPin,150);
  }
  else if (temperature > 20)
  {
    analogWrite(dcMotorPin,75);
  }
  else
  {
    analogWrite(dcMotorPin,0);
  }
}



void opdaterLCD(int temp, int humidity)
{
  lcd.setCursor(0,0); 
  lcd.print("Temperatur:");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Luft H2O:  ");
  lcd.print(humidity);
  lcd.print("%");
}

void startSmartHome()
{
  if (solLys()) //Er der sol? Funktions kald til LDR modstand
  {
    digitalWrite(ledPin, LOW);  //Slukker lys hvis der er sollys
  }
  else
  {
    digitalWrite(ledPin,HIGH); //Tænder hvis der ikke er sollys
  }
  
  int chk = DHT.read11(DHT11_PIN); // Aflæser temperatur og humidity sensor
  delay(500); //Delay så LCD skærmen kan følge med
  
  if (DHT.humidity > 50) //Er der mere end 50 i luftfugtighed? Kald en alarm fra buzzeren
  {
  minServo.write(90);
  tone(buzzer, 1000); 
  delay(500);        
  noTone(buzzer);     
  delay(500);        
  }
   else //Luft fugtigheden er under 50, og vi har derfor en OK luftfugtighed.
  {
    minServo.write(0); //Lukker vinduet, da der er en okay luft fugtighed. 
  }
  delay(1000);
  int temp = DHT.temperature; //Tager temperaturen fra sensoren
  fanSpeed(temp); //Kontrollerer hastigheden på blæseren, alt efter hvor varmt det er 
  opdaterLCD(DHT.temperature,DHT.humidity); //Opdaterer LCD skærmen med temperaturen og humidity som parameter
}

void slukSmartHome()
{
  lcd.clear(); //Fjerner alt fra LCD skærmen
  digitalWrite(ledPin, LOW); //Slukker alt lyset i huset 
  analogWrite(dcMotorPin,0); //Slukker blæseren
  minServo.write(0); //Lukker vinduet når der ikke er nogle hjemme.
}

Leave a Reply