Nesse projeto aprenderemos sobre um novo componente: o sensor de temperatura e umidade DHT11. Esse componente possui uma propriedade termométrica, ou seja, quando há uma pequena variação da temperatura, também há uma pequena alteração na quantidade de eletricidade. Depois que você aprender a utilizar esse sensor, vai poder medir a temperatura do local que desejar. Não recomendamos por esse circuito em lugares muito úmidos, já que pode danificar algum dos componentes.
A medição de temperatura e umidade são parâmetros muito utilizados na nossa sociedade. Com certeza, você conhece alguém que só sai de casa após saber a temperatura do dia. Da mesma forma, a medição de umidade é importante para quem tem problemas respiratórios, já que um clima mais seco torna a respiração mais difícil para esse público. Com o Arduino, você pode medir a temperatura dentro do seu robô e ver se ele não está superaquecendo e, assim, evitar um desastre.
Para usar esse sensor com o Arduino, temos que entender como funciona a pinagem desse componente, ou seja, qual é a função de cada pino. Para isso, nós pegamos as informações do datasheet, ou seja, do manual de instruções desse componente e colocamos na imagem ao lado. No entanto, quando você for utilizar um componente que não está presente neste curso ou que seja recém fabricado, sempre olhe o datasheet do componente e observe as especificações técnicas e a pinagem. Para encontrar o datasheet de qualquer componente, basta escrever o código escrito no componente e “datasheet” no google.
Como fizemos nas ultimas aulas, o pino 1 tem que ser ligado na tensão de 5 V e o pino 4 deve ser conectado no pino GND, conforme especificado pelo fabricante. A novidade aqui está no incremento do pino “Dados”. Esse pino é quem transmitir as informações do sensor para o Arduino. Como a temperatura é um valor que varia no tempo, nós temos que liga-lo na portas analógicas do Arduino. As portas analógicas são aquelas em que possuem um “A” na frente do número. O pino “N.C.” não é utilizado nas ligações com o Arduino.
Além dessa mudança nas ligações, a programação também será diferenciada. Teremos que adicionar a biblioteca especifica para esse sensor. Em computação, bibliotecas são utilizadas quando o microcontrolador, o Arduino ou qualquer outro microcontrolador, não possui recursos para entender a linguagem usada no componente externo. Assim, como o Arduino não entende, sozinho, as configurações internas do DHT11, temos que colocar um biblioteca especifica desse sensor. Depois disso, o Arduino consegue se comunicar o sensor sem problemas.
Mesmo com a introdução de novas bibliotecas, temos que achar uma maneira de mostrar o resultado para o usuário. Até agora, nós conhecemos apenas duas formas de fazer o Arduino se comunicar com o usuário: LEDs e display de sete segmentos. Mas essas duas ferramentas não são boas nesse caso. Então, vamos usar o monitor Serial do próprio Arduino. Para isso, clique na lupa no canto superior direito da sua tela. Lembre-se que o Arduino deve estar conectado com o computador par que isso o monitor abra.
Vamos ver as características do sensor:
Modelo: DHT11
Faixa de medição de umidade: 20 a 90% UR
– Faixa de medição de temperatura: 0 ºC a 50 ºC
– Alimentação: 3-5 V
– Corrente: 200 uA a 500 mA
– Precisão de umidade de medição: ± 5,0%
– Precisão de medição de temperatura: ± 2.0 ºC
– Tempo de resposta: 2 segundos
– Dimensões: 23 x 12 x 5 mm (incluindo terminais)
Você vai precisar de:
- Protoboard
- Arduino
- 3 LEDs: Vermelho, Amarelo e Azul
- Sensor de temperatura e umidade DHT11
Simulação
Esse componente não está disponível no tinkercad ou no Fritzing. Por isso, não se preocupe em reproduzir essa simulação. Abaixo, temos como deve ser feita a ligação do DHT11 na protoboard.
Antes de começar a programar esse sensor, precisamos instalar a biblioteca dele. Para isso, abra o Arduino IDE e clique na aba “Sketch”. Então, passe para “include library” e, então , clique em “manage libraries”. Se quiser, pode-se usar o atalho de teclado Ctrl + Shift + i.
Agora, escreva o código do sensor no espaço de busca. Perceba que existem varias pessoas que escreveram códigos de comunicação do Arduino com o DHT11. Aqui, nós vamos utilizar o código do Winlin. Então, clique em “Install”.
Ao usar uma biblioteca diferente das previamente instaladas no Arduino, é recomendável procurar quais são as funções que ela suporta , isto é, o que é possível de ser feito com ela. A forma mais fácil de descobrir essas funções é buscando, nos exemplos, do Arduino IDE. Neste curso, vamos mostrar como utilizar os sensores mais comuns. No entanto, quando for usar um sensor novo, faça os exemplos, é a forma mais fácil de entender quais são as funções mais importante e como utilizá-las. Na imagem abaixo, mostramos o caminho para achar os exemplos da biblioteca “SimpleDHT”.
Para utilizar uma biblioteca que não está embutida no Arduino, deve-se incluí-la antes do “void setup()” como na linha 1 do código abaixo. A inclusão dessa biblioteca vai mostrar para o Arduino qual é a linguagem que o sensor entende e, assim, possibilita a comunicação entre o Arduino e o sensor. Sempre que colocamos um novo sensor no circuito, temos que, na programação, adicionar a biblioteca desse sensor. Na linha 5, usamos a linguagem do sensor para configurar onde o DHT11 está ligado. No “void setup()”, temos que definir a taxa de transferência de dados entre o programa e o Monitor Serial. Os valores possíveis para essa transmissão estão exibidos dentro do monitor Serial. Para acessar o monitor clique Ctlr+M ou no símbolo indicado pelo círculo vermelho da imagem abaixo. Nesta aula, não temos que colocar um valor especifico, ou seja, não faz diferença qual valor do monitor você escolher, desde que o “Serial.begin()” na linha 8 da programação seja o mesmo.
Para escrever nesse Monitor do Arduino, usamos duas funções. O “Serial.print()” escreve o que estiver dentro dos parênteses quando estiver entre aspas. O “Serial.println()” faz a mesma coisa e pula para a linha abaixo. Agora, vamos analisar o que ocorrendo dentro do “void loop()”:
- Linha 13 e 14: Escrevemos no Monitor e pulamos uma linha.
- Linha 16 e 17: declaramos duas variáveis do tipo “byte” para armazenar os valores de temperatura e umidade.
NOTA: A biblioteca no “SimpleDHT” determina que a leitura dos valores de temperatura e umidade seja feita em uma variável do tipo “byte”. Por isso, temos que declarar a variável desse tipo e depois, para imprimir na tela, temos que transformá-la em “int”, ou seja, em inteiro. Essa transformação foi feita nas linhas 27 e 28.
- Linha 18: Declaramos uma variável do tipo “int”e guardamos nela a leitura dos dados.
- Linha 20: Usamos a condição “if” para avaliar se a leitura foi feita com sucesso.
NOTA: A biblioteca fornece a função “SimpleDHTErrSuccess” que avalia se a leitura foi feita de forma correta.
- Linha 21: Imprime uma mensagem de erro no Monitor se houver erro na leitura dos dados.
- Linha 26, 27 e 28: Imprime os valores de temperatura e umidade na tela.
NOTA: Perceba que para imprimir o valor dentro de uma variável, não coloca-se as aspas.
#include <SimpleDHT.h> int pino_DHT11 = 2; // Define o pino conectado no terminal Dados do DHT11 SimpleDHT11 dht11(pino_DHT11); void setup() { Serial.begin(115200);// Define a taxa de transferência de dados para o monitor Serial } void loop() { Serial.println("================================="); Serial.println("Amostra DHT11..."); byte temperatura = 0; byte umidade = 0; int leitura = dht11.read(&temperatura, &umidade, NULL); if (leitura != SimpleDHTErrSuccess) { Serial.print("Falha na leitura do DHT11, leitura="); Serial.println(leitura); delay(1000); return; } Serial.print("Amostra OK: "); Serial.print((int)temperatura); Serial.print(" *C, "); Serial.print((int)umidade); Serial.println(" H"); delay(1500); }
DICA: É comum usar o monitor serial para fazer um debug do código, isto é, imprimir, por exemplo, variáveis no monitor, para descobrir se os valores são coerentes com o previsto.
1) Montagem Prática
- Esses são os componentes necessários para montar o circuito.
- Alimente a protoboard com 5 V e o Terra. Conecte um jumper vermelho no pino de 5 V do Arduino e na protoboard. Depois, ligue um jumper preto no pino GND do Arduino e na protoboard.
- Coloque o DHT11 conforme indicado na figura e, com outros jumpers, faça as conexões de alimentação, ou seja, conecte um lado do jumper vermelho na trilha do terminal Vcc do DHT11 e o outro lado na trilha 5 V da protoboard. Analogamente, conecte um lado do jumper preto no terminal GND do DHT11 e o outro lado do jumper na trilha GND da protoboard.
- Por fim, conecte mais um jumper no pino 2 do Arduino e na trilha do terminal de dados do DHT11.