Arduino: Sensores
Arduíno: Leitura de Sensores
O Arduíno pode ler sensores através de pinos de entrada digitais e analógicas.
Características do microcontrolador Arduíno
Sensores baseados em resistência variável para Arduíno
Sensores de luminosidade (LDR) e sensores de temperatura (como o NTC) possuem um resistor variável em função da grandeza que estão medindo.
Laboratório 1: Sensor de luminosidade LDR
- LDR
- O LDR (Light Dependent Resistor) é um resistor dependente de luz ou fotoresistor, o qual varia sua resistência em função da luminosidade.
- Montar hardware com o sensor LDR, conforme mostrado na figura acima.
- Testar o código exemplo Arquivo/Exemplos/Analog/AnalogInput, e verificar o valor da frequência do pulsar do led em função do valor da luminosidade.
- Carregar programa exemplo Arquivo/Exemplos/Basic/AnalogReadSerial e verificar o valor da entrada analógica gerada pelo LDR no monitor serial.
Laboratório 2: Sistema indicador de luminosidade
- LDR
- Montar hardware com sensor LDR utilizando divisor de tensão para o sensor e uma coluna de 5 leds utilizando um resistor de proteção para cada led.
- Construir programa para ir acendendo os leds a medida que aumenta a luminosidade.
- Use o programa exemplo Arquivo/Exemplos/Basic/AnalogReadSerial para verificar como a luminosidade do ambiente interfere no LDR.
Sensor de Temperatura NTC 10k
O sensor de temperatura NTC 10k é um thermistor, isto é, um resistor cuja resistência varia com a temperatura, podendo medir de −90 °C a 130 °C.
Existem dois tipos de thermistores:
- NTC (Negative Temperature Coefficient), no qual a resistência diminui com o aumento da temperatura;
- PTC (Positive Temperature Coefficient), no qual a resistência aumenta com o aumento da temperatura.
Para leitura com o Arduíno, o sensor NTC 10k é utilizado numa estrutura com um divisor de tensão com um resistor de 10K Ω.
Esquema de ligação com Arduíno:
- Cálculo da resistência do NTC
- Na temperatura de 25 °C a resistência do NTC é 10 k Ω, variando linearmente com a temperatura.
- Portando, quando:
RNTC = 10k Ω (25 °C)
- Temos:
leitura_analógica = 512 (Vdivisor = 2,5V)
- Logo, para qualquer leitura analógica temos:
RNTC = 10k . (1023/leitura_analógica - 1)
- Equação de Steinhart–Hart
- A equação de Steinhart–Hart (https://en.wikipedia.org/wiki/Thermistor), detalha a operação do thermistor NTC relacionando a variação de temperatura (Kelvin) com a resistência (Ω).
- onde a, b e c são parâmetros de Steinhart–Hart específicos para cada dispositivo.
- Valores típicos para um thermistor com resistência de 10K Ω na temperatura de (25 °C = 298.15 K) é:
- a = 0.001129148,
- b = 0.000234125,
- c = 0.0000000876741.
Laboratório 3: Sensor de Temperatura com NTC
- Monte o hardware para o sensor de temperatura NTC10k;
- Carregue e teste o código abaixo (adaptado de [1]):
//Sensor de temperatura NTC10k
#include <math.h>
const double a = 0.001129148; //
const double b = 0.000234125; //Parâmetros de Steinhart–Hart
const double c = 0.0000000876741; //
void setup()
{
Serial.begin(9600);
}
void loop()
{
double R; //Resistência do NTC
double T; //Temperatura em Kelvin
int leitura; //Leitura analógica (0 a 1023)
leitura = analogRead(A0);
R = (10000.0 * ((float)1023/leitura - 1)); //Calcula valor de R em função da leitura
T = 1 / (a + (b * log(R)) + (c * pow(log(R),3))); //Equação de Steinhart–Hart
T = T - 273.15; //Converte Kelvin para Celcius
Serial.print("Temperatura: ");
Serial.print(T);
Serial.println(" oC");
delay(1000);
}
Sensor de temperatura (LM35)
- Funcionamento do sensor LM35
- O LM35 é um circuito integrado exclusivo para medir temperatura com uma tensão de saída variando linearmente com a temperatura em graus Célsius.
- Na configuração básica este sensor mede temperaturas entre 2oC e 150oC, variando a saída em função da temperatura de 0 mV + 10mV por 1oC.
- Com a configuração mostrada em [2] é possível medir temperatura de -55oC e 150oC.
- Esquema de ligação com Arduíno
_______ | | | LM 35 | |_______| | | | (+5v) ----+ | +---- (Ground) | Analog Pin 0mV + 10mV / oC
- Leitura pela entrada analógica do Arduíno
- O valor de tensão (entre 0V e 5V) lido pelo Arduíno na entrada analógica é convertido um número digital com 10 bits de magnitude, ou seja, 210 (1024) valores (entre 0 e 1023).
- Para obter o valor de tensão, para uso no cálculo da temperatura, multiplica-se o valor digital obtido na leitura por 5/1023.
- Como a tensão medida pelo sensor varia de 0 mV + 10mV/1oC, se multiplicarmos por 100, teremos o valor em graus Celsius:
Laboratório 4: Sensor de temperatura LM35
- Monte o hardware com LM35 conforme a figura, utilizando a entrada analógica A0 para leitura.
- Carregue o código exemplo abaixo e verifique o funcionamento do sensor:
//Sensor de temperatura LM35
float valorSensor;
float temperatura;
void setup() {
Serial.begin(9600);
}
void loop() {
valorSensor = analogRead(A0) * 5.0 / 1023.0;
temperatura = valorSensor * 100.0;
Serial.print("Temperatura: ");
Serial.println(temperatura);
delay(2000); //Tempo entre as leituras em ms
}
Sensor de Temperatura e Humidade DHT11
O DHT11 é um sensor de temperatura e humidade. Este sensor inclui um medidor de humidade resistivo e um sensor de temperatura tipo NTC conectado a um microcontrolador de 8 bits [3].
O DHT11 possui uma biblioteca com funções prontas para seu funcionamento, documentada em [4].
- Esquema de ligação com Arduíno
_______ | | | DHT11 | |_______| | | | (Ground) ----+ | +---- (+5v) | Analog Pin 1
Laboratório 5: Sensor de temperatura DHT11
- Monte o hardware com DHT11 conforme a figura, utilizando a entrada analógica A1 para leitura.
- Baixe a biblioteca DHT11.zip e salve no computador (Última versão disponível em [5]).
- A biblioteca DHT11, contida no arquivo DHT11.zip, é formada por dois arquivos:
- dht11.h
- dht11.cpp
- A biblioteca DHT11, contida no arquivo DHT11.zip, é formada por dois arquivos:
- Insira a biblioteca DHT11.zip no ambiente da IDE do Arduíno:
Sketch -> Incluir Biblioteca -> Adicionar biblioteca .ZIP
- As bibliotecas são instaladas por padrão no diretório:
~/Arduino/libraries
- Carregue o código exemplo abaixo e verifique o funcionamento do sensor:
//Sensor de temperatura LDHT11
#include <dht11.h>
dht11 sensor; //Inicializa sensor
void setup() {
Serial.begin(9600);
delay(1000);
}
void loop() {
sensor.read(A1);
Serial.print("Temperatura (oC): ");
Serial.println(sensor.temperature);
Serial.print("Unidade (%): ");
Serial.println(sensor.humidity);
delay(2000); //Tempo entre as leituras em ms
}
Referências
Evandro.cantu (discussão) 09h35min de 17 de setembro de 2021 (-03)