Arduino ve Processing İle Meteoroloji İstasyonu Projesi

4 2.224

Bu projemizde hava istasyonumuzu yaparak bilgisayarımızdan gerçek zamanlı grafik çıktı alacağız. Processing arayüz ile görsel olarak anlık rüzgar hızı, basınç, sıcaklık ve rüzgar yönünü takip edeceğiz.Elde ettiğimiz verileri her 10 dakikada bir jpg olarak kaydedeceğiz.

Malzemeler:

  1. Arduino
  2. Anemometre
  3. BMP085 barometrik basınç sensörü
  4. Potansiyometre

Elektronik Devre Şeması:

Arduino Yazılımı:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>
 
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
int wSpeed;
int wDirect;
int temp1;
int press1;
int wsee;
void setup(void)
{
Serial.begin(9600);
 
if(!bmp.begin())
{
Serial.print("Sensör bağlantılarını kontrol et");
while(1);
}
 
}
 
void loop(void)
{
 
sensors_event_t event;
bmp.getEvent(&event);
wsee=analogRead(A0);
wSpeed=map(wsee,0,1023,0,1534); //rüzgar hızı
wDirect=analogRead(A1);
if (event.pressure)
{
press1=map(event.pressure,850,1100,0,1023);
float temperature;
bmp.getTemperature(&temperature);
temp1=map(temperature,-30,55,0000,1023);
}
if (wSpeed<1000&&wSpeed>99){
Serial.print("0");
Serial.print(wSpeed);
}
else if(wSpeed<100&&wSpeed>9)
{
Serial.print("00");
Serial.print(wSpeed);
}
else if(wSpeed<10){
Serial.print("000");
Serial.print(wSpeed);
}
else{
Serial.print(wSpeed);
}
 
if (press1<1000&&press1>99){
Serial.print("0");
Serial.print(press1);
}
else if(press1<100&&press1>9)
{
Serial.print("00");
Serial.print(press1);
}
else if(press1<10){
Serial.print("000");
Serial.print(press1);
}
else{
Serial.print(press1);
}
 
if (temp1<1000&&temp1>99){
Serial.print("0");
Serial.print(temp1);
}
else if(temp1<100&&temp1>9)
{
Serial.print("00");
Serial.print(temp1);
}
else if(temp1<10){
Serial.print("000");
Serial.print(temp1);
}
else{
Serial.print(temp1);
}
 
if (wDirect<1000&&wDirect>99){
Serial.print("0");
Serial.print(wDirect);
}
else if(wDirect<100&&wDirect>9)
{
Serial.print("00");
Serial.print(wDirect);
}
else if(wDirect<10){
Serial.print("000");
Serial.print(wDirect);
}
else{
Serial.print(wDirect);
}
Serial.print("\n");
 
delay(996);
 
}

 

Processing Kodu:

import processing.serial.*;
PFont p;
Serial myPort; 
int xPos = 100; 
 
void setup () {
size(700,500);
p=createFont("Arial",16,true);
 
background(0); 
for(int u=99;u<width;u=u+60) { stroke(100); line(u,0,u,height-99); } for(int t=height-99;t>0;t=t-25) 
{
stroke(100);
line(99,t,width,t);
}
 
textFont(p,12); 
textAlign(LEFT);
fill(255,0,0); //red
text("Wind Speed MPH",100,height-25); 
fill(0,255,0); 
text("Barometric pressure mb",210,height-25);
fill(0,0,255); //blue
text("Degrees Celsius",355,height-25);
fill(255); //white
text("Wind direction N = 0 deg",460,height-25);
fill(100); //gray
textAlign(RIGHT);
text("0",110,height-87);
for (int m=160;m<width;m=m+60) { int Min=(m-100)/60; fill(100); textAlign(CENTER); text(Min,m,height-87); } fill(100); textAlign(CENTER); text("Minutes",width/2,height-70); for(int p=400;p>0;p=p-50) {
float pat=map(p,400,0,0,200);
int pati=int(pat); 
fill(255,0,0);
textAlign(RIGHT);
text(pati,98,p+5); //wind speed measurements
float patie=map(p,400,0,850,1100);
int paties=int(patie);
fill(0,255,0);
text(paties,75,p+5);//pressure measurements
float patiesTemp=map(p,400,0,-30,55);
int patiesTemp1=int (patiesTemp);
fill(0,0,255);
text(patiesTemp1,45,p+5); //temp measurements
float patiesDirec=map(p,400,0,0,359);
int patiesDirect=int(patiesDirec);
fill(255);
text(patiesDirect,25,p+5); 
}
 
println(Serial.list());
 
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil('\n');
 
}
void draw(){}
 
void serialEvent (Serial myPort) {
 
String inString = myPort.readStringUntil('\n');
 
String xWindSpeed= inString.substring(0,4);
String xPressure= inString.substring(4,8);
String xtemp= inString.substring(8,12);
String xWindDirect=inString.substring(12,16);
int yWindSpeed=int(xWindSpeed);
int yPressure=int(xPressure);
int ytemp=int(xtemp);
int yWindDirect=int(xWindDirect);
 
float WindSpeed=map(yWindSpeed,0,1023,height-104,-3);
float Pressure=map(yPressure,0,1023,height-104,-3);
float temp=map(ytemp,0,1023,height-104,-3);
float WindDirect=map(yWindDirect,0,1023,height-104,-3);
 
stroke(255,0,0,150);
line(xPos,WindSpeed+4,xPos,WindSpeed);
 
stroke(0,255,0,150);
line(xPos,Pressure+4,xPos,Pressure);
 
stroke(0,0,255,150);
line(xPos,temp+4,xPos,temp);
 
stroke(255,255,255,150);
line(xPos,WindDirect+4,xPos,WindDirect);
 
xPos++;
 
if (xPos >= width) { 
saveFrame("Weather-####.jpg");
xPos=100;
p=createFont("Arial",16,true);
 
background(0); //set background black
for(int u=99;u<width;u=u+60) { stroke(100); line(u,0,u,height-99); } for(int t=height-99;t>0;t=t-25) 
{
stroke(100);
line(99,t,width,t);
}
 
textFont(p,12); //set font size to 12
textAlign(LEFT);
fill(255,0,0); //red
text("Wind Speed MPH",100,height-25); 
fill(0,255,0); //green
text("Barometric pressure mb",210,height-25);
fill(0,0,255); //blue
text("Degrees Celsius",355,height-25);
fill(255); //white
text("Wind direction N = 0 deg",460,height-25);
fill(100); //gray
textAlign(RIGHT);
text("0",110,height-87);
for (int m=160;m<width;m=m+60) { int Min=(m-100)/60; fill(100); textAlign(CENTER); text(Min,m,height-87); } fill(100); textAlign(CENTER); text("Minutes",width/2,height-70); for(int p=400;p>0;p=p-50)
{
float pat=map(p,400,0,0,200);
int pati=int(pat); 
fill(255,0,0);
textAlign(RIGHT);
text(pati,98,p+5); 
float patie=map(p,400,0,850,1100);
int paties=int(patie);
fill(0,255,0);
text(paties,75,p+5);//pressure measurements
float patiesTemp=map(p,400,0,-30,55);
int patiesTemp1=int (patiesTemp);
fill(0,0,255);
text(patiesTemp1,45,p+5); //temp measurements
float patiesDirec=map(p,400,0,0,359);
int patiesDirect=int(patiesDirec);
fill(255);
text(patiesDirect,25,p+5); 
 
}
if (xPos < width) {
xPos++;
}
}
}

 

Bunlar da İlgini Çekebilir
Cevap bırakın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

4 Yorum
  1. hawkeye

    sensör hatası alıyorum

  2. hawkeye

    arduino hangi model olacak uno r3 klon olurmu

  3. Mukaddes

    kütüphaneleri github dan kurdum

  4. Mukaddes

    kod çalışmıyor acil yardım edebilir misiniz? Adafruit_BMP085 kütüphanesinde getevent vs kodlar yok diyor Adafruit_BMP085 bmp = Adafruit_BMP085(10085); bu satır hatalı dior