Juul, Simon Helsted 
Rasmussen, Frederik Lau 
Rasmussen, Simon Møller 
Rudolf, Tom Lars Bo 

Not-So-Smart House

Vi tog udgangspunkt i at skabe en løsning til hver af de fire foreslået kategorier:

  • Et bedre indeklima
  • Et sikrere hjem
  • Et smartere hjem
  • Et mere energieffektivt hjem

Ved at skabe løsninger for alle fire kategorier, skabte vi et mere fuldendt produkt, som vi vurderer ville afspejle, hvordan man ville benytte sig af hjemmeautomation i et virkeligt hjem. Samtidig er det også en måde at vise diversiteten på de problemstillinger, som man kan løse ved hjem af hjemmeautomation.

Et bedre indeklima

Ifølge sundhedsstyrelsen beløber den totale sygdomsbyrde, der kan tilskrives indeklimaforureninger, sig årligt til tab af 2 mio. sunde leveår i 26 EU-lande. Derfor har vi valgt at skabe en løsning, som kan forbedre indeklima. For at forbedre indeklimaet har vi inkorporeret et ventilationssystem. Her benyttede vi Temperature & Humidity modulet som vores sensor og en DC-motor med en fane, som er tilkoblet en H-bro. Ifølge Conair, som udvikler ventilationssystemer, er den optimale luftfugtighed i private hjem mellem 40 og 60%. Da det kræver en del arbejde at lave en løsning for luftbefugtning, fokuserede vi på at skabe en løsning for forhøjet luftfugtighed, som ofte forekommer når man laver mad, går i bad eller tørre tøj indendørs. Derfor har vi sat vores DC-motor til at trække luft ud af huset, hvis luftfugtigheden overstiger 60%, for derved at komme af med noget af den opbyggede damp, som forekommer af de ovenstående eksempler. I forbindelse med temperaturen valgte vi at 25° var den maksimale temperatur vi ville have inde i huset, så hvis temperaturen overstiger 25° starter ventilationen og trækker frisk luft ind i huset. Vi er klar over at denne funktion ikke ville virke når udendørstemperaturen overstiger 25°, men vi mente ikke at det lå inden for projektets rammer at skabe et køleanlæg 😀

Et sikrer hjem

Til at skabe et mere sikkert hjem valgte vi at benytte os af RFID-scanneren, som roterer en servo, der låser eller åbner døren. Nogle af fordelene ved at benytte en RFID-lås er, at de er meget nemme at tilpasse til brugernes behov, at det er nemt at aktivere og deaktivere kort, hvis man smider dem væk, og at RFID-kort kan programmeres og omprogrammeres, når aspekterne af sikkerhedskravene ændres. I vores tilfælde er der så også en ulempe, hvis der ikke at strøm til kredsløbet, da det medfører at man ikke har mulighed for at låse og åbne sin dør. I den virkelige verden ville dette dog kunne løses af et backup-batteri, som ville tilføje strøm i tilfælde af en strømafbrydelse. I vores system tjekker vi om det kort, som bliver læst, er en del af de korrekte kort. Herefter tjekker den om døren er låst eller åben og gør det modsatte.

Et smartere hjem

I disse coronatider er der meget fokus på smittespredning via kontaktflader, så vi tænkte at vi ville lave et løsningsforslag til at eliminere en af de hyppigt brugte overflader i en husstand, nemlig dørklokken. Vi inkorporerede derfor en ultrasonic sensor, som kan bruges til at måle afstand til et objekt, sammen med en buzzer. På den måde har vi lavet en kontaktfri dørklokke, som aktiveres, hvis der måles en afstand under 20 cm. Som en lille gimmick har fået buzzeren til at ændre tone alt efter hvor tæt genstanden er på sensoren. Denne funktion har ingen effekt, udover at være sjov og deraf vores “Not-So-Smart” Home.

Et mere energieffektivt hjem

Vores energieffektive løsning består af en lampe, som tænder når det bliver mørkt. På den måde sørger man for kun at have lyset tændt når det er nødvendigt. For at skabe den løsning har vi benyttet os af en LDR-resistor og en LED. Hvis værdien for LDR-resistoren kommer under 400, tænder vi for LED’en og når værdien overstiger 400 igen, så slukkes LED’en. Hvis man skulle optimere denne løsning, kunne man inkorporere en bevægelsessensor, så lyset kun er tændt når LDR-værdien er under 400 og der er bevægelse omkring lampen.

Videopræsentation af Not-So-Smart House

Her skulle der ligge en video, men hver gang den bliver uploadet er der ikke noget billede på, så der ligger et link i bunden af dokumentet

Opbygning af hardware

Master/slave relation

Vi har valgt koble to Arduinoer op i en master-slave relation, i det at det gav os flere pins at arbejde med. Vi vælger samtidigt også hovedsageligt at bruge master-arduinoen til at måle værdier fra sensorere, hvorefter at master-arduinoen sender et signal til slave-arduinoen om hvilke aktuatorere der skal aktiveres.
Master-slave opsætningen er lavet ved at koble arduinoernes A4 pins sammen, A5 pins sammen, og deres ground sammen.
Master-arduinoen starter med en Wire.beginTransimission() kommando, som gør den klar til at sende en kommando til slave-arduinoen med Wire.write() kommandoen. Efter en kommando er blevet sendt, stoppes transmissionen med Wire.endTransmission(). Kommandoerne som sendes til slave-arduinoen er en char variabel såsom “c”, “w”, og “k”, som slave-arduinoen bruger til at køre forskellige funktioner.

Dørklokke

Vi valgte at lave en dørklokke ved brug af en afstandssensor, som kunne hjælpe f.eks. under corona pandemien med at begrænse smitten, i det at man begrænser fysisk kontakt med berøringsfladen.
Dørklokken er lavet ved brug af en HC-SR04 afstandssensor til at måle afstanden fra sensoren, og en passiv buzzer til at fungere som selve dørklokken (tonen).
Afstandssensorens echo (pin 5) og trig (pin 6) pins er koblet til master-arduinoen, og afstanden er sat til 20 cm.
Vcc og GND er tilslutte henholdsvis 5V og ground.
Buzzeren er tilkoblet master-arduinoes pin 8, samt ground.

RFID Card Reader

Døren til huset er sat op med en servomotor der fungerer som dørlåsen, samt et MFRC522 RFID-modul til at læse et adgangskort, og ændrer servoens position til enten at låse døren eller låse døren op.
Servomotoren er tilkoblet slave-arduinoens pin 9 og henholdsvis 5V og ground.
RFID-modulet er tilkoblet master-arduinoen, med forbindelserne SDA (pin 10), SCK (pin 13), MOSI (pin 11), MISO (pin 12), GND (ground), RST (pin 9), 3.3V (3.3V).
Når et kort eller chip med det rigtige UID-tag bliver scannet, sendes et signal til slave-arduinoen om at et korrekt kort er blevet scannet. Hvis kortet er korrekt tjekker slave-arduinoen om døren er låst eller ej, og udfører den modsatte operation.

Ventilationssystem

Ventilationssystemet er lavet ved hjælp af en DHT11 sensor, samt en DC-motor med en fane tilkoblet. DC-motoren er tilkoblet en L293D H-bro for at kunne styre DC motoren. Idéen er at hvis der bliver for varmt inde i huset, vil blæseren trække luft ind i huset, mens at hvis luftfugtigheden i huset er for høj vil blæseren blæse luften ud af huset.
DHT11 sensoren er tilsluttet i master-arduinoen pin 3, og henholdsvis 5V og ground.
L293D H-broen er tilsluttet slave-arduinoen med forbindelserne En_1 (pin 11), Input 1 (pin 13), Output 1 (DC-motor +), 4xGROUND (ground), Output 2 (DC-motor -), Input 2 (pin 12), V_motor (5V), V+ (5V)

Lys

Lyset er sat op med en LDR, som måler en værdi baseret på hvor lyst det er. Hvis det bliver mørkt, vil sensoren måle en lavere værdi, og lyset tændes.
LDR-sensoren er tilsluttet master-arduinoen, sammen med en 10 kOhms modstand. Valget af en 10 kOhms modstand er taget på baggrund af databladet for LDR-sensoren. Yderligere bruges pin A1 til at måle sensorværdien.
LED’en er tilsluttet slave-arduinoens pin 5 sammen med en 330 Ohms modstand, samt henholdsvis 5V og ground.

LCD

Der er tilsluttet et 1602A LCD display, som giver information til brugeren omkring hvilke handlinger dere bliver udført i systemet.
Displayet er tilkoblet slave-arduinoen med tilslutningerne VSS (ground), VDD (5V), V0 (ground), RS (pin 2), RW (ground), E (pin 3), D4 (pin 4), D5 (pin 5), D6 (pin 6), D7 (pin 7), A (5V), K (ground)

Programmering

Da en arduino kun har et bestemt antal pins, lavede vi en ”Master-Slave” relation mellem to arduino’er. Dette gjorde det muligt at tilkoble flere elementer til vores smart house. Arduinodelen er sat op på den måde at Masteren har alle sensorerne, mens at slaven har aktuatorne.
Hele programmet blev opbygget som en prioriteringsliste, hvilket gjorde at vi kunne styrer hvad den skulle gøre før noget andet. I vores hus tjekker den f.eks. først om der er en nøgle som bliver scannet før den tjekker om der skal luftes ud. Måden vi har implementeret det er at vi kun sender 1 ting til vores slave ad gangen. Vi sikrer os dette ved at bruge den fornævnte Wire.endTransmission.
For at få Masteren op at kører skal man beskrive hvor man skal sende sine kommandoer hen til slaven.

setup(){
  Wire.begin(); // join i2c bus (address optional for master)
}
loop(){
  Wire.beginTransmission(4); // transmit to device #4
}

Til vores RFID laver vi et Array, hvor vi manuelt tilføjer de nøgler, som skal have adgang.

setup(){
  RFID_UIDS[0] = "99 ED 47 B3";
}

Herefter kører den i loop hvor den tjekker om en nøgle er blevet scannet. Hvis den matcher en i vores Array sender den en kommando til vores slave om at en rigtig nøgle er blevet scannet. Hvis den ikke er rigtig sender den at en forkert nøgle er blevet scannet.

content = "";
  byte letter;

  for (byte i = 0; i < RFID.uid.size; i++)
  {
    content.concat(String(RFID.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(RFID.uid.uidByte[i], HEX));
  }

  content.toUpperCase();
  if(content != ""){
    if (content.substring(1) == RFID_UIDS[0] || content.substring(1) == RFID_UIDS[1]) //UID of the access cards
    {
     CardReadBuzz(accessDT, 50);
     delay(100);
     CardReadBuzz(accessDT, 50);
     //Send korrekt til slave
     cmd ='c';
     Wire.write(cmd);
     Wire.endTrans
     }
     else
     {
      CardReadBuzz(deniedDT, 25);
      delay(50);
      CardReadBuzz(deniedDT, 25);
    
      //SEND FORKERT TIL SLAVE
      cmd = 'w';
      Wire.write(cmd);
      Wire.endTransmission();
      content = "";
    }
    Wire.endTransmission();    // stop transmitting
    delay(1000);
  }

Hvis koden kommer igennem RFID delen uden at den bliver stoppet, vil den måle luftfugtighed og temperatursensoren. Første prioriteten valgte vi at skulle være luftfugtighed, hvorefter den prøver at justere temperaturen hvis den er for høj.

//Vi kører den kun hver 2 sekund for at undgå fejl ved aflæsning af værdierne.
  currentMilli = millis();
  if(currentMilli - startMilli >= period)
  {
    //Får dataen fra sensoren
    int chk = DHT.read11(DHT11_PIN);

    //hvis luftfugtiheden er over 60% sender den 'h' til slaven
    if(DHT.humidity > 60 && highHum == false){
      highHum = true;
      highTemp = false;
      cmd = 'h';
      Wire.write(cmd);
      Wire.endTransmission();
    }
    //Hvis luftfugtigheden ikke er over 60% og den har været over 60% siden sidst, sender den 's' til slaven
    else if (DHT.humidity < 60 && highHum == true){
      highHum = false;
      cmd = 's';
      Wire.write(cmd);
      Wire.endTransmission();
    }

    //Hvis temperaturen er over 25 grader og luftfugtigheden ikke er over sender den 't' til slaven
    if(DHT.temperature > 25 && highTemp == false && highHum == false){
      highTemp = true;
      cmd = 't';
      Wire.write(cmd);
      Wire.endTransmission();
    }
    //hvis den kommer under 25 efter den har været i gang sender den 's' til slaven
    else if (DHT.temperature < 25 && highTemp == true && highHum ==false){
      highTemp = false;
      cmd = 's';
      Wire.write(cmd);
      Wire.endTransmission();
    }
    
    startMilli = currentMilli; 
  } 

Efter vores luftfugtighed og temperatur tjekker vi om det er mørkt udenfor. Dette gør vi med en LDR-sensor. Hvis dens værdier kommer under et vist punkt, tænder vi en lampe og hvis den kommer over igen, bliver den slukket.

 //Får dataen fra LDR sensoren
  ldrValue = analogRead(LDR);

  //Hvis den er lavere end 400 sender den 'l' til slaven
  if(ldrValue < 400 && lampLight == false){
    cmd = 'l';
    Wire.write(cmd);
    delay(100);
    lampLight = true;
    Wire.endTransmission();
  }
  //hvis den er over 400 og lampen er tændt, sender den 'k' til slaven
  else if(ldrValue > 400 && lampLight == true) {
    cmd = 'k';
    Wire.write(cmd);
    delay(100);
    lampLight = false;
    Wire.endTransmission();
  }

Dørklokken og buzzeren er lidt speciel da de sidder på Masteren. Dette gør at de altid vil fungere selvom at tidligere funktioner har kørt.

//Ultrasonic
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance= duration*0.034/2;

  //hvis den er inde for 20cm bliver der spillet en tone ellers sender den ingen tone
  if(distance <= 20){
    tone(BUZZER, 10000/distance);
  }else{
    noTone(BUZZER);
  }
}
//spiller en melodi med forskellige delay og forskellige tone
void CardReadBuzz(int delayTime, int buzzTimes) {
  for (int i = 0; i < buzzTimes; i++) {
    digitalWrite(BUZZER, HIGH);
    delay(delayTime);
    digitalWrite(BUZZER, LOW);
    delay(delayTime);
  }
}

I masteren sender den en ”char” til slaven. Alt efter hvad denne ”char” er, gør slaven forskellige ting med dens aktuatorer. For at skabe forbindelse til Masteren skal man gøre den klar til at modtage.

 //Begynder at modtage på pin A4 og tager imod events
  Wire.begin(4);                // join i2c bus with address #4
  Wire.onReceive(receiveEvent); // register event

//Hver gang der kommer en kommando, bliver vores cmd variable lig med det.
void receiveEvent(int howMany)
{
   while(0 < Wire.available()) // loop through all but the last
  {
    cmd = Wire.read(); // receive byte as a character
  }
}

I slaven er der et stort If/else if-statement som kører forskellige funktioner alt efter hvad Masteren sender.

void loop()
{
  Serial.println(cmd);

  NormalMessageLCD();

  if(cmd == 'c')
  {
    CorrectKey();
  }
  else if(cmd == 'w')
  {
    WrongKey();
  }
  else if(cmd == 'l')
  {
    LampON();
  }
  else if(cmd == 'k')
  {
    LampOFF();
  }
  else if(cmd == 'h'){
    HumSuck();
  }
  else if(cmd == 't'){
    TempSuck();
  }
  else if(cmd == 's'){
    DCStop();
  }
  cmd ="";
  delay(100);
}

På billedet er der illustreret hvordan programmet ville kører igennem et flowdiagram.

Den samlede prototype

Modellen er opbygget på en måde der er meget funktionel orienteret og der blev ikke tage særlig meget hensyn til æstetik. Den består af pap og blev samlet ved hjælp af gaffatape og en limpistol.
På forsiden befinder der sig en dør der kan låses med et RFID-kort. RFID-scanneren befinder sig ved siden af døren. Desuden sidder der et display over døren, hvilket giver information om kortet enten bliver godkendt eller afvist. Den mekaniske del af låsen består en servo-motor og lidt lego (billede). Når kortet bliver godkendt, bevæger servoen sig 90 grader i enten den ene eller den anden retning.

Dørklokken er også ved siden af døren og består af en buzzer og en afstands-sensor. Når sensoren sanser noget inden for 20 cm, aktiveres buzzeren. Buzzerens frekvens bestemmes af den sansede afstand.

Lampen befinder sig på en arm på siden af huset og består af en LED og en LDR-sensor. Når LDR-sensoren sanser at det bliver mørkt udenfor bliver LED’en tændt.

Ventilations-systemet består af en temperatur og luftfugtigheds –sensor og en DC-motor som fungerer som ventilator.  Temperatur og luftfugtigheds -sensoren befinder sig inden i huset. Ventilatoren befinder sig i en ekstra boks der sidder på siden af huset. Når temperaturen i huset kommer over 25 grader, vil ventilatoren trække luft ind i huset og når luftfugtigheden overstiger 60% vil den trække luft ud af huset.

Arduinoerne er placeret på bagsiden af huset sammen med to breadboards, hvilket gjorde det mere overskueligt at samle alle komponenter.

Konklusion

Vi vurderer at vores løsningsforslag lever op til de krav vi satte i starten af projektet og vi viser hvor diversificeret problemstillinger man kan løse ved hjemmeautomation. Hver del af projektet løser et specifikt problem, som kunne være med til at forbedre levevilkårene i et privat hjem eller arbejdsplads. Vi har vist hvordan man kan optimere indeklimaet med et ventilationssystem, hvordan man kan gøre sin dørlås mere sikker og nem at tilpasse til den enkeltes behov, hvordan man kan skabe energieffektiv udendørsbelysning og hvordan man kan mindske spredning af virus ved at lave en kontaktfri dørklokke. Vi vurderer at alle løsninger ville være mulige og værd at installere, hvis man ønskede at optimere sit hjem eller arbejdsplads. Ved alle løsningerne ville det være muligt at optimere større eller mindre ting, men de grundlæggende funktioner fungerer som de skal.

Perspektivering

Generelt er vi tilfredse med vores løsninger, men hvis de skulle inkorporeres i et ægte hus, kommer der her en liste over forbedringer til de forskellige løsninger.

Dørklokken

I vores løsning sidder buzzeren udenfor huset, da det gav mest mening når vi skulle teste prototypen, så i et rigtigt hus skulle den selvfølgelig sættes indenfor. Men for at give brugeren en form for feedback når de har aktiveret dørklokken, kunne man tilføje en LED, som lyste når den havde modtaget et input, eller en lille buzzer, som gav auditiv feedback ved input.

RFID-lås

I vores version hardcoder vi de rigtige kort ind, men for at optimere dette, skulle man implementere at man kan tilføje og fjerne kort med et ‘master’kort. I forhold til RFID så er der rigtig mange muligheder for at lave et smartere system alt efter behov. Så hvis man skal bruge det i en stor kontorbygning, kunne man f.eks. bruge det til at tracke hvilke lokaler som er frie, hvor mange som benytter sig af lokale X eller hvor når den seneste person gik fra lokale Y osv.

Udluftning

Som beskrevet tidligere fungere vores temperaturregulation kun så længe at temperaturen udvendigt er koldere end 25 grader, så her kunne man med fordel tilkoble et køleanlæg

Lys

For at optimere energibesparelsen ved vores lys kunne man forbinde den med en bevægelsessensor, så lyset kun tændte når det var mørkt og der var nogen til stede inde for lysets rækkevidde.

Bilag

Link til video og Arduino-kode:
https://drive.google.com/drive/folders/1oFmt8Ly_ZknmvZzK0wxpJ3Eov0kahYXn?usp=sharing

Leave a Reply