[CONVITE] Grupo de discussão Estação Meteorológica – Arduino

Convidamos todos os membros do laboratório de garagem interessados em estação meteorológica que participem do grupo de discussão “Estação Meteorológica – Arduino”, a fim de compartilharmos informações, dicas e tutoriais a respeito do assunto para que possamos ter mais facilidade na criação de uma estação meteorológica.

Atenciosamete Murilo Lima Nogueira

Exibições: 1716

Responder esta

Respostas a este tópico

Posso ajudar sim!!!

murilo_lima_nogueira@hotmail.com

Eu posso contribuir com scripts para dados on line

Acho importante a medida de UV

Vejam isso:

http://openweathermap.org/stations

Estação meteorológica desenvolvida com arduino Uno receptor, arduino Mega transmissor. Com garabee, weather sheild, charger shield, sensor DHT11, BMP180, LDR, weather sensors e painel solar. Auto suficiente. Integrada com Google spreadsheet e Google app engine. Foi criado um protetor de radiação solar caseiro, para os sensores de temperatura e umidade, e um case para a placa arduino externa com dois potes de sorvete. Registra informações a cada 15 min. Distância máxima entre as duas bases de até 100m. As informações são armazenadas em um cartão SD e no google drive.

Anexos

Boas, alguém me pode explicar como poderia utilizar o sensor half para medir a velocidade do vento? estou a fazer um projeto idêntico e só me falta esse sensor, estou a utilizar o esp8266 e um pagina web que recebe os dados. 

Bom dia J2C.

O sensor hall, produz um pulso ao sentir a presença de um imã.

Vc pode usar este pulso para disparar um evento de interrupt no ESP8266.

 attachInterrupt(Port, Rotina, Condição);        

Port = Qual port do ESP estára ligado o sensor hall

Rotina = Função escrita por vc para contar os pulsos.

Condição = FALLING/RISING/ etc etc

É igual ao arduino.  

https://www.arduino.cc/en/Reference/AttachInterrupt

RV

Boa tarde! Sou Marcelo, sou novo aqui e conforme convite estou postando meu código de estação meteorológica. Neste código estou verificado se os dispositivos iniciam, se param de funcionar durante o loop ( serial monitor) e se iniciam corretamente. Não sou programador, e tenho aprendido por aqui mesmo. (Obs: algumas bibliotecas se referem a módulos chineses alternativos que tenho e são um pouco diferente dos demais módulos - DHT11, COMPASS HMC5883 ). Ainda não comprei o motor com pás para medir a velocidade do vento, e o sensor de chuva. Mas já deixo instalado o sensor sônico para o pluviômetro, pode ser usado com cartão SD( o meus queimei por descuido, mas estava nesta programação, retirei) e o conjunto ficará em um balão amarado, que subirá aos poucos, poderá girar em seu eixo e inclinar conforme o vento. Também poderá ser usado em drones, por quem quiser usar o projeto.

Por favor vejam que o foco inicial é saber como testar no setup() se eles estão ok.

Atenção: Qualquer um que usar balões deve ter autorização de manejo de acordo com o estado e instituição de ensino, não deve realizar qualquer teste em condições de céu nublado ou chuva sem tomar orientação sobre os riscos, não me responsabilizo pelas tentativas de teste que causem risco de morte e contravenção da lei dos balões RJ.

// Marcelo da Silva Santos (Designer, esp. animador, estudante de engenharia mecanica)
// Estacao meteriologica feita em casa / HOME MADE Meteriologoc station prototype
// Portugues - Brasil - BR_pt (Lingua).
// Rio de Janeiro 22:09 / Sexta-feira / 09 / Agosto / 2019.
// 1.0v Dados livres. Obg a todos / FreeData. Tks Everybody!
// Rascunho na memoria do uno / UNO Sketch memory 88%...!!! :(

#include <Ultrasonic.h>
#define pino_trigger A0
#define pino_echo A1
Ultrasonic ultrasonic(pino_trigger, pino_echo);
float cmMsec, inMsec;
long microsec = ultrasonic.timing();
//----------------------------------------------------------------------------------
#include <dht.h>
#define pinoDHT11 9
dht sensorDHT11;
//----------------------------------------------------------------------------------
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
float PressaoDoDia;
int Atm = 0;
Adafruit_BMP280 bmp;
//----------------------------------------------------------------------------------

#include <Wire.h>
#include <MechaQMC5883.h>
MechaQMC5883 qmc;
int x, y, z;
int azimuth;

//----------------------------------------------------------------------------------
//#include <SD.h>

//Sd2Card SDcard;
//SdVolume volume;

//const int chipSelect = 10;
//----------------------------------------------------------------------------------
#include <DS3232RTC.h>

const int MPU=0x68;
int AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

long ContadorLoop = 0; // CONTADOR DE LOOP(Tipo de Timer primitivo).
int Ciclos =0; // contador de ciclos cheios do contador de loop.
//----------------------------------------------------------------------------------

void setup()
{
Serial.begin(9600);
Wire.begin();
setSyncProvider(RTC.get);
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
if(!Serial) // 1
{
Serial.println("Erro ao iniciar Serail! Verifique as conexões.");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("Serial iniciado!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
if(!bmp.begin(0x76)) // 2
{
Serial.println("Sensor BMP280 não foi identificado! Verifique as conexões.");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("Sensor BMP280 foi identificado!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
if(timeStatus() != timeSet) // 3
{
Serial.println("Impossivel sincronismo com RTC");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("RTC Esta definindo o tempo do sistema");
Serial.println("Módulo RTC foi identificado!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
if(!MPU, 0x6B) // 4
{
Serial.println("Impossivel sincronismo com MPU6050");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("Sincronismo com MPU6050, ok!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
if(inMsec=0) // 5
{
Serial.println("Nenhum pulso detectado de Ultrasonico!");
Serial.println("Esperando para teste, sincronismo com Ultrasonic");
delay(2500);
Serial.println("Novo teste iniciado!");
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
if((inMsec=0) && (cmMsec=0 ))
{
Serial.println("Impossivel sincronismo com Ultrasonic");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("Detectado sincronismo com Ultrasonic no segundo teste!");
}
}
else
{
Serial.println("Sincronismo com Ultrasonic, ok!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
sensorDHT11.read11(pinoDHT11);
if((sensorDHT11.humidity=0) && ((sensorDHT11.temperature)=0)) // 6
{
sensorDHT11.read11(pinoDHT11);
delay(2500);
if((sensorDHT11.humidity=0) && ((sensorDHT11.temperature)=0))
{
Serial.println("Impossivel sincronismo com DHT_11");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("Sincronismo com DHT_11, ok!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
}
else
{
Serial.println("Sincronismo com DHT_11, ok!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
if((x=-1) && ( y=-1)) // 7
{
x=0;
y=0;
z=0;
delay(2500);
if((x=-1) && (y=-1))
{
Serial.println("Impossivel sincronismo com Bussola!");
Serial.println("Verifique o Modulo, conexoes e reinicie o Arduino...");
Serial.print("Erro no Loop: ");
Serial.println(ContadorLoop);
}
else
{
Serial.println("Sincronismo com a Busola na segundo teste, ok!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
}
else
{
Serial.println("Sincronismo com a bussola, ok!");
Serial.print("Inicio no Loop: ");
Serial.println(ContadorLoop);
}
}

void loop()
{
Serial.println("----------------------------------------------------------------------------------");

// ________________________ RTC ___________________________________________________________________________________________________
digitalClockDisplay();
// _______________________ DHT 11 _________________________________________________________________________________________________
sensorDHT11.read11(pinoDHT11);
// _______________________ BMP 280 ________________________________________________________________________________________________
PressaoDoDia = 1013,25; // pressao ao nivel do mar,
// ajustar este valor pela internet no mesmo dia.
// _______________________ BUSSOLA ________________________________________________________________________________________________
qmc.read(&x, &y, &z,&azimuth);
// _______________________ MPU 6050 _______________________________________________________________________________________________
Wire.beginTransmission(MPU);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true);
AcX=Wire.read()8|Wire.read(); //0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()8|Wire.read(); //0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()8|Wire.read(); //0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()8|Wire.read(); //0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()8|Wire.read(); //0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()8|Wire.read(); //0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()8|Wire.read(); //0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
// _____________________________ Escrevendo no Serial _____________________________________________________________________________
if (ContadorLoop>0)
{
Serial.println("Iniciando Sistema, preparando CAIXA PRETA!");
Serial.print("INICIO DE Loop: ");
Serial.println(ContadorLoop);
Serial.println("-----------------------------Ultrasonic--------------------------------------------");
Serial.print("Distancia em cm: ");
Serial.print(cmMsec);
Serial.print(" - Distancia em polegadas: ");
Serial.println(inMsec);
Serial.println("-----------------------------DHT11------------------------------------------------");
Serial.print("Umidade: ");
Serial.print(sensorDHT11.humidity);
Serial.print("%");
Serial.print(" - Temperatura_1: ");
Serial.print(sensorDHT11.temperature,0);
Serial.println("C");
Serial.println("----------------------------BMP 280-----------------------------------------------");
Serial.print("Temperatura_2: ");
Serial.print(bmp.readTemperature());
Serial.print(" *C (Grau Celsius)");
Serial.print(" - Pressao: ");
Serial.print(bmp.readPressure());
Serial.print(" Pa (Pascal)");
Serial.print(" - Atmosfera: ");
Atm = (((bmp.readPressure())/PressaoDoDia),1);
Serial.println(Atm);
Serial.println("-----------------------------Bussola----------------------------------------------");
Serial.print("x: ");
Serial.print(x);
Serial.print(" - y: ");
Serial.print(y);
Serial.print(" - z: ");
Serial.print(z);
Serial.print(" ROTACAO EM RELACAO AO NORTE: ");
Serial.print(azimuth);
Serial.println();
Serial.println("-----------------------------MPU 6050---------------------------------------------");
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
Serial.println("----------------------------------------------------------------------------------");

}
if (ContadorLoop >=2147483646)
{
ContadorLoop=0;
Ciclos=Ciclos+1;
Serial.println(ContadorLoop);
Serial.println(Ciclos);
}
Serial.print("FIM DE Loop: ");
Serial.println(ContadorLoop);
Serial.println("----------------------------------------------------------------------------------");
Serial.println(" ");
Serial.println(" ");
ContadorLoop = ContadorLoop + 1;
}
// _____________________________ Escrevendo no Serial Fim _________________________________________________________________________



void digitalClockDisplay()
{
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(' ');
Serial.print(day());
Serial.print(' ');
Serial.print(month());
Serial.print(' ');
Serial.print(year());
Serial.println();
}

void printDigits(int digits)
{

Serial.print(':');
if(digits < 10)
{
Serial.print('0');
Serial.print(digits);
}
}

Segue arquivo Uno.CAIXA_PRETA_SEM_SD.ino

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço