Nils Lauritzen og Niklas Rosendahl

Vi kender alle sammen til det problem, at man har sat inde på sit værelse i mange timer, og man går lige ud for at hente et eller andet. Når man så kommer tilbage lægger man mærke til at rummet man har sat i er totalt indelukket og der er en tyk luft i lokalet. Man bliver for det meste overrasket over man ikke har lagt mærke til at man har sat i det. Genvex videncenter(Indeklima i hjemmet: fem tegn på, at du har dårligt indeklima – Genvex, n.d.) skriver at et dårlig indeklima kan medfører hovedpine, træthed og i værste fald sygdom. De skriver at en essentielt ting man skal gøre for at få et godt indeklima er at lufte ud. De skriver dog at kun 1 ud af 10 danskere husker at lufte ud 2-3 gange om dagen, som er det anbefalet antal gange. Det har vi prøvet lave en løsning på ved et automatisk udluftning system, som åbner et vindue og lufter rummet ud ved hjælp af ventilation når luftfugtigheden er for høj.

Målsætningen ved vores prototype er at kunne simulerer en løsning af problemstillingen rent funktionelt. Derfor skalerer vi det hele ned i dukkehus størrelse.

Konstruktionen af vores prototype har vi anvendt følgende:

Hardware:

  • Arduino UNO R3 Controller Board
  • DHt11 Tem and Hum Module
  • 2x Potentiometer 10k
  • LCD1602 Module
  • Power Supply Module
  • L293D
  • 2x 3-6V Motor
  • Fan Blade
  • 2x 830 Tire-Points Breadboard
  • 9V1A Adapter 
  • 3x 330 Ω Resistors
  • 220 Ω Resistor
  • 10k  Ω Resistor
  • Diode Rectifier 
  • NPN Transistor PN2222
  • Button
  • 1x Rød og 1x Grøn LED
  • En helveds masse ledninger 😉              

Konstruktion af det fysiske miljø har vi anvendt:

  • Pap
  • Lego
  • Snor
  • Tape
  • Kop
  • Kogende Vand
Billede1 af prototype

Opbygning af hardware

I denne løsnings er der lige nøjagtig nok pins i en enkelt arduino, men til gengæld at det nødvendig at køre med 2 kredsløb med hver deres strømforsyning. Da denne løsning benytter både 2 dc motor og 1 LCD module, og LCD’en bruger omkring 5v som standard kunne vi hurtig regne ud vi skulle bruge mere power!(LCD datablad). Som løsning på dette køre systemet over 2 strømforsyninger. Den ene kredsløb for strøm fra Arduinoen, og den anden for strøm fra et power supply module. Vi anbefaler at man forsyner modulet med strøm fra en kontakt i væggen, og ikke batteri da batteriet løber hurtig tør for strøm.

Billede 2 af system og de fleste komponenters cirka placering på de 2 breadboards.

Som det ses på billedet kan det se lidt kaotisk ud vi vil derfor nu gennemgå de 2 kredsløb hver for sig, og kom ind på opsætningen af hver enkelte komponent. Fremgangs måden i skabelse af systemet var, at fandt de hoved komponenter vi gerne ville bruge. Efterfølgende slog vi dem op 1 efter 1 og satte os ind i hvordan man anvender dem. Til sidst samlede vi så det hele i 2 kredsløbs

Kredsløb 1 (strøm fra Arduino) 

I det første kredsløb kan deles op i 3 afdelinger. Vi har vores LCD Module, Temp-Hum module også har vi en knap og potentiometer hvis funktion er at kunne skrue op og ned for hastigheden på den ene motor.

LCD1602 Opsætning 

LCD funktion i vores prototype er at den skal kunne give os information om hvad vores Temp-Hum sensor måler, og hvor meget farten er på den ene af motorerne.

billede3 opsætning af LCD Skærm

Den er tilsluttet således 

Pin på LCDTilslutning
Pin 1 VSS GroundGnd
Pin 2 VDD 5v5v
Pin 3 VE (Contrast)Potentiometer 
Pin 4 RS (Register Select)Digital 2
Pin 5 RW (Read/Write)Gnd
Pin 6 E(Enable)Digital 3
Pin 11 D4Digital 5
Pin 12 D5Digital 4
Pin 13  D6Digital 6
Pin 14 D7Digital 7
Pin 15 Backlight Anode 220Ω + 5v
Pin 16 Backlight CathodeGnd

Ved Pin 15 ved LCD skærmen er der en lille modstand på 220Ω(ARDUINO LCD SET UP AND PROGRAMMING GUIDE, n.d.) som bestemmer den bagerste lysstyrke på skærmen. Hvis man tager en mindre modstand på bliver lysstyrken højere. Potentiometerets funktion er at man kan skrue op og ned på skærmens kontrast.

DHT11 Temperatur og Humidity Module

Opsætningen af sensoren er forholdsvis lige til hvor vi har valgt at tilslutte sensorens data-Pin til digital input 8 på Arduinoen.

billede4 opsætning af Hum-Temp Sensor

Knap og Potentiometer

Vores Knap og potentiometers funktion er at, den styre hastigheden på den ene motor, så man kan bestemme sig for hvor kraftig ventilation man gerne vil have. 

billede5 opsætning af knap og potentiometer

Vi tilslutter knappen input til digital input 13 på arduinoen. Modstanden på 10k fungere som en pull down or pull up resistor som giver gør at vi kan få et low input når knappen ikke bliver trykket(Arduino Button Tutorial Using Arduino DigitalRead Function, n.d.). Denne løsning passede godt til vores ide der vi godt kunne tænke at når man skulle justere motorens hastighed ville vi gerne have man skulle holde knappen inde.

Kredsløb 2 Power supply Module

kredsløb 2 består af alle vores aktivator, som er 2 dc-motor og 2 LED pærer(Make a Simple LED Circuit, n.d.) som fungere som indikationslys til hvornår motoren køre den ene og anden vej. Det skal simulerer at vinduet åbner og lukker. Når den ene motorer køre for den tilføjet strøm igennem i H-Bro module så vi kan sende strømmen i begge retninger.

billede 6 opsætning af motor med H-bro module

Den anden motorer for tilføjet strøm igennem en NPN transistor, så vi gennem vores kode kan bestemme hvor meget strøm motoren skal have så vi kan styrer hastigheden. Det skal simulerer hvor hurtig man gerne vil have den skal ventilerer. Vi at sat en diode på så vi sikre os at strømmen kun løber i en retning.

billede7 opsætning af Proppel moter med transistor
Kredsløbs diagram over hele systemet

Opbygning af program

Koden til systemet er opdelt i fire primære stadier med en ekstra sekundært stadie. De fire stadier er således:

  1. Neutral: Her venter systemet på at luftfugtigheden bliver for høj.
  2. Start Udluftning: I dette stadie startes udluftningen, eller rettere sagt, den åbner vinduet.
  3. Udluftning: Her startes blæseren og den køre indtil at luftfugtigheden falder til et passende niveau.
  4. Afslut Udluftning: Her slukkes blæseren og vinduet lukkes efterfølgende. 

Fordelen ved at opdele programmet i stadier, hjælper os med at kontroller hvilken kode der skal køre, og hvornår den skal køre. Der kan dog være funktioner, der skal være tilgængelige under flere stadier, og de befinder sig under det femte stadie. Det sidste sekundære stadie, kaldet “Any State” repræsenterer disse funktioner, og fungerer således at den afbryder den nuværende stadie og den ønskede kalder sin funktion, hvor den efterfølgende fortsætter i den tidligere stadie.

Setup

Til dette program er der tilkoblet to ekstra biblioteker. Det første kaldet “dth.h”, tilføjer de nødvendige funktioner, så temperature og humidity modulet kan fungerer som ønsket. Det næste bibliotek tilføjer de nødvendige funktioner for, at LCD displayet kan fungerer som ønsket.

Udover dette tilkobles de forskellige komponenter igennem de pins, de er sat i på Arduinoen. Den maksimale tilladte og den minimale acceptable luftfugtighed defineres igennem “maxHum” og “minHum” variablerne, der er integers. De har således startværdierne 70 og 55. Vi undersøgte hvad den optimale luftfugtighed indenfor er mellem 40-50% (Nymann, 2020), og skal holdes under 60%. Vi nærmere indblik kan vi se at vi havde læst lidt forkert da den gennemsnitlige luftfugtighed vi har kodet der skal ligge på under 55%. Så ved videre test ville vi nok skrue den ned på 45%
Den nuværende hastighed til blæseren kaldet “fanSpeed”, bliver også defineret som integer med en startværdi som 150. 

Stadie 1

Som beskrevet i ovenstående diagram, tjekker stadie 1 hele tiden om luftfugtigheden er tilpas, hvis ikke rykker vi videre til det næste stadie.
Dette kan skrives som et while loop, hvor den bruger den nuværende luftfugtighed og den maximale tilladte luftfugtighed som parameter.

Stadie 2

Dette stadie start hele udluftning processen. Først startes motoren, hvor den bagefter slukkes igen efter et halvt sekund. Motoren trækker i en snor, der henholdsvis er tilkoblet et vindue, der trækkes åben. 

Motorens første ben sættes bare til HIGH, mens den anden fortsat er LOW. Hvilket betyder at motoren køre en bestemt retning. Så et delay, hvor motoren derefter sættes til LOW i begge retninger.

Stadie 3

I dette stadie tænder vi for blæseren indtil at luftfugtigheden er på et passende niveau. Hvis den så fortsætter vi til næste stadie. Dette gøres igen igennem et while loop med luftfugtigheden og den tilladte luftfugtighed som parameter.

Stadie 4

I dette stadie slukkes blæseren, hvorpå vinduet derefter lukkes igen.
Her sætter vi blæserens ben til LOW, hvor vi efterfølgende sætter vindue motorens motor andet ben til HIGH, mens det første forbliver i LOW. Dette fører strømmen igennem motoren i den modsatte retning fra tidligere ved hjælp af en H-bro, hvilket får motoren til at køre modsat. På den måde bliver vinduet lukket i stedet for åbnet igen.
Der er derefter et kort delay, hvor motorens ben bliver sat til LOW og den slukkes. Herefter bevæger vi os tilbage til stadie 1.

Funktioner

Udover de fire stadier har vi også to funktioner, der bliver kaldet iblandt dem. Den første er kaldet PrintHum(), den har formålet at opdaterer den tilkoblede LCD display i systemet med de relevante information omkring luftfugtigheden. Denne funktion bliver kaldt hele tiden i de tidligere stadier med mindre den næste funktion bliver kaldet.

Den næste funktion bliver kaldt, når brugeren trykker på en knap tilkoblet til systemet. Funktionen hedder FanControl(), og den giver brugeren mulighed for at dreje på et tilkoblet potentiometer, der justerer hvor kraftigt blæseren skal køre.

Efterfølgende ændre den LCD displayet, så den fortæller brugeren hvor stærk motoren er med den nuværende indstilling. Da denne funktionen ændre displayet kan den ikke blive kaldt på samme tid som den tidligere funktion, da der opstår en konflikt med deres formål. De bliver derfor separeret igennem en if statement, der tjekker om spilleren trykker på en knap, i de forskellige stadier.

Motorens kraft kan ændres gennem en transistor, der styrer hvor meget strøm der passerer igennem motoren, når den tændes.

Endelige Program

Det endelige program og diagram ser derfor således ud.

//libraries
#include <dht.h>
#include <LiquidCrystal.h>

//skærm pins
LiquidCrystal lcd(2, 3, 5, 4, 6, 7);

//tem og hum sensor
dht DHT;
#define DHT8_PIN 8

//vinduemotor pin
const int pwm = 12;
const int in_1 = 10; 
const int in_2 = 11;

//FanMoter pin
int motorPin = 9;

// fanSpeed knap Pin
int buttonPin = 13;
int buttonState = 0; 

//Potentiometer til fanSpeed
int potPin = 0;
int val = 0;
int fanSpeed = 150;

// Humidity Niveauer 
int maxHum = 70;
int minHum = 55;

void setup(){
  Serial.begin(9600);
  
  lcd.begin(16, 2); //vælger hvilke felter der skal bruges

  pinMode(pwm,OUTPUT); 
  pinMode(in_1,OUTPUT); 
  pinMode(in_2,OUTPUT); 
  pinMode(motorPin, OUTPUT);
  pinMode(buttonPin, INPUT);

}

void loop(){

  // Stadie 1
  while(DHT.humidity < maxHum) {
    buttonState = digitalRead(buttonPin);

    // Any State
    if (buttonState == HIGH) {
      FanControl();
    }  
    else {
      PrintHum(); 
    }  
    
    delay(2000);
  }

  // Stadie 2
  if (DHT.humidity > maxHum){

    // motor 1 åbner vinduet
    digitalWrite(in_1,HIGH);
    digitalWrite(in_2,LOW);
    analogWrite(pwm,255);
    
    //delay på x antal tid
    delay(500);
    
    //slukker
    digitalWrite(in_1,LOW);
    digitalWrite(in_2,LOW);

    // Stadie 3
    while(DHT.humidity >= minHum){
        
      //printer temp og hum til skærm
      buttonState = digitalRead(buttonPin);

      // Anystate
      if (buttonState == HIGH) {
          FanControl();
      }
      else {
          PrintHum();
      }           
        
      //køre den anden motor
      analogWrite(motorPin, fanSpeed);
      delay(2000);       
     }
  }

  // Stadie 4
  if(DHT.humidity <= minHum){
       
     digitalWrite(motorPin, LOW);
     
     digitalWrite(in_1,LOW);
     digitalWrite(in_2,HIGH);
     delay(250);
     digitalWrite(in_1,LOW);
     digitalWrite(in_2,LOW);
  }

}

//FanSpeed Funktion
void FanControl() {

  // Tjek færdig fra potentiometer
  int val = analogRead(potPin);
  fanSpeed = val/4;

  // Pådater display
  lcd.clear();
  lcd.setCursor(0,0); 
  lcd.print("Fan Speed:");
  lcd.setCursor(0, 1);
  lcd.print(fanSpeed);
}

void PrintHum() {
  int chk = DHT.read11(DHT8_PIN);
  lcd.clear();
  lcd.setCursor(0,0); 

  // Print temerpatur
  lcd.print("Temp: ");
  lcd.print(DHT.temperature);
  lcd.print((char)223);
  lcd.print("C");

  // Print humidity
  lcd.setCursor(0,1);
  lcd.print("Humidity: ");
  lcd.print(DHT.humidity);
  lcd.print("%");

  // Print til serial monitor til data opsamling
  Serial.print("Temp: ");
  Serial.println(DHT.temperature);
  Serial.print("Humidity: ");
  Serial.println(DHT.humidity);
   
}

Opbygning af den samlede fysiske prototype

Vi valgte at konstruerer vores system med en masse pap og tape, da vi følte os lidt tidspresset, og vi ikke er særligt stærke inden for mekanik. Derfor valgte vi at konstruerer det så simpelt som muligt.

Her ses skitsen til vores fysiske model

Som set på skitsen, består huset af en papkasse med et enkelt vindue, der trækkes åben med en snor bundet fast til en dc motor. Snoren går igennem husets væg ovenpå vinduet, så det trækkes opad, når snoren spændes, og den lader vinduet falde ned, når snoren løsnes.
Bag på huset sidder selve systemets kredsløb. Det vil sige breadboard, Arduino, LCD display, status dioder, knap, potentiometer osv. Blæseren og luftfugtigheds modulet sidder også fast bagpå, men de går igennem væggen og ind i selve huset.

Test

