Inhoudsopgave:

Weerstation met Arduino UNO - Ajarnpa
Weerstation met Arduino UNO - Ajarnpa

Video: Weerstation met Arduino UNO - Ajarnpa

Video: Weerstation met Arduino UNO - Ajarnpa
Video: 🇳🇱 ARDUINO MINI-WEERSTATION - Arduino project 2024, November
Anonim
Weerstation met Arduino UNO
Weerstation met Arduino UNO

Gemaakt door: Hazel Yang

Dit project is een weerstation dat een Arduino UNO-bord gebruikt om de gegevensstroom te regelen, een DHT22-sensor om de gegevens te verzamelen en een OLED-scherm om de gegevens weer te geven.

Stap 1: Itemlijst

Lijst met dingen
Lijst met dingen

1. Scherm: OLED, 1.3 Display SH1106, I2C witte kleur ---- PID: 18283

2. Sensor: digitale vochtigheids- en temperatuursensor DHT22 ---- PID: 7375

3. Verbindt: Doorverbindingsdraden ---- PID: 10316 of 10318 of 10312 (afhankelijk van de lengte) of u kunt massieve draad 22 AWG gebruiken ---- PID: 22490

Breadboard ---- PID: 10686 of 10698 of 103142 (afhankelijk van de grootte)

4. Voeding: deze kabel kan alleen worden aangesloten op een USB-poort van een computer en de kabel wordt ook gebruikt voor gegevensoverdracht tussen het IDE- en Arduino-bord. USB-KABEL, A NAAR B, M/M, 0,5 M (1,5 FT) ---- PID: 29862

Of u kunt dit gebruiken om het bord van stroom te voorzien: 5V 2A AC/DC-adapter ---- PID: 10817.

Stap 2: Relatieve introductie

Relatieve introductie
Relatieve introductie
Relatieve introductie
Relatieve introductie

Introductie van scherm: 1,3 OLED-scherm wit

1. U kunt het document met de basisinstellingen en beschrijvingen vinden:

Introductie van de sensor: vochtigheids- en temperatuursensor DHT22 1. U kunt het document met de beschrijvingen vinden:

Stap 3: Verbind het circuit

Sluit het circuit aan
Sluit het circuit aan

De DHT22-sensor stuurt seriële gegevens naar pin 2. Sluit dus de tweede pin van links aan, de "SDA"-pin moet worden aangesloten op pin 2.

Voor het SSH1106-display gebruikt het de analoge pin om te verzenden. Het circuit van het scherm zal een "SCL"-pin zijn naar Arduino's "A5" en "SDA"-pin naar Arduino's "A4". Terwijl de pixelpositiegegevens continu worden verzonden, activeert de weergavefunctie in het programma het commando slechts eenmaal elke keer dat het de gegevens van de sensor leest.

Zowel de sensor als het scherm kunnen de 3,3 V gebruiken om Arduino aan te zetten als DC-voedingsingang. Om van stroom te voorzien, moeten we beide "VCC" -pinnen verbinden met Arduino's "3.3V". En de "GND"-pinnen kunnen eenvoudig worden aangesloten op de "GND"-pin op het Arduino-bord.

Gebruik de USB A naar B kabel, sluit de Arudino aan op de computer.

Stap 4: Bereid je voor om te compileren

"u8glib" voor SSH1106-scherm van Olikraus.

"DHT-sensorbibliotheek" voor DHT22-sensor van Adafruit. U moet de twee bibliotheken downloaden: DHT22-sensorbibliotheek:

U8glib:

En gebruik "bibliotheek beheren" in IDE om ze uit te pakken. Online instructie voor het beheren van bibliotheken:

Stap 5: Testcode voor seriële poort DHT22-sensor

Test coe voor de seriële poort van de DHT22-sensor (die zich in de DHT22-bibliotheek>>voorbeelden bevindt):

(U kunt dit deel overslaan.)

Het is alleen om te testen dat de DHT22-sensor de gegevens normaal leest

#erbij betrekken

#erbij betrekken

#erbij betrekken

#erbij betrekken

#erbij betrekken

#define DHTPIN 2

#definieer DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

ongeldige setup() {

Serieel.begin(9600);

Serial.println(F("DHT22-test!"));

dht.begin();

}

lege lus() {

// Wacht een paar seconden tussen metingen.

vertraging (2000);

// Het lezen van temperatuur of vochtigheid duurt ongeveer 250 milliseconden!

// Sensormetingen kunnen ook tot 2 seconden 'oud' zijn (het is een erg trage sensor)

float h = dht.readHumidity();

// Lees temperatuur als Celsius (de standaard)

float t = dht.readTemperature();

// Lees temperatuur als Fahrenheit (isFahrenheit = waar)

float f = dht.readTemperature(true);

// Controleer of het lezen is mislukt en sluit vroeg af (om het opnieuw te proberen).

if (isnan(h) || isnan(t) || isnan(f)) {

Serial.println(F("Kan niet lezen van DHT-sensor!"));

opbrengst;

}

// Bereken warmte-index in Fahrenheit (de standaard)

float hif = dht.computeHeatIndex(f, h);

// Bereken warmte-index in Celsius (isFahreheit = false)

float hic = dht.computeHeatIndex(t, h, false);

Serial.print(F("Vochtigheid: "));

Seriële.print(h);

Serial.print(F("% temperatuur: "));

Seriële.print(t);

Serial.print(F("°C"));

Serieafdruk(f);

Serial.print(F("°F Warmte-index: "));

Serial.print(hic);

Serial.print(F("°C"));

Serial.print(hif);

Serial.println(F("°F"));

}

// Klik na het compileren van het programma op TOOLS >> SERIAL MONITOR om de gegevens te controleren.

// Einde van het testprogramma.

Stap 6: code voor het project

#erbij betrekken

#erbij betrekken

#erbij betrekken

#erbij betrekken

#erbij betrekken

#define DHTPIN 2

#definieer DHTTYPE DHT22

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);

DHT-sensor (DHTPIN, DHTTYPE);

nietig tekenen (nietig) {

u8g.setFont(u8g_font_unifont);

float h = sensor.readHumidity();

// Lees temperatuur als Celsius (de standaard)

float t = sensor.readTemperature();

// Controleer of het lezen is mislukt en sluit vroeg af (om het opnieuw te proberen).

if (isnan(h) || isnan(t)) {

u8g.print("Fout.");

voor(;;);

opbrengst;

}

u8g.setPrintPos(4, 10);

u8g.print("Temperatuur(C):");

u8g.setPrintPos(4, 25);

u8g.print(t);

u8g.setPrintPos(4, 40);

u8g.print("Vochtigheid(%):");

u8g.setPrintPos(4, 55);

u8g.print(h);

}

ongeldige setup (ongeldig) {

u8g.setRot180();

Serieel.begin(9600);

sensor.begin();

}

lege lus (leegte) {

// foto lus

u8g.firstPage();

doen {

tekenen();

} while(u8g.nextPage());

// herbouw de afbeelding na enige vertraging (2000);

}

// Einde van het hoofdprogramma.

Stap 7: Beschrijving

Beschrijving
Beschrijving

Initialiseer vervolgens het pincircuit voor het Arduino-bord. Omdat de sensorbibliotheek de gegevens nodig heeft om het object te declareren.

En u kunt de gegevens van de sensor testen door de uitvoergegevens te controleren via digitale pin 2 met behulp van de functie "Serial.print()". Omdat de frequentie van datatransmissie ongeveer 1 meting per 2 seconden is (wat 0,5 Hz is), moeten we, wanneer geprogrammeerd in Arduino IDE, de vertraging binnen de lusfunctie instellen op meer dan 2 seconden. Er is dus een "delay (2000)" in de lusfunctie. Dit zorgt ervoor dat de gegevens regelmatig worden ververst. In de functie "tekenen", haal de gegevens uit de seriële datapoort en plaats ze in zwevende getallen met behulp van de functies "readHumidity" en "readTemperature".

Print de luchtvochtigheid en temperatuur uit met behulp van de printfunctie in het "u8glib"-bestand. U kunt de positie aanpassen door het nummer te wijzigen in de functie "setPrintPos". De printfunctie kan de tekst en cijfers direct weergeven.

Geef de seriële poort een vertraging van 10 seconden om de hardware in te stellen. Roep dan de startfunctie voor de sensor aan. Volgens mijn circuit stond mijn scherm ondersteboven. Dus ik heb ook een "setRot180" -functie toegevoegd om het display te draaien.

De lusfunctie van het Arduino-bord is de belangrijkste functie. Het blijft de tekenfunctie oproepen om de tekst en gegevens weer te geven telkens wanneer de sensor wordt vernieuwd.

Het scherm ziet er als volgt uit:

U kunt de Arduino UNO loskoppelen van uw computer en deze van stroom voorzien met behulp van een 5V DC-voedingsadapter die is aangesloten op de 2,1 mm-voedingsaansluiting. Het slaat het programma op in zijn schijf en kan het programma continu opnieuw uitvoeren nadat het is ingeschakeld.

Aanbevolen: