• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Stacja pogodowa Arduino
#1
Witam serdecznie wszystkich,

Jestem w trakcie budowy stacji pogodowej na arduino. Wykorzystuje dwie platformy tj. Arduino nano jako nadajnik oraz arduino Uno jako odbiornik, ktore komunikują się za pomocą modułu Rf 433. Przesył danych takich jak temp, cisnienie  mam zrobione lecz doszedłem do momentu gdzie chce dorzucić czujnik prędkości wiatru(dokładnie N96FY,zwykły kontaktron)no i jest problem. Nie mam zielonego pojęcia jak to zrobić. Problem tkwi w tym, że znalazłem program działający i obliczający prędkość wiatru lecz nie wiem jak zastosować go w taki sposób aby wysłać go odbiornika. Jestem kompletnym laikiem w tej dziedzinie więc proszę o wyrozumiałość. Problemem chyba jest komunikacja SPI(do takiego wniosku doszedłem).
 
Odpowiedź
#2
Jeżeli masz prędkość wiatru, a umiesz wysłać temperaturę i ciśnienie, to czemu w ten sam sposób nie wyślesz prędkości wiatru?
 
Odpowiedź
#3
(26-05-2017, 20:55)Tomuh napisał(a): Jeżeli masz prędkość wiatru, a umiesz wysłać temperaturę i ciśnienie, to czemu w ten sam sposób nie wyślesz prędkości wiatru?

Gdyby to tak dzialalo to bym zapewne nie pytał na forum.
 
Odpowiedź
#4
Pokaż kod
 
Odpowiedź
#5
(27-05-2017, 10:14)Tomuh napisał(a): Pokaż kod

Pomiar Wiatru:
#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3


LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7);


#define am 8 //podlaczenie anemometru do pinu 8
int licznik = 0; //licznik
int rotacja = 0; // number of rotacji
boolean stan =0; //status o
float wiatr;
 
void setup(){
pinMode (am, INPUT);
Serial.begin(9600);
lcd.begin(16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.print("wiatr: ");
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);

}
 
void loop(){
licznik= licznik+1;
if (digitalRead(am)==LOW){  //I've checked that on free position anemometer is always closed
delay(2);
stan=!stan;
while (digitalRead(am)==LOW) ;
rotacja=rotacja+1 ;
}
 
if (licznik==100){
int czas1=millis();
wiatr = rotacja*0.89;
lcd.println(rotacja);
lcd.setCursor(0,0);
lcd.print("Predkosc wiatru= ");
lcd.print(wiatr, 2);
lcd.setCursor(0,6);
lcd.println(" km/h");

licznik=0; //reset licznika
rotacja=0; //reset rotacji

int czas2 =millis();
int czas=czas2-czas1;
Serial.println(czas);
lcd.clear();
}

delay(8); //this delay is put here to extend time of whole loop to 10ms
}

Nadajnik:
#include <DallasTemperature.h>  
#include <Wire.h>
#include <VirtualWire.h>
#include <BMP180.h>
#include <OneWire.h>                                
int one_wire = 9; 
OneWire oneWire(one_wire); 
DallasTemperature sensors(&oneWire);
BMP180 barometer;
float seaLevelPressure = 101000;

String calosc, cisn, temp, cisn1, temp1;
char Msg[20];


void setup()
{
  vw_setup(2000);
  
  
  cisn = String ("C: ");
  temp = String ("T: " );
  Serial.begin(9600);
  delay(5000);
  Serial.println("Stacja Meteo"); 
  
  Wire.begin();
  barometer = BMP180();
  if(barometer.EnsureConnected())
  {
    Serial.println("Connected to BMP180."); // Output we are connected to the computer.
    barometer.SoftReset();
    barometer.Initialize();
  }
  else
  { 
    Serial.println("Could not connect to BMP180.");

  }

  }



void loop()
{
 

if(barometer.IsConnected)
  {
    // Retrive the current pressure in Pascals.
    long currentPressure = barometer.GetPressure();
    
    int b = (currentPressure/100);
    String cisn1 = cisn + b + " hPa"  ;
    Serial.println (cisn1);
 
    sensors.requestTemperatures();    
    float currentTemperature = sensors.getTempCByIndex(0);

    int c = (currentTemperature);
    String temp1 = temp + c + " stC";
    Serial.println (temp1);
  
   String calosc = temp1 + cisn1 ;
   Serial.println(calosc);  
   
    calosc.toCharArray(Msg,(calosc.length()+1));
    for (int i = 0; i <= calosc.length(); i++) 
    Serial.print(Msg[i]);
 }
   
    vw_send((uint8_t *)Msg, strlen(Msg));
    vw_wait_tx(); 
    
    Serial.println("poszlo");         
    Serial.println(); // Start a new line.
    delay(3000); 
}
 
Odpowiedź
#6
z czujnikiem robisz tak.
obwódx to 1Hz mnozysz przez 3600 monozysz przez obwód dzielisz przez 1000 i masz prędkosc
 
Odpowiedź
#7
Jestem w trakcie testów aplikacji mobilnej do prezentowania danych pogodowych z własnej stacji pogodowej opartej na arduino lub innych tego typu rozwiązaniach. Sprawdzam jakie jest zainteresowanie tym tematem i niedługo wykupię serwer do tego rozwiązania. Szukam osób które są zainteresowane takim rozwiązaniem i chciałby przetestować aplikację w praktyce (nie jest jeszcze publicznie dostępna). Zapraszam do zapoznania się [Obrazek: smiley.gif]

simplyclime.gearhostpreview.com/
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości