Jedna od najzanimljivijih primjena Raspberry Pi-a je izgradnja vlastite vremenske stanice. U ovom projektu pokazat ću vam kako pomoću jednostavnih senzora možete pratiti temperaturu, vlažnost zraka, te čak i atmosferski tlak, a sve podatke prikazati na LCD ekranu ili web sučelju.
Zašto Izgraditi Vlastitu Vremensku Stanicu?
Komercijalne vremenske stanice mogu biti skupe i često ne nude fleksibilnost koju želite. S Raspberry Pi-em možete:
- Prilagoditi točno koje podatke želite pratiti
- Spremati povijesne podatke za analizu
- Pristupiti podacima s bilo kojeg uređaja putem weba
- Integrirati s drugim pametnim kućnim sustavima
- Dodati dodatne senzore po potrebi
Potrebni Materijali
Za ovaj projekt trebat će vam:
- Raspberry Pi (model 3B+ ili noviji preporučen)
- DHT22 senzor (temperatura i vlažnost) - oko 50 kn
- BMP280 senzor (tlak zraka) - oko 30 kn
- Spojni kablovi (ženka-ženka)
- Breadboard (opcionalno, za lakše spajanje)
- MicroSD kartica (minimalno 8GB)
- Napajanje za Raspberry Pi
Ukupni trošak: Oko 300-500 kn (bez Raspberry Pi-a)
Shema Spajanja
Prvo ćemo spojiti DHT22 senzor na Raspberry Pi.
DHT22 Senzor - Pinovi
DHT22 | Raspberry Pi
---------|---------------
VCC (+) | Pin 1 (3.3V)
DATA | Pin 7 (GPIO 4)
NC | (ne spajaj)
GND (-) | Pin 6 (Ground)
BMP280 Senzor - I2C Spajanje
BMP280 | Raspberry Pi
---------|---------------
VCC | Pin 1 (3.3V)
GND | Pin 9 (Ground)
SCL | Pin 5 (GPIO 3 - SCL)
SDA | Pin 3 (GPIO 2 - SDA)
Važno: Budite oprezni s polaritetom! Provjerite datasheet vašeg senzora jer raspored pinova može varirati.
Priprema Raspberry Pi-a
Prvo ažurirajte sustav i instalirajte potrebne biblioteke:
sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-dev git -y
# Instalirajte potrebne Python biblioteke
pip3 install adafruit-circuitpython-dht
pip3 install adafruit-circuitpython-bmp280
pip3 install RPi.GPIO
Omogućavanje I2C
Za BMP280 senzor morate omogućiti I2C sučelje:
sudo raspi-configOdaberite: Interface Options → I2C → Yes
Restartirajte Raspberry Pi:
sudo rebootPython Kod za Čitanje Senzora
Sada ćemo napisati Python skriptu koja čita podatke iz senzora.
weather_station.py
#!/usr/bin/env python3
import time
import board
import adafruit_dht
import busio
import adafruit_bmp280
from datetime import datetime
# Inicijalizacija DHT22 senzora (GPIO 4)
dht_sensor = adafruit_dht.DHT22(board.D4)
# Inicijalizacija I2C i BMP280 senzora
i2c = busio.I2C(board.SCL, board.SDA)
bmp_sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# Podesi tlak na razini mora za točniju nadmorsku visinu
bmp_sensor.sea_level_pressure = 1013.25
print("Vremenska stanica - pritisni Ctrl+C za izlaz")
print("-" * 50)
while True:
try:
# Čitaj temperaturu i vlažnost iz DHT22
temperature = dht_sensor.temperature
humidity = dht_sensor.humidity
# Čitaj tlak iz BMP280
pressure = bmp_sensor.pressure
altitude = bmp_sensor.altitude
# Trenutno vrijeme
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# Ispis podataka
print(f"\n{timestamp}")
print(f"Temperatura: {temperature:.1f}°C")
print(f"Vlažnost: {humidity:.1f}%")
print(f"Tlak: {pressure:.2f} hPa")
print(f"Nadmorska visina: {altitude:.2f} m")
# Pauza od 5 sekundi
time.sleep(5)
except RuntimeError as e:
# DHT senzori mogu povremeno baciti grešku
print(f"Greška: {e}")
time.sleep(2)
continue
except KeyboardInterrupt:
print("\n\nZaustavljanje...")
break
# Oslobodi resurse
dht_sensor.exit()
Spremite datoteku i pokrenite je:
python3 weather_station.pyTrebali biste vidjeti podatke koji se ažuriraju svakih 5 sekundi!
Spremanje Podataka u Bazu
Za povijesne podatke, možemo koristiti SQLite bazu:
import sqlite3
# Kreiraj bazu podataka
conn = sqlite3.connect('weather_data.db')
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS readings
(timestamp TEXT, temperature REAL, humidity REAL,
pressure REAL, altitude REAL)""")
# Spremanje podataka
c.execute("INSERT INTO readings VALUES (?, ?, ?, ?, ?)",
(timestamp, temperature, humidity, pressure, altitude))
conn.commit()
conn.close()
Web Sučelje s Flask
Dodajmo jednostavno web sučelje za prikaz podataka:
pip3 install flask matplotlibfrom flask import Flask, render_template
import sqlite3
app = Flask(__name__)
@app.route('/')
def index():
conn = sqlite3.connect('weather_data.db')
c = conn.cursor()
c.execute("SELECT * FROM readings ORDER BY timestamp DESC LIMIT 1")
latest = c.fetchone()
conn.close()
return render_template('index.html', data=latest)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Pristupite web sučelju na http://raspberrypi.local:5000
Postavljanje Automatskog Pokretanja
Da bi skripta radila automatski pri pokretanju:
sudo nano /etc/systemd/system/weather-station.service[Unit]
Description=Weather Station Service
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/weather-station
ExecStart=/usr/bin/python3 /home/pi/weather-station/weather_station.py
Restart=always
[Install]
WantedBy=multi-user.target
Omogućite i pokrenite servis:
sudo systemctl enable weather-station.service
sudo systemctl start weather-station.service
Dodatna Poboljšanja
- LCD Ekran: Dodajte 16x2 LCD ekran za lokalni prikaz
- Grafovi: Koristite Grafana za vizualizaciju povijesnih podataka
- Upozorenja: Postavite notifikacije za ekstremne temperature
- Vanjski senzori: Dodajte senzor kiše ili vjetra
Zaključak
Čestitam! Izgradili ste funkcionalnu vremensku stanicu koja prati nekoliko parametara i sprema podatke za buduću analizu. Ovaj projekt je odličan za učenje rada sa senzorima, bazama podataka i web razvoju. Možete ga dalje proširivati dodavanjem novih senzora ili funkcionalnosti!
Česta Pitanja
Koliko je precizan DHT22 senzor?
DHT22 ima točnost ±0.5°C za temperaturu i ±2-5% za vlažnost, što je sasvim dovoljno za kućnu upotrebu.
Mogu li koristiti senzor napolju?
Da, ali trebate ga zaštititi od izravne kiše i sunca. Koristite odgovarajuće kućište s ventilacijom.
Koliko struje troši ovaj projekt?
Raspberry Pi s dva senzora troši oko 5-8W, što je vrlo malo.