<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>

<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>

<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>

<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>