Mục lục:

Bộ điều nhiệt dựa trên Arduino: 6 bước
Bộ điều nhiệt dựa trên Arduino: 6 bước

Video: Bộ điều nhiệt dựa trên Arduino: 6 bước

Video: Bộ điều nhiệt dựa trên Arduino: 6 bước
Video: Đo Nhiệt Độ Độ Ẩm Bằng DHT11 Hiển Thị LCD Trên Arduino Uno R3| Điện tử DAT 2024, Tháng bảy
Anonim
Bộ điều nhiệt dựa trên Arduino
Bộ điều nhiệt dựa trên Arduino
Bộ điều nhiệt dựa trên Arduino
Bộ điều nhiệt dựa trên Arduino
Bộ điều nhiệt dựa trên Arduino
Bộ điều nhiệt dựa trên Arduino

Lần này chúng tôi sẽ xây dựng Bộ điều nhiệt dựa trên Arduino, cảm biến nhiệt độ và rơ le. Bạn có thể tìm thấy trên github

Bước 1: Cấu hình

Cấu hình
Cấu hình

Toàn bộ cấu hình được lưu trữ trong Config.h. Bạn có thể thay đổi mã PIN điều khiển rơ le, nhiệt độ đọc, ngưỡng hoặc thời gian.

Bước 2: Định cấu hình Rơle

Giả sử rằng chúng ta muốn có 3 rơ le:

  • ID: 0, PIN: 1, Điểm đặt nhiệt độ: 20
  • ID: 1, PIN: 10, Điểm đặt nhiệt độ: 30
  • ID: 2, PIN: 11, Điểm đặt nhiệt độ: 40

Trước tiên, bạn phải đảm bảo rằng mã PIN bạn chọn chưa được sử dụng. Tất cả các chân có thể được tìm thấy trong Config.h, chúng được xác định bởi các biến bắt đầu bằng DIG_PIN.

Bạn phải chỉnh sửa Config.h và định cấu hình mã PIN, ngưỡng và số lượng rơle. Rõ ràng là một số thuộc tính đã tồn tại, vì vậy bạn chỉ cần chỉnh sửa chúng.

const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; const static uint8_t DIG_PIN_RELAY_2 = 11;

const static uint8_t RELAYS_AMOUNT = 3;

const static int16_t RELAY_TEMP_SET_POINT_0 = 20;

const static int16_t RELAY_TEMP_SET_POINT_1 = 30; const static int16_t RELAY_TEMP_SET_POINT_2 = 40;

Bây giờ chúng ta phải thiết lập rơ le và bộ điều khiển, điều này xảy ra trong RelayDriver.cpp

initRelayHysteresisController (0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0); initRelayHysteresisController (1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresisController (2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

Bước 3: Bộ điều khiển độ trễ

Nó là cái được chọn trong ví dụ ở trên, nó có vài cấu hình bổ sung:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 phút biểu tượng tĩnh uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS cung cấp thời gian chờ cho chuyển tiếp tiếp theo. Hãy tưởng tượng rằng cấu hình từ ví dụ của chúng tôi sẽ bắt đầu hoạt động trong môi trường 40 độ. Điều này sẽ dẫn đến việc kích hoạt cả ba rơ le cùng một lúc. Điều này cuối cùng có thể dẫn đến mức tiêu thụ điện năng cao - tùy thuộc vào những gì bạn đang điều khiển, ví dụ như động cơ điện tiêu thụ nhiều điện hơn trong quá trình khởi động. Trong trường hợp của chúng tôi, rơle chuyển mạch có dòng chảy như sau: rơle thứ nhất đi, đợi 5 phút, thứ hai tiếp tục, chờ 5 phút, thứ ba tiếp tục.

RHC_RELAY_MIN_SWITCH_MS xác định độ trễ, đó là tần số tối thiểu để rơle cụ thể thay đổi trạng thái của nó. Sau khi bật, nó sẽ vẫn hoạt động ít nhất trong khoảng thời gian này, bỏ qua sự thay đổi nhiệt độ. Điều này rất hữu ích khi bạn đang điều khiển động cơ điện, vì mỗi công tắc đều có tác động tiêu cực đến thời gian hoạt động.

Bước 4: Bộ điều khiển PID

Bộ điều khiển PID
Bộ điều khiển PID
Bộ điều khiển PID
Bộ điều khiển PID

Đây là chủ đề nâng cao. Việc triển khai bộ điều khiển như vậy là một nhiệm vụ đơn giản, việc tìm kiếm các cài đặt biên độ phù hợp lại là một câu chuyện khác.

Để sử dụng bộ điều khiển PID, bạn phải thay đổi initRelayHysteresisController (…..) thành initRelayPiDController (….) Và bạn cần tìm cài đặt phù hợp cho nó. Như thường lệ, bạn sẽ tìm thấy chúng trong Config.h

Tôi đã triển khai trình mô phỏng đơn giản trong Java để có thể hình dung kết quả. Bạn có thể tìm thấy nó trong thư mục: pidsimulator. Bên dưới bạn có thể thấy các mô phỏng cho hai bộ điều khiển PID a P. PID không hoàn toàn ổn định vì tôi đã không áp dụng bất kỳ thuật toán phức tạp nào để tìm đúng giá trị.

Trên cả hai ô, nhiệt độ yêu cầu được đặt thành 30 (màu xanh lam). Nhiệt độ hiện tại cho biết dòng đã đọc. Rơ le có hai trạng thái ON và OFF. Khi kích hoạt nhiệt độ giảm 1,5, khi tắt, nhiệt độ tăng 0,5.

Bước 5: Xe buýt nhắn tin

Xe buýt tin nhắn
Xe buýt tin nhắn
Xe buýt tin nhắn
Xe buýt tin nhắn
Xe buýt tin nhắn
Xe buýt tin nhắn
Xe buýt tin nhắn
Xe buýt tin nhắn

Các mô-đun phần mềm khác nhau phải giao tiếp với nhau, hy vọng không phải theo cả hai cách;)

Ví dụ:

  • mô-đun thống kê phải biết khi nào rơle cụ thể bật và tắt,
  • nhấn một nút phải thay đổi nội dung hiển thị và nó cũng phải tạm dừng các dịch vụ có thể tiêu tốn nhiều chu kỳ CPU, ví dụ như đọc nhiệt độ từ cảm biến,
  • sau một thời gian đọc nhiệt độ phải được đổi mới,
  • và như thế….

Mọi mô-đun đều được kết nối với Message Bus và có thể đăng ký các sự kiện cụ thể và có thể tạo ra bất kỳ sự kiện nào (sơ đồ đầu tiên).

Trên sơ đồ thứ hai, chúng ta có thể thấy luồng sự kiện khi nhấn nút.

Một số thành phần có một số tác vụ hơn là cần phải được thực thi định kỳ. Chúng ta có thể gọi các phương thức tương ứng của chúng từ vòng lặp chính, vì chúng ta có Message Bus nên chỉ cần truyền sự kiện bên phải (sơ đồ thứ ba)

Bước 6: Libs

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Tempeosystem…
  • https://github.com/maciejmiklas/ArdLog.git

Đề xuất: