Ajithan Christian, Jeppe Olesen og Mathias Katz Sørensen

Introduktion

Smart Home er primært en løsning der sikrere hjemmet. Systemet indeholder en dørlås som styres, af enten et kort eller en chip, efter brugeren præference. Hvis en ubuden gæst skulle komme ind i boligen, vil de blive opdaget af afstandssensoren. Dette vil aktivere alarmen som vil blinke med lyset og larme. 

Ud over øget sikkerhed leverer Smart Home et bedre indeklima, da luftfugtighed og temperatur kan måles og aktiverer ventilation. Løsningen forsøger også at være energieffektiv, da sollyset bestemmer hvorvidt lyset tændes, når der låser op. Ved høj sol tændes lyset ikke, mens det tændes om natten eller i overskyet vejr.

Smart Home er opbygget for at lave en simpel, smart løsning til et hus, som har flere forskellige former for funktionalitet.

Sikkerheden, som styres af låsesystemet, er øget fra en bolig, hvor der kun benyttes normale låse, da indtrængen bliver registreret.

De andre funktionaliteter, ventilation og kontrol af lyset, er inkluderet for at automatisere enkelte dele af hjemmet. Når de ønskede grænser for lys,  varme og luftfugtighed er indtastet løser systemet det for beboeren.

Videogennemgang af løsningen

Opbygning af hardware

Smart home består forskellige kredsløb, som i helheden udgør Smart Home. Smart Home består af: 

  • En servo motor, som står for dørlåsningen. SG90.
  • Afstandsmåler til at detektere indbrud. HC-SR04. 
  • RFID chip sensor, RC522 
  • Tilsstandslys, som indikere chip tilstand. 
  • Automatisk regulerende lys
  • Lyssensor, som registrere sollyset.
  • Temperatur og fugtighedssensor, til at registrere klima 
  • Regulerende ventilation. 
  • En buzzer
  • En mikrokontroller, som styre alle enheder. 

Servo motoren er sat op så den låser døren ved 90 grader. Når RFID sensoren registrere den rigtige chip, vil servoen rotere til 180 grader, hvormed døren bliver låst op. Servoen har indbygget driver, modstand og gearinger, derfor kan den sættes direkte til mikrokontrolleren. 

Afstandsmåleren er en ultrasonisk sensor, som registrerer afstand. Sensoren er placeret foran døren i en højde, hvor husdyr ikke vil påvirke den. Sensoren er monteret på en væg, som er vinkelret med døren, hvorpå sensoren måler afstanden til en modsat væg. Sensoren måler dermed parallelt med døren. Servoen bliver forsynet med 5V fra mikrokontrolleren og grounded ift mikrokontrolleren. 

Afstandsmåleren sender ultralyd for at bestemme en afstand. Sensoren sender radiobølger ud og måler hastigheden for hvornår de modtages igen. Den anvendte sensor har indbygget sender og modtager, derfor kan den forsynes og styret via mikrokontrolleren. 

Til opstillingen anvedes en HC-SR04. Denne er opsat som vist på figuren, dog har den en trigger og et echo pin i stedet for en samlet signal pin. Trigger pin holdes HIGH i 10mikrosekunder for at initialiseret målingen ved at sende ultralyd. Echo pin er kun højt i den tid bølgerne er sendt, dermed den tid det tager for signalet og nå tilbage. Hvis bølgerne fra sensoren er lavere end en prædefineret tærskelværdi, vil den alarmere resten af systemet, men kun i det tilfælde hvor døren er låst. Hvis afstanden er lav, når chippen ikke har registreret den rigtige nøgle, vil det betyde, at en uvedkommende gæst er kommet ind i huset. Hvis RFID registrerer den rigtig chip vil afstandsmåleren ikke have nogen betydning. Afstandsmåleren bliver forsynet med 5V fra mikrokontrolleren og grounded ift mikrokontrolleren. 

RFID RC522 chiplæser styre adgangen til huset. RC522 er en modul reader og writer, som kan modtage signal fra kort og tags. RC522 tilsluttes direkte til mikrokontrolleren med en forsyning på under 5V, derfor forsynes den med 3,3V fra mikrokontrolleren og groundes ift denne. 

Chip tilstands lys skal registrere tilstanden af chip læseren. Dette giver brugeren en indikation om hvorvidt chippen har åbnet døren eller ikke. Når døren er låst til tilstands lyset være rødt indtil den rigtig chip sættes for læseren, hvorefter denne vil skifte til grønt.

Opsætningen er en simpelt LED opsætning, hvor LEDen sidder i serie med en ballast modstand. Modstanden sikre at LED’en ikke får for meget strøm og dermed ikke brænder. LED’erne bliver forsynet med 5V og skal have omkring 20mA, som er lige under maks værdien. Modstanden for LED’erne beregnes iht. Ohms lov. 

V = I * R
Da spændingen er 5V og strømmen skal være 20mA, kan R isoleres og regnes 

R = 5V/ 0,02 A = 250 ohm. 

Dermed vælges for LED’erne en modstand på 220 ohm. LED’erne bliver forsynet med 5V fra mikrokontrolleren og grounded ift mikrokontrolleren. 

Automatisk reguleret lys med LDR sensor. Smart Home vil være mere energieffektiv ved delvis at regulere lyset i hjemme. Ved hjælp af lysitensiteten udenfor kan lyssensoren vurdere, hvorvidt det er nødvendigt med lys indenfor. LDR’en registerer lyset som via kode kan aktivere indelyset. Indelyset aktiveres via en transistor, som enten er HIGH eller LOW. Ved HIGH tilstand indikeres, at LDR modstanden er lav, hvormed lyset udenfor er lavet og derfor sendes der strøm til lyset, dette gælder også omvendt.  

LDR kredsløbet er sat op i en spændingsdeler, med en modstand på 10K ohm. Værdien er valgt ved trial and error, hvor 10K ohm giver det bedste udsving fra sensor, dermed et bedre analogt interval. Ud fra denne værdi vil en tærskelværdi vurdere, hvorvidt lyset skal tændes eller forblive slukket. Lyset er sat sammen med en transistor som en switch, som styres af pin 2. Tærskelværdien for sensoren kan brugerdefineres. Kredsløbet bliver forsynet med 5V fra mikrokontrolleren og gounded ift denne. 

Ventilationen styre indeklimaet og reguleres ved hjælp af en temperatur og fugtighedssensor. Sensoren registrerer både temperatur og fugtighed, hvorpå en tærskel aktiverer en DC-motor med en fane. Tærskelværdien kan brugerdefineres og man kan selv vælge om det skal afhænge af temperatur eller luftfugtighed, i koden længere nede er der taget udgangspunkt i luftfugtighed. 

Arduinoen kan ikke forsyne mere end 50mA, hvilket motoren skal bruge, derfor skal der anvendes transistor. Da retningen af motoren ikke skal reguleres anvendes der ikke en h-bro, men en enkelt transistor. Transistoren sikre den rette strøm til motoren. Transistoren er en spændingsregulator og aktiveres når base spændingen er over en spænding på 2,4 V.

Det kan opstår et spike, når motoren pludselig stoppes, da det magnetiske felt i motoren kan kollapse og generere en ufrivillig spænding. Denne spænding kan skade transistoren og ødelægge den, derfor bruges en flyback diode, som afleder spike spændingen væk fra transistoren. Base modstanden er på 1K ohm og reducere strømmer, for ikke og skade transistoren. Kredsløbet bliver forsynet med 5 V fra mikrokontrolleren og grounded ift denne. 

Buzzer agerer som lyden i alarmsystemet. Når en forkert chip registreres afgiver buzzeren en lyd, som er forskellige fra når chippen er rigtig. Derudover går buzzeren i gang, hvis der er detekteret indbrud ved en høj bippende alarmtone. Buzzeren kan styre direkte fra mikrokontrolleren og er forsynet med 5 V fra mikrokontrolleren og grounded ift. 

Hvert element bliver drevet af en microcontroller, hvor den endelige opstilling kan ses herunder. Da Tinkercad ikke understøtter en RFID chip er der på modellen brugt en membrane switch module, dog er denne i opstillingen en RFID.

Opbygning af program

#include <HCSR04.h> // bib til afstandsmåler 
#include <SPI.h> // bib til RFID nøglechip 
#include <MFRC522.h> //bib til nøglechip
#include <Servo.h> // bib til servostyring
#include "dht.h" // bib til humidity sensor

int triggerPin = 7; // Pin til USS trigger
int echoPin = 6; // Pin til USS echo

UltraSonicDistanceSensor afstand(triggerPin, echoPin); // Initialiser afstand fra bib

#define SS_PIN 10 // Pin til chip 
#define RST_PIN 9 // pin til chip 
MFRC522 mfrc522(SS_PIN, RST_PIN); // chip initalisering

const int transistorValue = 2; // pin til transistor
const int buzzer = 4; // Pin til Buzzer
const int venti = 5; // Pin til ventilation
#define dht_apin A0 // pin til humidity
dht DHT;

int servoPin = 3;  // Pin til Servo

const int LDR = A3; // Pin til LDR


int input_val = 0; //intialisere værdien til 0
int stat; //status tilstand (0 = låst, 1 = åben)
int x = 0; //status til at tjekke hvor mange gange det rigtige kort er læst

Servo myServo; // Servo initalisering fra bib.

void setup() {

  Serial.begin(9600);
  SPI.begin(); 
  mfrc522.PCD_Init();
  Serial.println("Scan card");
  Serial.println();
  pinMode(transistorValue, OUTPUT); 
  pinMode(buzzer, OUTPUT); 
  pinMode(venti, OUTPUT);
  
  myServo.attach(servoPin);
  myServo.write(90);

 pinMode(A4, OUTPUT); 
 pinMode(A5, OUTPUT); 
 digitalWrite(A4, HIGH);
 digitalWrite(venti, LOW);
 stat = 0; //status tilstand (0 = låst, 1 = åben)

}

void loop() {

  input_val = analogRead(LDR); //måler og udskriver LDR værdif
  Serial.print("LDR Value is: ");
  Serial.println(input_val);
  delay(1000);
  Serial.println(stat);

   DHT.read11(dht_apin); //måler og udskriver fugtighed og temepratur værdier
    Serial.print("Luft fugtighed = ");
    Serial.print(DHT.humidity);
    Serial.print("%  ");
    Serial.print("temperatur = ");
    Serial.print(DHT.temperature); 
    Serial.println("C  ");

if(DHT.humidity > 50) //hvis fugtighed overstiger tændes dc-motor 
{
  digitalWrite(venti, HIGH); 
}
else 
{
  digitalWrite(venti, LOW);
}

double distance = afstand.measureDistanceCm(); //måler og udskriver afstanden fra afstandsmåler
Serial.println(distance);

if (distance < 10 && stat == 0) //Hvis distance bliver midnre end 10 og der er låst, tændes alarmen og døren låses.
{
  servoClose(); 
  Serial.println("WARNING!! UNKNOW INTRUDER - POLICE IS ALARMED ");
  while(stat == 0){
  AlarmSound();
  digitalWrite(transistorValue, HIGH); 
  delay(10);
  AlarmSound(); 
  digitalWrite(transistorValue, LOW); 
  delay(10);
  
  if (mfrc522.PICC_IsNewCardPresent()) { //checker efter nyt kort for at kunne abryde alarmen
  return;
 }
    if(mfrc522.PICC_ReadCardSerial()) {
     return; 
      }
      for (byte i = 0; i < mfrc522.uid.size; ++i) {
      Serial.print(mfrc522.uid.uidByte[i], HEX); 
      Serial.print(" "); 
    }
  }
}


  
   // kigger efter nyt kort
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return; // Returner hvis sandt 
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }

    //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();


if (content.substring(1) == "3C D7 4A 23" && x == 0) 
//hvis den rigtig chip læses og x = 0, køres følgende funktioner.
{
   Serial.println(" Access authorized");
   Serial.println();
   servoOpen();
   UnlockSound();
   digitalWrite(A5, HIGH);
   digitalWrite(A4, LOW);
   stat = 1; 
   x++; 
   Serial.println(stat);
   if (input_val < 400){ //checker LDR værdi og tænder indørs lyset ud fra udvendigt lys.
   digitalWrite(transistorValue, HIGH);
   }
   else 
   digitalWrite(transistorValue, LOW); 

}
else {
    Serial.println(" Access denied"); //hvis ikke den rigtige chip læses eller x ikke er 0, køåres følgende funktioner
    LockSound();
    servoClose();
    digitalWrite(A4, HIGH);
    digitalWrite(A5, LOW);
    digitalWrite(transistorValue, LOW);
    stat = 0;
    x = 0; 
    Serial.println(stat);
    }

     // kigger efter nyt kort
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return; // Returner hvis sandt 
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }

  if((content.substring(1) == "3C D7 4A 23") && x == 1) //hvis det rigtige kort læses, hvilket i dette tilfælde er kortet med koden 3C D7 4A 23, og x =1, køres følgende funktioner:
   {
    servoClose();
    LockSound();
    stat = 0;
    x = 0; 
    digitalWrite(A4, HIGH);
    digitalWrite(A5, LOW);
   }
}

 void LockSound(){ //lock lyd
  tone(buzzer, 1600); 
  delay(250);      
  noTone(buzzer);    
  tone(buzzer, 800);
  delay(350);
  noTone(buzzer);
  delay(15);
  tone(buzzer, 800);
  delay(350);
  noTone(buzzer);
}

void UnlockSound(){ //unlock lyd
  tone(buzzer, 800); 
  delay(250);      
  noTone(buzzer);    
  tone(buzzer, 1600);
  delay(350);
  noTone(buzzer);  
}

void AlarmSound(){ //alarm lyd 
  tone(buzzer, 4000); 
  delay(70);      
  noTone(buzzer);    
  delay(70);       
  tone(buzzer, 3800);
  delay(70);        
  noTone(buzzer);     
}

void servoOpen() //kører servomoter til at åbne døren
{
  myServo.write(90);
  delay(100); 
  myServo.write(0); 
}

void servoClose() //kører servomoter til at lukke døren
{
  myServo.write(90);
  delay(1000);
}

Flowdiagram

Ingen tilgængelig beskrivelse.

Prioriteringer og funktioner

Systemets højeste prioritet er at tjekke om om der læses en ny chip, da funktionen skal bruges til at slå alarmsystemet til eller fra, samt stoppe eventuelle alarmer.

Når alarmsystemet oploader er alarmsystemet slået fra, og får stat værdien 0.

Når alarmsystemet er slået til tjekkes det om distancen fra afstandssensoren bliver mindre end 10. Hvis dette gør sig gældende vil dette sætte gang i alarmen, der får buzzeren til at afspille alarmlyden, blinke med lyset (transistorValue) samt låse døren. Derudover tjekkes konstant om nyt kort registreres fra chiplæseren. På denne måde kan en falsk alarm afsluttes, da alarmen ellers kører i loop indtil den slås fra .

Når den rigtige chip læses af chip læseren første gang, vil dette resultere i at døren låses op, da x her vil være 0. x er en status funktion, som tjekker status for, hvor mange gange den rigtige chip er blevet læst. Efter læsning af den rigtige chip incrumentere x med 1. Dette betyder at næste gange chippen læses, er x ikke 0, og derfor ikke opfylder if sætningen for at slå alarmsystemet fra. Herefter tjekker systemet om der er lys udenfor. Er det mørket udenfor, vil lyset indenfor automatisk tænde, ellers vil lyset forblive slukket.

Hvis ikke den rigtige chip læses af chip læseren, vil døren låses, lyset slukkes og status værdierne stat og x sættes til 0.

Hvis den rigtige chip læses igen vil x derfor være = 1, da x blev incrumenteret efter første læsning, låses døren og statusværdier stat og x sættes til 0.

Udover alarmsystemet, måles fugtigheden inde i huset konstant. Hvis fugtigheden overstiger tærskelværdien på 50, igangsættes dc-motoren, der kører indtil luftfugtigheden atter falder under tærskelværdien.

Konklusion

Systemet løser de opgaver som var tiltænkt dog med enkelte skønhedsfejl, som ville kunne rettes for at optimere løsningen.

Perspektivering

Denne løsning opfylder problemstillingen og aspekterne af et smart home, hvor der gennem forskellige sammensætninger kan skabes et energieffektivt, bæredygtigt og sikkert hjem. De anvendte aktuator og sensor til løsningen er en måde, hvorpå et smart home kan skabes, derfor kan disse også erstattes af andre sensor eller aktuator. 

Den simple løsning med en servo til dørlåsen, vil i virkeligheden være mere kompleks, men dog stadig ladsiggørlig med en større servo. Denne vil i dette tilfælde være indbygge i døren og ikke være af plastikvinger. 

Opstilling har kun taget højde for indbrud gennem døren, da huset ikke har nogle vinduer. I et virkelig setting, vil der være sensor placeret ved alle åbninger, altså vinduer og døre, som alle er med til at skabe sikkerhed. Yderligere kan det anvendes en motion sensor som tjekker for bevægelse i huset, denne vil blive programmere så den tager højde for husdyr. Da prototype huset var uden tag blev denne løsning ikke med motion sensor. Motion sensor i et hus uden tag, ville resultere i at systemet ville detektere indbrud, hver gang vi lavede bevægelse tæt på prototypehuset.

Alle automatiserede løsninger, som er styret via software skal kunne tilgås via manuelle elektroniske løsninger. Derfor skal brugeren kunne justere lyset og ventilationen selv. Yderligere vil brugeren have mulighed for at tilgå alle løsninger via en displayskærm, hvor de kan aktivere eller deaktivere forskellige dele, og kan justere de brugerdefinerede tærskelværdier.

Leave a Reply