BAĞLAN

Arduino ve Processing İle Meteoroloji İstasyonu Projesi

  • Görüntülenme 1901
  • PAYLAŞ
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  

    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++;
    }
    }
    }

     


    PAYLAŞ
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    Sezgin GÜL

    Sezgin GÜL

    Makine Mühendisi, Girişimci, Maker

    Kimler Neler Demiş?

    İlk Yorum Hakkı Senin!

    avatar
    wpDiscuz

    Yeni Projeler More

    • 16 Şubat 2017
      1 hafta ÖNCE 2 Yorum

      Öğrenme Fonksiyonuna Sahip Hareket Kopyalayan Robot Kol Yapımı

      Bu projede öğrenme yoluyla hareket kopyalayan robot kol yapımından bahsedeceğim. Endüstride kullanılan robot kollar, her zaman aynı hareketleri yapmaya odaklıdır. Örneğin ürün bandından bir nesneyi alıp başka bir banda aktarımını yapan robot kollar sürekli aynı hareketi yapmaktadır. Bu hareketler önceden öğretilerek robot kola aktarılır. Burada da aynı mantıkla robot ...

    • 11 Şubat 2017
      2 hafta ÖNCE 10 Yorum

      Arduino İle Labirent Çözen Robot Yapımı

      Kendi robotunu yap projelerimizin bu bölümünde arduino ile labirent çözen robot yapacağız. Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ ...

    • 07 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile MLX90614 Kızılötesi Sıcaklık Sensörü Kullanımı

      Cisme temas etmeden, cismin sıcaklığını ölçen MLX90614 kızılötesi sıcaklık sensöründen bahsedeceğim. Dahili bir 17-bit ADC ve güçlü bir DSP, MLX90614'ün ölçümlerinde yüksek doğruluk ve çözünürlük verir. Vücut sıcaklığı ölçmek için uygundur. Ayrıca hareket algılamada da kullanabilirsiniz. MLX90614 Özellikler: Ortam sıcaklığı ölçme aralığı -40 ile + 125 ° C Nesne ...

    • 05 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile Yazıyı Sese Dönüştüren Emic 2 Modülü Kullanımı

      Robotunuzu konuşturmak ve neler olup bittiğini söyletmek ister misiniz ? Emic 2 yazıyı sese çeviren modülle kolaylıkla projeleriniz konuşabilir. Emic-2, Parallax tarafından, ses sentezini tamamen zahmetsiz kılmak için Grand Idea Studio ile birlikte tasarlanmıştır.

    • 31 Ocak 2017
      4 hafta ÖNCE 7 Yorum

      Arduino ile DHT22 Sıcaklık Nem Sensörü Kullanımı

      DHT sensörleri, kapasitif nem sensörü ve bir termistör olmak üzere iki parçadan oluşur. DHT11 ve DHT22 olan iki DHT modelini ele alalım. Görünüm ve pin yapısı olarak benzer görünmelerine rağmen farklı ölçüm hassasiyetlerine sahiptirler. Aşağıda iki modelin karşılaştırmasına bakalım.

    Bizi Takip Et

    Son Yorumlar

    Sezgin GÜL
    Sezgin GÜL 2017-02-25 23:01:46
    merhaba batuhan, hatanın sebebi AFMotor.h kütüphanesini yüklemediğinden kaynaklanmış. Kütüphaneyi buradan indirebilirsin http://www.robimek.com/wp-content/uploads/AFMOTOR-master.rar
    batuhan 2017-02-25 21:52:21
    sezgin bey öncelikle çok teşekkür ediyorum proje için ; Arduino ya kodu derlediğimde şöyle bir sorun ile karşılaşıyorum Arduino:1.8.1 (Windows.....
    Emin ERKMEN 2017-02-25 19:55:34
    Bu robotun üstüne ekleme yapabilir misiniz? 1 hafta içinde? Bu bizim için çok önemli.
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 19:48:46
    Çizgili olan labirenti çözen robotlarda o özellik mevcut. İlerleyen günlerde o tarz proje paylaşacağım.
    Emin ERKMEN 2017-02-25 19:34:28
    Peki bu robot. En kısa yolu nasıl bulabilir. İkinci kez aynı labirentten geçtiği zaman en kısa yoldan gitmesi için ne.....
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 18:10:10
    Kodlarda sorun yok videodaki robotta kullanılan kodlardır. Motor yönlerini doğru taktınız mı. Yön komutlarında doğru yönde dönüyorlar mı bunları da.....
    Emin ERKMEN 2017-02-25 18:03:27
    kodlarda sıkıntı yok yani?
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 17:17:46
    Bağlantılarınız doğru ve sensörlerin konumları uygun ise enerji yetersizliğinden kaynaklanabilir