Mục lục:

Trạm thời tiết sử dụng Arduino UNO: 7 bước
Trạm thời tiết sử dụng Arduino UNO: 7 bước

Video: Trạm thời tiết sử dụng Arduino UNO: 7 bước

Video: Trạm thời tiết sử dụng Arduino UNO: 7 bước
Video: Học lập trình Arduino KHÔNG HỀ KHÓ - Bộ KIT học tập Arduino Uno R3 BLK 2024, Tháng mười một
Anonim
Trạm thời tiết sử dụng Arduino UNO
Trạm thời tiết sử dụng Arduino UNO

Tạo bởi: Hazel Yang

Dự án này là một trạm thời tiết sử dụng bảng Arduino UNO để điều khiển luồng dữ liệu, cảm biến DHT22 để thu thập dữ liệu và màn hình OLED để hiển thị dữ liệu.

Bước 1: Danh sách mặt hàng

Danh sách mặt hàng
Danh sách mặt hàng

1. Màn hình: OLED, 1.3 Hiển thị SH1106, I2C màu trắng ---- PID: 18283

2. Cảm biến: Cảm biến nhiệt độ và độ ẩm kỹ thuật số DHT22 ---- PID: 7375

3. Kết nối: Jumper Wires ---- PID: 10316 hoặc 10318 hoặc 10312 (tùy thuộc vào độ dài) hoặc bạn có thể sử dụng dây rắn 22 AWG ---- PID: 22490

Breadboard ---- PID: 10686 hoặc 10698 hoặc 103142 (tùy thuộc vào kích thước)

4. Nguồn: Cáp này chỉ có thể kết nối với cổng USB máy tính và cáp cũng được sử dụng để truyền dữ liệu giữa IDE và bảng Arduino. CÁP USB, A TO B, M / M, 0,5M (1,5FT) ---- PID: 29862

Hoặc bạn có thể sử dụng cái này để cấp nguồn cho bo mạch: Bộ chuyển đổi AC / DC 5V 2A ---- PID: 10817.

Bước 2: Giới thiệu tương đối

Giới thiệu tương đối
Giới thiệu tương đối
Giới thiệu tương đối
Giới thiệu tương đối

Giới thiệu màn hình: Màn hình OLED 1,3 Màu trắng

1. Bạn có thể tìm thấy tài liệu hiển thị thiết lập và mô tả cơ bản:

Giới thiệu về Cảm biến: Cảm biến Độ ẩm và Nhiệt độ DHT22 1. Bạn có thể tìm thấy tài liệu hiển thị các mô tả:

Bước 3: Kết nối mạch

Kết nối mạch
Kết nối mạch

Cảm biến DHT22 gửi dữ liệu nối tiếp đến chân 2. Vì vậy, hãy kết nối chân thứ hai từ bên trái, chân "SDA" phải được kết nối với chân 2.

Đối với màn hình SSH1106, nó sử dụng chân analog để truyền. Mạch của màn hình sẽ là chân "SCL" tới chân "A5" của Arduino và "SDA" tới "A4" của Arduino. Trong khi dữ liệu vị trí pixel đang truyền liên tục, chức năng hiển thị trong chương trình chỉ kích hoạt lệnh một lần mỗi khi nó đọc dữ liệu từ cảm biến.

Cả cảm biến và màn hình đều có thể sử dụng 3.3V để cấp nguồn cho Arduino làm đầu vào nguồn DC. Để cấp nguồn, chúng ta cần kết nối cả hai chân "VCC" với "3.3V" của Arduino. Và các chân "GND" có thể được kết nối đơn giản với chân "GND" trên bảng Arduino.

Sử dụng cáp USB A đến B, kết nối Arudino với máy tính.

Bước 4: Chuẩn bị biên dịch

"u8glib" cho màn hình SSH1106 từ Olikraus.

"Thư viện cảm biến DHT" cho cảm biến DHT22 từ Adafruit. Bạn nên tải xuống hai thư viện: Thư viện cảm biến DHT22:

U8glib:

Và sử dụng "quản lý thư viện" trong IDE để giải nén chúng. Hướng dẫn quản lý thư viện trực tuyến:

Bước 5: Mã kiểm tra cho cổng nối tiếp của cảm biến DHT22

Hệ số kiểm tra cho cổng nối tiếp cảm biến DHT22 (nằm trong thư viện DHT22 >> ví dụ):

(Bạn có thể bỏ qua phần này.)

Nó chỉ để kiểm tra cảm biến DHT22 đọc dữ liệu bình thường

#bao gồm

#bao gồm

#bao gồm

#bao gồm

#bao gồm

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht (DHTPIN, DHTTYPE);

void setup () {

Serial.begin (9600);

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

dht.begin ();

}

void loop () {

// Chờ một vài giây giữa các lần đo.

chậm trễ (2000);

// Đọc nhiệt độ hoặc độ ẩm mất khoảng 250 mili giây!

// Kết quả đọc của cảm biến cũng có thể 'cũ' lên đến 2 giây (cảm biến rất chậm)

float h = dht.readHumidity ();

// Đọc nhiệt độ dưới dạng độ C (mặc định)

float t = dht.readTempe Heat ();

// Đọc nhiệt độ là Fahrenheit (isFahrenheit = true)

float f = dht.readTempe Heat (true);

// Kiểm tra xem có lần đọc nào không và thoát ra sớm (để thử lại).

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

Serial.println (F ("Không thể đọc từ cảm biến DHT!"));

trở lại;

}

// Tính toán chỉ số nhiệt bằng Fahrenheit (mặc định)

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

// Tính toán chỉ số nhiệt theo độ C (isFahbroken = false)

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

Serial.print (F ("Độ ẩm:"));

Serial.print (h);

Serial.print (F ("% Nhiệt độ:"));

Serial.print (t);

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

Serial.print (f);

Serial.print (F ("° F Chỉ số nhiệt:"));

Serial.print (hic);

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

Serial.print (hif);

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

}

// Sau khi biên dịch xong chương trình, bấm TOOLS >> SERIAL MONITOR để kiểm tra dữ liệu.

// Kết thúc chương trình thử nghiệm.

Bước 6: Mã cho dự án

#bao gồm

#bao gồm

#bao gồm

#bao gồm

#bao gồm

#define DHTPIN 2

#define DHTTYPE DHT22

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);

Cảm biến DHT (DHTPIN, DHTTYPE);

void draw (void) {

u8g.setFont (u8g_font_unifont);

float h = sensor.readHumidity ();

// Đọc nhiệt độ dưới dạng độ C (mặc định)

float t = sensor.readTempe Heat ();

// Kiểm tra xem có lần đọc nào không và thoát ra sớm (để thử lại).

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

u8g.print ("Lỗi.");

vì(;;);

trở lại;

}

u8g.setPrintPos (4, 10);

u8g.print ("Nhiệt độ (C):");

u8g.setPrintPos (4, 25);

u8g.print (t);

u8g.setPrintPos (4, 40);

u8g.print ("Độ ẩm (%):");

u8g.setPrintPos (4, 55);

u8g.print (h);

}

thiết lập void (void) {

u8g.setRot180 ();

Serial.begin (9600);

sensor.begin ();

}

vòng lặp void (void) {

// vòng lặp hình ảnh

u8g.firstPage ();

làm {

vẽ();

} while (u8g.nextPage ());

// xây dựng lại hình ảnh sau một số thời gian trì hoãn (2000);

}

// Kết thúc chương trình chính.

Bước 7: Mô tả

Sự miêu tả
Sự miêu tả

Sau đó, khởi tạo mạch pin cho bảng Arduino. Vì thư viện cảm biến yêu cầu dữ liệu để khai báo đối tượng.

Và bạn có thể kiểm tra dữ liệu của cảm biến bằng cách giám sát dữ liệu đầu ra thông qua chân số 2 bằng cách sử dụng chức năng có tên "Serial.print ()". Bởi vì tần số truyền dữ liệu là khoảng 1 lần đọc mỗi 2 giây (là 0,5 Hz), khi được lập trình trong Arduino IDE, chúng ta cần đặt độ trễ bên trong hàm vòng lặp là hơn 2 giây. Vì vậy, có một "delay (2000)" bên trong hàm vòng lặp. Điều này đảm bảo dữ liệu sẽ được làm mới thường xuyên. Trong hàm "draw", lấy dữ liệu từ cổng dữ liệu nối tiếp và đưa chúng vào thành số thực bằng cách sử dụng các hàm "readHumidity" và "readTempe Heat".

In ra độ ẩm và nhiệt độ bằng chức năng in trong tệp "u8glib". Bạn có thể điều chỉnh vị trí bằng cách thay đổi số trong chức năng "setPrintPos". Chức năng in có thể hiển thị trực tiếp văn bản và số.

Để thiết lập phần cứng, hãy đặt cổng nối tiếp trễ 10 giây. Sau đó gọi hàm bắt đầu cho cảm biến. Theo mạch của tôi, màn hình của tôi bị lộn ngược. Vì vậy, tôi cũng bao gồm một chức năng "setRot180" để xoay màn hình.

Chức năng vòng lặp của bảng Arduino là chức năng chính. Nó tiếp tục gọi chức năng vẽ để hiển thị văn bản và dữ liệu mỗi khi cảm biến được làm mới.

Màn hình trông như thế này:

Bạn có thể ngắt kết nối Arduino UNO khỏi máy tính và cấp nguồn cho nó bằng bộ chuyển đổi nguồn 5V DC kết nối với giắc cắm 2,1mm của nó. Nó lưu trữ chương trình bên trong ổ đĩa của nó và có thể liên tục chạy lại chương trình sau khi được cấp nguồn.

Đề xuất: