Kombinovaný snímač teploty a vlhkosti DHT22: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 56: | Riadok 56: | ||
- má 3 piny: | - má 3 piny: | ||
VCC - pripojený k 5V pinu mikrokontroléra | VCC - pripojený k 5V pinu mikrokontroléra | ||
GND - pripojený ku GND (Zem) pinu mikrokontroléra | GND - pripojený ku GND (Zem) pinu mikrokontroléra | ||
DATA - pripojený k D8 pinu mikrokontroléra | DATA - pripojený k D8 pinu mikrokontroléra | ||
--> Cez tento pin prichádzajú do mikrokontroléra dáta v tvare: | |||
[Vlhkosť celé číslo, Vlhkosť desatinné číslo, Teplota celé číslo, Teplota desatinné číslo, Kontrolný súčet] | [Vlhkosť celé číslo, Vlhkosť desatinné číslo, Teplota celé číslo, Teplota desatinné číslo, Kontrolný súčet] | ||
[8 bitov, 8 bitov, 8 bitov, 8 bitov, 8 bitov; 8 + 8 + 8 + 8 + 8 = 40 bitový prenos] | [8 bitov, 8 bitov, 8 bitov, 8 bitov, 8 bitov; 8 + 8 + 8 + 8 + 8 = 40 bitový prenos] | ||
Riadok 67: | Riadok 67: | ||
- má 16 pinov: | - má 16 pinov: | ||
VSS - pripojený ku GND (Zem) pinu mikrokontroléra | VSS - pripojený ku GND (Zem) pinu mikrokontroléra | ||
VDD - pripojený k 5V pinu mikrokontroléra | VDD - pripojený k 5V pinu mikrokontroléra | ||
--> Piny VSS a VDD slúžia na napájanie displeja | --> Piny VSS a VDD slúžia na napájanie displeja | ||
VO - je naň prostredníctvom potenciometra privedené napätie | VO - je naň prostredníctvom potenciometra privedené napätie | ||
--> Týmto pinom sa v závislosti od privedeného napätia nastavuje jas (kontrast) | |||
RS - je pripojený k D2 pinu mikrokontroléra | RS - je pripojený k D2 pinu mikrokontroléra | ||
--> Slúži na výber registra (Command RS=0; DATA RS=1) | |||
R/W - je pripojený k D3 pinu mikrokontroléra | R/W - je pripojený k D3 pinu mikrokontroléra | ||
--> Slúži na výber medzi čítaním alebo zápisom (READ R/W=1; WRITE R/W=0) | |||
E - je pripojený k D4 pinu mikrokontroléra | E - je pripojený k D4 pinu mikrokontroléra | ||
--> Slúži na spustenie časového signálu (Hovorí displeju kedy má čítať) (Reaguje pri dobežnej hrane) | |||
D0-D3 - sú nezapojené (pretože nepoužívam 8 bitový mód ale len 4 bitový) | D0-D3 - sú nezapojené (pretože nepoužívam 8 bitový mód ale len 4 bitový) | ||
D4-D7 - sú zapojené k pinom D9-D12 mikrokontroléru | D4-D7 - sú zapojené k pinom D9-D12 mikrokontroléru | ||
--> Slúžia na 4 bitový prenos dát | --> Slúžia na 4 bitový prenos dát | ||
A - pripojený ku GND (Zem) pinu mikrokontroléra | A - pripojený ku GND (Zem) pinu mikrokontroléra | ||
K - pripojený k 5V pinu mikrokontroléra | K - pripojený k 5V pinu mikrokontroléra | ||
--> Piny A a K slúžia na zapnutie podsvietenia displeja | |||
==== RGB LED Diódy ==== | ==== RGB LED Diódy ==== | ||
Riadok 89: | Riadok 89: | ||
- každá má 4 piny: | - každá má 4 piny: | ||
R - sú cez odpory R6 a R3 (220 Ω) pripojené k A0 (LED1) a A3 (LED2) pinom mikrokontroléra | R - sú cez odpory R6 a R3 (220 Ω) pripojené k A0 (LED1) a A3 (LED2) pinom mikrokontroléra | ||
--> Slúžia na zapínanie červenej LED diódy (privedením log. 1) | |||
G - sú cez odpory R5 a R2 (220 Ω) pripojené k A1 (LED1) a A4 (LED2) pinom mikrokontroléra | G - sú cez odpory R5 a R2 (220 Ω) pripojené k A1 (LED1) a A4 (LED2) pinom mikrokontroléra | ||
--> Slúžia na zapínanie zelenej LED diódy (privedením log. 1) | |||
B - sú cez odpory R4 a R1 (220 Ω) pripojené k A2 (LED1) a A5 (LED2) pinom mikrokontroléra | B - sú cez odpory R4 a R1 (220 Ω) pripojené k A2 (LED1) a A5 (LED2) pinom mikrokontroléra | ||
--> Slúžia na zapínanie modrej LED diódy (privedením log. 1) | |||
GND - obidva piny (LED1 aj LED2) sú pripojené ku GND (Zem) pinu mikrokontroléra | GND - obidva piny (LED1 aj LED2) sú pripojené ku GND (Zem) pinu mikrokontroléra | ||
==== Piezo ==== | ==== Piezo ==== | ||
Riadok 101: | Riadok 101: | ||
- má 2 piny: | - má 2 piny: | ||
VCC - pripojený k D13 pinu mikrokontroléra | VCC - pripojený k D13 pinu mikrokontroléra | ||
--> V závislosti od signálu vydá piezo zvuk (V mojom prípade je to vždy log. 1 a teda frekvencia pípnutia je vždy rovnaká) | |||
GND - pripojený ku GND (Zem) pinu mikrokontroléra | GND - pripojený ku GND (Zem) pinu mikrokontroléra | ||
[[Súbor:DHT22_obr4.jpg|800px|thumb|center|Obrázok 3: Schéma zapojenia vytvorená v programe EAGLE]] | [[Súbor:DHT22_obr4.jpg|800px|thumb|center|Obrázok 3: Schéma zapojenia vytvorená v programe EAGLE]] |
Verzia z 21:03, 2. máj 2025
Záverečný projekt predmetu MIPS / LS2025 - Martin Hubocký
Zadanie
Mojím zadaním bolo vytvoriť program, ktorý bude zo senzoru DHT22 (Snímač teploty a vlhkosti) čítať a spracovávať dáta a cez UART sériovú komunikáciu ich vypísať na obrazovku monitoru. V prípade že sa mi to podarí spravím rozšírenie programu aby sa dáta zobrazovali na displeji typu LCD (Liquid Crystal Display).

Analýza a opis riešenia
Postup vypracovávania projektu a opis činnosti zariadenia
Najskôr som vo vývojovom prostredí Arduino IDE overil funkčnosť snímača. V tomto prostredí sa nachádza množstvo knižníc, takže mi "spojazdnenie" snímaču trvalo pár minút. Keď som si bol istý že snímač funguje, prešiel som do prostredia AVR, kde to bez knižníc bolo trochu tažšie (trochu dosť :) ). Najskôr sa mi dlhú dobu nedarilo, potom sa mi podarilo cez UART vypísať celočíselné hodnoty, a napokon aj desatinné miesta. Na komunikáciu cez UART som samozrejme použil knižnicu, ktorú sme si vytvárali na cvičení z predmetu.
Ďalej som postupoval s pripojením displeja k mikrokontroléru podľa návodu na stránke (Tu), kde bol takisto aj link na stiahnutie knižnice lcd_ch.h (a lcd_ch.c), ktorú takisto vo svojom programe používam. Vytvoril (zadefinoval) som si dva vlastné znaky. 1. bol znak "°" (Stupeň Celzia), a 2. bol znak "ť" ktorý sa mi nepodaril práve najkrajšie (Pretože displej ktorý vo svojom projekte používam vykresľuje jeden znak pomocou políčka o rozmeroch 5x7 pixelov a nie 5x8 pixelov ako niektoré iné modely). Takisto som vypol kurzor displeju pretože mi osobne vadil. Zo začiatku som si myslel že displej nefunguje, no neskôr som si uvedomil svoju amatérsku chybu keď som zistil že som pomocou potenciometra nemal nastavený správny jas. Okrem toho som s displejom žiadny iný problém nemal.
Týmto som mal hlavnú úlohu svojho projektu splnenú, no rozhodol som sa ho ešte obohatiť o svetelnú a zvukovú signalizáciu. Do zapojenia som pridal dve RGB LED diódy (aj s rezistormi k nim) a jedno Piezo. Jedna dióda mala signalizovať stav teploty a druhá stav vlhkosti. Každá má 5 stavov:
1. Veľmi nízka hodnota - Biela farba - (1. Teplota je nižšia ako 28 °C), (2. Vlhkosť je nižšia ako 50 %)
2. Nízka hodnota - Modrá farba - (1. Teplota je v rozmedzí 28 - 32 °C), (2. Vlhkosť je v rozmedzí 50 - 60 %)
3. Stredná hodnota - Zelená farba - (1. Teplota je v rozmedzí 32 - 36 °C), (2. Vlhkosť je v rozmedzí 60 - 70 %)
4. Vysoká hodnota - Červená farba - (1. Teplota je v rozmedzí 36 - 40 °C), (2. Vlhkosť je v rozmedzí 70 - 80 %)
5. Veľmi vysoká hodnota - Fialová farba - (1. Teplota je vyššia ako 40 °C), (2. Vlhkosť je vyššia ako 80 %)
Úlohou pieza je signalizovať zmenu týchto 5 stavov (pípaním). Keďže piezo je len jedno, signalizuje zmenu stavu aj pre teplotu aj pre vlhkosť, no rozdiel je v tom že pri zmene stavu teploty spraví "krátke pípnutie" a pri zmene vlhkosti "dlhé pípnutie". Piezo rozlišuje aj to, či sa stav zmenil smerom nahor alebo nadol (teda napríklad či sa teplota zvýšila alebo znížila), a to tak, že pri zmene stavu nahor (inkrementácii), pípne dva krát a pri zmene stavu nadol (dekrementácii), pípne len raz. Teda ak sa napríklad zvýši stav vlhkosti, piezo spraví dve dlhé pípnutia, ak sa napríklad zníži stav teploty piezo spraví jedno krátke pípnutie a pod. Ak sa stane že teplota alebo vlhkosť dosiahne posledný 5. stav (najvyšší), piezo bude pípať "stále" (v skutočnosti bude pípať 5x v každej main() slučke programu). V tomto prípade som nepredpokladal že by som pri mojom "amatérskom testovaní" mohol vytvoriť také podmienky, že by mohlo dôjsť k 5. stavu teploty aj vlhkosti súčasne keďže zo zvyšujúcou sa teplotou vlhkosť klesá a zas naopak.
Poslednou vecou ktorú som spravil bolo, že som si zo starej stavebnice poskladal držiak na ktorý som umiestnil snímač aby som si uľahčil testovaciu (overovaciu) časť tohto projektu.

Schéma zapojenia a jej popis
Mikrokontrolér Arduino UNO R3
- je to mikorkontrolér
- MASTER (riadiaci orgán celého zariadenia)
- sú k nemu pripojené všetky ostatné zariadenia a súčiastky použité v projekte
- je napájaný priamo z notebooku pomocou USB kábla (a zároveň je ním aj programovaný)
Snímač teploty a vlhkosti DHT22
- má 3 piny:
VCC - pripojený k 5V pinu mikrokontroléra GND - pripojený ku GND (Zem) pinu mikrokontroléra DATA - pripojený k D8 pinu mikrokontroléra --> Cez tento pin prichádzajú do mikrokontroléra dáta v tvare: [Vlhkosť celé číslo, Vlhkosť desatinné číslo, Teplota celé číslo, Teplota desatinné číslo, Kontrolný súčet] [8 bitov, 8 bitov, 8 bitov, 8 bitov, 8 bitov; 8 + 8 + 8 + 8 + 8 = 40 bitový prenos]
Liquid Crystal Display typu DEM16216
- má 16 pinov:
VSS - pripojený ku GND (Zem) pinu mikrokontroléra VDD - pripojený k 5V pinu mikrokontroléra --> Piny VSS a VDD slúžia na napájanie displeja VO - je naň prostredníctvom potenciometra privedené napätie --> Týmto pinom sa v závislosti od privedeného napätia nastavuje jas (kontrast) RS - je pripojený k D2 pinu mikrokontroléra --> Slúži na výber registra (Command RS=0; DATA RS=1) R/W - je pripojený k D3 pinu mikrokontroléra --> Slúži na výber medzi čítaním alebo zápisom (READ R/W=1; WRITE R/W=0) E - je pripojený k D4 pinu mikrokontroléra --> Slúži na spustenie časového signálu (Hovorí displeju kedy má čítať) (Reaguje pri dobežnej hrane) D0-D3 - sú nezapojené (pretože nepoužívam 8 bitový mód ale len 4 bitový) D4-D7 - sú zapojené k pinom D9-D12 mikrokontroléru --> Slúžia na 4 bitový prenos dát A - pripojený ku GND (Zem) pinu mikrokontroléra K - pripojený k 5V pinu mikrokontroléra --> Piny A a K slúžia na zapnutie podsvietenia displeja
RGB LED Diódy
- každá má 4 piny:
R - sú cez odpory R6 a R3 (220 Ω) pripojené k A0 (LED1) a A3 (LED2) pinom mikrokontroléra --> Slúžia na zapínanie červenej LED diódy (privedením log. 1) G - sú cez odpory R5 a R2 (220 Ω) pripojené k A1 (LED1) a A4 (LED2) pinom mikrokontroléra --> Slúžia na zapínanie zelenej LED diódy (privedením log. 1) B - sú cez odpory R4 a R1 (220 Ω) pripojené k A2 (LED1) a A5 (LED2) pinom mikrokontroléra --> Slúžia na zapínanie modrej LED diódy (privedením log. 1) GND - obidva piny (LED1 aj LED2) sú pripojené ku GND (Zem) pinu mikrokontroléra
Piezo
- má 2 piny:
VCC - pripojený k D13 pinu mikrokontroléra --> V závislosti od signálu vydá piezo zvuk (V mojom prípade je to vždy log. 1 a teda frekvencia pípnutia je vždy rovnaká) GND - pripojený ku GND (Zem) pinu mikrokontroléra

Algoritmus a program
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
Kompletný projekt nájdete tu:
Zdrojový kód: ProjektMartinHubocky.zip
Overenie funkčnosti zariadenia
Funkčnosť zariadenia som overil veľmi jednoducho a to tak že som menil teplotu a vlhkosť v okolí snímača a sledoval či sa zariadenie správa tak ako som chcel. Vlhkosť som menil tak že som na snímač dýchal ústami čím sa mi podarilo zvýšiť vlhkosť niekedy až na 90%. Účinok je takmer instantný a rovnako tak je aj pokles naspäť veľmi rýchly. No a ako som menil teplotu? (.....) Bohužiaľ ma nenapadlo nič "inteligentnejšie" ako ohrievať snímač zospodu zapaľovačom. Bolo to pomerne rýchle, no ale samozrejme som svoju "šikovnosť" nezaprel a raz sa mi podarilo snímač "opáliť". Našťastie stále funguje...
Na obrázku číslo 5 môžete vidieť funkčnosť UART-u a nižšie je video kde môžete vidieť priebeh testovania zariadenia. Rád by som podotkol že na videu sú farby RGB LED diód veľmi skreslené a ťažko ich od seba odlíšiť (niekedy sa zdá že sa farby ani nezmenili), za čo sa ospravedlňujem.


Video:
Literatúra a použité zdroje
Dokumentácia k mikrokontroléru:
- Mikrokontrolér Arduino UNO R3 - PINOUT
- Mikrokontrolér Arduino UNO R3 - DATASHEET
- Mikrokontrolér Arduino UNO R3 - SCHEMATICS
- Dokumentácia k procesoru ATmega328P
Dokumentácia k snímaču DHT22:
Dokumentácia k LCD displeju: