Mục lục:
- Bước 1: Bên trong bộ mã hóa quay
- Bước 2: Sự khốn khổ gây ra nỗi đau thực sự cho nhiều người
- Bước 3: Giải pháp Máy trạng thái hữu hạn (FSM)
- Bước 4: Mã Arduino
- Bước 5: Tích hợp hoàn hảo
Video: Một giải pháp quay Arduino hoàn chỉnh: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Bộ mã hóa quay là các nút điều khiển có thể xoay cho các dự án điện tử, thường được sử dụng với các bộ vi điều khiển họ Arduino. Chúng có thể được sử dụng để tinh chỉnh các thông số, điều hướng menu, di chuyển các đối tượng trên màn hình, đặt các giá trị thuộc bất kỳ loại nào. Chúng là những thay thế phổ biến cho chiết áp, vì chúng có thể được xoay chính xác hơn và vô hạn, chúng tăng hoặc giảm một giá trị riêng biệt tại một thời điểm và thường được tích hợp với một công tắc có thể đẩy cho các chức năng loại lựa chọn. Chúng có đủ hình dạng và kích cỡ, nhưng khó có mức giá thấp nhất như được giải thích bên dưới.
Có vô số bài báo về chi tiết hoạt động và chế độ sử dụng của bộ mã hóa Rotary, cùng nhiều mã mẫu và thư viện về cách sử dụng chúng. Vấn đề duy nhất là không có mô-đun nào hoạt động chính xác 100% với các mô-đun quay của Trung Quốc có giá thấp nhất.
Bước 1: Bên trong bộ mã hóa quay
Phần quay của bộ mã hóa có ba chân (và hai chân nữa cho phần chuyển mạch tùy chọn). Một là điểm chung (GND đen), hai là để xác định hướng khi xoay núm (chúng thường được gọi là CLK xanh và DT đỏ). Cả hai đều được gắn vào chân đầu vào PULLUP của bộ vi điều khiển, làm cho mức CAO là giá trị đọc mặc định của chúng. Khi xoay núm về phía trước (hoặc theo chiều kim đồng hồ), đầu tiên CLK màu xanh lam giảm xuống mức THẤP, sau đó DT màu đỏ theo sau. Rẽ xa hơn, CLK màu xanh lam tăng trở lại mức CAO, sau đó khi bản vá GND chung rời cả hai chân kết nối, DT màu đỏ cũng tăng trở lại mức CAO. Như vậy là hoàn thành một lần đánh dấu FWD đầy đủ (hoặc theo chiều kim đồng hồ). Tương tự đi theo hướng khác BWD (hoặc ngược chiều kim đồng hồ), nhưng bây giờ màu đỏ giảm xuống đầu tiên và màu xanh tăng trở lại sau cùng như thể hiện trong hình ảnh hai cấp độ tương ứng.
Bước 2: Sự khốn khổ gây ra nỗi đau thực sự cho nhiều người
Vấn đề thường gặp đối với những người yêu thích Arduino, đó là các mô-đun bộ mã hóa Rotary giá rẻ trả lại những thay đổi bổ sung về mức đầu ra, gây ra các số đọc sai hướng và thừa. Điều này ngăn cản việc đếm hoàn hảo và không thể tích hợp các mô-đun này vào các dự án quay chính xác. Những lần dội lại này là do chuyển động cơ học của các miếng vá trên các chân kết nối và ngay cả việc áp dụng các tụ điện bổ sung cũng không thể loại bỏ chúng hoàn toàn. Số lần trả lại có thể xuất hiện ở bất kỳ đâu trong các chu kỳ đánh dấu đầy đủ và được minh họa bằng các tình huống thực tế trên hình ảnh.
Bước 3: Giải pháp Máy trạng thái hữu hạn (FSM)
Hình ảnh hiển thị không gian trạng thái đầy đủ của các thay đổi mức có thể xảy ra đối với hai chân (CLK màu xanh lam và DT màu đỏ), cho cả số lần trả lại đúng và sai. Dựa trên máy trạng thái này, một giải pháp hoàn chỉnh có thể được lập trình luôn hoạt động chính xác 100%. Bởi vì giải pháp này không cần có sự chậm trễ khi lọc, nên nó cũng là nhanh nhất có thể. Một lợi ích khác của việc tách không gian trạng thái của chân khỏi chế độ làm việc là người ta có thể áp dụng cả hai chế độ thăm dò hoặc ngắt theo ý thích của mình. Polling hoặc ngắt có thể phát hiện các thay đổi mức độ trên các chân và một quy trình riêng biệt sẽ tính toán trạng thái mới dựa trên trạng thái hiện tại và các sự kiện thực tế của sự thay đổi mức độ.
Bước 4: Mã Arduino
Đoạn mã dưới đây đếm số tích tắc FWD và BWD trên màn hình nối tiếp và cũng tích hợp chức năng chuyển đổi tùy chọn.
// Peter Csurgay 2019-04-10
// Các chân của vòng quay được ánh xạ tới các cổng Arduino
#define SW 21 #define CLK 22 #define DT 23
// Giá trị hiện tại và trước đó của bộ đếm được điều chỉnh bởi con quay
int curVal = 0; int presVal = 0;
// Bảy trạng thái của FSM (máy trạng thái hữu hạn)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
void setup () {
Serial.begin (250000); Serial.println ("Bắt đầu…"); // Mức HIGH sẽ được mặc định cho tất cả các chân pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Cả CLK và DT sẽ loại bỏ các ngắt đối với tất cả các thay đổi ở mức độ AttachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); mountInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// Xử lý công tắc tùy chọn được tích hợp vào một số bộ mã hóa quay if (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Mọi thay đổi về giá trị bộ đếm được hiển thị trong Serial Monitor if (curVal! = PresVal) {Serial.println (curVal); presVal = curVal; }}
// Chuyển đổi Máy trạng thái để thay đổi mức CLK
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (state == SCLK_10) state = SCLK_00; else if (state == SDT_10) state = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (state == SCLK_00) state = SCLK_10; else if (state == SDT_00) state = SDT_10; else if (state == SDT_01) {state = IDLE_11; curVal--; }}}
// Chuyển đổi Máy trạng thái để thay đổi mức DT
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (state == SDT_01) state = SDT_00; else if (state == SCLK_01) state = SCLK_00; } else {if (state == SDT_10) state = IDLE_11; else if (state == SDT_00) state = SDT_01; else if (state == SCLK_00) state = SCLK_01; else if (state == SCLK_10) {state = IDLE_11; curVal ++; }}}
Bước 5: Tích hợp hoàn hảo
Bạn có thể kiểm tra trong video đính kèm rằng giải pháp FSM hoạt động chính xác và nhanh chóng ngay cả trong trường hợp bộ mã hóa quay phạm vi thấp với nhiều hiệu ứng trả lại lẻ tẻ khác nhau.
Đề xuất:
Một giải pháp tầm nhìn giá cả phải chăng với cánh tay robot dựa trên Arduino: 19 bước (có hình ảnh)
Giải pháp tầm nhìn hợp lý với cánh tay robot dựa trên Arduino: Khi chúng ta nói về thị giác máy, chúng ta luôn cảm thấy không thể tiếp cận được. Trong khi chúng tôi thực hiện một bản giới thiệu tầm nhìn có nguồn mở sẽ rất dễ thực hiện cho tất cả mọi người. Trong video này, với camera OpenMV, bất kể khối màu đỏ ở đâu, robot ar
SKY CAM một Giải pháp Máy ảnh Trên không: 10 Bước (Có Hình ảnh)
SKY CAM một Giải pháp Máy ảnh Trên không: Tài liệu hướng dẫn này sẽ hướng dẫn bạn cách tôi tạo hệ thống Cáp Cam điều khiển từ xa (Bán tự động) cho Dự án Sản phẩm Điện tử GCSE của tôi tại Trường học và hy vọng cho phép bạn có thể tạo hệ thống của riêng mình! Đây được coi là một hướng dẫn sơ bộ
Từ một ảnh chụp nhanh đến một bức ảnh tuyệt vời: Giai đoạn một: 17 bước
Từ Ảnh chụp nhanh đến Ảnh tuyệt vời: Giai đoạn một: Chụp ảnh con người và địa điểm trong lễ hội khiêu vũ đường phố có thể rất nhiều màu sắc và thú vị. chúng ta sẽ tự hào biết bao về hoàng tử của chúng ta
Cách tạo một hình ảnh hoàn toàn tập trung từ một số tập trung một phần: 4 bước
Cách Tạo Một Hình Ảnh Tập Trung Hoàn Toàn Từ Một Số Tập Trung Một Phần: Tôi khuyên bạn nên sử dụng phần mềm Helicon Focus. Các phiên bản Windows và Mac có sẵn tại trang web của d-Stidio
Cách diễn giải hướng quay từ công tắc quay kỹ thuật số với PIC: 5 bước
Cách diễn giải hướng quay từ công tắc quay kỹ thuật số với PIC: Mục tiêu của Tài liệu hướng dẫn này là minh họa cách giao diện công tắc xoay kỹ thuật số (được mã hóa vuông góc) với bộ vi điều khiển. Đừng lo lắng, tôi sẽ giải thích những gì? Mã hóa vuông góc? có nghĩa là đối với chúng tôi. Giao diện này và phần mềm đi kèm sẽ