Integração de Sensores DHT22, DS18B20 e SHT3x com STM32
Integração de Sensores DHT22 e DS18B20 no STM32 para IoT
A integração de sensores como o DHT22 (temperatura e umidade) e o DS18B20 (temperatura) com microcontroladores STM32Famílias de microcontroladores STM32: Uma visão geralProfundo mergulho nas famílias STM32, explorando arquitetura, aplicações e desempenho. Descubra dicas e casos práticos para projetos embarcados. é fundamental para projetos de IoT, automação residencial e monitoramento ambiental. Este artigo combina teoria e prática, explorando desde a seleção de sensores até a implementação robusta, incluindo protocolos de comunicação, tratamento de erros, calibração e exemplos de código. Você aprenderá a configurar hardware, otimizar leituras e implementar um sistema completo com log de dados em cartão SD.
Índice🔗
- Comparação DHT22 vs. DS18B20: Quando usar cada sensor
- Configuração de hardware: Conexões físicas e pinagem
- Protocolos de comunicação: GPIO e 1-Wire no STM32
O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora.
- Código exemplo: Leitura simultânea de DHT22 e DS18B20
- Calibração e compensação de erros em leituras
- Handling de falhas: Timeouts, checksums e recuperação
- Projeto prático: Sistema de monitoramento ambiental com log em SD
- Desafios e Boas Práticas
Comparação DHT22 vs. DS18B20: Quando usar cada sensor🔗
Especificações técnicas
Característica | DHT22 | DS18B20 |
---|---|---|
Tipo de sensor | Umidade + Temperatura | Temperatura |
Faixa de medição | -40°C a +80°C (Temp) 0–100% RH (Umidade) | -55°C a +125°C |
Precisão | ±2% RH, ±0.5°C | ±0.5°C (entre -10°C e +85°C) |
Interface | Single-bus (GPIO) | 1-Wire |
Alimentação | 3.3V - 6V | 3V - 5.5V |
Resolução | 16 bits (umidade) | 9-12 bits (configurável) |
Casos de uso
- DHT22: Ideal para aplicações que exigem umidade relativa, como estufas, climatização e monitoramento ambiental.
- DS18B20: Adequado para medições de temperatura em múltiplos pontos (redes industriais) ou onde a escalabilidade via One-Wire é crítica.
Configuração de hardware: Conexões físicas e pinagem🔗
Diagrama de conexões
Notas críticas:
- Use resistor pull-up de 4.7KΩ no pino de dados do DS18B20.
- Cabos longos (>20m) no DHT22 podem causar perda de sincronização.
- Alimente os sensores com a mesma tensão do STM32 (3.3V) para evitar danos.
Protocolos de comunicação: GPIO e 1-Wire no STM32🔗
DHT22: Timing do protocolo single-bus
1. Inicialização: MCU puxa a linha para baixo por 1ms.
2. Resposta do sensor: Pulso de 80µs (low) + 80µs (high).
3. Transmissão de dados: 40 bits (16 bits umidade + 16 bits temperatura + 8 bits checksum).
DS18B20: Comandos 1-Wire
1. Reset: Pulso de 480µs.
2. ROM Command (0xCC
para skip ROM).
3. Function Command (0x44
para iniciar conversão).
4. Leitura de Scratchpad (0xBE
) após 750ms (12-bit resolution).
Dica: Utilize timersUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. do STM32 para garantir precisão na temporização.
Código exemplo: Leitura simultânea de DHT22 e DS18B20🔗
Leitura do DHT22 (GPIO)
void DHT22_Read(float *temp, float *humidity) {
GPIO_InitTypeDef gpio = {.Pin = GPIO_PIN_12, .Mode = GPIO_MODE_OUTPUT_OD};
HAL_GPIO_Init(GPIOD, &gpio);
// Envia sinal de start
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
gpio.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOD, &gpio);
// Lê os 40 bits (implementar timeout)
// ... (código completo disponível no repositório)
}
Leitura do DS18B20 (1-Wire)
uint8_t DS18B20_ReadTemp(float *temp) {
if (OneWire_Reset()) return 0; // Erro na comunicação
OneWire_WriteByte(0xCC); // Skip ROM
OneWire_WriteByte(0x44); // Start conversion
HAL_Delay(750);
OneWire_Reset();
OneWire_WriteByte(0xCC);
OneWire_WriteByte(0xBE); // Read scratchpad
uint8_t data[9];
for (int i = 0; i < 9; i++) data[i] = OneWire_ReadByte();
- temp = (data[1] << 8 | data[0]) * 0.0625;
return (OneWire_CRC8(data, 8) == data[8]); // Verifica CRC
}
Calibração e compensação de erros em leituras🔗
Técnicas para DHT22
- Compensação de temperatura:
- Filtro de média móvel:
#define SAMPLES 5
float buffer[SAMPLES], sum = 0;
for (int i = 0; i < SAMPLES-1; i++) {
buffer[i] = buffer[i+1];
sum += buffer[i];
}
buffer[SAMPLES-1] = new_reading;
return (sum + new_reading) / SAMPLES;
Handling de falhas: Timeouts, checksums e recuperação🔗
Estratégias robustas
Falha | Solução | Código Exemplo |
---|---|---|
Timeout DHT22 | Reinicializa GPIO | HAL_GPIO_DeInit(); HAL_GPIO_Init(); |
CRC inválido | Descarta leitura | if (crc != checksum) retry++; |
Sensor offline | Modo de fallback | HAL_UART_Transmit(&huart2, "ERR", 3, 100); |
Projeto prático: Sistema de monitoramento ambiental com log em SD🔗
Arquitetura do sistema
Fluxo de dados:
1. Leituras a cada 60 segundos.
2. Validação via CRC.
3. Formatação em CSV: 2023-10-05 14:30, 25.4, 45.2, 24.9
.
4. Escrita no SD card usando FATFSImplementando um sistema de arquivos no STM32Descubra como implementar um sistema de arquivos robusto no STM32 usando FATFS e cartão SD. Exemplos práticos e técnicas avançadas para otimização..
void log_data(float temp1, float temp2, float humidity) {
FIL file;
char buffer[64];
sprintf(buffer, "%lu,%.1f,%.1f,%.1f\n", HAL_GetTick(), temp1, temp2, humidity);
f_open(&file, "data.csv", FA_WRITE | FA_OPEN_APPEND);
f_write(&file, buffer, strlen(buffer), NULL);
f_close(&file);
}
Dica: Use um buffer circular na RAM para evitar corrupção de arquivo durante falhas de energia.
Desafios e Boas Práticas🔗
Desafios Frequentes
1. Temporização precisaUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados.: Interferências podem afetar a leitura do DHT22.
2. Gerenciamento de múltiplos sensores: Redes One-Wire exigem endereçamento único.
3. Níveis de tensão: Garanta compatibilidade entre sensores e STM32O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora..
Boas Práticas
- Bibliotecas validadas: Utilize bibliotecas otimizadas para One-Wire e DHT22.
- Modularização: Separe funções de leitura, processamento e logging.
- Testes contínuos: Valide leituras com termômetros e higrômetros de referência.
Conclusão🔗
A integração do DHT22 e DS18B20 com STM32O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora. permite criar sistemas de monitoramento ambiental robustos e escaláveis. Dominar protocolos como GPIO e One-Wire, aliado a técnicas de calibração e tratamento de falhas, é essencial para aplicações reais. O projeto prático com log em SD demonstra como consolidar dados para análise posterior, tornando-se uma base para soluções IoT complexas. Experimente, ajuste e documente cada etapa para garantir confiabilidade em seus projetos embarcados.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- STM32 Documentation: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html#documentation
- STM32 Official Website: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
- STM32 Step-by-Step Guide: wiki.st.com/stm32mcu/wiki/STM32StepByStep:Getting_started_with_STM32_:_STM32_step_by_step
- STM32 Tutorials: embedded-lab.com/blog/stm32-tutorials/
- STM32CubeMX User Manual: www.st.com/resource/en/user_manual/dm00104712-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf