Väderstation Arduino och bearbetning (3 / 6 steg)
Steg 3: Arduino kod
#include < Wire.h >#include < Adafruit_Sensor.h > //library finns på adafruit.com
#include < Adafruit_BMP085.h > //library finns på adafruit.com
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
int wSpeed;
int wDirect;
int temp1;
int press1;
int wsee;
/**************************************************************************/
/*
Arduino setup-funktionen (kallas automatiskt vid start)
*/
/**************************************************************************/
void setup(void)
{
Serial.BEGIN(9600);
/ * Initiera sensorn * /
IF(!bmp.BEGIN())
{
/ * Ett problem upptäcka BMP085... kolla dina anslutningar * /
Serial.Print (Ooops, ingen BMP085 upptäckt... Kontrollera dina ledningar eller I2C ADDR!");
While(1);
}
}
void loop(void)
{
/ * Få en ny sensor händelse * /
sensors_event_t händelse;
bmp.getEvent(&event);
wsee=analogRead(a0);
wSpeed=map(wsee,0,1023,0,1534); efter att ha testat gav detta mig exakt vindhastighet
wDirect=analogRead(A1); det blir olika för din vindmätare
/ * Visa resultatet (barometertrycket är åtgärd i hPa) * /
om (event.pressure)
{
/ * Visa atmosfäriska pressue i hPa * /
press1=map(Event.pressure,850,1100,0,1023);
/ * Beräkning av höjd med rimlig noggrannhet kräver tryck *
* havet tryck för din position just nu data är *
* omvandlas, samt den omgivande temperaturen i grader *
* celcius. Om du inte har dessa värden, "generiska" värdet *
* 1013,25 hPa kan användas (definieras som SENSORS_PRESSURE_SEALEVELHPA *
* i sensors.h), men detta är inte perfekt och ger variabel *
* resultat från en dag till nästa. *
* *
* Du kan vanligtvis hitta aktuella SLP värde genom att titta på vädret *
* webbplatser eller från miljöinformation centers nära alla stora *
* flygplats. *
* *
* Exempelvis för Paris, Frankrike kan du kolla de nuvarande menar *
* Tryck och havet vid: http://bit.ly/16Au8ol * /
/ * Först vi få aktuell temperatur från BMP085 * /
float temperatur;
bmp.getTemperature(&temperature);
temp1=map(temperature,-30,55,0000,1023);
}
om (wSpeed < 1000 & & wSpeed > 99) {
Serial.Print("0"); dessa om uttalanden lägger till 0 till den
Serial.Print(wSpeed); framkant att skapa en sträng av
} //16 nummer att skicka över USB
annars om (wSpeed < 100 & & wSpeed > 9)
{
Serial.Print("00");
Serial.Print(wSpeed);
}
annat if(wSpeed<10) {
Serial.Print("000");
Serial.Print(wSpeed);
}
annat {
Serial.Print(wSpeed);
}
om (press1 < 1000 & & press1 > 99) {
Serial.Print("0");
Serial.Print(press1);
}
annars om (press1 < 100 & & press1 > 9)
{
Serial.Print("00");
Serial.Print(press1);
}
annat if(press1<10) {
Serial.Print("000");
Serial.Print(press1);
}
annat {
Serial.Print(press1);
}
om (temp1 < 1000 & & temp1 > 99) {
Serial.Print("0");
Serial.Print(temp1);
}
annars om (temp1 < 100 & & temp1 > 9)
{
Serial.Print("00");
Serial.Print(temp1);
}
annat if(temp1<10) {
Serial.Print("000");
Serial.Print(temp1);
}
annat {
Serial.Print(temp1);
}
om (wDirect < 1000 & & wDirect > 99) {
Serial.Print("0");
Serial.Print(wDirect);
}
annars om (wDirect < 100 & & wDirect > 9)
{
Serial.Print("00");
Serial.Print(wDirect);
}
annat if(wDirect<10) {
Serial.Print("000");
Serial.Print(wDirect);
}
annat {
Serial.Print(wDirect);
}
Serial.Print("\n");
Delay(996); 2 - 2 förseningar för analog till digital omvandlare
att stabalize och 996 dröjsmål att generera en SEK intervall
} .