/*
Projeto 13 - Velocidade de propagação do som no ar
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 ou 0x3F
#include "DHT.h"
#define DHTPIN 4 // O DHT11 está ligado ao pino 4
#define DHTTYPE DHT11 // O arduino reconhece que o sensor é o DHT11
DHT dht(DHTPIN, DHTTYPE);
int trigPin = 13; // O trig está ligado ao pino 13
int echoPin = 11; // O echo está ligado ao pino 11
int buzzer = 9; // O buzzer está ligado ao pino 9
int btnIniciar = 2; // O botão está ligado ao pino 2
int estado;
float tempo; // Tempo para o ping atingir o alvo e voltar (em microssegundos)
float tempoms; // Tempo em ms
float h;
float t;
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
byte grau[8] =
{
B00010,
B00101,
B00010,
B00000,
B00000,
B00000,
B00000,
B00000,
};
lcd.createChar(1,grau);
pinMode(btnIniciar, INPUT_PULLUP);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, LOW);
dht.begin();
lcd.setCursor(0,0);
lcd.print("Fisica na Lixa");
lcd.setCursor(0,1);
lcd.print("Pode iniciar");
Serial.println("Fisica na Lixa");
Serial.println("Pode iniciar");
}
void loop()
{
estado = digitalRead(btnIniciar);
while(estado == 1)
{
estado = digitalRead(btnIniciar);
}
analogWrite(buzzer, 50);
delay(40);
digitalWrite(buzzer, LOW);
medir();
}
void medir()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2000);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
tempo = pulseIn(echoPin, HIGH); // Mede o tempo (em microssegundos) que o ping demora a percorrer duas vezes a distância
tempoms = tempo/1000.000; // Tempo de ida e volta em milissegundos
h = dht.readHumidity(); // Leitura da humidade em %
t = dht.readTemperature(); // Leitura da temperatura em ºC
if (isnan(h) || isnan(t)) // Verificar se ocorrem falhas
{
Serial.println("A leitura do sensor DHT11 falhou!");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A leitura do");
lcd.setCursor(0,1);
lcd.print("DHT11 falhou!");
return;
}
Serial.print("Tempo de ida e volta = ");
Serial.print(tempoms,3);
Serial.print(" ms Temperatura = ");
Serial.print(t,1);
Serial.print(" ºC Humidade relativa = ");
Serial.print(h,0);
Serial.println(" %");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("t=");
lcd.print(tempoms,3); // Tempo em milissegundos com três casas décimais
lcd.print(" ms");
lcd.setCursor(0,1);
lcd.print("T=");
lcd.print(t,0); // Temperatura em graus Celsius sem casas décimais
lcd.write((byte)1);
lcd.print("C");
lcd.print(" ");
lcd.print("H=");
lcd.print(h,0); // Humidade em % sem casas décimais
lcd.print("%");
delay(2000);
}