Innholdsfortegnelse:

Værstasjon som bruker Arduino UNO: 7 trinn
Værstasjon som bruker Arduino UNO: 7 trinn

Video: Værstasjon som bruker Arduino UNO: 7 trinn

Video: Værstasjon som bruker Arduino UNO: 7 trinn
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, November
Anonim
Værstasjon som bruker Arduino UNO
Værstasjon som bruker Arduino UNO

Laget av: Hazel Yang

Dette prosjektet er en værstasjon som bruker et Arduino UNO -kort for å kontrollere dataflyten, en DHT22 -sensor for å samle data og en OLED -skjerm for å vise dataene.

Trinn 1: Vareliste

Vareliste
Vareliste

1. Skjerm: OLED, 1,3 skjerm SH1106, I2C hvit farge ---- PID: 18283

2. Sensor: Digital fuktighets- og temperatursensor DHT22 ---- PID: 7375

3. Kobler til: Jumper Wires ---- PID: 10316 eller 10318 eller 10312 (avhenger av lengden) eller du kan bruke solid wire 22 AWG ---- PID: 22490

Brødbrett ---- PID: 10686 eller 10698 eller 103142 (avhenger av størrelse)

4. Strøm: Denne kabelen kan bare kobles til en datamaskin USB -port, og kabelen brukes også til dataoverføring mellom IDE og Arduino -kortet. USB-KABEL, A TIL B, M/M, 0,5M (1,5FT) ---- PID: 29862

Eller du kan bruke dette til å drive kortet: 5V 2A AC/DC Adapter ---- PID: 10817.

Trinn 2: Relativ introduksjon

Relativ introduksjon
Relativ introduksjon
Relativ introduksjon
Relativ introduksjon

Introduksjon av skjermen: 1,3 OLED -skjerm hvit

1. Du finner dokumentet som viser det grunnleggende oppsettet og beskrivelsene:

Introduksjon av sensor: Fuktighets- og temperatursensor DHT22 1. Du finner dokumentet som viser beskrivelsene:

Trinn 3: Koble til kretsen

Koble til kretsen
Koble til kretsen

DHT22 -sensoren sender serielle data til pinne 2. Så, koble den andre pinnen fra venstre, "SDA" -pinnen skal kobles til pinne 2.

For SSH1106 -skjermen bruker den den analoge pinnen til å overføre. Kretsene på skjermen vil være "SCL" -pinne til Arduinos "A5" og "SDA" -pinne til Arduinos "A4". Mens pixelposisjonsdata overfører kontinuerlig, utløser visningsfunksjonen i programmet bare kommandoen en gang hver gang den leser dataene fra sensoren.

Både sensoren og skjermen kan bruke 3,3V til å slå på Arduino som DC -inngang. For å få strøm må vi koble begge "VCC" -pinnene til Arduinos "3.3V". Og "GND" -pinnene kan ganske enkelt kobles til "GND" -pinnen på Arduino -kortet.

Bruk USB A til B -kabelen, koble Arudino til datamaskinen.

Trinn 4: Forbered deg på å kompilere

"u8glib" for SSH1106 -skjerm fra Olikraus.

"DHT -sensorbibliotek" for DHT22 -sensor fra Adafruit. Du bør laste ned de to bibliotekene: DHT22 sensorbibliotek:

U8glib:

Og bruk "administrer bibliotek" i IDE for å gjøre dem pakket ut. Online instruksjon for administrering av biblioteker:

Trinn 5: Testkode for DHT22 Sensor Serial Port

Test coe for DHT22 sensor seriell port (som er inne i DHT22 biblioteket >> eksempler):

(Du kan hoppe over denne delen.)

Det er bare å teste DHT22 -sensoren som leser data normalt

#inkludere

#inkludere

#inkludere

#inkludere

#inkludere

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht (DHTPIN, DHTTYPE);

ugyldig oppsett () {

Serial.begin (9600);

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

dht.begin ();

}

