Hőmérséklet- és páratartalomszenzor ledekkel feldobva
2018. február 12. írta: hahópihehh

Hőmérséklet- és páratartalomszenzor ledekkel feldobva

A mai nappal tuti biztos szintet léptem, ami a programozást illeti, mert 2,5 óra alatt megcsináltam a hőmérséklet- és páratartalomszenzor a ledekkel együtt. Ebben benne volt kb. egy óra guglizás árnyékra vetődés miatt, mert ugyan volt egy olyan sejtésem már legutóbb is, hogy a breadboard-on nem véletlenül van a szélső sínnél középen megszakítva a folyamatos vonal, de ma bebizonyítottam :D

Ami elindított a töprengés útján, az a DHT11-es által mutatott -999 C és -999.0 páratartalom volt, és mikor ML-t is megkértem, hogy adjon ötleteket, mondta, hogy valamiért nem érzékeli a szenzor a dolgokat, mellesleg a bekötött ledeknek is már illene világítaniuk.

Régi vicc, miszerint a hullát legbiztosabban a google második oldalán lehet elrejteni, el lehet képzelni, hogy mennyire lehettem már tanácstalan, ha már ott is jártam, mikor végre fogtam a vörösen villogó jelet az agyamban, és próbaképpen az egyik ledet átraktam arra a részre, ahol még tarthatott a föld és az 5V. Akkor világítottak, így levontam azt az elég egyértelmű következtetést, hogy át kell vezetnem a túloldalra ezt a két tényezőt, naná, hogy technikailag meg is oldódott a ledkérdés - ezt mutatja a két rövid vonal a breadboard kb. közepén.

Sajnos nem sikerült átvezetékeznem kevésbé zavarosra, mert egyszerűen nem ette meg az új portokat az LCD, úgyhogy kénytelen voltam a legutóbbi rajzot használni, a három piros színű led viszont a rajzolóprogram miatt van, nem találtam zöld és kék ledeket :(

homero.png

A hőmérőhöz megint library-t kellett letölteni, és a tegnapi (tegnapelőtti?) LCD-s kódokhoz fűztem hozzá a neten talált megfejtéseket. Kivételesen ezt az oldalt használtam, örömmel látom, hogy már ki tudok lépni az Adafruit megszokott szövegkörnyezetéből, és megértem azt is, amit máshol olvasok :)

Szóval hozzá kellett adni a dht-hez tartozó library-t (#include), aztán jön a példányosítás a dupla dht-vel, majd a pin, amire a szenzort kötöttem.

Ehhez írtam még be azt, hogy a ledeket melyik lábakon lehet találni (jelen esetben az analóg portok), igaz, ezt nem elsőre, mert már eltévedtem a fejezetek között, és simán beírtam a setup-ba...holott oda az kellett, hogy azokat a portokat írni szeretném (output).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <LiquidCrystal.h>
#include "dht.h"

const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

dht DHT;

#define DHT11_PIN 7

  int piros = A2;
  int zold = A1;
  int kek = A0;

void setup() {
  lcd.begin(16, 2);
  
  pinMode(9, OUTPUT);
  analogWrite(9, 105); 

  pinMode(piros, OUTPUT);
  pinMode(zold, OUTPUT);
  pinMode(kek, OUTPUT);
}


Röpke megjegyzés a szenzorhoz, hogy ehhez az egy típushoz is találtam úgy három bekötési verziót, de sima digitális portot használ, és a képen balról jobbra a lábak sorrendben az adat, az 5V és a föld.

img_2735_1.JPG

A loop-ban a serialport-ra már nem volt szükség, a helyére írtam egy az egyben a kódot, amit találtam, viszont a legvégén a delay-t 1000-ről 2000-re kellett emelni, mert 1000-nél nem tudta elég gyorsan olvasni az adatokat a szenzorról, és felváltva ugrált -999 és a helyes hőmérséklet között.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
void loop() {

  delay(1000);
  
  int chk = DHT.read11(DHT11_PIN);
  lcd.setCursor(0,0); 
  lcd.print("Temp: ");
  lcd.print(DHT.temperature);
  lcd.print((char)223);
  lcd.print("C");
  lcd.setCursor(0,1);    
  lcd.print("Humidity: ");
  lcd.print(DHT.humidity);
  lcd.print("%");
  delay(2000);


A legutolsó részlet pedig az volt, hogy kikeressem, hogyan tudom a ledeket a kiír hőmérséklet alapján bekapcsolni. A terv az volt, hogy ha meleg van, a piros világítson, ha hideg, akkor a kék, ha pedig az ideális hőfokot méri, akkor a zöld. Szerencsére nem én vagyok az első ember, aki ezt kigondolta, így csak át kellett variálni a számokat, és ahhoz, hogy tudja, hol keresse a hőmérsékletet, a t-t határoztam még meg. Itt is volt egy kis töprengés, mert nem jöttem rá elsőre, hogy pontosan melyik lesz az igazi, de ML kedvesen rámutatott a fára, amit már nem láttam az erdőtől :) 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
float t = DHT.temperature;

        if (t<=21){
        digitalWrite(kek, HIGH);
        digitalWrite(piros, LOW);
        digitalWrite(zold, LOW);
        }
        else if (t>21 && t<26){
        digitalWrite(zold, HIGH);
        digitalWrite(kek, LOW);
        digitalWrite(piros, LOW);
        }
        else if (t>=26){
        digitalWrite(piros, HIGH);
        digitalWrite(kek, LOW);
        digitalWrite(zold, LOW);
        } 


A végeredmény ismételten csodálatos lett, és nem azért, mert elfogult vagyok, hanem mert tényleg az :)

img_2735_1.jpg

A végleges program itt taláható.

E.

A bejegyzés trackback címe:

https://nemertekalovakhozdeazertvanegy.blog.hu/api/trackback/id/tr5813657268

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása