---
# System prepended metadata

title: DHT11 och 16x2 LCD

---

<h1>DHT11 och 16x2 LCD</h1>
<p>Instruktion skriven av Anders Johansson
</p>
<p>
Ett litet projekt med temperatur- och luftfuktighetsmätning där resultaten visas på en LCD på 16x2. I displayen visas även högsta och lägsta uppmätta temperatur. Finns även en resetfunktion för att nollställa dessa.</p>

<p>
För att följa detta projekt förutsetts att mjukvara för Arduino redan laddats ner och att anslutning mellan dator och Arduino fungerar.
</p>

![](https://i.imgur.com/rarEuEJ.jpg)

<h2>
Materiallista </h2>
<p>
Till projektet användes följande:

- 1st Arduino UNO
- 1st LCD 16x2
- 1st DHT11 (DHT22 fungerar också. Ändra då på rad 5 i koden)
- 1st Potentiometer 10k (alternativt motstånd på ca 420ohm)
- 2st Momentana strömbrytare NO
- 2st Motstånd 10k
- Kopplingsplatta
- Kopplingstrådar
</p>
<h2>
Uppkoppling </h2>
<p>Projektet kopplades upp enligt nedan. Var noga med att kontrollera pinkonfigurationen för tempsensor och display. Kan finnas typer där pinnarna är omkastade.</p>
<p>Potentiometern används för att styra bakgrundsbelysningen. När man hittat önskad styrka kan potentiometern bytas ut till motsvarande resistor. För mig var 420ohm lagom.</p>

![](https://i.imgur.com/HTJqqYP.png)

<h2>
Bibliotek för hårdvaran </h2>
<p>Till detta projekt behövs bibliotek för både sensorn och displayen. Biblioteken laddas ner i mjukvaran för Arduino genom att gå till Verktyg/Hantera bibliotek.</p>
<p>**Tempsensorn:** I sökrutan skrivs "DHT11" in. Välj att installera "DHT Sensor library" från Adafruit.</p>
<p>**LCD:** I sökrutan skrivs "liquidcrystal" in. Välj att installera "LiquidCrystal" från Adafruit.</p>

![](https://i.imgur.com/WD4Qj9h.png)

<h2>
Koden </h2>
<p>Nedan visas koden till projektet.</p>

```cpp=

#include <LiquidCrystal.h>    //Import the LCD library
#include "DHT.h"              // Import the DHT library
#define DHTPIN 7              // Define where DHT is connected
#define DHTTYPE DHT11         // Define type of DHT sensor
#define contra 9              //Define pin for contrast control
#define bri 10                //Define pin for brightness control

DHT dht(DHTPIN, DHTTYPE);

//Setting up variables and pins
int sw = 13;
int reset = 8;
int reading;
int reset_reading;
int state = 0;
float max_t = 0.00;
float min_t = 100.00;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialize the LCD pins

void setup() {
  // put your setup code here, to run once:
  dht.begin();
  lcd.begin(16, 2);           //Tell the LCD that it is a 16x2 LCD
  pinMode(contra, OUTPUT);    //set contrast pin 9 to OUTPUT  PWM
  pinMode(bri, OUTPUT);       //Set brightness pin 10 to OUTPUT   PWM
  digitalWrite(contra, LOW);  //Contrast output set to low
  analogWrite(contra, 50);
  analogWrite(bri, 200);      //Brightness output. 250 is max.
  pinMode(sw, INPUT);         //Sets input for mode switch
  pinMode(reset, INPUT);      //Sets input for reset switch
}
  
void loop() {
  // put your main code here, to run repeatedly:
  delay (1000);               // Time for DHT to measure
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if(t > max_t){              // Set values for max and min temperature
    max_t = t;
  }
  if(t < min_t){
    min_t = t;
  }
  
  lcd.setCursor(0, 0);        // Set start position for text output on LCD
  lcd.print("Temp: ");
  lcd.print(t);
  lcd.print(" C   ");

  int reading = digitalRead(sw);  // Check for input from mode switch
  int reset_reading = digitalRead(reset);  // Check for input from reset switch

  if (reset_reading == HIGH){   // Resets the min and max temperature
    max_t = 00.00;
    min_t = 100.00;
  }

  if(reading == HIGH){           // Each press on mode switch will change display text output
    state = state + 1;
  }

  if(state == 0){               // Different text output depending on mode switch
    lcd.setCursor(0, 1);          // Position for text output
    lcd.print("Humidity: ");
    lcd.print(h);
    lcd.print("%");
  } else
  if(state == 1){  
    lcd.setCursor(0, 1);                  
    lcd.print("Min temp:  ");
    lcd.print(min_t);
  } else
  if(state == 2){
    lcd.setCursor(0, 1);  
    lcd.print("Max temp:  ");
    lcd.print(max_t);
  } else
  if(state == 3){
    state = 0;
  }
}                               //End of code
```

<h2>
Körning av programmet </h2>
<p>Koppla upp och ladda ner programmet till Arduinon.</p>
<p>I första läget kommer displayen att visa aktuell temperatur samt luftfuktighet.</p>
<p>Ett tryck (>1sec) på mode-knappen (röd knapp i mitt projekt) gör att undre raden växlar till att visa lägsta uppmätta temperatur. Ett tryck till gör att displayen växlar till högsta uppmätta temperatur. Ett tryck till innebär att man kommer tillbaka till visning av luftfuktighet.</p>
<p>Om man önskar att nollställa minnet av högsta och lägsta temperatrur trycker man (>1sec) på resetknappen (grön i mitt projekt).</p>
<p>Att man behöver trycka 1 sekund beror på sensorns uppdateringstid som är satt till 1 sekund. Snabbare sensorer tillåter kortare tider.</p>

<p>**Slut på instruktion**</p>