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.

Imagens reais de uma pessoa no inverno de Cuiabá

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

  1. Esses são os componentes necessários para montar o circuito.
  2. 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.
  3. 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.
  4. Por fim, conecte mais um jumper no pino 2 do Arduino e na trilha do terminal de dados do DHT11.