Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
dnbakshi07
Published © GPL3+

Mini Weather Station Using Arduino Nano

This is a simple and fun project with pocket friendly budget.

IntermediateFull instructions provided31,342
Mini Weather Station Using Arduino Nano

Things used in this project

Hardware components

Arduino Nano R3
×1
DHT 11 module
×1
BMP-280 PRESSURE SENSOR
×1
1.44 inch ST7735 LCD Display
×1
3D PRINTED ENCLOSURE
×1
USB A to mini USB B cable
×1

Software apps and online services

Arduino IDE
Arduino IDE
Fusion
Autodesk Fusion

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
3D Printer (generic)
3D Printer (generic)
Soldering Wire
Double sided tape

Story

Read more

Custom parts and enclosures

3D PARTS

THIS IS THE STL FILE FOR THE 3D PRINTED PARTS I USED

Schematics

CIRCUIT DIAGRAM

YOU JUST NEED TO FOLLOW THE WIRING SHOWN.

Code

THE CODE

C/C++
THIS IS THE RELEVANT SKETCH FOR THE PROJECT, THE COMMENT STATEMENTS WILL EXPLAIN THE WORKING
#include <SPI.h>               //include Serial Peripheral Interface library
#include <Wire.h>              //include Two Wire Interface library
#include <Adafruit_GFX.h>      // include Adafruit graphics library
#include <Adafruit_ST7735.h>   // include Adafruit ST7735 TFT library
#include <Adafruit_BMP280.h>   // include Adafruit BMP280 sensor library
#include "DHT.h"               //include DHTXX sensor library
#define DHTPIN 2               //DHT11 data pin connected to arduino pin D2
#define DHTTYPE DHT11          //specifying the type of DHT sensor used
#define TFT_RST   8            // TFT RST pin is connected to arduino pin D8
#define TFT_CS    10           // TFT CS  pin is connected to arduino pin D9
#define TFT_DC    9            // TFT DC  pin is connected to arduino pin D10
// initialize ST7735 SERIES TFT library
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
 
// define device I2C address: 0x76 or 0x77 (0x77 is the library default address)
#define BMP280_I2C_ADDRESS  0x76
 
Adafruit_BMP280  bmp280;       // initialize Adafruit BMP280 library
DHT dht(DHTPIN, DHTTYPE);      // initialize DHT sensor
 
void setup(void)
{
  dht.begin();                                         // synchronizing DHT sensor
  tft.initR(INITR_144GREENTAB);                        // initialize a ST7735S chip, black tab
  tft.fillScreen(ST77XX_BLACK);                        // setting black background
  tft.drawFastHLine(0, 15 ,  tft.width(), ST77XX_CYAN);// draw horizontal seperation line at position (0, 15)
 
  tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);         // set text color to white and black background
  tft.setTextSize(1);                                  // setting text size to 1
  //tft.setCursor(4, 0);                               // move cursor to position (4, 0) pixel
  //tft.print("ARDUINO + ST7735 TFT");
  tft.setCursor(25, 5);                                // move cursor to position (25, 5) pixel
  tft.print("WEATHER BUDDY");
 
  // initialize the BMP280 sensor
  if( bmp280.begin(BMP280_I2C_ADDRESS) == 0 )
  {  // connection error or device address wrong!
    tft.setTextColor(ST77XX_RED, ST77XX_CYAN);         // set text color to red and black background
    tft.setTextSize(2);                                // setting text size to 2
    tft.setCursor(5, 76);                              // move cursor to position (5, 76) pixel
    tft.print("Connection");
    tft.setCursor(35, 100);                            // move cursor to position (35, 100) pixel
    tft.print("Error");
    while(1);  // stay here
  }
 
  tft.drawFastHLine(0, 55,  tft.width(), ST77XX_CYAN);  // draw horizontal seperation line at position (0, 55)pixel
  tft.drawFastHLine(0, 95,  tft.width(), ST77XX_CYAN);  // draw horizontal seperation line at position (0, 195)pixel
  tft.setTextColor(ST77XX_RED, ST77XX_BLACK);           // set text color to red and black background
  tft.setCursor(30, 20);                                // move cursor to position (30, 20) pixel
  tft.print("TEMPERATURE ");                            // setting heading for first section
  tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);          // set text color to cyan and black background
  tft.setCursor(40, 60);                                // move cursor to position (40, 60) pixel
  tft.print("HUMIDITY ");                               // setting heading for second section
  tft.setTextColor(ST77XX_GREEN, ST7735_BLACK);         // set text color to green and black background
  tft.setCursor(40, 100);                               // move cursor to position (40, 100) pixel
  tft.print("PRESSURE ");                               // setting heading for third section 
  tft.setTextSize(2);                                   // setting text size to 2 
}
 
// main loop
void loop()
  {

  char _buffer[8];
  // read temperature, humidity and pressure from the BMP280 sensor
  float temp = bmp280.readTemperature();    // get temperature in °C
  float hum = dht.readHumidity();           // get humidity in rH%
  float pres = bmp280.readPressure();       // get pressure in hPa
 
  // print temperature (in °C)
  if(temp < 0)                              // if temperature < 0
    sprintf( _buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
  else                                      // if temperature >= 0
    sprintf( _buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );// setting the value approximation 
  tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);  // set text color to yellow and black background
  tft.setCursor(11, 34);                          // move cursor to position (11,34) pixel 
  tft.print(_buffer);                             // print temperature from BMP-280 sensor
  tft.drawCircle(89, 34, 2, ST77XX_YELLOW);       // print the degree symbol ( ° )(can be omitted if * is used instead)
  tft.setCursor(95, 34);                          // move cursor to position (95,34) pixel 
  tft.print("C");                                 // print the Celcius symbol     
 
  // 2: print humidity (in %)
  sprintf( _buffer, "%02u ", (int)(hum));          // setting the value approximation 
  tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK);  // set text color to magenta and black background
  tft.setCursor(45, 74);                           // move cursor to position (45,74) pixel
  tft.print(_buffer);                              // print humidity from DHT-11 sensor
  tft.setCursor(75, 74);                           // move cursor to position (75,74) pixel
  tft.print("%");                                  // print the percentage symbol     
 
 
  // 3: print pressure (in hPa)
  sprintf( _buffer, "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100) ); // setting the value approximation 
  tft.setTextColor(ST77XX_ORANGE, ST77XX_BLACK);  // set text color to orange and black background
  tft.setCursor(3, 112);                          // move cursor to position (3,112)pixel      
  tft.print(_buffer);                             // print atmospheric pressure from BMP-280
  tft.setCursor(91, 112);                         // move cursor to position (91,112)pixel
  tft.print("hPa");                               // print unit of atmospheric pressure as hecto pascal
 
  delay(1000);                                    // wait 1 second before taking next sensor reading
 
}

Credits

dnbakshi07

dnbakshi07

0 projects • 11 followers

Comments