BMP180 - czujnik ciśnienia / GY-68

BMP180 / GY-68

Opis BMP180 / GY-68

GY-68 - Moduł wyposażony w układ BMP-180. Jest to moduł służący do pomiaru ciśnienia i temperatury.

Jest zasilany napięciem 3,3V ale wejścia danych działają zarówno przy użyciu napięcia 5V jak i 3,3V.

Łatwo można go użyć do pomiaru zmian wysokości położenia n.p.m. - poprzez pomiar zmian ciśnienia atmosferycznego.

Specyfikacja:

  • Napięcie zasilania: 1,8 -3,6 V
  • Średni pobór prądu: 0,5 uA
  • Zakres pomiaru ciśnienia: 300 - 1100hPa
  • Dokładność: 0,02 hPa (w trybie zaawansowanym)
  • Wyjście: Interfeis I2C
  • Szum pomiaru Maks prędkości magistrali I2C: 3,5Mhz
  • Wymiary: 13x10 mm 
  • Złącze raster 2.54mm

Wyprowadzenia

Czujnik posiada cztery wyprowadzenia typu goldpin - raster 2,54 mm, co umożliwia bezpośrednie wpięcie w płytkę stykową.

Nazwa Opis
VCC Napięcie zasilania modułu w zakresie 1,8 -3,6 V.
GND Masa układu.
SDA linia danych i2c
SCL linia zegara i2c

 

PDF Dokumentacja czujnika BMP180.

Biblioteka  Biblioteka ułatwiająca obsługę modułu GY-68 / BMP180.

 

BMP180 / GY-68 + Arduino pomiar temperatury i ciśnienia, stacja meteo

Ideą projektu jest stworzenie układu, który przy pomocy czujnika BMP180 pozwoli na pomiar temperatury i ciśnienia, oraz wypisanie ich wartości poprzez UART.

Ponadto w układzie wykorzystano trzy diody, aby wskazywać tendencję pogody:

  • dioda niebieska – będzie padać deszcz,
  • dioda zielona – brak zmian pogody,
  • dioda żółta – słoneczna pogoda.

Tendencje te są określane na podstawie ostatnich pięciu pomiarów ciśnienia.

 

Do stworzenia projektu wykorzystano następujące elementy:

  • czujnik pomiaru ciśnienia i temperatury BMP-180
  • mikrokontroler Arduino Nano
  • diody LED opisujące tendencję ciśnienia
  • rezystory 220Ω i 270Ω.

 

Schemat podłączenia GY-68 / BMP180 do Arduino

 

 


#include <Wire.h>
#include <bmp180.h>
#include <TimeLib.h>

// Dane wymagane do obsługi czasu
#define TIME_HEADER "T"
#define TIME_REQUEST 7
// Definiowanie wyjść diod
#define LED_NIEB 10
#define LED_ZIEL 9
#define LED_ZOLT 8

BMP180 bsensor; // Obiekt reprezentujący sensor
int lastMeas[5]; // Tablica przechowująca poprzednie pomiary

void setup() {
	// Inicjalizuj obiekt. Czułość sensora ustawiona na 1;
	bsensor.begin(1);
	Serial.begin(9600);
	// Synchronizacja czasu z komputerem
	setSyncProvider(requestSync);
	pinMode(LED_NIEB, OUTPUT);
	pinMode(LED_ZIEL, OUTPUT);
	pinMode(LED_ZOLT, OUTPUT);
}

void loop() {
	// Pomiar temperatury. Wynik jest podany w setnych częściach stopnia.
	int tempC = bsensor.getCelsiusHundredths();
	Serial.print("Temperatura: "); Serial.print(tempC/100); Serial.println("*C");

	// Pomiar ciśnienia. Wynik jest podany w Paskalach.
	long pressurePascals = bsensor.getPressurePascals();
	Serial.print("Cisnienie: "); Serial.print(pressurePascals/100);
	Serial.println("hPa");Serial.println();

	// Sprawdzanie tendencji ciśnienia z ostatnich 5 pomiarów.
	// Dopisanie ostatniego wyniku do tablicy
	if(second()==0) {
		lastMeas[minute()%5]=pressurePascals;
	}

	// Sprawdzenie jaka jest różnica między ostatnim pomiarem a czterema poprzednimi
	int roznica = 5*pressurePascals - lastMeas[0]- lastMeas[1]- lastMeas[2]- lastMeas[3]-
	lastMeas[4];

	
	if(abs(roznica)<100) {
		// Jeśli różnica jest niewielka, pogoda się utrzymuje. Zapal zieloną diodę
		digitalWrite(LED_NIEB, LOW);
		digitalWrite (LED_ZIEL, HIGH);
		digitalWrite (LED_ZOLT, LOW);
	} else if(roznica<0) {	
		// Jeśli wynik jest ujemny, pogoda pogarsza się. Zapal niebieską diodę.
		digitalWrite (LED_NIEB, HIGH);
		digitalWrite (LED_ZIEL, LOW);
		digitalWrite (LED_ZOLT, LOW);
	} else {		
		// Jeśli wynik jest dodatni, pogoda polepsza się. Zapal żółtą diodę.
		digitalWrite (LED_NIEB, LOW);
		digitalWrite (LED_ZIEL, LOW);
		digitalWrite (LED_ZOLT, HIGH);
	}

	delay(1000);
}

// Funkcje odpowiedzialne za synchronizację czasu
void processSyncMessage() {
	unsigned long pctime;
	const unsigned long DEFAULT_TIME = 1357041600;

	if(Serial.find(TIME_HEADER)) {
		pctime = Serial.parseInt();
		if(pctime >= DEFAULT_TIME) {
			setTime(pctime);
		}

		Serial.print(pctime);
	}
}

time_t requestSync() {
	Serial.write(TIME_REQUEST);
	return 0;
}

 

 

Zbudowano na Drupalu