Wireless Weather Station
How I made a weather station.
Components and supplies
1
MyOctopus i2c Barometric Air Pressure Sensor BMP280
1
Arduino UNO
1
RF433 Transmitter and Receiver
1
DHT11 Temperature & Humidity Sensor (4 pins)
1
RGB Backlight LCD - 16x2
1
Arduino Nano R3
1
UVM30A UV sensor
1
Jumper wires (generic)
Project description
Code
Transmitter code
arduino
1 #include<dht.h> 2#include <Wire.h> 3#include <VirtualWire.h> 4#include <Adafruit_Sensor.h> 5#include <Adafruit_BMP280.h> 6#define dht_apin A0 7dht DHT; 8char msg[8]; 9float pritisak; 10#define BMP_SCK 12 11#define BMP_MISO 11 12#define BMP_MOSI 10 13#define BMP_CS 9 14Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); 15void setup(){ 16 vw_set_ptt_inverted(true); 17 Serial.begin(9600); 18 vw_set_tx_pin(4); // Sets pin D12 as the TX pin 19 vw_setup(2000); 20 if (!bme.begin()) { 21 Serial.println("Could not find a valid BMP280 sensor, check wiring!"); 22 while (1);} 23 delay(1000);//Wait before accessing Sensor 24} 25void loop(){ 26 DHT.read11(dht_apin); 27 dtostrf(DHT.humidity, 8,1,msg); 28 msg[0]='H'; 29 vw_send((uint8_t *)msg, strlen(msg)); //transmits the data 30 vw_wait_tx(); 31 dtostrf(DHT.temperature,8,1,msg); 32 msg[0]='T'; 33 vw_send((uint8_t *)msg, strlen(msg)); //transmits the data 34 vw_wait_tx(); 35 dtostrf(analogRead(3), 8,1,msg); 36 msg[0]='U'; 37 vw_send((uint8_t *)msg, strlen(msg)); //transmits the data 38 vw_wait_tx(); 39 pritisak = bme.readPressure()/100; 40 dtostrf(pritisak,8,1,msg); 41 msg[0]='P'; 42 vw_send((uint8_t *)msg, strlen(msg)); //transmits the data 43 vw_wait_tx(); 44 delay(3000); }
Receiver code
arduino
1 #include <VirtualWire.h> 2#include <LiquidCrystal.h> 3String poruka; 4LiquidCrystal lcd(8,9,4,5,6,7); 5unsigned char ledPin=1; 6unsigned char ledPin2=2; 7int flag = 0; 8void setup(){ 9 vw_set_ptt_inverted(true); 10 Serial.begin(9600); 11 delay(500); 12 vw_set_rx_pin(12); //Sets pin D12 as the RX Pin 13 vw_setup(2000); 14 vw_rx_start(); 15 pinMode(ledPin, OUTPUT); 16 pinMode(ledPin2, OUTPUT); 17 digitalWrite(ledPin, LOW); 18 digitalWrite(ledPin2, LOW); 19 digitalWrite(ledPin, HIGH); 20 lcd.begin(16,2); 21 lcd.setCursor(0,0); 22 lcd.print(" Wheater"); 23 lcd.setCursor(0,1); 24 lcd.print(" station"); 25 delay(2000); 26 lcd.clear(); 27} 28void loop(){ 29 uint8_t buf[VW_MAX_MESSAGE_LEN]; 30 uint8_t buflen = VW_MAX_MESSAGE_LEN; 31 if( vw_get_message(buf, &buflen) ) 32 { 33 if(flag<2){ 34 lcd.setCursor(15,1); 35 lcd.print("*"); 36 flag++; 37 } 38 else if(flag<4){ 39 lcd.setCursor(15,1); 40 lcd.print(" "); 41 flag++; 42 } 43 else 44 flag=0; 45 if(buf[0]=='H'){ 46 buf[0]=' '; 47 poruka=String((char *)buf); 48 poruka.trim(); 49 lcd.setCursor(0,1); 50 lcd.print("V="); 51 lcd.print(poruka); 52 lcd.print("%"); 53 } 54 else if(buf[0]=='T'){ 55 buf[0]=' '; 56 poruka=String((char *)buf); 57 poruka.trim(); 58 lcd.setCursor(0,0); 59 lcd.print("T="); 60 lcd.print(poruka); 61 lcd.print("C"); 62 } 63 else if(buf[0]=='U'){ 64 buf[0]=' '; 65 poruka=String((char *)buf); 66 poruka.trim(); 67 lcd.setCursor(8,1); 68 lcd.print("U="); 69 lcd.print(poruka); 70 } 71 else if(buf[0]=='P'){ 72 buf[0]=' '; 73 poruka=String((char *)buf); 74 poruka.trim(); 75 lcd.setCursor(8,0); 76 lcd.print("P="); 77 lcd.print(poruka); 78 } 79 } }
Transmitter code
arduino
1 #include<dht.h> 2#include <Wire.h> 3#include <VirtualWire.h> 4#include 5 <Adafruit_Sensor.h> 6#include <Adafruit_BMP280.h> 7#define dht_apin A0 8dht 9 DHT; 10char msg[8]; 11float pritisak; 12#define BMP_SCK 12 13#define BMP_MISO 14 11 15#define BMP_MOSI 10 16#define BMP_CS 9 17Adafruit_BMP280 bme(BMP_CS, 18 BMP_MOSI, BMP_MISO, BMP_SCK); 19void setup(){ 20 vw_set_ptt_inverted(true); 21 22 Serial.begin(9600); 23 vw_set_tx_pin(4); // Sets pin D12 as the TX pin 24 25 vw_setup(2000); 26 if (!bme.begin()) { 27 Serial.println("Could not find 28 a valid BMP280 sensor, check wiring!"); 29 while (1);} 30 delay(1000);//Wait 31 before accessing Sensor 32} 33void loop(){ 34 DHT.read11(dht_apin); 35 36 dtostrf(DHT.humidity, 8,1,msg); 37 msg[0]='H'; 38 vw_send((uint8_t *)msg, strlen(msg)); 39 //transmits the data 40 vw_wait_tx(); 41 dtostrf(DHT.temperature,8,1,msg); 42 43 msg[0]='T'; 44 vw_send((uint8_t *)msg, strlen(msg)); //transmits the data 45 46 vw_wait_tx(); 47 dtostrf(analogRead(3), 8,1,msg); 48 msg[0]='U'; 49 vw_send((uint8_t 50 *)msg, strlen(msg)); //transmits the data 51 vw_wait_tx(); 52 pritisak = bme.readPressure()/100; 53 54 dtostrf(pritisak,8,1,msg); 55 msg[0]='P'; 56 vw_send((uint8_t *)msg, strlen(msg)); 57 //transmits the data 58 vw_wait_tx(); 59 delay(3000); }
Comments
Only logged in users can leave comments