Bouw een compact weerstation met Arduino Nano – Eenvoudige DIY-gids
Onderdelen en benodigdheden
| Arduino Nano R3 | × | 1 |
| DHT11 module | × | 1 |
| BMP280 druksensor | × | 1 |
| 1.44 inch ST7735 LCD Display | × | 1 |
| 3D-geprinte behuizing | × | 1 |
| USB A naar mini USB B kabel | × | 1 |
Benodigde tools en machines
- Solderbout (generiek)
- 3D-printer (generiek)
- Solderdraad
- Dubbelzijdig tape
Apps en online diensten
- Arduino IDE
- Autodesk Fusion 360
Over dit project
Inleiding
Het vastleggen van fysieke data in real-time is altijd fascinerend. In dit project kun je niet alleen drie fundamentele fysische parameters voor weersvoorspelling meten – temperatuur, luchtvochtigheid en luchtdruk – maar ook de real-time data weergeven op een LCD-scherm.
Beschrijving en werkprincipe
De twee sensoren in dit project zijn de BMP280 en de DHT11. De eerste meet temperatuur en luchtdruk, de tweede meet relatieve luchtvochtigheid. De DHT11 had overbodig kunnen zijn door een BME280 (die ook luchtvochtigheid meet) te gebruiken in plaats van de BMP280, maar als de kosten worden overwogen, is de combinatie van sensoren die hier gebruikt worden veel economischer voor DIY-projecten. Het moet ook worden opgemerkt dat hoewel de DHT11 zowel temperatuur als luchtvochtigheid kan meten, deze alleen voor luchtvochtigheid wordt gebruikt omdat de temperatuurafloeiing van de DHT11 +/-2°C is ten opzichte van +/-0,5°C voor de BMP280. Het hart van dit project is het Arduino Nano-ontwikkelbord. De Nano is gekozen boven de meer voorkomende UNO vanwege de betaalbare prijs. Een 1,44" ST7735 serie TFT LCD-scherm wordt gebruikt als display. Een groter scherm is vermeden om de Arduino Nano niet te overbelasten.
Schakeling en programmeren
Een combinatie van schakelingsschema en blokdiagram is zo handig mogelijk gegeven om de makers te helpen de fysieke configuratie en verbinding van de componenten te begrijpen. Pin-out tabellen van de componenten zijn ook verstrekt om het makkelijker te maken. Uit het diagram en de tabellen blijkt dat de 5V en GND pennen van de ICSP-header op de Arduino Nano worden gebruikt om de componenten te voeden, naast de on-board voedings- en groundpennen. Dit is gedaan om een extra voedingsbron overbodig te maken, wat het systeem bulkier zou maken.
Wat de programmering betreft: in het eerste deel worden een reeks bibliotheken opgenomen om de programmering kort en simpel te houden. Naast de voor de hand liggende, zijn de Wire.h en SPI.h bibliotheken de moeite waard om te noemen omdat Wire.h de Arduino in staat stelt te communiceren met I2C/TWI-apparaten zoals de BMP280 en het ST7735 LCD, en SPI.h de seriële perifere interface met het ST7735 LCD biedt. In het tweede deel worden de sensoren geïnitialiseerd en de layout, letterkleur, etc. van het LCD ingesteld voor het weergeven van de data naar onze voorkeur. In het laatste deel van de programmering worden de sensoruitgangen verkregen en weergegeven met een handige vertraging tussen elke meting om de zaken stabiel te houden.
Constructie en testen
In het prototype zijn de componenten modulair gehouden en met draadbruggen verbonden in plaats van te solderen. Dit stelt niet alleen eenvoudige foutopsporing en reparatie mogelijk, maar maakt ook het montagesproces probleemloos. De apparaatbehuizing is custom 3D-geprint voor een perfecte pasvorm voor de componenten. De behuizing is voorzien van goede ventilatie om de sensoren aan de meetwaarden te blootstellen en de gegenereerde warmte af te voeren, die anders zou interfereren met de meetelementen. Het apparaat wordt gevoed via dezelfde USB A naar type B mini USB die gebruikt wordt om de Arduino te programmeren. Het prototype is gedurende enkele uren binnen getest met zowel de PC USB-poort als een 5V smartphone-lader als voeding. De resultaten zijn redelijk accuraat vergeleken met online meteorologische data, rekening houdend met de productiekosten en ontwikkeltijd.
Conclusie
Concluderend kan gezegd worden dat dit project redelijk economisch is, nuttig om het minst te zeggen, en het meest belangrijk: het is leuk om een klein en handzaam weerstation te hebben dat in je zak past.
Om elektronische onderdelen te bestellen, bestel ze bij UTSOURCE.
Bibliografie
- Google.com
- Arduino.cc
- Mytectutor.com




Code
DE CODE (C/C++)
DIT IS DE RELEVANTE SKETCH VOOR HET PROJECT, DE COMMENTAARREGELS LEGGEN DE WERKING UIT
#include <SPI.h> // Serial Peripheral Interface bibliotheek
#include <Wire.h> // Two Wire Interface bibliotheek
#include <Adafruit_GFX.h> // Adafruit graphics bibliotheek
#include <Adafruit_ST7735.h> // Adafruit ST7735 TFT bibliotheek
#include <Adafruit_BMP280.h> // Adafruit BMP280 sensor bibliotheek
#include "DHT.h" // DHTXX sensor bibliotheek
#define DHTPIN 2 // DHT11 data pin verbonden met Arduino pin D2
#define DHTTYPE DHT11 // type DHT sensor specificeren
#define TFT_RST 8 // TFT RST pin verbonden met Arduino pin D8
#define TFT_CS 10 // TFT CS pin verbonden met Arduino pin D9
#define TFT_DC 9 // TFT DC pin verbonden met Arduino pin D10
// Initialiseer ST7735 SERIES TFT bibliotheek
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Definieer apparaat I2C adres: 0x76 of 0x77 (0x77 is standaard bibliotheekadres)
#define BMP280_I2C_ADDRESS 0x76
Adafruit_BMP280 bmp280; // Initialiseer Adafruit BMP280 bibliotheek
DHT dht(DHTPIN, DHTTYPE); // Initialiseer DHT sensor
void setup(void) {
dht.begin(); // DHT sensor synchroniseren
tft.initR(INITR_144GREENTAB); // Initialiseer ST7735S chip, zwarte tab
tft.fillScreen(ST77XX_BLACK); // Zwarte achtergrond
tft.drawFastHLine(0, 15, tft.width(), ST77XX_CYAN); // Horizontale scheidingslijn op (0, 15)
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // Tekstkleur wit op zwart
tft.setTextSize(1); // Tekstgrootte 1
tft.setCursor(25, 5); // Cursor naar (25, 5)
tft.print("WEATHER BUDDY"); // Titel
// Initialiseer BMP280 sensor
if (bmp280.begin(BMP280_I2C_ADDRESS) == 0) {
// Verbindingfout of verkeerd apparaatadres!
tft.setTextColor(ST77XX_RED, ST77XX_CYAN); // Rood op cyaan
tft.setTextSize(2); // Tekstgrootte 2
tft.setCursor(5, 76);
tft.print("Verbinding");
tft.setCursor(35, 100);
tft.print("Fout");
while (1); // Blijf hier
}
tft.drawFastHLine(0, 55, tft.width(), ST77XX_CYAN); // Scheidingslijn op (0, 55)
tft.drawFastHLine(0, 95, tft.width(), ST77XX_CYAN); // Scheidingslijn op (0, 95)
tft.setTextColor(ST77XX_RED, ST77XX_BLACK); // Rood op zwart
tft.setCursor(30, 20);
tft.print("TEMPERATUUR"); // Kop eerste sectie
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // Cyaan op zwart
tft.setCursor(40, 60);
tft.print("LUCHTVOCHTIGHEID"); // Kop tweede sectie
tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK); // Groen op zwart
tft.setCursor(40, 100);
tft.print("DRUK"); // Kop derde sectie
tft.setTextSize(2); // Tekstgrootte 2
}
// Hoofdloop
void loop() {
char _buffer[8];
// Lees temperatuur, luchtvochtigheid en druk van BMP280 sensor
float temp = bmp280.readTemperature(); // Temperatuur in °C
float hum = dht.readHumidity(); // Luchtvochtigheid in rH%
float pres = bmp280.readPressure(); // Druk in Pa
// 1: Print temperatuur (in °C)
if (temp < 0) {
sprintf(_buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100);
} else {
sprintf(_buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100);
}
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK); // Geel op zwart
tft.setCursor(11, 34);
tft.print(_buffer); // Print temperatuur van BMP280
tft.drawCircle(89, 34, 2, ST77XX_YELLOW); // Graadssymbool (°)
tft.setCursor(95, 34);
tft.print("C"); // Celsius symbool
// 2: Print luchtvochtigheid (in %)
sprintf(_buffer, "%02u ", (int)(hum));
tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK); // Magenta op zwart
tft.setCursor(45, 74);
tft.print(_buffer); // Print luchtvochtigheid van DHT11
tft.setCursor(75, 74);
tft.print("%"); // Percentage symbool
// 3: Print druk (in hPa)
sprintf(_buffer, "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100));
tft.setTextColor(ST77XX_ORANGE, ST77XX_BLACK); // Oranje op zwart
tft.setCursor(3, 112);
tft.print(_buffer); // Print luchtdruk van BMP280
tft.setCursor(91, 112);
tft.print("hPa"); // Eenheid hectopascal
delay(1000); // Wacht 1 seconde voor volgende meting
}
Aangepaste onderdelen en behuizingen
DIT IS HET STL-BESTAND VOOR DE 3D-GEPRINTE ONDERDELEN DIE IK GEBRUIKTE
Schema
VOLG EENVOUDIG DE BEDRADING ALS GETOOND.

Productieproces
- Een buitenweerstation bouwen met Raspberry Pi 2 en ADS-WS1
- Een Raspberry Pi-weerstation bouwen dat dagelijkse weergegevens e-mailt
- Externe weerbewaking met Raspberry Pi 3 en PubNub
- Geavanceerd Weerstation v2.0: Real-time Temperatuur, Druk, Vochtigheid & Hoogte Monitoring
- Bouw een DIY Photoshop-bedieningsconsole met Arduino Nano RP2040
- Bouw een Precieze 7-Segment Klok met Arduino Pro Mini & DS1302 RTC
- Bouw een $10 Draagbare Arduino Weerstation (AWS) – Eenvoudige DIY met Nano, DHT22, BMP180 & LCD
- eDOT: Precieze Arduino-klok & weerstation met ingebouwde IR-remote
- Bouw een compacte FM-radio met Arduino Nano en RDA5807M
- Realtime Weerstation met Arduino & ThingSpeak IoT
- Arduino Nano Weerstation: Sensor Kit & OLED Display