Talaan ng mga Nilalaman:

Station ng Panahon Gamit ang Arduino UNO: 7 Mga Hakbang
Station ng Panahon Gamit ang Arduino UNO: 7 Mga Hakbang

Video: Station ng Panahon Gamit ang Arduino UNO: 7 Mga Hakbang

Video: Station ng Panahon Gamit ang Arduino UNO: 7 Mga Hakbang
Video: МАСТЕР-КЛАСС по Arduino | Полный семинар по программированию за 90 минут! 2024, Hulyo
Anonim
Weather Station Gamit ang Arduino UNO
Weather Station Gamit ang Arduino UNO

Nilikha ni: Hazel Yang

Ang proyektong ito ay isang istasyon ng panahon gamit ang isang Arduino UNO board upang makontrol ang daloy ng data, isang sensor ng DHT22 upang mangolekta ng data at isang OLED screen upang maipakita ang data.

Hakbang 1: Listahan ng Item

Listahan ng Item
Listahan ng Item

1. Screen: OLED, 1.3 Display SH1106, I2C puting kulay ---- PID: 18283

2. Sensor: Digital Humidity at Temperatura Sensor DHT22 ---- PID: 7375

3. Kumokonekta: Jumper Wires ---- PID: 10316 o 10318 o 10312 (nakasalalay sa haba) o maaari mong gamitin ang solidong wire 22 AWG ---- PID: 22490

Breadboard ---- PID: 10686 o 10698 o 103142 (nakasalalay sa laki)

4. Lakas: Ang cable na ito ay maaari lamang kumonekta sa isang computer USB port at ang cable ay ginagamit din para sa paglilipat ng data sa pagitan ng IDE at Arduino board. USB CABLE, A TO B, M / M, 0.5M (1.5FT) ---- PID: 29862

O maaari mo itong gamitin upang mapagana ang board: 5V 2A AC / DC Adapter ---- PID: 10817.

Hakbang 2: Kamag-anak na Panimula

Kamag-anak Panimula
Kamag-anak Panimula
Kamag-anak Panimula
Kamag-anak Panimula

Panimula ng Screen: 1.3 OLED Display White

1. Mahahanap mo ang dokumento na nagpapakita ng pangunahing pag-set up at mga paglalarawan:

Panimula ng Sensor: Humidity and Temperature Sensor DHT22 1. Maaari mong makita ang dokumento na nagpapakita ng mga paglalarawan:

Hakbang 3: Ikonekta ang Circuit

Ikonekta ang Circuit
Ikonekta ang Circuit

Nagpapadala ang sensor ng DHT22 ng serial data sa pin 2. Kaya, ikonekta ang pangalawang pin mula sa kaliwa, ang "SDA" na pin ay dapat na konektado sa pin 2.

Para sa display ng SSH1106, gumagamit ito ng analog pin upang maipadala. Ang circuitry ng screen ay magiging "SCL" na pin sa "A5" ni Arduino at "SDA" na pin sa "A4" ni Arduino. Habang ang data ng posisyon ng pixel ay patuloy na nagpapadala, ang pagpapaandar ng display sa programa ay nagpapalitaw lamang ng utos nang isang beses sa tuwing binabasa nito ang data mula sa sensor.

Ang parehong sensor at screen ay maaaring gumamit ng 3.3V sa lakas sa Arduino bilang isang DC power input. Upang mapangyarihan, kailangan naming ikonekta ang parehong mga "VCC" na pin sa "3.3V" ni Arduino. At ang mga pin na "GND" ay maaaring konektado lamang sa "GND" na pin sa Arduino board.

Gamitin ang USB A to B cable, ikonekta ang Arudino sa computer.

Hakbang 4: Maghanda sa Pag-ipon

"u8glib" para sa screen ng SSH1106 mula sa Olikraus.

"DHT sensor library" para sa DHT22 sensor mula sa Adafruit. Dapat mong i-download ang dalawang aklatan: DHT22 sensor library:

U8glib:

At gamitin ang "pamahalaan ang library" sa IDE upang gawing ma-zip ang mga ito. Online na tagubilin ng pamamahala ng mga aklatan:

Hakbang 5: Code ng Pagsubok para sa DHT22 Sensor Serial Port

Subukan ang coe para sa serial port ng sensor ng DHT22 (na nasa loob ng aklatan ng DHT22 >> mga halimbawa):

(Maaari mong laktawan ang bahaging ito.)

Ito ay upang subukan lamang ang DHT22 sensor na nagbabasa ng data nang normal

# isama

# isama

# isama

# isama

# isama

# tukuyin ang DHTPIN 2

# tukuyin ang DHTTYPE DHT22

DHT dht (DHTPIN, DHTTYPE);

walang bisa ang pag-setup () {

Serial.begin (9600);

Serial.println (F ("pagsubok sa DHT22!"));

dht.begin ();

}

void loop () {

// Maghintay ng ilang segundo sa pagitan ng mga sukat.

pagkaantala (2000);

// Ang temperatura sa pagbabasa o halumigmig ay tumatagal ng halos 250 milliseconds!

// Ang mga pagbasa ng sensor ay maaari ring hanggang sa 2 segundo na 'luma' (ito ay isang napakabagal ng sensor)

float h = dht.readHumidity ();

// Basahin ang temperatura bilang Celsius (ang default)

float t = dht.readTemperature ();

// Basahin ang temperatura bilang Fahrenheit (isFahrenheit = totoo)

float f = dht.readTemperature (totoo);

// Suriin kung may nabasa na nabigo at lumabas nang maaga (upang subukang muli).

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

Serial.println (F ("Nabigong basahin mula sa sensor ng DHT!"));

bumalik;

}

// Compute heat index sa Fahrenheit (ang default)

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

// Compute heat index sa Celsius (isFahreheit = false)

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

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

Serial.print (h);

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

Serial.print (t);

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

Serial.print (f);

Serial.print (F ("° F Heat index:"));

Serial.print (hic);

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

Serial.print (hif);

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

}

// Matapos maipon ang programa, i-click ang TOOLS >> SERIAL MONITOR upang suriin ang data.

// Pagtatapos ng programa sa pagsubok.

Hakbang 6: Code para sa Proyekto

# isama

# isama

# isama

# isama

# isama

# tukuyin ang DHTPIN 2

# tukuyin ang DHTTYPE DHT22

# isama ang "U8glib.h"

U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);

DHT sensor (DHTPIN, DHTTYPE);

walang bisa draw (void) {

u8g.setFont (u8g_font_unifont);

float h = sensor.readHumidity ();

// Basahin ang temperatura bilang Celsius (ang default)

float t = sensor.readTemperature ();

// Suriin kung may nabasa na nabigo at lumabas nang maaga (upang subukang muli).

kung (isnan (h) || isnan (t)) {

u8g.print ("Error.");

para sa (;;);

bumalik;

}

u8g.setPrintPos (4, 10);

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

u8g.setPrintPos (4, 25);

u8g.print (t);

u8g.setPrintPos (4, 40);

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

u8g.setPrintPos (4, 55);

u8g.print (h);

}

void setup (void) {

u8g.setRot180 ();

Serial.begin (9600);

sensor.begin ();

}

walang bisa loop (walang bisa) {

// picture loop

u8g.firstPage ();

gawin

iguhit ();

} habang (u8g.nextPage ());

// muling itayo ang larawan pagkatapos ng ilang pagkaantala ng pagkaantala (2000);

}

// Pagtatapos ng pangunahing programa.

Hakbang 7: Paglalarawan

Paglalarawan
Paglalarawan

Pagkatapos, ipasimula ang circuitry ng pin para sa Arduino board. Dahil kinakailangan ng sensor library ang data upang ideklara ang object.

At maaari mong subukan ang data ng sensor sa pamamagitan ng pagsubaybay sa output data sa pamamagitan ng digital pin 2 sa pamamagitan ng paggamit ng pagpapaandar na tinatawag na "Serial.print ()". Dahil ang dalas ng paghahatid ng data ay halos 1 pagbabasa bawat 2 segundo (na kung saan ay 0.5 Hz), kapag na-program sa Arduino IDE, kailangan nating itakda ang pagkaantala sa loob ng pag-andar ng loop na higit sa 2 segundo. Kaya mayroong isang "pagkaantala (2000)" sa loob ng pag-andar ng loop. Tinitiyak nito na mai-refresh ang data nang madalas. Sa function na "gumuhit", kunin ang data mula sa serial data port at ilagay ang mga ito sa float number gamit ang "readHumidity" at "readTemperature" na mga function.

I-print ang halumigmig at temperatura gamit ang pagpapa-print sa file na "u8glib". Maaari mong ayusin ang posisyon sa pamamagitan ng pagbabago ng numero sa pag-andar na "setPrintPos". Ang pag-print function ay maaaring direktang ipakita ang teksto at mga numero.

Upang i-set up ang hardware, bigyan ang serial port ng 10 segundo na pagkaantala. Pagkatapos ay tawagan ang simulang pagpapaandar para sa sensor. Ayon sa aking circuit, nakabaligtad ang aking screen. Kaya nagsama rin ako ng isang "setRot180" na pagpapaandar upang paikutin ang display.

Ang pagpapaandar ng loop ng Arduino board ay ang pangunahing pag-andar. Patuloy itong tumatawag sa paggana ng pagguhit upang ipakita ang teksto at data sa tuwing nai-refresh ang sensor.

Ganito ang hitsura ng screen:

Maaari mong idiskonekta ang Arduino UNO mula sa iyong computer at i-power ito gamit ang isang 5V DC power adapter na kumokonekta sa 2.1mm power jack nito. Iniimbak nito ang programa sa loob ng drive nito at maaaring patuloy na patakbuhin muli ang programa pagkatapos na mapatakbo.

Inirerekumendang: