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 STM32
Famí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 timers
Usando 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 FATFS
Implementando 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 precisa
Usando 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 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..
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 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. 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
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 9 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 9 meses atrás
há 9 meses atrás
há 9 meses atrás
há 10 meses atrás