Andreas Adriansen, Freya Arbjerg, Osman Khassouk

Introduktion

Happy Home fokuserer på at øge sikkerheden og gøre hjemmet mere komfortabelt. Systemet indeholder derfor en temperaturmåler, som har en indbygget skærm til let fremvise temperaturen i alle situationer. Temperaturmåleren samarbejder med en ventilator, som kan tændes automatisk hvis temperaturen er over 20°, eller af en fjernbetjening når indeklimaet i huset bliver for varmt.

Den anden funktion som kommer med happy home er en alarms installation, som kan aktiveres når man ikke er hjemme. Dette system fokuserer på at styrke sikkerheden i hjemmet. Alarmen aktiveres når man får uønsket besøg i hjemmet, og giver signal i form af en høj lyd frekvens.

Termistor med LCD

Dette er et kredsløb som kan måle temperaturen via en thermistor og vise den på en LCD skærm.

Komponenter:

  • Arduino Uno
  • LCD1602
  • 10kΩ potentiometer
  • 10kΩ modstand
  • 10kΩ thermistor (MF52D-103f-3950)

LCD-skærmen styres ved hjælp af de digitale pins 7 til 12. Spændingen fra thermistoren aflæses ved hjælp af analog pin 5. Husk at indstille potentiometeret til 10kΩ.

Kode

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
float pin = A0;
float R1 = 10000;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup() {
  lcd.begin(16, 2); // Columns and rows
  Serial.begin(9600);
}

void loop() {
  float Vo = analogRead(pin);
  float R2 = R1 * (1023.0 / (float)Vo - 1.0);
  float logR2 = log(R2);
  float T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  float Tc = T - 273.15;

  lcd.setCursor(0, 1);
  lcd.print(Tc);

  delay(500);
}

Alarm tutorial

Alarmsystemet er en alarm der aktiveres når en bevægelse registreres. Systemet er et simpelt kredsløb som bruger en piezo-højttaler som aktuator og en PIR-bevægelsessensor som sensor. Begge komponenter tilkobles til en Arduino Uno.



Komponenter:

De anvendte komponenter til alarmsystem:

  • PIR motion sensor
  • Piezo speaker (Buzzer)
  • Arduino Uno
  • Ledninger
  • Breadboard




PIR bevægelsessensor

PIR-bevægelsessensor måler infrarøde lys fra objekter i sit synsfelt, ændringer til det infrarøde lys i miljøet detekteres som bevægelse.

Piezo-højttaler (buzzer)

Piezo-højttaleren er en lydsignal anordning, der kan tilsluttes Arduino, hvor tonen kan bestemmes ud fra frekvens indstillingen. Højttaleren bruger en invers piezo-elektrisk effekt til at producere lydbølger.

Pins

PIR motion sensor has 3 pins.

  • GND – tilslut til jord.
  • OUT – tilslut til Arduino digital pin.
  • 5V – tilslut til 5V.

Piezo-højtaler har 2 pins.

  • GND – tilslut til jord.
  • OUT – tilslut til Arduino digital pin.

Skematisk

Sort Ledning – tilslut til jord.

Rød Ledning – tilslut til power.

Gul Ledning – tilslut Arduino pins.

Kode

int sensor = 10;            //the pin that the sensor is attached to
int buzzer = 11;
void setup() {
  pinMode(buzzer, OUTPUT);   //initialize buzzer as an output
  pinMode(sensor, INPUT);    //initialize sensor as an input
  Serial.begin(9600);        //initialize serial
}
void loop(){
  if(digitalRead(sensor) == HIGH){
    tone(buzzer, 450);
    Serial.println("Motion Detected");
    delay(200);
  }
  else{
    digitalWrite(led, LOW);
    noTone(buzzer);
    Serial.println("Motion Stopped");
    delay(200);
  }
}

Remote fan control

Dette systems job er at kunne tænde og slukke en blæser ved hjælp af en fjernbetjening. En infrarød sensor samler input fra fjernbetjeningen og en DC-motor med et blad på agerer som blæser.

Komponenterne inkluderet i dette system er:

  • Arduino Uno
  • Breadboard
  • DC-motor
  • L293D (H-bro)
  • Infrarød sensor
  • Fjernbetjening
  • Ledninger

L293D

Ovenover ses en oversigt over L293D. L293D kan styre to dc motorer, men i dette projekt behøves kun 1. Der tilsættes 5 volt til pin 1, pin 8, og pin 16. Da kun en motor er nødvendig tilsættes der kun ledninger til venstre side. Det vil sige input 1 og 2, ground pin 4 og 5, og output 1 og 2. Input 1 og 2 tager input fra Arduinoen og output 1 og 2 sender det videre til DC-motoren. Hvis det ene input er HIGH og det andet er LOW vil motoren rotere en vej, hvis det ændres til det omvendte, vil motoren rotere den anden vej.

Skematisk tegning

Kode

#include <IRremote.h>

// Define the pin for the IR Receiver and LED
int IRPIN = 3;

// Define the pin numbers
int motorPin1 = 13;
int motorPin2 = 2;

bool on = false;

void setup() {
    // Set the pin modes of the above IO pins to OUTPUT
    Serial.begin(9600);
    Serial.println("Enabling IRin");

    IrReceiver.begin(IRPIN, ENABLE_LED_FEEDBACK);

    Serial.println("Enabled IRin");
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    delay(500);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
}

void loop() {
    // Turn the motor in one direction

     if (IrReceiver.decode()){
      String str = String(IrReceiver.decodedIRData.decodedRawData, HEX);
      Serial.println(str);
      if(str != "0"){
        if(!on){
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, HIGH);
          Serial.println("Turned on");
        }
        else{
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, LOW);
          Serial.println("Turned off");
        }
        on = !on;
      }
      IrReceiver.resume();
     }
    
    delay(1000);
 
}

Samlet system

Fysisk prototype 

Link til demo:

https://drive.google.com/file/d/18JmNdVYdRczAf82JtFdgqRlfdgcMde3s/view?usp=sharing (bemærk at temperaturen i programmet var sat til 21 grader i demoen før at motoren kører)

Systemer sammenspil

I den nyere version af vores system kan ventilationssystemet styres af temperaturen og fjernbetjeningen. Er temperaturen over 20 grader celsius tændes der for ventilationen, hvis den er under forbliver den slukket. Temperaturmåleren checkes konstant for ændringer i tilfælde af state skift.

Den anden tilføjelse er sammenspillet mellem fjernbetjening og ventilationssystem. For at brugeren kan noget manuel styring af ventilationen, kan fjernbetjeningen bruges til at override den målte temperatur i en kort periode. Styringen kan ses i flowchartet under dette afsnit.

Flowchart

Kode til det samlede program

#include <LiquidCrystal.h>
#include <IRremote.h>

int motorPin1 = 13;
int motorPin2 = 2;
int irPin = 3;
int motionSensorPin = 5;
int buzzerPin = 4;
int ledPin = 6;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int thermistorPin = A5;
float R1 = 10000;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
unsigned long REMOTE_LOCK_TIME = 10000;
unsigned long remotePressed = 0;

void setup() {
  lcd.begin(16, 2); // Columns and rows
  IrReceiver.begin(irPin, ENABLE_LED_FEEDBACK);
  pinMode(buzzerPin, OUTPUT);
  pinMode(motionSensorPin, INPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);
}

float runTemperatureDisplay() {
  float Vo = analogRead(thermistorPin);
  float R2 = R1 * (1023.0 / (float)Vo - 1.0);
  float logR2 = log(R2);
  float T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  float Tc = T - 273.15;

  lcd.setCursor(0, 1);
  lcd.print(Tc);

  return Tc;
}

void runAlarm(){
  if (digitalRead(motionSensorPin) == HIGH) {
    tone(buzzerPin, 450);
    Serial.println("Motion Detected");
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
    noTone(buzzerPin);
    Serial.println("Motion Stopped");
  }
}

void runRemote() {
  if (IrReceiver.decode()) {
    String str = String(IrReceiver.decodedIRData.decodedRawData, HEX);
    Serial.println(str);
    if(str != "0"){
      Serial.println("Remote presses");
      remotePressed = millis();
    }
    IrReceiver.resume();
  }
}

void runAircon(float temperature) {
  Serial.println(temperature);
  bool remoteTriggered = remotePressed != 0 && remotePressed + REMOTE_LOCK_TIME > millis();

  bool enable = temperature > 20;
  if (remoteTriggered) {
    enable = !enable;
  }

  if (enable) {
    digitalWrite(motorPin2, HIGH);
  } else {
    digitalWrite(motorPin2, LOW);
  }
}

void loop() {
  float temp = runTemperatureDisplay();
  runAlarm();
  runRemote();
  runAircon(temp);
  delay(500);
}

Problemer under opbygningen

Der forekom problemer under opbygningen af produktet, nogle som var til at fikse og andre, der krævede vi måtte skifte strategi. Det første problem kom i form af vores IR receiver. IR receiveren kan tyde mellem forskellige knapper på fjernbetjeningen som det kan ses i eksemplet forneden.

Der forekom dog problemer med dette komponent, som umiddelbart var udenfor vores kontrol. IR receiveren havde en tendens til at virke perfekt ved nogle testkørsler, men ved andre ville den begynde at printe de forkerte koder og endda skifte kode selvom der blev trykket på den samme knap. Dette kunne nogle gange fikses ved at sætte IR receiveren bedre fast på breadboardet, men den ville hurtigt gå i stykker igen. Gruppen endte med at løse dette problem ved at ikke spørge efter en specifik kode i programmet, men at spørge om koden != 0. På denne måde kunne man bruge fjernbetjeningen til at tænde og slukke motoren, men det er også kun den eneste funktionalitet fjernbetjeningen kan give, da programmet ikke længere kan tyde forskel på de forskellige knapper på fjernbetjeningen.

Der forekom også problemer med DC motoren i form af elektrisk støj, men dette blev der ikke umiddelbart fundet en løsning til.

Konklusion

Robotten opfylder de krav sat for projektet. Alle systemer medvirker til at forbedre hjemmet, enten i form af et ventilationssystem der er styret af temperaturen og fjernbetjening eller alarmsystemet som giver signal ved indbrud.

Perspektivering

Havde der været mere tid til projektet ville der havde været gjort forsøg på at bygge installationen som først planlagt. Planen var at bygge et dørsystem som er kontrolleret af en fjernbetjening, samtidig med at den kunne samarbejde med alarmsystemet. Der var dog problemer med aflæsning af den printede information fra fjernbetjening som vi ikke kunne løse i tide. Alarmsystemet blev bygget med denne installation i tankerne og er derfor ikke optimal i dens selvstændige tilstand.

Leave a Reply