Build a Simple Weather Station with Arduino UNO, BMP280 Sensor & LCD
Components and supplies
Arduino UNO
×
1
Adafruit Standard LCD - 16x2 White on Blue
×
1
GY-BM E/P 280
×
1
Resistor 221 ohm
×
1
Jumper wires (generic)
×
17
UTSOURCE Electronic Parts
×
1
Apps and online services
Arduino IDE
About this project
First version of a very simple weather station made with an Arduino UNO, a BMP280 sensor and a LCD.
Sponsor Link: Utsource.net
Reviews: It is a trustworthy website for ordering electronic components to complete projects!
I'm already working on the v2.0 (which will be wireless), so keep up with me to stay updated! ;)
Code
Arduino Code
Arduino CodeC/C++
With this code you'll be able to send data from the sensor to the LCD.
#include <LiquidCrystal.h> //Library for the LCD screen
#include <BMP280.h> // Library for the BMP280 sensor
BMP280 bmp; //Initialize your sensor
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /*Initialize your LCD, make sure you wired it correctly */
#define P0 1013.25 //Standard atmospheric pressure
#define contrast 9 //9 and 10 are the pins where you wire the matching LCD pins
#define brightness 10 //for contrast and brightness regulation
double T = 0; //Starting temperature value
double P = 0; //Starting pressure value
char measure = 0;
void collectData() {
measure = bmp.startMeasurment();
if(measure != 0) {
delay(measure);
measure = bmp.getTemperatureAndPressure(T, P);
if(measure != 0) {
P = P + 17; // '+17' is a correction for the sensor error
T = T - 0.8; // like said above
lcd.clear();
lcd.print("T: ");
lcd.print(T);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("P: ");
lcd.print(P);
lcd.print(" hPa");
}
else
lcd.print("Error.");
}
else
lcd.print("Error.");
}
void setup() {
lcd.begin(16, 2);
pinMode(contrast, OUTPUT);
pinMode(brightness, OUTPUT);
analogWrite(contrast, 100); // '100' and '255' are the contrast and brightness
analogWrite(brightness, 255); // values I suggest, but you can change them as
if(!bmp.begin()) { // you prefer
delay(1000);
lcd.print("Init. failed.");
lcd.setCursor(0, 1);
delay(1000);
lcd.print("Check wiring.");
while(1);
}
else
lcd.print("Init. OK.");
bmp.setOversampling(4);
delay(2000);
collectData();
}
void loop() {
collectData();
delay(2000);
}