void loop () {

// Vent noen sekunder mellom målingene.

forsinkelse (2000);

// Å lese temperatur eller fuktighet tar omtrent 250 millisekunder!

// Sensoravlesninger kan også være opptil 2 sekunder 'gamle' (det er en veldig treg sensor)

float h = dht.readHumidity ();

// Les temperaturen som Celsius (standard)

float t = dht.readTemperature ();

// Les temperaturen som Fahrenheit (isFahrenheit = true)

float f = dht.readTemperature (true);

// Kontroller om noen av lesningene mislyktes, og avslutt tidlig (for å prøve igjen).

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

Serial.println (F ("Kunne ikke lese fra DHT -sensor!"));

komme tilbake;

}

// Beregn varmeindeks i Fahrenheit (standard)

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

// Beregn varmeindeks i Celsius (isFahreheit = false)

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

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

Serial.print (h);

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

Serial.print (t);

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

Serial.print (f);

Serial.print (F ("° F Varmeindeks:"));

Serial.print (hic);

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

Serial.print (hif);

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

}

// Etter å ha kompilert programmet, klikk på VERKTØY >> SERIALMONITOR for å kontrollere dataene.

// Slutt på testprogrammet.

Trinn 6: Kode for prosjektet

#inkludere

#inkludere

#inkludere

#inkludere

#inkludere

#define DHTPIN 2

#define DHTTYPE DHT22

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);

DHT -sensor (DHTPIN, DHTTYPE);

void draw (void) {

u8g.setFont (u8g_font_unifont);

float h = sensor.readHumidity ();

// Les temperaturen som Celsius (standard)

float t = sensor.readTemperature ();

// Kontroller om noen av lesningene mislyktes, og avslutt tidlig (for å prøve igjen).

hvis (isnan (h) || isnan (t)) {

u8g.print ("Feil.");

til(;;);

komme tilbake;

}

u8g.setPrintPos (4, 10);

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

u8g.setPrintPos (4, 25);

u8g.print (t);

u8g.setPrintPos (4, 40);

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

u8g.setPrintPos (4, 55);

u8g.print (h);

}

ugyldig oppsett (void) {

u8g.setRot180 ();

Serial.begin (9600);

sensor.begin ();

}

void loop (void) {

// bildesløyfe

u8g.firstPage ();

gjør {

tegne();

} mens (u8g.nextPage ());

// gjenoppbygge bildet etter en forsinkelse (2000);

}

// Slutt på hovedprogrammet.

Trinn 7: Beskrivelse

Beskrivelse
Beskrivelse

Initialiser deretter stiftkretsen for Arduino -kortet. Fordi sensorbiblioteket krever at dataene deklarerer objektet.

Og du kan teste sensorens data ved å overvåke utdataene via digital pin 2 ved å bruke funksjonen "Serial.print ()". Fordi frekvensen for dataoverføring er omtrent 1 lesing hvert 2. sekund (som er 0,5 Hz), når vi programmerer den i Arduino IDE, må vi sette forsinkelsen inne i sløyfefunksjonen til å være mer enn 2 sekunder. Så det er en "forsinkelse (2000)" inne i sløyfefunksjonen. Dette sikrer at dataene oppdateres ofte. I funksjonen "draw", hent dataene fra den serielle dataporten og sett dem inn i flytende tall ved hjelp av "readHumidity" og "readTemperature" funksjonene.

Skriv ut fuktigheten og temperaturen ved å bruke utskriftsfunksjonen i "u8glib" -filen. Du kan justere posisjonen ved å endre nummeret i "setPrintPos" -funksjonen. Utskriftsfunksjonen kan direkte vise teksten og tallene.

Gi serieporten en forsinkelse på 10 sekunder for å konfigurere maskinvaren. Ring deretter til startfunksjonen for sensoren. I følge kretsen min var skjermen min opp ned. Så jeg inkluderte også en "setRot180" -funksjon for å rotere skjermen.

Sløyfefunksjonen til Arduino -kortet er hovedfunksjonen. Det fortsetter å ringe tegnefunksjonen for å vise tekst og data hver gang sensoren oppdateres.

Skjermen ser slik ut:

Du kan koble Arduino UNO fra datamaskinen og slå den på med en 5V likestrømadapter som kobles til 2,1 mm strømkontakten. Den lagrer programmet inne i stasjonen og kan kjøre programmet kontinuerlig igjen etter å ha blitt slått på.

Anbefalt: