IOT

Điều khiển máy bơm Arduino + Màn hình HMI ĐÁ

Hệ thống điều tiết thông minh dạng phiến là một công nghệ đã được cấp bằng sáng chế, được sử dụng trong hệ thống điều khiển dòng chính của nhiều trạm thủy điện lớn, vừa và nhỏ và trạm bơm. Dự án này sử dụng màn hình cảm ứng công nghiệp nối tiếp đáng tin cậy làm giao diện người-máy để hiển thị các thông số hàng ngày và liều lượng lưỡi dao theo thời gian thực, công suất đầu ra, dòng chảy tức thời và các thông tin khác, khi hiển thị hiệu ứng hoạt động. Ngoài ra, bản ghi điều kiện làm việc và biểu mẫu cảnh báo lỗi cũng được lên kế hoạch, và nút chờ được dành riêng. Dự án sử dụng màn hình cảm ứng nối tiếp để hiển thị dữ liệu và hiển thị chỉ báo slide. Các phụ kiện như sau:  

  1. SVI056WT-01 màn hình cảm ứng nối tiếp và bảng tiếp hợp STONE V1.2;  
  2. Phù hợp với bảng điều khiển Arduino;  

Mô tả ngắn gọn chức năng giao diện của hệ thống điều khiển điều chỉnh lưỡi dao thông minh.  

Có ba nút trên trang chủ, có thể được nhấn để vào hệ thống trạm thủy điện, hệ thống điều khiển trạm bơm và giao diện hướng dẫn sử dụng tương ứng (với các nút dự phòng). Giao diện hướng dẫn sử dụng hiển thị khung của hệ thống demo, như thể hiện trong hình sau:

(Giao diện trang chủ của Phần mềm trình diễn điều khiển điều chỉnh thông minh Enlegi Blade)

Tại giao diện hệ thống điều khiển của trạm thủy điện có các nút khởi động, dừng và hiển thị trạng thái, định mức (bao gồm điện áp định mức, công suất định mức và tốc độ định mức) và giá trị điều khiển (bao gồm độ cao góc của cánh quạt và công suất đầu ra). Ngoài ra, cũng có thể có các nút nhảy trang khác (như trang chủ, nhật ký tình trạng làm việc, báo lỗi và các nút chờ khác). Trong nhật ký điều kiện làm việc và trang cảnh báo lỗi, có thể có nút quay lại để quay lại trang này. Sơ đồ dưới đây:

           (Giao diện hiển thị điều khiển thông minh của trạm thủy điện)

Mô tả chức năng giao diện hệ thống điều khiển trạm bơm. Sơ đồ dưới đây:

                            (Giao diện chức năng của hệ thống điều khiển trạm bơm)

Trong giao diện chức năng của trạm bơm, chế độ có thể được thay đổi và nguồn điện của toàn hệ thống có thể được bật và tắt để hiển thị các thông số mô phỏng thực tế (như liều lượng lưỡi cắt, tốc độ dòng chảy tức thời, công suất đầu ra), và các thông số khác Các giao diện có thể được chuyển đổi (chẳng hạn như nhật ký tình trạng làm việc, báo cáo cảnh báo lỗi). Đồng thời, các giá trị hệ thống (tổng số cánh, công suất định mức, tốc độ dòng đặt) cũng có thể được hiển thị. Các giao diện khác cũng có thể có, chẳng hạn như nhật ký điều kiện làm việc (nội dung có thể là số thứ tự, thời gian xảy ra, chi tiết sự kiện, ghi chú), cảnh báo lỗi (nội dung có thể được đặt hàng số, thời gian xảy ra, chi tiết cảnh báo, mã cảnh báo, v.v.), hai giao diện có thể có một nút quay lại, có thể quay lại giao diện chức năng trạm bơm.  

Ý tưởng làm việc:  

Màn hình cổng nối tiếp đóng vai trò như giao diện người-máy và giao tiếp với bảng phát triển Arduino. Bo mạch chấp nhận các lệnh nút của màn hình cảm ứng và truyền dữ liệu đến màn hình cảm ứng cổng nối tiếp để hiển thị đồng bộ. Thang đo trượt được thiết kế để hiển thị động lực thay đổi công suất. Các biểu tượng của công tắc nguồn, dao nguồn, công tắc chế độ và dao chế độ được thiết kế để tạo các tệp ICON và làm sinh động các hiệu ứng hành động của chế độ và nguồn điện. Ngoài ra, trong chương trình demo Arduino, bộ nhớ biến đổi được sử dụng để đọc các hướng dẫn để có được trạng thái nguồn điện và chế độ, để điều khiển mô phỏng dữ liệu đầu ra và xuất cửa sổ số lượng thực tế ra màn hình cổng nối tiếp.  

Các bước làm việc:  

  1. Thiết lập phần cứng;  
  2. A) Kết nối bảng phát triển Arduino và USB với bảng chuyển đổi cổng nối tiếp;  
  3. B) Kết nối Màn hình cảm ứng ĐÁ với bảng tải xuống cổng nối tiếp USB và bảng bộ điều hợp cổng nối tiếp USB sang cổng nối tiếp;  
  4. C) Kết nối màn hình cổng nối tiếp và nguồn cấp nguồn cho bảng phát triển Arduino;  

3, thông qua gỡ lỗi lệnh nối tiếp, và sau đó lập trình để đạt được các chức năng trình diễn điều khiển trạm bơm và điều khiển trạm thủy điện.  

 Tiếp theo, ghi lại quá trình phát triển cụ thể.

Đầu tiên, thiết lập kết nối phần cứng.  

Làm tốt công tác kết nối các bộ phận theo quy trình làm việc:

Tiếp theo, làm cho hình ảnh chỉ báo ICON.  

Các nút và ICONS dao được sử dụng trong dự án này được thực hiện như sau:  

(Công tắc điều khiển trạm bơm, tệp ICON hoạt hình dao 8. Sơ đồ duyệt danh sách ICO)

Trong thanh menu của HỘP CÔNG CỤ ĐÁ (phần mềm GUI Design), nhấp vào Công cụ tạo biểu tượng trong trình đơn Công cụ (T) để bật lên hộp thoại Công cụ biểu tượng. Nhấp vào “chọn đường dẫn hình ảnh” ở cuối hộp thoại để chọn Đường dẫn hình ảnh biểu tượng. Nhấp vào nút “Tạo tệp ICON” để đóng gói các tệp BMP trong đường dẫn Tạo tệp “.ico” được nền tảng STONE TOOL BOX (phần mềm thiết kế GUI) nhận dạng. Nhấp vào nút "Xem trước" để xem danh sách ICON trong tệp nén ".ico" đã nhập.  

Nút tạo ảnh động cho Biểu tượng BMP, pixel như trên (Điều khiển Biểu tượng Biến được sản xuất, kích thước cùng vị trí nên giống nhau), điều khiển trạm bơm 8 hình cắt vào cùng một thư mục. Sau đó, ở bên trái màn hình HỘP CÔNG CỤ ĐÁ (phần mềm GUI Design), chọn thẻ Trang biểu tượng và Thêm nó vào tệp nén 7. Ico bằng cách sử dụng nút “Thêm biểu tượng” trong “Danh sách biểu tượng”. Đặt tất cả 6 bức tranh về trạng thái công tắc điều khiển của trạm thủy điện vào một thư mục khác và sắp xếp chúng theo thứ tự 1-6. Tạo “6. Ico ”và sau đó ở bên trái của HỘP DỤNG CỤ ĐÁ (Phần mềm thiết kế GUI) trên màn hình, chọn thẻ Trang biểu tượng và Thêm thẻ “6 đã nén. Tệp Ico ”bằng cách sử dụng nút“ Thêm biểu tượng ”trong“ Danh sách biểu tượng ”.  

Bây giờ nhập Biểu tượng hình ảnh vào HỘP CÔNG CỤ ĐÁ (phần mềm GUI Design) và làm nút chức năng.  

Phương thức 9-biến-hoạt hình icon.wmv vẫn được sử dụng trong dự án này để thực hiện chức năng hoạt ảnh. Ảnh chụp màn hình cài đặt thông số như sau:  

            (Biểu đồ thuộc tính ICON biến thiên của trạm thủy điện)

Từ trái sang phải là thông số ICON Cài đặt ba biến của trang chức năng trạm thủy điện: khởi động, dừng và trạng thái. Địa chỉ bộ nhớ của chúng được đặt giống nhau (0x0039) và phạm vi dữ liệu của chúng giống nhau, vì vậy các thay đổi của chúng được đồng bộ hóa. Các tệp biểu tượng là 6. Ico, và số sê-ri Biểu tượng tương ứng là 1 và 2, 3 và 4, 6 và 5, được chọn theo trạng thái thực tế.  

Hiệu ứng hoạt hình trạng thái nút đạt được thông qua các nút tăng dần. Hình sau cho thấy các thông số của nút tăng bên trái và nút giảm giá trị ở bên phải. Địa chỉ là 0x0039, cả hai đều giống với địa chỉ của ICON biến.

(Biểu đồ thuộc tính của nút tăng dần có cùng địa chỉ bộ nhớ)

(Biểu đồ thuộc tính ICON biến đổi của trạng thái dao nút của trạm bơm)

Từ trái sang phải là thông số ICON Cài đặt bốn biến của trang chức năng trạm bơm: nút nguồn, dao nguồn, dao chế độ và nút chế độ. Ở đây, cả hai tệp Icon đều là 8.ICO và phạm vi dữ liệu của chúng giống nhau, trong đó địa chỉ bộ nhớ giống nhau sẽ được thay đổi đồng bộ.  

Hoạt ảnh trạng thái nút cũng được triển khai bằng các nút tăng dần. Trong hình sau, bên trái nút giảm nguồn điện và bên phải nút tăng chế độ là các thông số của nút giảm nguồn điện. Địa chỉ giống với Variable ICON ở trên, lần lượt là 0x0009 và 0x000A. Đây không chỉ là chế độ xử lý giới hạn của nút bóng bàn.

(Biểu đồ thuộc tính nút tăng dần của trạng thái nút trạm bơm Biến ICON Biến có cùng địa chỉ bộ nhớ)

Ngoài ra, công suất đầu ra của trạm bơm được hiển thị bằng biểu tượng trượt, như trong hình bên dưới:

Các thuộc tính tham số của nó là:

(Biểu tượng trượt công suất đầu ra của trạm bơm - hộp đặc tính của thang trượt)

Biểu tượng của điều khiển tỷ lệ Slider này được gọi trong DEMO 24.ico chính thức. Phương pháp thêm tệp 24.ico tương tự như trên. Địa chỉ bộ nhớ của điều khiển Thang đo trượt này là 0x0180, có thể được viết trong chương trình MCU với lệnh 82 (như trong hình trên, phạm vi được đặt thành 0-100) để thay đổi vị trí của biểu tượng.  

Đặc biệt, trạng thái của nguồn điện và các nút chế độ trong dự án này được đọc ra từ địa chỉ bộ nhớ 0x0009, 0x000A và 0x0039 của màn hình cổng nối tiếp thông qua lệnh 83. 

Các hướng dẫn sử dụng như sau:  

A5 5A 04 83 00 09 02  

Phản hồi của màn hình cổng nối tiếp như sau:  

A5 5A 08 83 00 09 02 00 01 00 02  

00 01 sau là dữ liệu 2byte của 0x0009, 00 02 là dữ liệu 2byte của 0x000A.  

Đọc hướng dẫn 0x0039 dưới dạng:  

A5 5A 04 83 00 39 01  

Phản hồi của màn hình cổng nối tiếp là:  

A5 5A 06 83 00 39 01 00 01 hoặc  

A5 5A 06 83 00 39 01 00 02  

Có năm địa chỉ dữ liệu để ghi vào: 0x0020, 0x0160, 0x0180, 0x0260, 0x0280.  

Trong đó, địa chỉ liều lượng lá là 0x0020, số nguyên 2 bit là 2 byte. Nó có thể được truyền tới màn hình cảm ứng thông qua cổng nối tiếp.  

Để chuyển 11 sang hiển thị biến dữ liệu trên màn hình cảm ứng, sử dụng lệnh sau:  

A5 5A 05 82 00 20 00 0B  

Lập trình gỡ lỗi.  

Mã như sau:  

/*

  frank8

  STONE và arduino COMM, hệ thống enlaiji yepian.

  Bật đèn LED trong một giây, sau đó tắt trong một giây, liên tục.

  Địa chỉ 0x0020 là địa chỉ của num YePian;

  Địa chỉ 0x0160 là địa chỉ của bây giờ LiuLiang;

  Địa chỉ 0x0180 là địa chỉ của Bengzhan outpower;

  Địa chỉ 0x0260 là địa chỉ của Jiejujiao;

  Địa chỉ 0x0280 là địa chỉ của nguồn nước;

  Địa chỉ 0x0009 là phím nguồn bengzhan;

  Địa chỉ 0x000A là khóa chế độ bengzhan;

  Địa chỉ 0x0039 là phím nguồn nước.

  Mã ví dụ này nằm trong tệp của Frank. 20210611

 */

// Chân 13 có một đèn LED được kết nối trên hầu hết các bảng Arduino.

// đặt tên cho nó:

int led = 13;

int iYePian = 0; // 0x0020 cho Số của YePian!

int iGongLu = 0; // 0x0180 cho The GongLu!

int iLiuLiang = 0; // 0x0160 cho LiuLiang bây giờ!

int iJiao = 0; // 0x0260 cho The JieJuJiao!

int iGongLuWater = 0; // 0x0280 cho The Water GongLu! giá trị là 0-50000!

int iLed = 1; // thời gian trễ num.

int iNum = 0; // đọc trong char num.

int iNum2 = 0; // đọc trong char num2 cho ShuiDianZhan!

int iPower = 2; // tượng phím 0x0009

int iMode = 2; // tượng phím 0x000A

int iPowerWater = 2; // tượng phím 0x0039

// quy trình thiết lập chạy một lần khi bạn nhấn đặt lại:

void setup () {                

  // khởi tạo chân số dưới dạng đầu ra.

  pinMode (led, OUTPUT);     

  Serial.begin (115200); // Mở chức năng giao tiếp nối tiếp và đợi cổng nối tiếp mở  

trong khi (! nối tiếp) {

    ; // đợi cổng nối tiếp kết nối. Chỉ cần cho Leonardo

  }  

}

// thói quen lặp đi lặp lại mãi mãi:

void loop () {

  int inChar;

    nếu (iLed == 900) {     

// ——- đọc giá trị 0x0009 và 0x000A ———- 

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x04); // chiều dài

            Serial.write (0x83); // đọc!

            Serial.write (0x00); // địa chỉ của phím nguồn bengzhan!

            Serial.write (0x09); // địa chỉ của phím nguồn bengzhan!

            Serial.write (0x02); // 0x0009 (nguồn) và 0x000A (chế độ)

// ——— Giá trị trả về của STONE sẽ là “A5 5A 08 83 00 09 02 00 01 00 02” ——

     }

/ * ——————————————————————————- * /     

    nếu (iLed == 800) {     

// ——- đọc giá trị 0x0039 ———- 

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x04); // chiều dài

            Serial.write (0x83); // đọc!

            Serial.write (0x00); // địa chỉ của khóa Nguồn ShuiDianZhan!

            Serial.write (0x39); // địa chỉ của phím nguồn ShuiDianZhan!

            Serial.write (0x01); // 0x0039 (phím nguồn) 

// ——— Giá trị trả về của STONE sẽ là “A5 5A 06 83 00 39 01 00 01“ ——

     }

  // Đọc tin nhắn được gửi bởi cổng nối tiếp:

  if (Serial.available ()> 0) {inChar = Serial.read (); }

  if (inChar == 0x09) {iNum = 1; }

  if ((inChar == 0x02) && (iNum == 1)) {iNum = 2; }

  if ((inChar == 0x00) && (iNum == 2)) {iNum = 3; }

  if ((inChar == 0x01) && (iNum == 3)) {  

      iNum = 4;

      if (iPower! = 1) {

          iPower = 1; // BẬT nguồn!

          iLiuLiang = 10;

          iGongLu = 50;

          iYePian = 10;         

      }

   }

   if ((inChar == 0x02) && (iNum == 3)) {  

      iNum = 4;

      iPower = 2; //tắt nguồn!

      iLiuLiang = 0;

      iGongLu = 0;

      iYePian = 0;

   }

   if ((inChar == 0x00) && (iNum == 4)) {iNum = 5; }

   if ((inChar == 0x01) && (iNum == 5)) {  

      iNum = 0;

      iMode = 1; // Chế độ tốt!

   }

   if ((inChar == 0x02) && (iNum == 5)) {  

      iNum = 0;

      iMode = 2; // Chế độ đang TẮT!

      if (iPower == 1) iGongLu = 60; // GongLu được đặt 60%!

   }

  // —————— Phím 0x0009 và 0x000A đọc ok! iPower \ iMode ok! —————————-

   if (inChar == 0x39) {iNum2 = 1; }

  if ((inChar == 0x01) && (iNum2 == 1)) {iNum2 = 2; }

  if ((inChar == 0x00) && (iNum2 == 2)) {iNum2 = 3; }

  if ((inChar == 0x01) && (iNum2 == 3)) {  

      iNum2 = 0;

      if (iPowerWater! = 1) {

          iPowerWater = 1; // BẬT nguồn!       

          iJiao = 0;

          iGongLuWater = 0;

      }

   }

   if ((inChar == 0x02) && (iNum2 == 3)) {  

      iNum2 = 0;

      iPowerWater = 2; //tắt nguồn!

   }

  // —————— Phím 0x0039 đọc ok! iPowerWater ok! —————————-

  độ trễ (1); 

  iLed + = 1;   

  nếu (iLed == 500) {  

      digitalWrite (dẫn đầu, CAO); // bật đèn LED (CAO là mức điện áp)

                  // delay (500); // đợi trong giây lát, Phạm vi: 200-2000

           nếu (iPower == 1) { 

               iYePian + = 1; // phạm vi: 1-20

               iLiuLiang + = 1; // phạm vi: 1-20

               if (iMode == 1) iGongLu + = 5; // phạm vi: 1-20

           }   

           if (iYePian> = 14) {iYePian = 10; }   

           if (iGongLu> = 70) {iGongLu = 50; }   

           if (iLiuLiang> = 14) {iLiuLiang = 10; }   

           nếu (iPowerWater == 2) { 

               iJiao + = 1; // phạm vi: 1-20

               iGongLuWater + = 2; // phạm vi: 1-20

           }   

           if (iJiao> = 60) { 

               iJiao = 0; 

               iGongLuWater = 0; 

           }   

  }    

  if (iLed> = 1000) {    

      digitalWrite (dẫn đầu, THẤP); // tắt đèn LED bằng cách đặt điện áp THẤP

                  // delay (500); // đợi trong giây lát, phạm vi: 200-2000

      iLed = 1;

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write (0x00); // địa chỉ của YePian

            Serial.write (0x20); // địa chỉ của YePian

            Serial.write (0x00);

            Serial.write (iYePian);

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write (0x01); // địa chỉ của GongLu

            Serial.write (0x80); // địa chỉ của GongLu

            Serial.write (0x00);

            Serial.write (iGongLu);

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write (0x01); // địa chỉ của LiuLiang

            Serial.write (0x60); // địa chỉ của LiuLiang

            Serial.write (iLiuLiang); // LiuLiang là 2800–3200

            Serial.write (0x80);            

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write (0x02); // địa chỉ của ShuiDianZhan JieJuJiao

            Serial.write (0x60); // địa chỉ của ShuiDianZhan JieJuJiao

            Serial.write (0x00);

            Serial.write (iJiao);

            Serial.write (0xA5); // ”A5 ″ là 165

            Serial.write (0x5A); // "5A" là 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write (0x02); // địa chỉ của ShuiDianZhan out Power

            Serial.write (0x80); // địa chỉ của ShuiDianZhan out Power;

            Serial.write (iGongLuWater); // ShuiDianZhan ra Powe là 0–32000

            Serial.write (0x00);            

  }    

Cuối cùng, quay video trực tuyến. 

Kết nối nguồn điện và giao tiếp, kết nối bảng phát triển Arduino với giao tiếp cổng nối tiếp, quan sát giao diện chức năng của trạm thủy điện và trạm bơm trên màn hình cổng nối tiếp, chạm vào công tắc để kiểm tra hiệu ứng, trượt biểu tượng và dữ liệu bình thường .  

Nguồn: Plato Data Intelligence