Breakout Compacto DHT de Temperatura e Umidade para Raspberry Pi – ATtiny85 & DHT22/DHT11
História
Introdução
Os sensores DHT11 e DHT22 são populares para medição de temperatura e umidade devido à sua precisão a custo muito baixo. Um problema com eles, porém, é que operam sobre um protocolo one-wire proprietário que exige temporização precisa. Esses sensores têm se mostrado difíceis de ler em placas com sistemas operacionais não-tempo-real.
Há algum tempo, publiquei um artigo intitulado "Sensor de Temperatura DHT11/DHT22" demonstrando como usar o código de exemplo C++ da Microsoft a partir de C# para ler esses sensores. A biblioteca conseguia obter uma leitura, mas precisei adicionar lógica de retentativa para torná-la mais confiável. Isso funcionou para a maioria, mas algumas pessoas tiveram problemas para obter funcionamento consistente.
Dado o nível de interesse em usar esses sensores no Raspberry Pi rodando Windows 10 IoT Core, decidi criar uma segunda opção que fornece um método muito confiável de leitura desses sensores mantendo baixo custo.
Visão Geral
A abordagem apresentada aqui é acoplar o sensor DHT a um ATtiny85 barato e configurá-lo como dispositivo escravo I2C. Isso é feito usando a biblioteca TinyWireS e criando um conjunto de registradores que podem ser lidos e escritos para interagir com o dispositivo.
O dispositivo suporta as seguintes funções:
- Intervalo de leitura configurável para especificar com que frequência ler o sensor DHT. O padrão é ler a cada 2 segundos.
- Modo manual que desabilita o intervalo e faz uma leitura sob demanda.
- Limiares superior e inferior de temperatura configuráveis que acionam o pino de interrupção quando a leitura atual está acima ou abaixo do limiar.
- Modo de salvamento de configuração que permite restaurar configurações na inicialização ou após reset.
- Reset de configuração permitindo restaurar valores padrão.
- Controle de energia do sensor que permite habilitar/desabilitar a alimentação do sensor para economizar energia.
- Endereço I2C programável. O endereço padrão é 0x26, mas pode ser alterado via comando. O dispositivo lembra o endereço. Se resetado, retorna a 0x26. A biblioteca C# também inclui código para buscar o dispositivo no barramento I2C, então você não precisa saber o endereço para conectar.
- Seleção de modelo DHT programável. O firmware padrão é DHT22, mas pode ser alterado enviando comando para usar modelo diferente. O modelo é salvo para que após reboot ou ciclo de energia retenha o tipo de modelo a usar.
O Código-Fonte
Existem três conjuntos de código neste projeto. O firmware principal para a placa, um sketch mestre Arduino usado para testar e demonstrar a placa conectada a um Arduino Uno e a aplicação Windows 10 IoT que demonstra como usar o dispositivo a partir do Raspberry Pi. Todo o código está disponível no repositório GitHub vinculado.
O Circuito/Dispositivo
O circuito é pequeno e usa apenas alguns componentes baratos. O ATtiny85 pode ser comprado de vários fornecedores. Recomendo adquirir alguns, pois têm muitos propósitos úteis.
O circuito tem um header de seis pinos que permite conexão a outro circuito ou diretamente ao Raspberry Pi. Os pinos são definidos como segue:
- GND → Conecte ao ground do seu circuito ou ao pino ground do Raspberry Pi.
- RST → Este pino é usado para resetar ou reiniciar o dispositivo. Deve ser conectado a 5V em operação normal. Para resetar, dispare um pulso LOW momentâneo neste pino.
- INT → Este pino tem dois propósitos. Quando limiares estão habilitados, ficará HIGH sempre que um limiar for excedido e LOW caso contrário. No modo economia de energia, usado para acordar o dispositivo com pulso HIGH momentâneo.
- SDA → Linha I2C SDA.
- SCL → Linha I2C SCL.
- 5V → Alimentação 5V.
Há também um header de dois pinos onde um jumper pode ser adicionado para habilitar, ou removido para desabilitar o LED onboard.
Ao utilizar em projeto maior, o circuito do DHT Tiny pode ser mesclado ou embutido no circuito existente do projeto. Neste caso, os pinos do header e LED são opcionais.
O circuito também pode ser construído em placa separada e conectado ao Raspberry Pi com alguns fios ou cabo conector.
Programando o ATtiny85
Carregue o sketch DHT_Tiny_Breakout.ino no ATtiny85 usando seu programador AVR. Se não tiver programador, pode usar um Arduino Uno (ou similar). Consulte um ou mais dos artigos abaixo para ajuda.
- Programming ATtiny85 with Arduino Uno no Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
Uso o SparkFun Tiny AVR Programmer para carregar meu ATtiny85.
Estou rodando meu chip a 16 MHz. Veja meu artigo "ATtiny @ 16MHz" para instruções de como fazer isso.
Ao usar o ATtiny85, o sketch escravo requer a biblioteca TinyWireS instalada na pasta de bibliotecas. Esta biblioteca pode ser baixada de https://github.com/rambo/TinyWire.
Montando o Circuito no Protoboard
O primeiro passo é colocar o DHT Tiny para funcionar no protoboard. Usando um protoboard meia-tamanho, construa o circuito seguindo o esquemático e diagramas de protoboard incluídos no projeto.
Algumas dicas para facilitar:
- Construa o DHT Tiny em seu próprio protoboard e use outro para a conexão entre o DHT Tiny e o Uno ou Raspberry Pi.
- Usar pinos header é recomendado porque facilita conectar/desconectar o DHT Tiny como unidade única.
- Se planeja usar headers macho padrão no protoboard, precisará ajustar a borda plástica preta ao centro dos pinos para que caibam no protoboard (veja imagens). Use alicate de bico para ajustar.
- Se tiver headers macho extra-longos 0.1", use estes no protoboard. Use headers de tamanho normal se planeja soldar componentes em PCI. Os extra-longos não são recomendados para PCIs.
- Você precisará de jumpers fêmea-fêmea se usar pinos header no protoboard. Se não tiver, omita os headers e use jumpers macho-macho entre as duas placas.
- Mantenha os fios afastados do chip o máximo possível para facilitar colocar os dedos e remover o chip para programação.
Abaixo estão algumas imagens da versão protoboard do meu DHT Tiny.
Conectando o Arduino Uno
Se você quer teste rápido, demonstração, ou está com dificuldade para fazer funcionar com seu Raspberry Pi, pode conectar o DHT Tiny a um Arduino Uno (ou similar).
- Conecte GND ao GND no Uno.
- Conecte 5V ao 5V no Uno.
- Conecte RST ao D4 no Uno.
- Conecte SDA ao A4 no Uno.
- Conecte SCL ao A5 no Uno.
- Conecte INT ao D3 no Uno e habilite o LED via jumper.
Carregue e execute o sketch DHT_Tiny_Master.ino. Este sketch exibirá saída no Serial Monitor.
Ao conectar I2C entre as duas placas, é importante ter resistores pull-up nas linhas SDA e SCL. Neste circuito, há dois resistores de 4,7 kΩ conectados entre os pinos e 5V.
Abaixo estão algumas imagens do DHT Tiny no protoboard conectado ao Arduino Uno.
Conectando ao Raspberry Pi
Se você quer teste rápido, demonstração, ou está com dificuldade para fazer funcionar com seu Raspberry Pi, pode conectar o DHT Tiny a um Arduino Uno (ou similar).
- Conecte GND ao GND (pino 9) no Raspberry Pi 2/3.
- Conecte 5V ao 5V (pino 2) no Raspberry Pi 2/3.
- Conecte RST ao GPIO4 (pino 7) no Raspberry Pi 2/3.
- Conecte SDA ao SDA (pino 3) no Raspberry Pi 2/3.
- Conecte SCL ao SCL (pino 5) no Raspberry Pi 2/3.
- Conecte INT ao GPIO17 (pino 11) e habilite o LED.
Ao conectar I2C entre as duas placas, é importante ter resistores pull-up nas linhas SDA e SCL. Neste circuito, há dois resistores de 4,7 kΩ conectados entre os pinos e 3V3.
MUITO IMPORTANTE! A placa DHT Tiny será alimentada pelo pino 5V do Raspberry Pi, mas os resistores pull-up devem ser conectados ao pino 3V3 do Raspberry Pi (3V3 está nos pinos 1 e 17).
Abaixo estão algumas imagens do DHT Tiny no protoboard conectado ao Raspberry Pi 3.
Executando a Aplicação Windows 10
Obtenha o código do link do repositório GitHub no final do projeto e descompacte no seu computador. Abra o código fonte da Universal Application no Visual Studio 2015 e faça deploy para o Raspberry Pi e inicie pelo console de admin ou execute em modo debug pelo Visual Studio.
Se esta é a primeira vez que você roda código do Visual Studio para aplicação Windows 10 IoT Core, veja estes artigos da Microsoft:
- Deploying an App with Visual Studio
- Windows Device Portal
Veja a demonstração em vídeo abaixo para ver a aplicação rodando em um Raspberry Pi 3 conectado ao DHT Tiny.
Destaques da Aplicação
A aplicação UWP Windows 10 é uma aplicação de demonstração que mostra todos os recursos do DHT Tiny. O código exibe temperatura atual, umidade e outros valores de registradores do dispositivo. A UI também permite alterar a configuração do dispositivo incluindo o endereço do dispositivo.
Biblioteca DHT Tiny
O código de exemplo usa uma biblioteca escrita para interagir com o DHT Tiny. Esta biblioteca está pronta para uso e pode ser incluída diretamente em todas as suas aplicações.
Obtenha a Biblioteca do NuGet
Se não quiser incluir o projeto diretamente na sua aplicação, simplesmente baixe a biblioteca DHT Tiny do NuGet usando o comando abaixo. Abra o Package Manager Console no Visual Studio e digite:
PM> Install-Package IoT.DhtTiny
Escaneando o Barramento I2C para o Dispositivo
A biblioteca DHT Tiny inclui um método que busca no barramento I2C por dispositivos DHT Tiny e retorna lista de endereços. Esta lista pode ser usada para inicializar um ou mais dispositivos encontrados. Especialmente útil se você alterou o endereço do dispositivo mas não lembra qual configurou. O método callback é opcional.
// ***
// *** Enumerar dispositivos DHT Tiny no barramento i2c.
// ***
IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback);
// ***
// *** Método callback
// ***
private void FindAllDhtTinyCallback(I2cScanEventArgs e) {
int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d);
this.Status = string.Format("Localizando dispositivos [0x{0:X2}] [{1}%] [Encontrados = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
Esquemático do DHT Tiny Breakout para Raspberry Pi
Demonstração de Software
Este vídeo demonstra a aplicação Universal rodando em Raspberry Pi 3 conectada ao DHT Tiny no protoboard.
[VÍDEO EM BREVE]
Criando o Dispositivo Final
A forma mais fácil e econômica de criar a placa é usar uma placa de protótipo PCI como a Perma-Proto Quarter-sized Breadboard PCB da Adafruit. A imagem abaixo mostra o breakout usando esta placa de protótipo. Usei uma Dremel para remover as seções de trilho de alimentação da placa.
Veja Mais: DHT Tiny Breakout para Raspberry Pi
Processo de manufatura
- Monitoramento Profissional de Temperatura com Raspberry Pi e DS18B20
- Construindo Estação Meteorológica Externa com Raspberry Pi 2 e ADS‑WS1
- Meça Sensores Analógicos no Raspberry Pi sem ADC Nativo
- Conectando Sensor Ultrassônico HC-SR04 ao Raspberry Pi – Guia Prático
- Principais Acessórios para Desbloquear Todo o Potencial do Seu Raspberry Pi
- Usando ADC MCP3008 para Ler Sensores Analógicos com Raspberry Pi
- SIGHT: Óculos Inteligentes Capacitando Cegos
- SparkFun Qwiic HAT para Raspberry Pi – Guia Completo de Conexão
- Instalando Windows 10 IoT Core no Raspberry Pi 3 Model B+: Guia Passo a Passo
- Construa Seu Próprio Robô Raspberry Pi com Kit MonkMakes RRB2 – Guia Detalhado