- Vật liệu thiết yếu
- Bộ mã hóa quay hoạt động như thế nào?
- Các loại mã hóa quay
- Sơ đồ và mô tả của bộ mã hóa quay KY-040
- Sơ đồ mạch mã hóa vòng quay Arduino
- Lập trình Arduino của bạn cho bộ mã hóa quay
- Hoạt động của bộ mã hóa quay với Arduino
Một encoder Rotary là một thiết bị đầu vào mà giúp người dùng tương tác với hệ thống. Nó trông giống như một chiết áp Radio nhưng nó tạo ra một chuỗi các xung làm cho ứng dụng của nó trở nên độc đáo. Khi núm của Bộ mã hóa được xoay, nó sẽ quay theo các bước nhỏ giúp nó được sử dụng để điều khiển động cơ bước / Servo, điều hướng qua một chuỗi menu và Tăng / giảm giá trị của một số và hơn thế nữa.
Trong bài viết này, chúng ta sẽ tìm hiểu về các loại Rotary Encoders và cách thức hoạt động của nó. Chúng tôi cũng sẽ giao diện nó với Arduino và kiểm soát giá trị của một số nguyên bằng cách xoay Bộ mã hóa và hiển thị giá trị của nó trên màn hình LCD 16 * 2. Vào cuối hướng dẫn này, bạn sẽ cảm thấy thoải mái với việc sử dụng Bộ mã hóa quay cho các dự án của mình. Vậy hãy bắt đầu…
Vật liệu thiết yếu
- Bộ mã hóa quay (KY-040)
- Arduino UNO
- 16 * 2 LCD chữ và số
- Chiết áp 10k
- Breadboard
- Kết nối dây
Bộ mã hóa quay hoạt động như thế nào?
Rotary Encoder là một bộ chuyển đổi điện cơ, có nghĩa là nó chuyển đổi các chuyển động cơ học thành các xung điện tử. Nó bao gồm một núm mà khi xoay sẽ di chuyển từng bước và tạo ra một chuỗi các tàu xung với độ rộng được xác định trước cho mỗi bước. Có nhiều loại Bộ mã hóa, mỗi loại có cơ chế hoạt động riêng, chúng ta sẽ tìm hiểu về các loại sau nhưng bây giờ chúng ta hãy chỉ tập trung vào Bộ mã hóa tăng dần KY040 vì chúng ta đang sử dụng nó cho phần hướng dẫn của mình.
Cấu trúc cơ học bên trong cho Bộ mã hóa được hiển thị bên dưới. Về cơ bản, nó bao gồm một đĩa tròn (màu xám) với các miếng đệm dẫn điện (màu đồng) được đặt trên đầu đĩa tròn này. Các miếng dẫn điện này được đặt cách nhau một khoảng bằng nhau như hình bên dưới. Các chân Đầu ra được cố định trên đầu đĩa tròn này, sao cho khi xoay núm, các miếng dẫn điện tiếp xúc với các chân đầu ra. Ở đây có hai chân đầu ra, Đầu ra A và Đầu ra B như trong hình bên dưới.
Dạng sóng đầu ra được tạo ra bởi chân Đầu ra A và Đầu ra B được hiển thị bằng màu xanh lam và xanh lục tương ứng. Khi miếng đệm dẫn điện nằm ngay dưới chân pin, nó tăng cao dẫn đến đúng thời gian và khi miếng đệm dẫn điện di chuyển ra xa chân cắm xuống thấp dẫn đến thời gian tắt của dạng sóng được hiển thị ở trên. Bây giờ, nếu chúng ta đếm số lượng xung, chúng ta sẽ có thể xác định được bộ mã hóa đã được di chuyển bao nhiêu bước.
Bây giờ câu hỏi có thể nảy sinh rằng, tại sao chúng ta cần hai tín hiệu xung khi một tín hiệu đủ để đếm số bước thực hiện trong khi xoay núm. Điều này là do chúng ta cần xác định núm đã được xoay theo hướng nào. Nếu bạn nhìn vào hai xung, bạn có thể nhận thấy rằng cả hai đều lệch pha nhau 90 °. Do đó khi xoay núm theo chiều kim đồng hồ, Đầu ra A sẽ lên cao trước và khi xoay núm ngược chiều kim đồng hồ, Đầu ra B sẽ lên cao trước.
Các loại mã hóa quay
Có nhiều loại bộ mã hóa quay trên thị trường, nhà thiết kế có thể chọn một loại tùy theo ứng dụng của mình. Các loại phổ biến nhất được liệt kê dưới đây
- Mã hóa gia tăng
- Bộ mã hóa tuyệt đối
- Bộ mã hóa từ tính
- Bộ mã hóa quang học
- Bộ mã hóa Laser
Các bộ mã hóa này được phân loại dựa trên công nghệ cảm biến và tín hiệu đầu ra, bộ mã hóa tăng dần và mã hóa tuyệt đối được phân loại dựa trên tín hiệu đầu ra và bộ mã hóa từ tính, quang học và laser được phân loại dựa trên công nghệ cảm biến. Bộ mã hóa được sử dụng ở đây là Bộ mã hóa kiểu tăng dần.
Sơ đồ và mô tả của bộ mã hóa quay KY-040
Sơ đồ chân của bộ mã hóa vòng quay loại tăng dần KY-040 được hiển thị bên dưới
Hai chân đầu tiên (Ground và Vcc) được sử dụng để cấp nguồn cho Bộ mã hóa, thường sử dụng nguồn + 5V. Ngoài việc xoay núm theo hướng khôn ngoan và ngược chiều kim đồng hồ, bộ mã hóa còn có một công tắc (Hoạt động thấp) có thể được nhấn bằng cách nhấn vào núm bên trong. Tín hiệu từ công tắc này được lấy qua chân 3 (Công tắc). Cuối cùng, nó có hai chân đầu ra tạo ra các dạng sóng như đã thảo luận ở trên. Bây giờ chúng ta hãy tìm hiểu cách giao diện nó với Arduino.
Sơ đồ mạch mã hóa vòng quay Arduino
Sơ đồ mạch hoàn chỉnh cho Bộ mã hóa vòng quay giao diện với Arduino được hiển thị trong hình dưới đây
Bộ mã hóa quay có 5 chân theo thứ tự được hiển thị trong nhãn ở trên. Hai chân đầu tiên là Ground và Vcc được kết nối với Ground và chân + 5V của Arduino. Công tắc của bộ mã hóa được kết nối với chân kỹ thuật số D10 và cũng được kéo lên cao thông qua một điện trở 1k. Hai chân đầu ra được kết nối tương ứng với D9 và D8.
Để hiển thị giá trị của biến sẽ được tăng hoặc giảm bằng cách xoay bộ mã hóa Rotary, chúng ta cần một mô-đun hiển thị. Màn hình được sử dụng ở đây thường là màn hình LCD 16 * 2 Alpha số. Chúng tôi đã kết nối màn hình hoạt động ở chế độ 4 bit và đã cấp nguồn cho nó bằng chân + 5V của Arduino. Chiết áp được sử dụng để điều chỉnh độ tương phản của màn hình LCD. Nếu bạn muốn biết thêm về màn hình LCD Giao diện với Arduino, hãy làm theo liên kết. Mạch hoàn chỉnh có thể được xây dựng trên đầu của một breadboard, của tôi trông giống như thế này bên dưới khi tất cả các kết nối đã được thực hiện.
Lập trình Arduino của bạn cho bộ mã hóa quay
Việc lập trình bảng Arduino để giao tiếp với Bộ mã hóa quay với nó khá dễ dàng và dễ dàng nếu bạn đã hiểu nguyên lý hoạt động của Bộ mã hóa quay. Chúng ta chỉ cần đọc số lượng xung để xác định xem bộ mã hóa đã thực hiện bao nhiêu vòng và kiểm tra xem xung nào đã tăng cao trước để tìm ra hướng mà bộ mã hóa đã được quay. Trong hướng dẫn này, chúng tôi sẽ hiển thị số đang được tăng hoặc giảm trên hàng đầu tiên của màn hình LCD và hướng của Bộ mã hóa ở dòng thứ hai. Các chương trình hoàn chỉnh để thực hiện điều tương tự có thể được tìm thấy ở dưới cùng của trang này với một trình diễn video, nó không đòi hỏi bất kỳ thư viện. Bây giờ, hãy chia chương trình thành các phần nhỏ để hiểu cách làm việc.
Vì chúng tôi đã sử dụng màn hình LCD, chúng tôi bao gồm thư viện Tinh thể lỏng mà theo mặc định, nó có trong Arduino IDE. Sau đó, chúng tôi xác định các chân để kết nối LCD với Arduino. Cuối cùng, chúng tôi khởi tạo màn hình LCD trên các chân đó.
#include
Tiếp theo bên trong chức năng cài đặt , chúng tôi hiển thị thông báo giới thiệu trên màn hình LCD, sau đó đợi 2 giây để người dùng có thể đọc được thông báo đó. Điều này nhằm đảm bảo rằng màn hình LCD hoạt động bình thường.
lcd.print ("Bộ mã hóa quay"); // Dòng thông báo Intro 1 lcd.setCursor (0, 1); lcd.print ("Với Arduino"); // Dòng thông báo Intro delay 2 (2000); lcd.clear ();
Bộ mã hóa Rotary có ba chân đầu ra sẽ là chân INPUT cho Arduino. Ba chân này lần lượt là Switch, Output A và Output B. Chúng được khai báo là Đầu vào bằng cách sử dụng hàm pinMode như hình dưới đây.
// khai báo chế độ pin PinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Bên trong chức năng thiết lập void , chúng tôi đọc trạng thái của chân A đầu ra để kiểm tra trạng thái cuối cùng của chân. Sau đó, chúng tôi sẽ sử dụng thông tin này để so sánh với giá trị mới để kiểm tra xem chân nào (Đầu ra A hoặc Đầu ra B) đã tăng cao.
Previous_Output = digitalRead (Encoder_OuputA); // Đọc giá trị ban đầu của đầu ra A
Cuối cùng bên trong chức năng vòng lặp chính, chúng ta phải so sánh giá trị của Đầu ra A và Đầu ra B với Đầu ra trước đó để kiểm tra xem cái nào cao trước. Điều này có thể được thực hiện đơn giản bằng cách so sánh giá trị của đầu ra hiện tại của A và B với đầu ra trước đó như hình dưới đây.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Mã hóa_Count); lcd.setCursor (0, 1); lcd.print ("Theo chiều kim đồng hồ"); }
Trong đoạn mã trên, điều kiện if thứ hai được thực thi nếu Đầu ra B thay đổi so với đầu ra trước đó. Trong trường hợp đó, giá trị của biến bộ mã hóa được tăng lên và màn hình LCD hiển thị rằng bộ mã hóa được quay theo chiều kim đồng hồ . Tương tự như vậy nếu đó nếu tình trạng thất bại, trong tiếp theo khác điều kiện chúng ta giảm các biến và hiển thị mà bộ mã hóa được luân chuyển trong ngược hướng. Mã cho cùng một được hiển thị bên dưới.
else { Encoder_Count--; lcd.clear (); lcd.print (Mã hóa_Count); lcd.setCursor (0, 1); lcd.print ("Ngược chiều kim đồng hồ"); } }
Cuối cùng, khi kết thúc vòng lặp chính, chúng ta phải cập nhật giá trị đầu ra trước đó với giá trị đầu ra hiện tại để vòng lặp có thể được lặp lại với cùng một logic. Đoạn mã sau làm tương tự
Previous_Output = digitalRead (Encoder_OuputA);
Một điều tùy chọn khác là kiểm tra xem công tắc trên Bộ mã hóa có được nhấn hay không. Điều này có thể được giám sát bằng cách kiểm tra chốt chuyển đổi trên bộ mã hóa quay. Chân này là chân thấp hoạt động, nghĩa là nó sẽ xuống thấp khi nhấn nút. Nếu không nhấn, chân vẫn ở mức cao, chúng tôi cũng đã sử dụng một điện trở kéo lên để đảm bảo chân vẫn ở mức cao khi không nhấn công tắc, do đó tránh tình trạng dấu chấm động.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Đã nhấn nút chuyển"); }
Hoạt động của bộ mã hóa quay với Arduino
Khi phần cứng và mã đã sẵn sàng, chỉ cần tải mã lên bảng Arduino và cấp nguồn cho Bảng Arduino. Bạn có thể cấp nguồn cho nó qua cáp USB hoặc sử dụng bộ chuyển đổi 12V. Khi được cấp nguồn, màn hình LCD sẽ hiển thị thông báo giới thiệu và sau đó để trống. Bây giờ xoay bộ mã hóa quay và bạn sẽ thấy giá trị bắt đầu tăng hoặc giảm dựa trên hướng bạn xoay. Dòng thứ hai sẽ hiển thị cho bạn nếu bộ mã hóa đang được xoay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ. Hình ảnh dưới đây cho thấy như vậy
Ngoài ra khi nhấn nút, dòng thứ hai sẽ hiển thị rằng nút đã được nhấn. Toàn bộ hoạt động có thể được tìm thấy trong video dưới đây. Đây chỉ là một chương trình mẫu để giao diện Bộ mã hóa với Arduino và kiểm tra xem nó có hoạt động như mong đợi hay không. Khi bạn đến đây, bạn sẽ có thể sử dụng bộ mã hóa cho bất kỳ dự án và chương trình nào của mình tương ứng.
Hy vọng bạn đã hiểu hướng dẫn và mọi thứ hoạt động như nó được cho là. Nếu bạn có bất kỳ vấn đề nào, hãy sử dụng phần bình luận hoặc diễn đàn để được trợ giúp kỹ thuật.