Mục lục:

Công tắc Arduino và Thumbwheel: 9 bước
Công tắc Arduino và Thumbwheel: 9 bước

Video: Công tắc Arduino và Thumbwheel: 9 bước

Video: Công tắc Arduino và Thumbwheel: 9 bước
Video: Make Decade Resistance Substitution Box - Make Any Resistor Value ! 2024, Tháng bảy
Anonim
Công tắc Arduino và Thumbwheel
Công tắc Arduino và Thumbwheel

Trong bài viết này, chúng tôi xem xét việc sử dụng công tắc bánh xe đẩy / bánh xe nhỏ với hệ thống Arduino của chúng tôi. Dưới đây là một số ví dụ được lấy từ PMD Way.

Bước 1:

Hình ảnh
Hình ảnh

Đối với những người chưa bắt đầu, mỗi công tắc là một đoạn thẳng đứng và chúng có thể được kết nối với nhau để tạo thành nhiều kích thước khác nhau. Bạn có thể sử dụng các nút để chọn từ các chữ số không đến chín. Có những lựa chọn thay thế có sẵn bánh xe mà bạn có thể di chuyển bằng ngón tay cái thay vì các nút tăng / giảm.

Trước những ngày có giao diện người dùng ưa thích, các công tắc này là phương pháp khá phổ biến để thiết lập mục nhập dữ liệu số. Tuy nhiên, chúng vẫn có sẵn ngày nay, vì vậy hãy xem chúng hoạt động như thế nào và chúng ta có thể sử dụng chúng như thế nào. Giá trị của công tắc được cung cấp thông qua số thập phân hoặc số thập phân thẳng được mã hóa nhị phân. Xem xét mặt sau của công tắc ở dạng BCD.

Bước 2:

Hình ảnh
Hình ảnh

Chúng tôi có chung ở bên trái, sau đó là các tiếp điểm cho 1, 2, 4 và 8. Nếu bạn áp dụng một điện áp nhỏ (ví dụ như 5V), giá trị của công tắc có thể được đo bằng cách thêm các giá trị của các tiếp điểm có trong Trạng thái CAO. Ví dụ, nếu bạn chọn 3 - các tiếp điểm 1 và 2 sẽ ở điện áp chung. Các giá trị từ 0 đến 9 có thể được biểu diễn như vậy trong bảng.

Bước 3:

Hình ảnh
Hình ảnh

Bây giờ, bạn sẽ nhận ra rằng sẽ dễ dàng đọc được giá trị của một công tắc - và bạn đã đúng, đúng như vậy. Chúng ta có thể kết nối 5V với đầu ra chung, đầu ra với chân đầu vào kỹ thuật số của bảng Arduino, sau đó sử dụng digitalRead () để xác định giá trị của mỗi đầu ra. Trong bản phác thảo, chúng tôi sử dụng một số toán học cơ bản để chuyển đổi giá trị BCD thành số thập phân. Vì vậy, hãy làm điều đó ngay bây giờ.

Từ góc độ phần cứng, chúng ta cần tính đến một điều nữa - công tắc bánh xe đẩy hoạt động bằng điện giống như bốn nút ấn thường mở. Điều này có nghĩa là chúng ta cần sử dụng điện trở kéo xuống để có sự khác biệt rõ ràng giữa trạng thái cao và thấp. Vì vậy, sơ đồ cho một công tắc như được hiển thị ở trên.

Bước 4:

Bây giờ là một vấn đề đơn giản để kết nối các đầu ra có nhãn 1, 2, 4 và 8 với (ví dụ) các chân kỹ thuật số 8, 9, 10 và 11. Kết nối 5V với điểm chuyển đổi ‘C’ và GND với… GND. Tiếp theo, chúng ta cần có một bản phác thảo có thể đọc các đầu vào và chuyển đổi đầu ra BCD sang số thập phân. Hãy xem xét bản phác thảo sau:

/ * Sử dụng tấm chắn hiển thị số SAA1064 https://www.gravitech.us/7searieshield.html Sử dụng màn hình nối tiếp nếu bạn không có tấm chắn SAA1064 * / #include "Wire.h" #define q1 8 #define q2 9 # định nghĩa q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // tham gia bus i2c (địa chỉ tùy chọn cho chính) delay (500); pinMode (q1, INPUT); // vòng quay '1' pinMode (q2, INPUT); // vòng quay '2' pinMode (q4, INPUT); // vòng quay '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // gửi số nguyên 'Count' tới lá chắn Gravitech SAA1064 {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Hàng nghìn, Hàng trăm, Hàng chục, Cơ số; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Hàng nghìn = Đếm / 1000; Hàng trăm = (Đếm- (Hàng nghìn * 1000)) / 100; Hàng chục = (Đếm - ((Hàng nghìn * 1000) + (Hàng trăm * 100))) / 10; Cơ số = Đếm - ((Hàng nghìn * 1000) + (Hàng trăm * 100) + (Hàng chục * 10)); Wire.write (tra cứu [Cơ sở]); Wire.write (tra cứu [Hàng chục]); Wire.write (tra cứu [Hàng trăm]); Wire.write (tra cứu [Hàng nghìn]); Wire.endTransmission (); chậm trễ (10); } int readSwitch () {int total = 0; if (digitalRead (q1) == HIGH) {total + = 1; } if (digitalRead (q2) == HIGH) {total + = 2; } if (digitalRead (q4) == HIGH) {total + = 4; } if (digitalRead (q8) == HIGH) {total + = 8; } trả về tổng cộng; } void loop () {dispSAA1064 (readSwitch ()); // gửi giá trị công tắc đến hiển thị khiên Serial.println (readSwitch ()); // gửi giá trị chuyển đổi đến hộp màn hình nối tiếp}

Hàm readSwitch () là khóa. Nó tính toán giá trị của công tắc bằng cách thêm đại diện bằng số của mỗi đầu ra công tắc và trả về tổng là kết quả của nó. Đối với ví dụ này, chúng tôi đã sử dụng một lá chắn hiển thị số được điều khiển bởi NXP SAA1064.

Bước 5:

Image
Image

Hàm readSwitch () là khóa. Nó tính toán giá trị của công tắc bằng cách thêm đại diện bằng số của mỗi đầu ra công tắc và trả về tổng là kết quả của nó. Đối với ví dụ này, chúng tôi đã sử dụng một lá chắn hiển thị số được điều khiển bởi NXP SAA1064.

Nếu bạn không có, điều đó không sao - kết quả cũng được gửi đến màn hình nối tiếp. Bây giờ, hãy xem nó hoạt động trong video.

Bước 6:

Được rồi, nó trông không giống nhiều, nhưng nếu bạn cần nhập số, nó sẽ tiết kiệm rất nhiều không gian thực và cung cấp một phương pháp nhập chính xác.

Vì vậy, bạn có nó. Bạn có thực sự sử dụng chúng trong một dự án không? Đối với một chữ số - có. Dành cho bốn? Có lẽ là không - có lẽ sẽ dễ dàng hơn khi sử dụng bàn phím 12 chữ số. Có một ý tưởng…

Bước 7: Nhiều công tắc

Hình ảnh
Hình ảnh

Bây giờ chúng ta sẽ kiểm tra cách đọc bốn chữ số - và không lãng phí tất cả các chân kỹ thuật số đó trong quá trình này. Thay vào đó, chúng ta sẽ sử dụng IC mở rộng cổng 16 bit của Microchip MCP23017 giao tiếp qua bus I2C. Nó có mười sáu chân đầu vào / đầu ra kỹ thuật số mà chúng ta có thể sử dụng để đọc trạng thái của mỗi công tắc.

Trước khi tiếp tục, xin lưu ý rằng cần có một số kiến thức giả định cho bài viết này - bus I2C (phần một và hai) và MCP23017. Đầu tiên chúng tôi sẽ mô tả các kết nối phần cứng, sau đó là bản phác thảo Arduino. Nhớ lại sơ đồ được sử dụng cho ví dụ chuyển đổi đơn.

Khi công tắc được kết nối trực tiếp với Arduino, chúng tôi đọc trạng thái của từng chân để xác định giá trị của công tắc. Chúng tôi sẽ làm điều này một lần nữa, trên quy mô lớn hơn bằng cách sử dụng MCP23017. Hãy xem xét sơ đồ sơ đồ chân:

Bước 8:

Chúng tôi có 16 chân, cho phép kết nối bốn công tắc. Các commons cho mỗi công tắc vẫn kết nối với 5V và mỗi tiếp điểm công tắc vẫn có một điện trở kéo xuống 10k tới GND. Sau đó, chúng tôi kết nối các chân 1, 2, 4, 8 của chữ số một với GPBA0 ~ 3; chữ số hai của 1, 2, 4, 8 đến GPA4 ~ 7; chữ số ba là 1, 2, 4, 8 thành GPB0 ~ 3 và chữ số bốn là 1, 2, 4, 8 thành GPB4 ~ 7.

Bây giờ chúng ta đọc các công tắc như thế nào? Tất cả những sợi dây đó có thể khiến bạn nghĩ là khó, nhưng bản phác thảo thì khá đơn giản. Khi chúng tôi đọc giá trị của GPBA và B, một byte được trả về cho mỗi ngân hàng, với bit quan trọng nhất đầu tiên. Mỗi bốn bit sẽ phù hợp với cài đặt của công tắc được kết nối với các chân I / O phù hợp. Ví dụ: nếu chúng tôi yêu cầu dữ liệu cho cả hai ngân hàng IO và công tắc được đặt thành 1 2 3 4 - ngân hàng A sẽ trả về 0010 0001 và ngân hàng B sẽ trả về 0100 0011.

Chúng tôi sử dụng một số phép toán dịch chuyển bit để tách mỗi bốn bit thành một biến riêng biệt - biến này để lại cho chúng tôi giá trị của mỗi chữ số. Ví dụ, để tách giá trị của công tắc bốn, chúng tôi chuyển các bit từ ngân hàng B >> 4. Điều này đẩy giá trị của công tắc ba ra ngoài và các bit trống ở bên trái trở thành số không.

Để tách giá trị cho công tắc ba, chúng tôi sử dụng bitwise ghép & - để lại giá trị của công tắc ba. Hình ảnh hiển thị bảng phân tích các giá trị chuyển đổi nhị phân - nó hiển thị các giá trị GPIOA và byte B thô, sau đó là giá trị nhị phân của mỗi chữ số và giá trị thập phân.

Bước 9:

Vì vậy, chúng ta hãy xem bản phác thảo trình diễn:

/ * Ví dụ 40a - Đọc bốn công tắc BCD bánh lăn thông qua MCP23017, hiển thị trên màn hình LED SAA1064 / 4 chữ số 7-đoạn LED * / // MCP23017 chân 15 ~ 17 đến GND, địa chỉ bus I2C là 0x20 // SAA1064 Địa chỉ bus I2C 0x38 # bao gồm "Wire.h" // cho các định nghĩa chữ số LED trong các chữ số [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; byte GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// thiết lập 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // Đầu ra 12mA, không có ô trống chữ số Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // khởi động I2C bus initSAA1064 (); } void loop () {// đọc đầu vào của ngân hàng A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // byte này chứa dữ liệu chuyển đổi cho các chữ số 1 và 2 // đọc các đầu vào của ngân hàng B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // byte này chứa dữ liệu chuyển đổi cho các chữ số 3 và 4 // trích xuất giá trị cho mỗi chuyển đổi // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // gửi tất cả GPIO và dữ liệu chuyển đổi riêng lẻ đến màn hình nối tiếp // để gỡ lỗi và lợi ích Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("chữ số 1 ="); Serial.println (dig1, BIN); Serial.print ("chữ số 2 ="); Serial.println (dig2, BIN); Serial.print ("chữ số 3 ="); Serial.println (dig3, BIN); Serial.print ("chữ số 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("chữ số 1 ="); Serial.println (dig1, DEC); Serial.print ("chữ số 2 ="); Serial.println (dig2, DEC); Serial.print ("chữ số 3 ="); Serial.println (dig3, DEC); Serial.print ("chữ số 4 ="); Serial.println (dig4, DEC); Serial.println (); // gửi giá trị công tắc tới màn hình LED qua SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (chữ số [dig4]); Wire.write (chữ số [dig3]); Wire.write (chữ số [dig2]); Wire.write (chữ số [dig1]); Wire.endTransmission (); chậm trễ (10); chậm trễ (1000); }

Và đối với những người ngoại đạo … một video trình diễn.

Vì vậy, bạn có nó. Bốn chữ số thay vì một và trên bus I2C bảo toàn các chân I / O kỹ thuật số Arduino. Sử dụng tám MCP23017, bạn có thể đọc 32 chữ số cùng một lúc. Hãy vui vẻ khi làm điều đó!

Bạn có thể đặt mua cả công tắc BCD và công tắc thập phân với nhiều kích thước khác nhau từ PMD Way, với giao hàng miễn phí trên toàn thế giới.

Bài đăng này do pmdway.com mang đến cho bạn - mọi thứ dành cho các nhà sản xuất và những người đam mê điện tử, với giao hàng miễn phí trên toàn thế giới.

Đề xuất: