Temperatura e umidade são os parâmetros mais comuns monitorados em qualquer ambiente. Existem muitos sensores para escolher para medir temperatura e umidade, mas o mais usado é o DHT11 devido à sua faixa de medição decente e precisão.
Ele também funciona com comunicação de um pino e, portanto, é muito fácil de fazer interface com microcontroladores ou microprocessadores. Neste tutorial, vamos aprender como fazer a interface do popular sensor DHT11 com Raspberry Pi e exibir o valor de temperatura e umidade em uma tela LCD 16x2.
Já o usamos para construir a estação meteorológica IoT Raspberry Pi.
O sensor DHT11 pode medir umidade relativa e temperatura com as seguintes especificações
Temperature Range: 0-50°C
Temperature Accuracy: ±2 °C
Humidity Range: 20-90% RH
Humidity Accuracy: ±5 %
O sensor DHT11 está disponível em forma de módulo ou em forma de sensor. Neste tutorial, estamos usando a forma de módulo do sensor, a única diferença entre os dois é que na forma de módulo o sensor tem um capacitor de filtragem e um resistor pull up conectado ao pino de saída do sensor.
Portanto, se você estiver usando o sensor sozinho, certifique-se de adicionar esses dois componentes. Aprenda também a interface do DHT11 com o Arduino.
O sensor DHT11 vem com um invólucro de cor azul ou branco. Dentro desta caixa, temos dois componentes importantes que nos ajudam a sentir a umidade relativa e a temperatura. O primeiro componente é um par de eletrodos; a resistência elétrica entre esses dois eletrodos é decidida por um substrato de retenção de umidade.
Portanto, a resistência medida é inversamente proporcional à umidade relativa do ambiente. Quanto maior a umidade relativa menor será o valor da resistência e vice-versa. Observe também que a umidade relativa é diferente da umidade real. A umidade relativa mede o conteúdo de água no ar em relação à temperatura do ar.
O outro componente é um termistor NTC montado em superfície. O termo NTC significa coeficiente de temperatura negativo, para aumento na temperatura o valor da resistência diminuirá
Presume-se que o seu Raspberry Pi já tenha um sistema operacional atualizado e seja capaz de se conectar à Internet. Caso contrário, siga o tutorial Introdução ao Raspberry Pi antes de continuar.
Também presume-se que você tenha acesso ao seu pi por meio de janelas de terminal ou por meio de outro aplicativo por meio do qual você pode escrever e executar programas em Python e usar a janela de terminal.
O valor da temperatura e umidade será exibido em um display LCD 16 * 2. Adafruit nos fornece uma biblioteca para operar facilmente este LCD no modo de 4 bits, então vamos adicioná-lo ao nosso Raspberry Pi abrindo a janela do terminal Pi e seguindo as etapas abaixo.
Etapa 1: instale o git em seu Raspberry Pi usando a linha abaixo. O Git permite clonar qualquer arquivo de projeto no Github e usá-lo no seu Raspberry pi. Nossa biblioteca está no Github, então temos que instalar o git para baixar essa biblioteca no pi.
apt-get install git
Etapa 2: a linha a seguir leva à página do GitHub onde a biblioteca está presente, basta executar a linha para clonar o arquivo do projeto no diretório inicial do Pi
git clone git://github.com/adafruit/Adafruit_Python_CharLCD
Passo 3: Use o comando abaixo para mudar a linha de diretório, para entrar no arquivo de projeto que acabamos de baixar. A linha de comando é fornecida abaixo
cd Adafruit_Python_CharLCD
Passo 4: Dentro do diretório terá um arquivo chamado setup.py, temos que instalá-lo, para instalar a biblioteca. Use o seguinte código para instalar a biblioteca
sudo python setup.py install
É isso que a biblioteca deveria ter sido instalada com sucesso. Agora, da mesma forma, vamos prosseguir com a instalação da biblioteca DHT, que também é da Adafruit.
O sensor DHT11 funciona com o princípio do sistema de um fio. O valor de temperatura e umidade é detectado pelo sensor e, em seguida, transmitido através do pino de saída como dados seriais. Podemos então ler esses dados usando o pino de E / S em um MCU / MPU.
Para entender como esses valores são lidos, você teria que ler a ficha técnica do sensor DHT11, mas por enquanto, para simplificar, usaremos uma biblioteca para conversar com o sensor DHT11.
A biblioteca DHT11 fornecida pela Adafruit pode ser usada para DHT11, DHT22 e outros sensores de temperatura de um fio também. O procedimento para instalar a biblioteca DHT11 também é semelhante ao seguido para instalar a biblioteca LCD.
A única linha que mudaria é o link da página GitHub na qual a biblioteca DHT é salva.
Insira as quatro linhas de comando uma por uma no terminal para instalar a biblioteca DHT
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo apt-get install build-essential python-dev
sudo python setup.py install
Assim que terminar, você terá ambas as bibliotecas instaladas com êxito em nosso Raspberry Pi. Agora podemos prosseguir com a conexão do hardware.
O diagrama de circuito completo Interfaceando DH11 com Raspberry pi é dado abaixo, ele foi construído usando Fritzing. Siga as conexões e faça o circuito
Ambos os sensores LCD e DHT11 funcionam com alimentação de + 5V, então usamos os pinos de 5V no Raspberry Pi para alimentar ambos. Um resistor pull up de valor 1k é usado no pino de saída do sensor DHT11, se você estiver usando um módulo, pode evitar esse resistor.
Um potenciômetro de corte de 10k é adicionado ao pino V do LCD para controlar o nível de contraste do LCD. Fora isso, todas as conexões são bastante diretas. Mas anote quais pinos GPIO você está usando para conectar os pinos, pois nós iremos precisar em nosso programa. O gráfico abaixo deve permitir que você descubra os números dos pinos GPIO.
Use o gráfico e faça suas conexões de acordo com o diagrama de circuito. Usei uma placa de ensaio e fios de jumper para fazer minhas conexões. Como usei o módulo DHT11, conectei-o diretamente ao Raspberry Pi. Meu hardware era assim abaixo
Temos que escrever um programa para ler o valor de temperatura e umidade do sensor DHT11 e depois exibir o mesmo no LCD. Uma vez que baixamos bibliotecas para os sensores LCD e DHT11, o código deve ser bastante simples.
O programa completo do python pode ser encontrado no final desta página, mas você pode ler mais para entender como o programa funciona.
Temos que importar a biblioteca LCD e a biblioteca DHT11 em nosso programa para usar as funções relacionadas a ela. Como já os baixamos e instalamos em nosso Pi, podemos simplesmente usar as seguintes linhas para importá-los. Também importamos a biblioteca de tempo para usar a função de atraso.
import time #import time for creating delay
import Adafruit_CharLCD as LCD #Import LCD library
import Adafruit_DHT #Import DHT Library for sensor
A seguir, temos que especificar a quais pinos o sensor está conectado e que tipo de sensor de temperatura é usado. A variável sensor_name é atribuída a Adafruit_DHT.DHT11, pois estamos usando o sensor DHT11 aqui. O pino de saída do sensor é conectado ao GPIO 17 do Raspberry Pi e, portanto, atribuímos 17 à variável sensor_pin como mostrado abaixo.
sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor
sensor_pin = 17 #The sensor is connected to GPIO17 on Pi
Da mesma forma, também temos que definir a quais pinos GPIO o LCD está conectado. Aqui, estamos usando o LCD no modo de 4 bits, portanto, teremos quatro pinos de dados e dois pinos de controle para conectar aos pinos GPIO do pi. Além disso, você pode conectar o pino da luz de fundo a um pino GPIO se quisermos controlar a luz de fundo também. Mas, por enquanto, não estou usando isso, então atribuí 0 a ele.
lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI
lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI
lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI
lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI
lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI
lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI
lcd_backlight = 0 #LED is not connected so we assign to 0
Você também pode conectar o LCD no modo de 8 bits com Raspberry pi, mas os pinos livres serão reduzidos.
A biblioteca LCD da Adafruit que baixamos pode ser usada para todos os tipos de monitores LCD característicos. Aqui em nosso projeto, estamos usando um display LCD de 16 * 2, portanto, estamos mencionando o número de linhas e colunas para uma variável, conforme mostrado abaixo.
lcd_columns = 16 #for 16*2 LCD
lcd_rows = 2 #for 16*2 LCD
Agora que declaramos os pinos do LCD e o número de linhas e colunas do LCD, podemos inicializar o display LCD usando a linha a seguir, que envia todas as informações necessárias para a biblioteca.
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library
Para iniciar o programa, exibimos uma pequena mensagem de introdução usando a função lcd.message () e damos um atraso de 2 segundos para tornar a mensagem legível. Para imprimir na 2ª linha, o comando \ n pode ser usado conforme mostrado abaixo
lcd.message('DHT11 with Pi \n -CircuitDigest') #Give a intro message
time.sleep(2) #wait for 2 secs
Finalmente, dentro de nosso loop while devemos ler o valor de temperatura e umidade do sensor e exibi-lo na tela LCD a cada 2 segundos. O programa completo dentro do loop while é mostrado abaixo
while 1: #Infinite Loop
umidade, temperatura = Adafruit_DHT.read_retry (sensor_name, sensor_pin) # leia do sensor e salve os respectivos valores em temperatura e umidade varibale
lcd.clear() #Clear the LCD screen
lcd.message ('Temp = %.1f C' % temperature) # Display the value of temperature
lcd.message ('\nHum = %.1f %%' % humidity) #Display the value of Humidity
time.sleep(2) #Wait for 2 sec then update the values
Podemos facilmente obter o valor de temperatura e umidade do sensor usando esta linha única abaixo. Como você pode ver, ele retorna dois valores que são armazenados nas variáveis umidade e temperatura. Os detalhes sensor_name e sensor_pin são passados como parâmetros; esses valores foram atualizados no início do programa
umidade, temperatura = Adafruit_DHT.read_retry (sensor_name, sensor_pin)
Para exibir um nome de variável na tela LCD, podemos usar os identificadores como & d,% c etc. Aqui, como estamos exibindo um número de ponto flutuante com apenas um dígito após o ponto decimal, usamos o identificador% .1f para exibir o valor em a temperatura e umidade variáveis
lcd.message ('Temp = %.1f C' % temperature)
lcd.message ('\nHum = %.1f %%' % humidity)
Faça as conexões de acordo com o diagrama de circuito e instale as bibliotecas necessárias. Em seguida, execute o programa python fornecido no final desta página. Seu LCD deve exibir uma mensagem de introdução e, em seguida, exibir o valor atual de temperatura e umidade, conforme mostrado na imagem abaixo.
Se você não encontrar nada sendo exibido no LCD, verifique se a janela do shell python está exibindo algum erro, se nenhum erro for exibido, verifique suas conexões mais uma vez e ajuste o potenciômetro para variar o nível de contraste do LCD e verifique se há algo ligado a tela.
Espero que você tenha entendido o projeto e gostado de construí-lo. Se você encontrou algum problema para fazer isso, informe na seção de comentários ou use o fórum para obter ajuda técnica. Vou tentar o meu melhor para responder a todos os comentários.
Você também pode verificar nossos outros projetos usando DHT11 com outro microcontrolador.
#Program to read the values of Temp and Hum from the DHT11 sensor and display them on the LCD
#Website: www.circuitdigest.com
import time #import time for creating delay
import Adafruit_CharLCD as LCD #Import LCD library
import Adafruit_DHT #Import DHT Library for sensor
sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor
sensor_pin = 17 #The sensor is connected to GPIO17 on Pi
lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI
lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI
lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI
lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI
lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI
lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI
lcd_backlight = 0 #LED is not connected so we assign to 0
lcd_columns = 16 #for 16*2 LCD
lcd_rows = 2 #for 16*2 LCD
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library
lcd.message('DHT11 with Pi \n -CircuitDigest') #Give a intro message
time.sleep(2) #wait for 2 secs
while 1: #Infinite Loop
humidity, temperature = Adafruit_DHT.read_retry(sensor_name, sensor_pin) #read from sensor and save respective values in temperature and humidity varibale
lcd.clear() #Clear the LCD screen
lcd.message ('Temp = %.1f C' % temperature) # Display the value of temperature
lcd.message ('\nHum = %.1f %%' % humidity) #Display the value of Humidity
time.sleep(2) #Wait for 2 sec then update the values