Vi har lavet mange små test undervejs før vi lavede den fysiske prototype, for at se om systemet virker som det skulle. Måden vi gjorde dette på var at ånde ind i sensoren, så den kom over 70% i luftfugtighed for at se om motorerne startede når de skulle. Da det virkede optimalt lavede vi så et rum ud af pap og installerede systemet. Planen var at vi ville tage en kop med kogende vand med ind i rummet også se hvor længe det ville tage før luftfugtigheden ville falde ned til den den optimale %. Vi fandt dog hurtig ud af at huset var for stort og fanen og vinduet var for lille. Så den havde ikke den store effekt i det skabte indeklima.

Konklusion

Metoden vi valgte at teste på var nok lidt urealistisk, da den mængde fugtighed man for fra kogende vand, er noget voldsommere end hvordan det ville fungere på et normal værelse. Denne test ville nok mere svare til udluftning af et badeværelse når man har været i bad eller lignende. Kort sagt fungerer vores løsning som den skal. Den måler konstant rummets luftfugtighed igennem en “temperature and humidity module”, og hvis den er for høj åbner systemets husets vindue, hvor der efterfølgende startes en blæser, og der bliver luftet ud. Når luftfugtigheden er på et passende niveau igen, slukkes blæseren og vinduet lukkes. .

Perspektivering – Hvad kan man gøre for at gøre den bedre?

Systemet fungerer som det skal, men sådan som det ser ud lige nu, tager den ikke højde for specielt mange parameter. Den tager højde for luftfugtigheden og brugerens ønskede hastighed til blæseren.
Men hvad nu hvis det er nat, og brugeren ikke ønsker at deres vindue åbner midt om natten for at undgå yderligere frygt for indbrud. Dette kunne gøres igennem en photoresistor, der tjekker rummets lys niveau, og hvis den var for lav, så starter den ikke luftfugtighed system, når det er nat.

Udover dette, fungerer systemet rent funktionelt, men konstruktionsmæssigt er der flere mangler i systemet. Den første kunne være, at papkassen der skulle fungerer som hus, var for stor sammenlignet med de anvendte dele. Blæseren var eksempelvis ikke stort nok til at overhovedet have en indflydelse på rummets indeklima.
Husets vindue bestod også som en flap, der var klistret fast med gaffatape, hvor en snor tilkoblet en dc motoren trækker den op og ned. Dette fungerede heller ikke helt optimalt, hvor vinduet nogle gange bare hang fast i pap væggen omkring den, eller den ikke kunne lukke helt i, fordi den ikke sad ordentligt fast i dens ramme. Det kunne løses ved at konstruerer et mere mekanisk vindue, der styres af et gearing system sammen med motoren.

Kilder

Indeklima i hjemmet: fem tegn på, at du har dårligt indeklima – Genvex. (n.d.). indeklima-i-hjemmet-sadan-bliver-det-bedre. Retrieved April 29, 2021, from https://www.genvex.com/videnscenter/indeklima-i-hjemmet-sadan-bliver-det-bedre

ARDUINO LCD SET UP AND PROGRAMMING GUIDE. (n.d.). ARDUINO LCD SET UP AND PROGRAMMING GUIDE. Retrieved April 29, 2021, from https://www.circuitbasics.com/how-to-set-up-an-lcd-display-on-an-arduino/

Arduino Button Tutorial Using Arduino DigitalRead Function. (n.d.). Arduino Project Hub. Retrieved April 29, 2021, from https://create.arduino.cc/projecthub/muhammad-aqib/arduino-button-tutorial-using-arduino-digitalread-function-08adb5

Make a Simple LED Circuit. (n.d.). Arduino Project Hub. Retrieved April 29, 2021, from https://create.arduino.cc/projecthub/rowan07/make-a-simple-led-circuit-ce8308

Nymann, E. (2020, October 5). What Is the Ideal Indoor Humidity Level at Home in Summer? Weather Station Advisor. https://www.weatherstationadvisor.com/ideal-summer-indoor-humidity-level/

Leave a Reply