Cuprins:

Stația meteo folosind Arduino UNO: 7 pași
Stația meteo folosind Arduino UNO: 7 pași

Video: Stația meteo folosind Arduino UNO: 7 pași

Video: Stația meteo folosind Arduino UNO: 7 pași
Video: Proiect SAIIV - Stație meteo Arduino - instalația experimentală 2024, Noiembrie
Anonim
Stația meteo folosind Arduino UNO
Stația meteo folosind Arduino UNO

Creat de: Hazel Yang

Acest proiect este o stație meteo care folosește o placă Arduino UNO pentru a controla fluxul de date, un senzor DHT22 pentru a colecta datele și un ecran OLED pentru a afișa datele.

Pasul 1: Lista articolelor

Lista de obiecte
Lista de obiecte

1. Ecran: OLED, afișaj 1.3 SH1106, culoare alb I2C ---- PID: 18283

2. Senzor: senzor digital de umiditate și temperatură DHT22 ---- PID: 7375

3. Se conectează: Jumper Wires ---- PID: 10316 sau 10318 sau 10312 (depinde de lungime) sau puteți utiliza fir solid 22 AWG ---- PID: 22490

Panou ---- PID: 10686 sau 10698 sau 103142 (depinde de dimensiune)

4. Alimentare: Acest cablu se poate conecta numai cu un port USB al computerului, iar cablul este utilizat și pentru transferul de date între placa IDE și placa Arduino. Cablu USB, de la A LA B, M / M, 0,5M (1,5FT) ---- PID: 29862

Sau puteți utiliza acest lucru pentru a alimenta placa: 5V 2A AC / DC Adapter ---- PID: 10817.

Pasul 2: Introducere relativă

Introducere relativă
Introducere relativă
Introducere relativă
Introducere relativă

Introducere ecran: Afișaj OLED de 1,3 alb

1. Puteți găsi documentul care prezintă configurarea și descrierile de bază:

Introducerea senzorului: senzor de umiditate și temperatură DHT22 1. Puteți găsi documentul care prezintă descrierile:

Pasul 3: Conectați circuitul

Conectați circuitul
Conectați circuitul

Senzorul DHT22 trimite date seriale la pinul 2. Deci, conectați al doilea pin din stânga, pinul "SDA" ar trebui să fie conectat la pinul 2.

Pentru afișajul SSH1106, folosește pinul analogic pentru a transmite. Circuitul ecranului va fi pinul „SCL” la „A5” Arduino și pinul „SDA” la „A4” Arduino. În timp ce datele despre poziția pixelilor se transmit în mod continuu, funcția de afișare din program declanșează comanda doar o dată de fiecare dată când citește datele de la senzor.

Atât senzorul, cât și ecranul pot folosi 3,3V pentru a porni Arduino ca intrare de curent continuu. Pentru a alimenta, trebuie să conectăm ambii pini „VCC” la „3.3V” Arduino. Și pinii „GND” pot fi pur și simplu conectați la pinul „GND” de pe placa Arduino.

Utilizați cablul USB A la B, conectați Arudino la computer.

Pasul 4: Pregătiți-vă pentru a compila

„u8glib” pentru ecranul SSH1106 de la Olikraus.

„Biblioteca senzorului DHT” pentru senzorul DHT22 de la Adafruit. Ar trebui să descărcați cele două biblioteci: biblioteca senzorului DHT22:

U8glib:

Și utilizați „gestionați biblioteca” în IDE pentru a le dezarhiva. Instrucțiuni online de gestionare a bibliotecilor:

Pasul 5: Cod de test pentru portul serial al senzorului DHT22

Testează coe pentru portul serial al senzorului DHT22 (care se află în biblioteca DHT22 >> exemple):

(Puteți sări peste această parte.)

Doar pentru a testa senzorul DHT22 citește datele în mod normal

#include

#include

#include

#include

#include

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht (DHTPIN, DHTTYPE);

configurare nulă () {

Serial.begin (9600);

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

dht.begin ();

}

bucla nulă () {

// Așteptați câteva secunde între măsurători.

întârziere (2000);

// Temperatura de citire sau umiditatea durează aproximativ 250 de milisecunde!

// Citirile senzorilor pot avea, de asemenea, o vechime de până la 2 secunde (este un senzor foarte lent)

float h = dht.readHumidity ();

// Citiți temperatura în grade Celsius (implicit)

float t = dht.readTemperature ();

// Citiți temperatura ca Fahrenheit (isFahrenheit = true)

float f = dht.readTemperature (adevărat);

// Verificați dacă citirile au eșuat și ieșiți devreme (pentru a încerca din nou).

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

Serial.println (F ("Nu s-a citit de la senzorul DHT!"));

întoarcere;

}

// Calculați indicele de căldură în Fahrenheit (implicit)

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

// Calculați indicele de căldură în Celsius (isFahreheit = false)

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

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

Serial.print (h);

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

Serial.print (t);

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

Serial.print (f);

Serial.print (F ("° F Indice de căldură:"));

Serial.print (hic);

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

Serial.print (hif);

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

}

// După compilarea programului, faceți clic pe INSTRUMENTE >> MONITOR SERIAL pentru a verifica datele.

// Sfârșitul programului de testare.

Pasul 6: Cod pentru proiect

#include

#include

#include

#include

#include

#define DHTPIN 2

#define DHTTYPE DHT22

#include „U8glib.h”

U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);

Senzor DHT (DHTPIN, DHTTYPE);

draw nul (nul) {

u8g.setFont (u8g_font_unifont);

float h = sensor.readHumidity ();

// Citiți temperatura în grade Celsius (implicit)

float t = sensor.readTemperature ();

// Verificați dacă citirile au eșuat și ieșiți devreme (pentru a încerca din nou).

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

u8g.print („Eroare”);

pentru(;;);

întoarcere;

}

u8g.setPrintPos (4, 10);

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

u8g.setPrintPos (4, 25);

u8g.print (t);

u8g.setPrintPos (4, 40);

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

u8g.setPrintPos (4, 55);

u8g.print (h);

}

configurare nulă (nulă) {

u8g.setRot180 ();

Serial.begin (9600);

sensor.begin ();

}

bucla void (nul) {

// bucla de imagine

u8g.firstPage ();

face {

a desena();

} while (u8g.nextPage ());

// reconstruiți imaginea după o întârziere de întârziere (2000);

}

// Sfârșitul programului principal.

Pasul 7: Descriere

Descriere
Descriere

Apoi, inițializați circuitele pin pentru placa Arduino. Deoarece biblioteca senzorilor necesită date pentru a declara obiectul.

Și puteți testa datele senzorului monitorizând datele de ieșire prin pinul digital 2 utilizând funcția numită „Serial.print ()”. Deoarece frecvența de transmitere a datelor este de aproximativ 1 citire la fiecare 2 secunde (care este 0,5 Hz), atunci când este programat în Arduino IDE, trebuie să setăm întârzierea în funcția buclei să fie mai mare de 2 secunde. Deci, există o „întârziere (2000)” în interiorul funcției de buclă. Acest lucru asigură actualizarea frecventă a datelor. În funcția „draw”, obțineți datele din portul de date serial și puneți-le în numerele plutitoare folosind funcțiile „readHumidity” și „readTemperature”.

Imprimați umiditatea și temperatura folosind funcția de imprimare din fișierul „u8glib”. Puteți regla poziția schimbând numărul din funcția „setPrintPos”. Funcția de imprimare poate afișa direct textul și numerele.

Pentru a configura hardware-ul, acordați portului serial o întârziere de 10 secunde. Apelați apoi funcția de început pentru senzor. Conform circuitului meu, ecranul meu era pe dos. Așa că am inclus și o funcție „setRot180” pentru a roti afișajul.

Funcția de buclă a plăcii Arduino este funcția principală. Continuă să apeleze funcția de extragere pentru a afișa textul și datele de fiecare dată când senzorul este reîmprospătat.

Ecranul arată astfel:

Puteți deconecta Arduino UNO de la computer și alimenta-l folosind un adaptor de alimentare de 5V DC conectat la mufa de alimentare de 2,1 mm. Acesta stochează programul în unitatea sa și poate rula continuu programul din nou după ce a fost alimentat.

Recomandat: