Está en la página 1de 8

En el último ejemplo, realizamos la medición de la diferencia de altura

entre dos puntos. Simplemente medimos la diferencia de cotas entre dos


puntos de presión, pero en lugar de tomar la referencia a nivel del mar
tomamos como referencia el primer punto.

1 #include <SFE_BMP180.h>
2 #include <Wire.h>
3
4 SFE_BMP180 bmp180;
5
6 double Po; //presion del punto inicial para h=0;
7 char status;
8 double T,P,A;
9 void setup()
10 {
11 Serial.begin(9600);
12
13 if (bmp180.begin())
14 {
15 Serial.println("BMP180 iniciado");
16 status = bmp180.startTemperature(); //Inicio de lectura de temperatura
17 if (status != 0)
18 {
19 delay(status); //Pausa para que finalice la lectura
20 status = bmp180.getTemperature(T);//Obtener la temperatura
21 if (status != 0)
22 {
23 status = bmp180.startPressure(3); //Inicio lectura de presión
24 if (status != 0)
25 {
26 delay(status); //Pausa para que finalice la lectura
27 status = bmp180.getPressure(P,T); //Obtener la presión
28 if (status != 0)
29 {
30 Po=P; //Asignamos el valor de presión como punto de referencia
31 Serial.println("Punto de referencia establecido: h=0");
32 }
33 }
34 }
35 }
36
37 }
38 else
39 {
40 Serial.println("Error al iniciar el BMP180");
41 while(1);
42 }
43 }
44
45 void loop()
46 {
47 status = bmp180.startTemperature(); //Inicio de lectura de temperatura
48 if (status != 0)
49 {
50 delay(status); //Pausa para que finalice la lectura
51 status = bmp180.getTemperature(T); //Obtener la temperatura
52 if (status != 0)
53 {
54 status = bmp180.startPressure(3); //Inicio lectura de presión
55 if (status != 0)
56 {
57 delay(status); //Pausa para que finalice la lectura
58 status = bmp180.getPressure(P,T); //Obtener la presión
59 if (status != 0)
60 {
61 A= bmp180.altitude(P,Po); //Calcular altura con respecto al punto de referencia
62 Serial.print("h=");
63 Serial.print(A);
64 Serial.println(" m");
65 }
66 }
67 }
68 }
69 delay(1000);
70 }

En el siguiente ejemplo estimamos la altitud respecto del mar. Para ello


tomamos como valor de referencia la presión estandard para sobre el nivel
del mar.

1 #include <SFE_BMP180.h>
2 #include <Wire.h>
3
4 SFE_BMP180 bmp180;
5
6 double PresionNivelMar = 1013.25; //presion sobre el nivel del mar en mbar
7
8 void setup()
9 {
10 Serial.begin(9600);
11
12 if (bmp180.begin())
13 Serial.println("BMP180 iniciado");
14 else
15 {
16 Serial.println("Error al iniciar el BMP180");
17 while(1);
18 }
19 }
20
21 void loop()
22 {
23 char status;
24 double T,P,A;
25
26 status = bmp180.startTemperature(); //Inicio de lectura de temperatura
27 if (status != 0)
28 {
29 delay(status); //Pausa para que finalice la lectura
30 status = bmp180.getTemperature(T); //Obtener la temperatura
31 if (status != 0)
32 {
33 status = bmp180.startPressure(3); //Inicio lectura de presión
34 if (status != 0)
35 {
36 delay(status); //Pausa para que finalice la lectura
37 status = bmp180.getPressure(P,T); //Obtener la presión
38 if (status != 0)
39 {
40 Serial.print("Temperatura: ");
41 Serial.print(T);
42 Serial.print(" *C , ");
43 Serial.print("Presion: ");
44 Serial.print(P);
45 Serial.print(" mb , ");
46
47 A= bmp180.altitude(P,PresionNivelMar); //Calcular altura
48 Serial.print("Altitud: ");
49 Serial.print(A);
50 Serial.println(" m");
51 }
52 }
53 }
54 }
55 delay(1000);
56 }

El primer ejemplo, obtiene la medición de los valores en bruto (RAW) de


presión y temperatura, y los muestra en la pantalla. Estos valores son de
utilidad, por ejemplo, para hacer una estación meteorológica.

1 #include <SFE_BMP180.h>
2 #include <Wire.h>
3
4 SFE_BMP180 bmp180;
5
6 void setup()
7 {
8 Serial.begin(9600);
9
10 if (bmp180.begin())
11 Serial.println("BMP180 iniciado");
12 else
13 {
14 Serial.println("Error al iniciar BMP180");
15 while(1); // bucle infinito
16 }
17 }
18
19 void loop()
20 {
21 char status;
22 double T,P;
23
24 status = bmp180.startTemperature(); //Inicio de lectura de temperatura
25 if (status != 0)
26 {
27 delay(status); //Pausa para que finalice la lectura
28 status = bmp180.getTemperature(T); //Obtener la temperatura
29 if (status != 0)
30 {
31 status = bmp180.startPressure(3); //Inicio lectura de presión
32 if (status != 0)
33 {
34 delay(status); //Pausa para que finalice la lectura
35 status = bmp180.getPressure(P,T); //Obtenemos la presión
36 if (status != 0)
37 {
38 Serial.print("Temperatura: ");
39 Serial.print(T,2);
40 Serial.print(" *C , ");
41 Serial.print("Presion: ");
42 Serial.print(P,2);
43 Serial.println(" mb");
44 }
45 }
46 }
47 }
48 delay(1000);
49 }

Primero vamos a confeccionar las aspas de nuestro sensor , pueden hacerlas con estas
cucharas dosificadoras que traen los tarros de leche en polvo y también en jabones en polvo y
si no las pueden fabricar con pelotas de ping pong, siempre las aspas serán impares, en mi caso
la hice de 3 pero pueden hacerla de 5 también.
Se dibuja un triángulo en un trocito de palo de escoba y se hacen los tres cortes donde entrarán
las cucharas dosificadoras, exacto al centro hacemos el agujero que ira al eje del motor.
Aca les muestro varios motores recuperados de juguetes y aparatos viejos como lectoras de cd
y dvd que me envió junto con algunas otras cosas un seguidor de córdoba amigo de mi hijo, “el
Killer” muchas gracias, hay que buscar uno que sea muy liviano que gire con toda libertad,
algunos motores tienen imanes muy potentes y para girar necesitan más fuerza, busquen el
que va más suave y se gira haciendo menos fuerza. Ahora colocamos en el eje las aspas que
fabricamos y pegamos con cemento.

A los dos terminales del motor soldamos un cable bien flexible, puede ser de un mouse u de
algun cable de usb que hayamos recuperado por ahí, al positivo el rojo y el negro a negativo.
soporte use un caño de pvc de ½ pulgada de unos 20 cm donde entra justo el motor y Como
adapte un imán a la base para pegarlo en el techo del auto. Listo está nuestro sensor de
anemómetro. Pueden pintar el conjunto de negro
Como calibramos el arreglo?, verán es muy fácil, lo haremos fijando al techo de un vehículo el
aparato, ya se ,mas de uno me va a saltar a la yugular diciendo que por efecto bernoulli en el
techo el aire va mas rapido, es cierto, pero bueno si quieren hacerlo mas exacto tendrán que
sacar el anemómetro más lejos del auto por la ventanilla, pegandolo en el techo es más fácil y el
error no será tanto, en el extremo del cable colocamos un multimitemro que mida en la escala
de mV DC y vamos tomando las lecturas a distintas velocidades, esto debe hacerse en un dia
sin viento, acá lo hicimos con mi vecino y ayudante del canal Andrés Daniele, la tabla la hicimos
anotando la tensión que marcaba el tester desde los 10 Km/h hasta los 100 km/h, si hacen una
gráfica verán que es bastante lineal. Con esa grafica y el aparato tal cual está ya pueden medir
la velocidad del viento de una forma medio rústica sin otra cosa. Por ejemplo el tester marca
200 mV vamos a la tabla, la velocidad es de 38 km/h

Cada uno que haga el proyecto debera hacer la calibracion como les comente antes porque
depende del motor que usemos los mV que tendremos a cada velocidad

Para hacerlo un poquito más cómodo, sin ver gráficas y lectura directa podemos a conectarlo a
nuestro arduino, yo tengo la placa duemilanove pero puede hacerse con cualquier arduino. Si
no tienen idea como es el manejo de arduino pueden ver el video que está en la i que es
bastante básico para empezar.
Le conectamos el display como está ahora en la figura, todo esto está en un archivo que les dejo
en la descripción junto con el código, conectamos el positivo de nuestro motor a la entrada
analogia A0 y el negativo a masa.

Con los datos que obtuvimos a distintas velocidades de los mV que genera el sensor vamos a
calcular la pendiente de la curva, que es una recta, corregimos la gráfica según las lecturas para
que nos quede una recta, hay formas matemáticas para hacerlo, pero también podemos
hacerlo tratando que la recta resultante deje de un lado y de otro los puntos que están si se
fijan en la correccion que hice de mis datos quedarn cuatro puntos de un lado y cuatro del otro,
una vez que ya trazamos la recta calculamos la pendiente con cualquier punto de la misma
para seguir con el mismo ejemplo de antes a 38 Km/h la tensión que se genera es de 200 mV
38/200=0,190 anotamos ese valor es el que debemos poner en el código.
El codigo es super basico y al lado de cada linea he puesto una referencia, en esta linea esta el
valor de la pendiente de nuestra curva aca tienen que poner el valor que les dio a ustedes.
//anemómetro con LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
float veloc1= 0;// entrada A0
int tiempo=0;
int cnt=0;
float v1=0;
float v2=0;
void setup() {
lcd.begin(16, 2); // Fijamos el numero de caracteres y filas
lcd.begin(16, 2); // Fijamos el numero de caracteres y filas
lcd.print(” Anemometro EC”); // Aqi va el mensaje
analogReference(INTERNAL);// pone como referencia interna 1.1V
}
void loop() {
v1 =(analogRead(0)); // lectura de sensor a0
veloc1= (v1*0.190); // 0,190 corresponde a la pendiente de la curva aca deben poner el
numero que calcularon
lcd.setCursor(0, 1); // Ponte en la line 1, posicion 0
lcd.print(veloc1); //muestra la velocidad del viento en el LCD
lcd.setCursor(4, 1); // ponte en linea 1, posicion 5
lcd.print(“Km/h”);
lcd.setCursor(9, 1);
lcd.print(“Max”);
if (veloc1>v2)v2=veloc1,lcd.print (v2,1); // muestra la velocidad maxima que alcanzo
delay(1000);
}
Cargamos el codigo y listo ya funciona, si no sale funcionando de una prueben invertir los
cables del senso

También podría gustarte