Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.1.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
void setup() {
Serial.begin(9600);
pinMode(pinoSensor, INPUT);
attachInterrupt(digitalPinToInterrupt(pinoSensor), detectaRotacao,
FALLING);
}
void loop() {
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
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;
}
Serial.println("Cartão SD inicializado com sucesso");
}
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
// 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();
Serial.print(umidadeAtual);
Serial.print("%, Pressão: ");
Serial.print(pressaoAtual);
Serial.print(" hPa, Velocidade do Vento: ");
Serial.print(velocidadeVentoAtual);
Serial.println(" m/s");
void leBME280() {
float temperatura = bme.readTemperature();
float umidade = bme.readHumidity();
float pressao = bme.readPressure() / 100F; // Convertendo para hPa
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.