Arduino draagbare Weather Monitor, hoogtemeter, temperatuur, vochtigheid, met behulp van DHT11 en BMP85 met LCD-scherm met behulp van slechts 3 pins (3 / 5 stap)

Stap 3: De Code uploaden naar de Arduino

 /*Based largely on code by Jim Lindblom Get pressure, altitude, and temperature from the BMP085. Serial.print it out at 9600 baud to serial monitor. */ #include <dht11.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); dht11 DHT11; #define DHT11PIN 2 #define BMP085_ADDRESS 0x77 // I2C address of BMP085 const unsigned char OSS = 0; // Oversampling Setting // Calibration values int ac1; int ac2; int ac3; unsigned int ac4; unsigned int ac5; unsigned int ac6; int b1; int b2; int mb; int mc; int md; // b5 is calculated in bmp085GetTemperature(...), this variable is also used in bmp085GetPressure(...) // so ...Temperature(...) must be called before ...Pressure(...). long b5; void setup(){ Serial.begin(9600); Wire.begin(); lcd.init(); // initialize the lcd lcd.backlight(); bmp085Calibration(); } void loop() { float temperature = bmp085GetTemperature(bmp085ReadUT()); //MUST be called first float pressure = bmp085GetPressure(bmp085ReadUP()); float atm = pressure / 101325; // "standard atmosphere" float altitude = calcAltitude(pressure); //Uncompensated caculation - in Meters Serial.println("\n"); int chk = DHT11.read(DHT11PIN); Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; } Serial.print("Humidity (%): "); Serial.println((float)DHT11.humidity, 2); Serial.print("Temperature (oC): "); Serial.println((float)DHT11.temperature, 2); lcd.print("Hum(%): "); lcd.print((float)DHT11.humidity, 2); lcd.setCursor(0,1); lcd.print("Temp(C): "); lcd.print((float)DHT11.temperature, 2); delay(2000); lcd.clear(); Serial.print("Temperature (oF): "); Serial.println(Fahrenheit(DHT11.temperature), 2); Serial.print("Temperature (K): "); Serial.println(Kelvin(DHT11.temperature), 2); lcd.print("Temp(F): "); lcd.print(Fahrenheit(DHT11.temperature), 2); lcd.setCursor(0,1); lcd.print("Temp(K): "); lcd.print(Kelvin(DHT11.temperature), 2); delay(3000); lcd.clear(); Serial.print("Dew Point (oC): "); Serial.println(dewPoint(DHT11.temperature, DHT11.humidity)); Serial.print("Dew PointFast (oC): "); Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity)); lcd.print("DewP(C): "); lcd.print(dewPoint(DHT11.temperature, DHT11.humidity)); lcd.setCursor(0,1); lcd.print("DewPF(C): "); lcd.print(dewPointFast(DHT11.temperature, DHT11.humidity)); delay(3000); lcd.clear(); Serial.print("Temperature2: "); Serial.print(temperature, 2); //display 2 decimal places Serial.println("deg C"); Serial.print("Pressure: "); Serial.print(pressure, 0); //whole number only. Serial.println(" Pa"); lcd.print("Temp2: "); lcd.print(temperature, 2); //display 2 decimal places lcd.print(" C"); lcd.setCursor(0,1); lcd.print("Pres: "); lcd.print(pressure, 0); lcd.print(" PA"); delay(3000); lcd.clear(); Serial.print("Standard Atmosphere: "); Serial.println(atm, 4); //display 4 decimal places Serial.print("Altitude: "); Serial.print(altitude, 2); //display 2 decimal places Serial.println(" M"); lcd.print("Std Atm: "); lcd.print(atm, 4); //display 2 decimal places lcd.setCursor(0,1); lcd.print("Alt: "); lcd.print(altitude, 2); lcd.print(" M"); delay(3000); lcd.clear(); Serial.println();//line break delay(100); //wait a second and get values again. } /*-----( Declare User-written Functions )-----*/ // //Celsius to Fahrenheit conversion double Fahrenheit(double celsius) { return 1.8 * celsius + 32; } //Celsius to Kelvin conversion double Kelvin(double celsius) { return celsius + 273.15; } // dewPoint function NOAA // reference: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); } // delta max = 0.6544 wrt dewPoint() // 5x faster than dewPoint() // reference: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; } // Stores all of the bmp085's calibration values into global variables // Calibration values are required to calculate temp and pressure // This function should be called at the beginning of the program void bmp085Calibration() { ac1 = bmp085ReadInt(0xAA); ac2 = bmp085ReadInt(0xAC); ac3 = bmp085ReadInt(0xAE); ac4 = bmp085ReadInt(0xB0); ac5 = bmp085ReadInt(0xB2); ac6 = bmp085ReadInt(0xB4); b1 = bmp085ReadInt(0xB6); b2 = bmp085ReadInt(0xB8); mb = bmp085ReadInt(0xBA); mc = bmp085ReadInt(0xBC); md = bmp085ReadInt(0xBE); } // Calculate temperature in deg C float bmp085GetTemperature(unsigned int ut){ long x1, x2; x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15; x2 = ((long)mc << 11)/(x1 + md); b5 = x1 + x2; float temp = ((b5 + 8)>>4); temp = temp /10; return temp; } // Calculate pressure given up // calibration values must be known // b5 is also required so bmp085GetTemperature(...) must be called first. // Value returned will be pressure in units of Pa. long bmp085GetPressure(unsigned long up){ long x1, x2, x3, b3, b6, p; unsigned long b4, b7; b6 = b5 - 4000; // Calculate B3 x1 = (b2 * (b6 * b6)>>12)>>11; x2 = (ac2 * b6)>>11; x3 = x1 + x2; b3 = (((((long)ac1)*4 + x3)<>2; // Calculate B4 x1 = (ac3 * b6)>>13; x2 = (b1 * ((b6 * b6)>>12))>>16; x3 = ((x1 + x2) + 2)>>2; b4 = (ac4 * (unsigned long)(x3 + 32768))>>15; b7 = ((unsigned long)(up - b3) * (50000>>OSS)); if (b7 < 0x80000000) p = (b7<<1)/b4; else p = (b7/b4)<<1; x1 = (p>>8) * (p>>8); x1 = (x1 * 3038)>>16; x2 = (-7357 * p)>>16; p += (x1 + x2 + 3791)>>4; long temp = p; return temp; } // Read 1 byte from the BMP085 at 'address' char bmp085Read(unsigned char address) { unsigned char data; Wire.beginTransmission(BMP085_ADDRESS); Wire.write(address); Wire.endTransmission(); Wire.requestFrom(BMP085_ADDRESS, 1); while(!Wire.available()) ; return Wire.read(); } // Read 2 bytes from the BMP085 // First byte will be from 'address' // Second byte will be from 'address'+1 int bmp085ReadInt(unsigned char address) { unsigned char msb, lsb; Wire.beginTransmission(BMP085_ADDRESS); Wire.write(address); Wire.endTransmission(); Wire.requestFrom(BMP085_ADDRESS, 2); while(Wire.available()<2) ; msb = Wire.read(); lsb = Wire.read(); return (int) msb<<8 | lsb; } // Read the uncompensated temperature value unsigned int bmp085ReadUT(){ unsigned int ut; // Write 0x2E into Register 0xF4 // This requests a temperature reading Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x2E); Wire.endTransmission(); // Wait at least 4.5ms delay(5); // Read two bytes from registers 0xF6 and 0xF7 ut = bmp085ReadInt(0xF6); return ut; } // Read the uncompensated pressure value unsigned long bmp085ReadUP(){ unsigned char msb, lsb, xlsb; unsigned long up = 0; // Write 0x34+(OSS<<6) into register 0xF4 // Request a pressure reading w/ oversampling setting Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x34 + (OSS<<6)); Wire.endTransmission(); // Wait for conversion, delay time dependent on OSS delay(2 + (3<> (8-OSS); return up; } void writeRegister(int deviceAddress, byte address, byte val) { Wire.beginTransmission(deviceAddress); // start transmission to device Wire.write(address); // send register address Wire.write(val); // send value to write Wire.endTransmission(); // end transmission } int readRegister(int deviceAddress, byte address){ int v; Wire.beginTransmission(deviceAddress); Wire.write(address); // register to read Wire.endTransmission(); Wire.requestFrom(deviceAddress, 1); // read a byte while(!Wire.available()) { // waiting } v = Wire.read(); return v; } float calcAltitude(float pressure){ float A = pressure/101325; float B = 1/5.25588; float C = pow(A,B); C = 1 - C; C = C /0.0000225577; return C; } 

Gerelateerde Artikelen

4 x 4 x 4 LED kubus, met MSP430, met behulp van slechts 3 pins

4 x 4 x 4 LED kubus, met MSP430, met behulp van slechts 3 pins

dit is mijn 4 x 4 x 4 led kubus project, gedaan met de MSP430, met behulp van slechts 3 pinnen van MSP, het circuit diagram wordt getoond in de foto's, de hardware bestaat uit 3 shift registreert, 74595 en 4 NPN-transistors...u kunt leren hoe te make
Arduino en Visual Basic RF Over temperatuur vochtigheid meting

Arduino en Visual Basic RF Over temperatuur vochtigheid meting

Arduino met behulp van 433 MHz RF met momentane vertoning van temperatuur en vochtigheid waarden zoals we met de visual basic-programma doen, kunnen we zien.http://make.robimek.com/Arduino-Visual-Basic-Wireless-temperature-humidity-Control/Laten we b
Bestuur van de LCD-scherm met behulp van een Linkit en Bluetooth

Bestuur van de LCD-scherm met behulp van een Linkit en Bluetooth

HalloIn dit instructable leert u over interfacing LCD met Linkit één en het beheer van het zelfde met BluetoothStap 1: Onderdelen die vereist zijn LinKit één BoardArduino UNO16 * 2 LCD met LCD schildBluetooth-antenne (gevonden samen met Linkit één)Sm
Het weergeven van temperatuur en vochtigheid met behulp van een Arduino en een DHT11 vochtigheid Sensor

Het weergeven van temperatuur en vochtigheid met behulp van een Arduino en een DHT11 vochtigheid Sensor

Ik maakte enkele instructables laat zien hoe om te lezen van de temperatuur met behulp van een temperatuursensor.Nu heb ik ontdekt de DHT11 die doet hetzelfde werk plus luchtvochtigheid ook weergegeven. Ook het lezen van een DHT11 temperatuur is veel
Draagbare Arduino Uno temperatuur en luchtvochtigheid Sensor met LCD-scherm

Draagbare Arduino Uno temperatuur en luchtvochtigheid Sensor met LCD-scherm

Hey iedereen. Ik heb een heleboel geweldige ideeën uit instructables gekregen door de jaren heen. Aangezien dit mijn eerste ' ible, ik figuur ik iets wat ik zo goed gemaakt zou delen. Ik ben het invoeren van dit in het volledige Spectrum Laser wedstr
Arduino Nano: DHT11 temperatuur een vochtigheid I2C 2 X 16 LCD-scherm met Visuino

Arduino Nano: DHT11 temperatuur een vochtigheid I2C 2 X 16 LCD-scherm met Visuino

Ik heb al twee Instructables gemaakt over het gebruik van DTH11/DTH21/DTH22 en AM2301 temperatuur en vochtigheid sensoren met Arduino en je kunt ze vinden hier en hier. Ik maakte ook Instructable op I2C LCD karakterdisplay, en één over het gebruik va
Eenvoudige Weather Monitor met behulp van Arduino + Ubuntu

Eenvoudige Weather Monitor met behulp van Arduino + Ubuntu

Nou, een jaar geleden, begon ik te denken over het toezicht op het weer. Met behulp van de eenvoudige manier, precies zoals als ik nodig, en toegang tot van overal gebruik van internet mogelijk. De voorgestelde is meten de temperatuur (celsius), de v
Geautomatiseerde navigatie Robot met Gas (MQ-2), temperatuur & vochtigheid (DHT11) Sensors

Geautomatiseerde navigatie Robot met Gas (MQ-2), temperatuur & vochtigheid (DHT11) Sensors

Hallo iedereen! Het doel van dit project was een robot om geschikt te maken voor het navigeren rond obstakels in een kamer met behulp van de ultrasone module die HC-SR04 gemonteerd op een Servo, hierdoor de robot om rond te kijken om te bepalen van d
Volledige digitale klok met aanwezigheid Sensor (RTC - Alarm - PIR - temperatuur - vochtigheid - dauwpunt)

Volledige digitale klok met aanwezigheid Sensor (RTC - Alarm - PIR - temperatuur - vochtigheid - dauwpunt)

HoiIk heb al enkele digitale klokken projecten gedaan met Arduino met inbegrip van LED en LCD schermen, maar deze is specialer omdat ik hebben een nieuwe functie ingevoerd met een bewegingssensor (PIR).Zie VIDEOBelangrijkste kenmerkenPIR (aanwezighei
Weekend project klok datum thermometer en vochtigheid met Arduino mega

Weekend project klok datum thermometer en vochtigheid met Arduino mega

Guys, mij zin voor tantième mijn weekend-project over het maken van een klok met vochtigheid en temperatuursensor,Het met behulp van DHT11 sensor, RTC DS1307, LCD 16 x 2 en Arduino Mega 2560,Houden van lezen en veel gelukStap 1: Voorbereiden alle ond
Arduino Temp/vochtigheid met LCD en webinterface

Arduino Temp/vochtigheid met LCD en webinterface

hielp ik onlangs een client verplaatsen hun kantoor, waaronder de oprichting van een nieuwe computer kamer.Ik wilde dat ze kunnen controleren van de temperatuur en de vochtigheid van de ruimte zowel door het controleren van een LCD-scherm in de kamer
Real-time temperatuur loggen met Arduino, NodeJS en Plotly!

Real-time temperatuur loggen met Arduino, NodeJS en Plotly!

De motivatie voor dit project gekiemde na het lezen over Mark Zuckerberg de wens om te creëren een slimme huis voor een van zijn projecten van 2016. Worden geïntrigeerd mezelf, ik wilde proberen uit te voeren een zeer fundamentele temperatuur-logboek
Mini Arduino draagbare EEG - hersenen golf Monitor +

Mini Arduino draagbare EEG - hersenen golf Monitor +

dit is een ander voorbeeld van de veelzijdigheid en de Arduino, een kleine LCD-kleurenscherm en het juiste type van sensoren, zijn wat kan doen.OPMERKING:Dit is een work in progress... Ik zal werken aan verschillende fasen totdat ik voltooi een "draa
Arduino + temperatuur vochtigheid

Arduino + temperatuur vochtigheid

een eenvoudige temperatuursensor met behulp van één LM35 temperatuursensor voor precisie, de vochtigheid Sensor en de Arduino, dus je kunt aansluiting op uw toekomstige projecten. Het circuit stuurt seriële informatie over de temperatuur en vochtighe