/*
Projeto 53 - Velocidade do som 2
Medição da velocidade de propagação do som no ar em função da temperatura e da humidade relativa.
Para isso, é necessário que a atividade experimental decorra durante um longo intervalo de tempo
(por exemplo, 24 horas) de modo a que a temperatura e a humidade relativa possam variar.
NOTA: São efetuadas 10 medições, sendo eliminados os dois maiores e os dois menores valores.
A média é feita com os 6 valores restantes.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <Adafruit_Sensor.h>
#include <Adafruit_AM2320.h>
#define trigPin 13
#define echoPin 11
Adafruit_AM2320 am2320 = Adafruit_AM2320();
float T;
float H;
unsigned long int somatempos;
int tempos[10];
int guardatempos;
float somatemperaturas;
float temperaturas[10];
float guardatemperaturas;
float somahumidades;
float humidades[10];
float guardahumidades;
float tempo; // Tempo para o ping atingir o alvo e voltar (em microssegundos)
float velocidade;
float distancia = 50; // Distância do sensor à parede em cm.
unsigned long int_entre_medicoes = 1800000; // Intervalo de tempo entre medições (em microssegundos)
void setup()
{
Serial.begin(9600);
am2320.begin();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
delay(2000);
Serial.println();
Serial.println("Temperatura(ºC), Humidade(%), velocidade(m/s)");
delay(2000);
}
void loop()
{
medir();
Serial.print(T,1);
Serial.print("\t");
Serial.print(H,1);
Serial.print("\t");
Serial.println(velocidade,1);
delay(int_entre_medicoes);
}
void medir()
{
for(int i=0;i<10;i++) // Guarda 10 valores para serem analisados
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2000);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
tempos[i]=pulseIn(echoPin, HIGH); // Mede o tempo (em microssegundos) que o ping demora a percorrer duas vezes a distância
temperaturas[i]=am2320.readTemperature();
humidades[i]=am2320.readHumidity();
delay(100);
}
for(int i=0;i<9;i++) // Organiza os valores por ordem crescente
{
for(int j=i+1;j<10;j++)
{
if(tempos[i]>tempos[j])
{
guardatempos=tempos[i];
tempos[i]=tempos[j];
tempos[j]=guardatempos;
}
if(temperaturas[i]>temperaturas[j])
{
guardatemperaturas=temperaturas[i];
temperaturas[i]=temperaturas[j];
temperaturas[j]=guardatemperaturas;
}
if(humidades[i]>humidades[j])
{
guardahumidades=humidades[i];
humidades[i]=humidades[j];
humidades[j]=guardahumidades;
}
}
}
somatempos=0;
somatemperaturas=0;
somahumidades=0;
for(int i=2;i<8;i++) // Soma os 6 valores do meio (depois de organizados por ordem crescente)
{
somatempos+=tempos[i];
somatemperaturas+=temperaturas[i];
somahumidades+=humidades[i];
}
tempo = somatempos/6; // Faz a média dos 6 valores (tempo em microssegundos)
velocidade = 20000*distancia/tempo; // Velocidade em m/s
T = somatemperaturas/6;
H = somahumidades/6;
}
/*
Projeto 53 - Velocidade do som 2 com excel
Medição da velocidade de propagação do som no ar em função da temperatura e da humidade relativa.
Para isso, é necessário que a atividade experimental decorra durante um longo intervalo de tempo
(por exemplo, 24 horas) de modo a que a temperatura e a humidade relativa possam variar.
NOTA: São efetuadas 10 medições, sendo eliminados os dois maiores e os dois menores valores.
A média é feita com os 6 valores restantes.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <Adafruit_Sensor.h>
#include <Adafruit_AM2320.h>
#define trigPin 13
#define echoPin 11
Adafruit_AM2320 am2320 = Adafruit_AM2320();
float T;
float H;
unsigned long int somatempos;
int tempos[10];
int guardatempos;
float somatemperaturas;
float temperaturas[10];
float guardatemperaturas;
float somahumidades;
float humidades[10];
float guardahumidades;
float tempo; // Tempo para o ping atingir o alvo e voltar (em microssegundos)
float velocidade;
float distancia = 50; // Distância do sensor à parede em cm.
unsigned long int_entre_medicoes = 1800000; // Intervalo de tempo entre medições (em microssegundos)
void setup()
{
Serial.begin(9600);
am2320.begin();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
delay(2000);
Serial.println("CLEARDATA");
Serial.println("LABEL, ,Temperatura,Humidade,velocidade");
delay(2000);
}
void loop()
{
medir();
Serial.print("DATA, ,"); Serial.print(T,1); Serial.print(","); Serial.print(H,1); Serial.print(","); Serial.println(velocidade,1);
delay(int_entre_medicoes);
}
void medir()
{
for(int i=0;i<10;i++) // Guarda 10 valores para serem analisados
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2000);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
tempos[i]=pulseIn(echoPin, HIGH); // Mede o tempo (em microssegundos) que o ping demora a percorrer duas vezes a distância
temperaturas[i]=am2320.readTemperature();
humidades[i]=am2320.readHumidity();
delay(100);
}
for(int i=0;i<9;i++) // Organiza os valores por ordem crescente
{
for(int j=i+1;j<10;j++)
{
if(tempos[i]>tempos[j])
{
guardatempos=tempos[i];
tempos[i]=tempos[j];
tempos[j]=guardatempos;
}
if(temperaturas[i]>temperaturas[j])
{
guardatemperaturas=temperaturas[i];
temperaturas[i]=temperaturas[j];
temperaturas[j]=guardatemperaturas;
}
if(humidades[i]>humidades[j])
{
guardahumidades=humidades[i];
humidades[i]=humidades[j];
humidades[j]=guardahumidades;
}
}
}
somatempos=0;
somatemperaturas=0;
somahumidades=0;
for(int i=2;i<8;i++) // Soma os 6 valores do meio (depois de organizados por ordem crescente)
{
somatempos+=tempos[i];
somatemperaturas+=temperaturas[i];
somahumidades+=humidades[i];
}
tempo = somatempos/6; // Faz a média dos 6 valores (tempo em microssegundos)
velocidade = 20000*distancia/tempo; // Velocidade em m/s
T = somatemperaturas/6;
H = somahumidades/6;
}