Projeto Final
Projeto Final
Projeto Final
CEARÁ-MIRIM - RN
2023
CEARÁ-MIRIM – RN
2023
RESUMO
ABSTRACT
The purpose of this project is to develop a monitoring system using environmental sensors and the
Arduino open-source electronics platform. The focus is on disseminating the necessary knowledge so that
anyone with the materials at hand can create their own autonomous weather station.
1 INTRODUÇÃO
2 REFERENCIAL TEÓRICO
Anemômetro
O anemômetro é um dispositivo utilizado para lê a velocidade do vento. Seu
princípio básico envolve a captação da força exercida pelo vento, convertendo
esta força em uma medida de velocidade. Existem vários tipos de
anemômetros, entre os quais se destacam o anemômetro de copo e o
anemômetro de fio quente. O primeiro utiliza copos rotativos que, ao serem
impelidos pelo vento, fazem girar um eixo, cuja velocidade de rotação pode ser
convertida em velocidade do vento. O segundo, por sua vez, mede a velocidade
do vento com base na quantidade de energia necessária para manter um fio
aquecido a uma temperatura constante, enquanto o vento passa por ele (Salvi
Casagrande, 2020).
Barômetro
O barômetro é uma ferramenta cuja finalidade é medir a pressão atmosférica.
Seu funcionamento tradicional baseia-se na pressão exercida pela atmosfera em
uma coluna de mercúrio dentro de um tubo de vidro. A altura da coluna de
mercúrio reflete diretamente a pressão atmosférica. Além do barômetro de
mercúrio, temos o barômetro aneróide, que utiliza uma pequena caixa metálica
parcialmente evacuada, cujas variações dimensionais são proporcionais às
variações de pressão (Débora Silva, 2014).
Higrômetro
O higrômetro é uma ferramenta projetada para medir a umidade relativa do ar. Há
diversos mecanismos para se medir a umidade. Um exemplo clássico é o
higrômetro de cabelo, que se baseia na propriedade de certos materiais
orgânicos (como cabelo). Outros higrômetros eletrônicos utilizam materiais
higroscópicos para detectar variações de umidade (Maestro Virtuale).
Termômetro
O termômetro é um dos instrumentos de medição mais conhecido. É um
dispositivo utilizado para medir temperaturas. O mais tradicional utiliza mercúrio
em um tubo de vidro, onde a expansão ou contração do mercúrio indica a
temperatura. Hoje, além deste, termômetros digitais, infravermelhos e bimetálicos
também são amplamente utilizados em diversas aplicações (Priscila Sousa,
2022).
3 METODOLOGIA
O módulo de adaptação micro SD (3) é uma interface eletrônica que permite que
microcontroladores, como o Arduino, leiam e escrevam dados em cartões micro
SD. Geralmente, ele opera através de uma comunicação SPI (Arduino e Cia).
3.2.1 Anemômetro
Figura 1: Sensor & Rolamento. Fonte: Os autores. Figura 2: Ímã. Fonte: Os autores.
Por meio de interrupção, o estado do sensor pode variar entre HIGH e LOW,
respectivamente quando o ìma está próximo e longe do sensor. Dessa forma podemos
entender que uma rotação é feita quando existe uma transição de um estado para
outro. Além disso, podemos utilizar parâmetros para definir a ordem em que será feita a
contagem das rotações, por exemplo: (HIGH ao LOW) ou (LOW ao HIGH),
respectivamente representados pelos termos, FALLING e RISING.
Também precisaremos de uma unidade para expressar a velocidade linear que o
anemômetro vai está captando, para isso utilizaremos a unidade angular rps (Rotação
por segundo) para que possamos obter de forma matemática a unidade m/s (Metro por
segundo) a partir da seguinte formula:
void setup() {
Serial.begin(9600);
pinMode(pinoSensor, INPUT);
attachInterrupt(digitalPinToInterrupt(pinoSensor), detectaRotacao,
FALLING);
}
void loop() {
unsigned long tempoAtual = millis();
detachInterrupt(digitalPinToInterrupt(pinoSensor)); // desativa a
interrupção
int rotacoes = contadorRotacoes;
contadorRotacoes = 0;
attachInterrupt(digitalPinToInterrupt(pinoSensor), detectaRotacao,
FALLING); // reativa a interrupção
Serial.print("RPS: ");
Serial.println(rps, 2);
Serial.print("Velocidade: ");
Serial.println(velocidade, 2);
}
}
void detectaRotacao() {
contadorRotacoes++;
}
3.2.2 BME280
Para esse sensor não é preciso realizar nenhum tipo de calibração. atente-se as
conexões:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
void setup() {
Serial.begin(9600);
void loop() {
// Lê e imprime os valores do sensor
Serial.print("Temperatura = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressão = ");
Serial.print(bme.readPressure() / 100F); //Converter para hectopascal
Serial.println(" hPa");
Serial.print("Umidade = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
No código você deve designar qual pino digital o CS vai ser conectado. Abaixo um
exemplo do código:
#include <SPI.h>
#include <SD.h>
void setup() {
Serial.begin(9600);
if (!SD.begin(chipSelect)) {
Serial.println("Falha na inicialização do cartão SD");
return;
}
void loop() {
// Seu código aqui
}
3.2.4 Thread
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Thread.h>
#include <ThreadController.h>
// Criação de Threads
Thread threadBME280 = Thread();
Thread threadSD = Thread();
Thread threadAnemometro = Thread();
// Controlador de Threads
ThreadController controlador = ThreadController();
void setup() {
Serial.begin(9600);
pinMode(pinoSensor, INPUT);
attachInterrupt(digitalPinToInterrupt(pinoSensor), detectaRotacao,
FALLING);
void loop() {
// Executar Threads
controlador.run();
void leBME280() {
if (gravando) {
somaTemp += temperatura;
somaHum += umidade;
somaPress += pressao;
contagemLeituras++;
}
}
void escreveSD() {
if (contagemLeituras > 0) {
float tempMedia = somaTemp / contagemLeituras;
float humMedia = somaHum / contagemLeituras;
float pressMedia = somaPress / contagemLeituras;
float velMedia = somaVelocidade / contagemLeituras;
void leAnemometro() {
unsigned long tempoAtual = millis();
if (tempoAtual - ultimoRegistro >= INTERVALO) {
ultimoRegistro = tempoAtual;
detachInterrupt(digitalPinToInterrupt(pinoSensor)); // desativa a
interrupção
int rotacoes = contadorRotacoes;
contadorRotacoes = 0;
attachInterrupt(digitalPinToInterrupt(pinoSensor), detectaRotacao,
FALLING); // reativa a interrupção
if (gravando) {
somaVelocidade += velocidadeVentoAtual;
}
}
}
void detectaRotacao() {
contadorRotacoes++;
}
5 CONSIDERAÇÕES FINAIS
REFERÊNCIAS
Arduino e Cia Como usar módulo cartão Micro SD com Arduino. Disponível em:
<https://www.arduinoecia.com.br/como-usar-modulo-cartao-micro-sd-arduino/>. Acesso
em: 17 set. 2023.
Vlastimil. Anemometer with Hall sensor and magnet. Disponível em: <Anemometer with
Hall sensor and magnet by Vlastimil | Download free STL model | Printables.com >.
Publicado em: 25 abr. 2023. Acesso em: 1 set. 2023.
TESSIE. BME280 Sensor: Datasheet, Pinout and Applications. UTMel. Disponível em:
<https://www.utmel.com/components/bme280-sensor-datasheet-pinout-and-
applications?id=162>. Publicado em: 8 jul. 2021. Acesso em: 17 set. 2023.
Tudo sobre anemômetros: o que são, como são usados e muito mais. Salvicasa
Grande Catálogo. Disponível em: <https://catalogo.salvicasagrande.com.br/wiki-
duvidas/tudo-sobre-anemometros-o-que-sao-como-sao-usados-%E2%80%8B
%E2%80%8Be-muito-mais>. Publicado em: 2020. Acesso em: 17 set. 2023.