Arduino Monitor portátil de tiempo, altímetro, temperatura, humedad, con LCD con sólo 3 pines DHT11 y BMP85 (3 / 5 paso)

Paso 3: Añadir el código para el Arduino

/ * Basado en gran parte en código por presión, la altitud y la temperatura de la BMP085 Jim Lindblom Get. Serial.Print al 9600 baud serial monitor. * / #include < dht11.h > < Wire.h > del #include #include < LiquidCrystal_I2C.h > LiquidCrystal_I2C lcd(0x27,16,2); dht11 DHT11; #define DHT11PIN 2 #define BMP085_ADDRESS 0x77 / / dirección de I2C del BMP085 const unsigned char OSS = 0; Oversampling ajuste / / int ac1; los valores de calibración int ac2; int ac3; unsigned int ac4; unsigned int ac5; unsigned int ac6; int b1; int b2; int mb; int mc; int md; B5 se calcula en bmp085GetTemperature(...), esta variable también se utiliza en bmp085GetPressure(...) / / así que... Temperature(...) debe ser llamado antes de... Pressure(...). largo b5; void setup() {Serial.begin(9600); Wire.Begin(); LCD.init(); inicializar el lcd lcd.backlight(); bmp085Calibration(); } void loop() {float temperatura = bmp085GetTemperature(bmp085ReadUT()); //MUST se llama primera flotador de presión = bmp085GetPressure(bmp085ReadUP()); float atm = presión / 101325; / / "atmósfera estándar" flotador altura = calcAltitude(pressure); //Uncompensated caculation - en metros Serial.println("\n"); int chk = DHT11.read(DHT11PIN); Serial.Print ("sensor de lectura:"); interruptor (chk) {caso 0: Serial.println("OK"); break; caso -1: Serial.println ("error de suma de comprobación"); break; caso -2: Serial.println ("error de tiempo de espera"); break; default: Serial.println ("error desconocido"); break;} Serial.Print ("humedad (%):"); Serial.println ((float) DHT11.humidity, 2); Serial.Print ("temperatura (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 ("temperatura (de):"); Serial.println(Fahrenheit(DHT11.Temperature), 2); Serial.Print ("temperatura (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 ("punto de rocío (oC):"); Serial.println (punto de rocío (DHT11.temperature, DHT11.humidity)); Serial.Print ("Rocío PointFast (oC):"); Serial.println (dewPointFast (DHT11.temperature, DHT11.humidity)); LCD.Print("DewP(C):"); LCD.Print (punto de rocío (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 (temperatura, 2); Mostrar 2 decimales Serial.println ("grado C"); Serial.Print ("presión:"); Serial.Print (presión, 0); sólo con el número entero. Serial.println ("Pa"); LCD.Print ("Temp2:"); LCD.Print (temperatura, 2); Mostrar 2 decimales lcd.print ("C"); lcd.setCursor(0,1); LCD.Print ("Pres:"); LCD.Print (presión, 0); LCD.Print («PA»); Delay(3000); LCD.Clear(); Serial.Print ("atmósfera estándar:"); Serial.println (atm, 4); Mostrar 4 decimales Serial.print ("altura:"); Serial.Print (altitud, 2); Mostrar 2 decimales Serial.println ("M"); LCD.Print ("Std Atm:"); LCD.Print (atm, 4); Mostrar 2 decimales lcd.setCursor(0,1); LCD.Print ("Alt:"); LCD.Print (altitud, 2); LCD.Print ("M"); Delay(3000); LCD.Clear(); Serial.println (); //line break delay(100); Espere a un segundo y volver a los valores
. } / *---(Declarar funciones escritas por el usuario)---* / / / //Celsius Fahrenheit conversión doble f (doble c) {volver 1.8 * celsius + 32;} doble de //Celsius a la conversión de Kelvin Kelvin (doble c) {vuelta celsius + 273.15;} / / función de punto de rocío NOAA / referencia: http://wahiduddin.net/calc/density_algorithms.htm doble punto de rocío (doble celsius, doble humedad) {doble A0 = 373.15 / (273.15 + celsius); doble suma =-7.90298 * (A0-1); SUMA += 5.02808 * log10(A0); SUMA +=-1.3816e-7 * (pow (10, (11.344*(1-1/A0)))-1); SUMA += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1); SUMA += log10(1013.246); doble VP = pow (10, SUM-3) * humedad; doble T = log(VP/0.61078); var Temp retorno (241.88 * T) / (17,558-T); } / / delta max = 0.6544 wrt dewPoint() / / 5 x más rápido que dewPoint() / Referencia: dewPointFast doble http://en.wikipedia.org/wiki/Dew_point (doble celsius, doble humedad) {doble un = 17.271; doble b = 237.7; doble temp = (un * celsius) / (b + c) + log(humidity/100); doble Td = (b * temp) / (a - temp); volver Td;} / / almacena todos los valores de calibración de bmp085 en variables globales / valores de calibración son necesarios para calcular la temperatura y la presión / / esta función debe ser llamada al principio del programa 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); } / / Calcular temperatura en grados C flotador bmp085GetTemperature (unsigned int ut) {x1 largo, x 2, x1 = ((ut (tiempo) - (long)ac6)*(long)ac5) >> 15; x2 = (mc (largo) << 11) / (x 1 + md); b5 = x1 + x2; float temp = ((b5 + 8) >> 4); temp = temp 10; devolver temp;} / / calcular presión dada para arriba / / valores de calibración deben ser conocidos / b5 también se requiere para bmp085GetTemperature(...) debe ser llamada primero. Valor devuelto será la presión en unidades de Pensilvania bmp085GetPressure largo (largo hasta sin firmar) {x1 largo, x2, x 3, b3, b6, p; sin firmar largo b4, b7; b6 = b5 - 4000; / / calcular B3 x1 = (b2 * (b6 * b6) >> 12) >> 11; x2 = (ac2 * b6) >> 11; x3 = x1 + x2; b3 = (((largo) ac1) * 4 + x3) <> 2; / / B4 calcular x1 = (ac3 * b6) >> 13; x2 = (b1 * ((b6 * b6) >> 12)) >> 16; x3 = ((x1 + x2) + 2) > > 2; B4 = (ac4 * (sin firmar largo) (x3 + 32768)) >> 15; B7 = ((unsigned long) (a - b3) * (50000 >> OSS)); Si (b7 < 0x80000000) p = (b7 << 1) / b4; Else p = (b7/b4) << 1; x1 = (p >> 8) * (p >> 8); x1 = (x 1 * 3038) >> 16; x2 = (-7357 * p) >> 16; p += (x1 + x2 + 3791) >> 4; larga temp = p; devolver a temp; } / / Lee 1 byte de BMP085 en 'dirección' char bmp085Read (dirección char unsigned) {unsigned datos char; Wire.beginTransmission(BMP085_ADDRESS); Wire.Write(Address); Wire.endTransmission(); Wire.requestFrom (BMP085_ADDRESS, 1); mientras (!. Wire.Available()); volver Wire.read(); } / / Leer 2 bytes de la BMP085 / / primer byte va a ser de 'address' / / segundo byte va a ser de 'address' + 1 int bmp085ReadInt (dirección char unsigned) {char unsigned 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(); devolver (int) msb << 8 | LSB; } / / Lee el valor de temperatura compensada unsigned int bmp085ReadUT() {unsigned int ut; / / escribir 0x2E en registro 0xF4 / / pide una temperatura Wire.beginTransmission(BMP085_ADDRESS); Wire.Write(0xF4); Wire.Write(0x2E); Wire.endTransmission(); Espere por lo menos 4.5ms delay(5); Leer dos bytes de registros 0xF6 y 0xF7 ut = bmp085ReadInt(0xF6); volver ut; } / / Leer el valor de presión compensada sin firmar largo bmp085ReadUP() {unsigned char msb, lsb, xlsb; unsigned largo arriba = 0; / / escribir 0x34 + (OSS << 6) en registrar 0xF4 / / solicitar una lectura con oversampling ajuste Wire.beginTransmission(BMP085_ADDRESS); de la presión Wire.Write(0xF4); Wire.Write (0x34 + (OSS << 6)); Wire.endTransmission(); Espere para la conversión, retardo depende de la demora de la OSS (2 + (<> 3 (8-OSS); vuelta arriba;} void writeRegister (int deviceAddress, dirección de byte, byte val) {Wire.beginTransmission(deviceAddress); / / iniciar transmisión a dispositivo Wire.write(address); / / enviar registro dirección Wire.write(val); / enviar valor a escribir Wire.endTransmission(); / / fin transmisión} int readRegister (int deviceAddress, dirección bytes) {int v; Wire.beginTransmission(deviceAddress); Wire.Write(Address); registrarse para leer Wire.endTransmission(); Wire.requestFrom (deviceAddress, 1); leer un byte mientras (! Wire.Available()) {/ / espera} v = Wire.read(); devolver v; } float calcAltitude (float presión) {float A = presión/101325; float B = 1/5.25588; float C = pow(A,B); C = 1 - C; C = C /0.0000225577; volver C; }

Artículos Relacionados

Monitor portátil de Gas peligrosos

Monitor portátil de Gas peligrosos

Construir un monitor portátil de gas para comprobar niveles peligrosos de gases peligrosos en su comunidad de origen, o en el camino y evitar que a tus amigos de iluminación un cigarrillo durante un fight.* de gasolinaEste tutorial le muestra cómo co
Manga del ordenador portátil de una carpeta de tres anillos con cremallera

Manga del ordenador portátil de una carpeta de tres anillos con cremallera

el precio medio de una manga del ordenador portátil es alrededor de $30. Les mostraré una forma rápida y fácil a upcycle una vieja carpeta de tres anillos en una funda de ordenador portátil.Paso 1: Mida su ordenador portátilPara este proyecto el elem
Fijación portátil de Gateway MX serie... con un clip

Fijación portátil de Gateway MX serie... con un clip

Este instructivo cubre cómo solucionar adaptador barril un roto serie MX.  En las laptops Gateway mayores es común la varilla del centro del adaptador para salir del puerto de carga. Os muestro cómo fijarlo con un clip y algunas soldadura.Supongo que
Soporte del ordenador portátil de un stand de supermercado y con aire refrigerado por ventilación

Soporte del ordenador portátil de un stand de supermercado y con aire refrigerado por ventilación

Un soporte del ordenador portátil con aire refrigerado por ventilaciónPrimero comprar un stand de supermercado que tiene metal marco con uno o dos mazos de cable.Se necesita un pañuelo como un remojo para enfriar la ventilación.Un recipiente para agu
Fin de semana proyecto reloj fecha termómetro y humedad con Arduino mega

Fin de semana proyecto reloj fecha termómetro y humedad con Arduino mega

chicos, quiero compartir mi proyecto de fin de semana en la creación de un reloj con sensor de temperatura y humedadEstá usando el sensor DHT11, RTC DS1307, LCD 16 x 2 y Arduino Mega 2560,Mantener lectura y buena suertePaso 1: Preparar todas las piez
Registrador de Arduino BLE temperatura/humedad con pantalla DHT11 y iOS

Registrador de Arduino BLE temperatura/humedad con pantalla DHT11 y iOS

En este proyecto construiremos un registrador de datos de temperatura y humedad simple basado en BlueDuino R2 y pantalla en iOS. Es fácil de construir y mantener tamaño pequeño.Paso 1: materiales La BlueDuino Rev2 es un Arduino microcontrolador compa
Mini portátil de Arduino EEG - Monitor de onda cerebral +

Mini portátil de Arduino EEG - Monitor de onda cerebral +

este es otro ejemplo de la versatilidad, y de lo que, el Arduino, una pequeña pantalla LCD Color y el tipo de sensores, son capaces de hacer.NOTA:Se trata de un trabajo en progreso... Trabajaba en varias fases hasta completar a un "monitor portátil s
Independiente Arduino altímetro

Independiente Arduino altímetro

Aquí es un altímetro independiente trabajando con Arduino que se puede utilizar en proyectos RC, senderismo, coches... donde quieras :)Demuestra en la primera pantalla de la altitud, la temperatura y la presión de aire, y en el segundo, llegó a la al
Cómo convertir un LCD del ordenador portátil a un Monitor externo.

Cómo convertir un LCD del ordenador portátil a un Monitor externo.

Hola. Este es mi primer InstructableHace un tiempo atrás me sentados alrededor y preguntándose qué hacer con mi portátil muerto. Sabía que la placa estaba frito pero todo lo demás estaba todavía en condiciones de trabajo. Como resultado, decidí hacer
AbHhGD - dispositivo de juegos portátil basados en el Arduino

AbHhGD - dispositivo de juegos portátil basados en el Arduino

Se trata de una reseña en mi dispositivo de juegos portátil basado en Arduino. Me doy cuenta es una declaración algo poshy pero bueno, es basados en Arduino, es portátil y es un dispositivo que juega juegos.Paso 1: Un portátil dispositivo de juego...
Trípode portátil

Trípode portátil

mi netbook es grande; es pequeño, portable y tiene suficiente jugo para hacer todo lo que necesito cuando estoy en movimiento. Sin embargo, ha habido momentos donde necesito realizar trabajo en un área específica y no hay escritorio o espacio conveni
Portátil refrigeración Pad con Hub USB de 4 puertos

Portátil refrigeración Pad con Hub USB de 4 puertos

he estado usando mi laptop con un cojín de enfriamiento y un hub de 4 puertos USB pero el problema es no me gusta estar ahí bloqueo de unidad de CD o puertos o respiraderos además no me gustaba llevar el cojín de enfriamiento y el eje por separado do
Soporte económico del ordenador portátil / Notebook al convertidor del escritorio

Soporte económico del ordenador portátil / Notebook al convertidor del escritorio

me encuentro con mi ordenador portátil por largos períodos de tiempo. Que incómodo después de un tiempo. El teclado y la pantalla idealmente deben ser independientes a reducir neckstrain durante el uso prolongado. Si eres un usuario de portátil de ti
Portátil Akku caliente-swapper

Portátil Akku caliente-swapper

instrucciones de cómo construir un "portátil Akku caliente-swapper"La "portátil Akku caliente-swapper" es un dispositivo que permite intercambiar la batería de un portátil en tiempo de ejecución evitando apagado/apagado el sistema ante