Arduino cầu dao DIP

Các công tắc DIP (Dual In-line Package) được sử dụng phổ biến trong điện tử để cấu hình, như thiết lập địa chỉ thiết bị, bật hoặc tắt các tính năng, v.v. Trong bài hướng dẫn này, chúng ta sẽ học cách sử dụng công tắc DIP với Arduino. Cụ thể, chúng ta sẽ học:

Arduino với công tắc dip

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×DIP Switch
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về công tắc DIP

Công tắc DIP chủ yếu được sử dụng để cấu hình thiết bị, cho phép người dùng thiết lập các tham số như địa chỉ thiết bị, cài đặt truyền thông, mã bảo mật, chế độ hoạt động và cài đặt hệ thống trên nhiều ngành công nghiệp và ứng dụng.

Một công tắc DIP được tạo thành từ một số công tắc trượt nhỏ được đóng gói lại với nhau. Mỗi công tắc trượt này được gọi là một "vị trí". Các công tắc DIP có nhiều loại khác nhau tùy thuộc vào số vị trí mà chúng có. Ví dụ, có các công tắc DIP 2 vị trí, 4 vị trí, 5 vị trí, 6 vị trí, 8 vị trí và 10 vị trí.

Một công tắc DIP có thể biểu diễn một số có thể cấu hình. Mỗi vị trí trên công tắc tương ứng với một bit của số đó. Bằng cách chuyển đổi các vị trí giữa BẬT và TẮT, chúng ta có thể thiết lập số mong muốn.

Sơ đồ các chân

bố trí chân dip switch
image source: diyables.io

Một cầu dao DIP gồm hai hàng chân, với số lượng chân ở mỗi hàng tương ứng với số vị trí công tắc có sẵn. Ví dụ, một cầu dao DIP 4 vị trí có tổng cộng 8 chân, được phân bố đều và mỗi bên có 4 chân. Trong bộ lắp ráp cầu dao DIP, mỗi cặp chân đối diện nhau tạo thành một công tắc trượt. Lưu ý rằng việc phân biệt giữa các chân ở hai bên là không cần thiết vì chúng có thể thay thế cho nhau.

Cách hoạt động

Trong các công tắc DIP, khi một công tắc ở vị trí BẬT, có nghĩa là công tắc đã đóng. Điều này có nghĩa là mạch điện được thiết lập, cho phép dòng điện chạy qua công tắc.

Ngược lại, khi công tắc ở vị trí TẮT, điều đó có nghĩa là công tắc đang ở trạng thái mở. Ở trạng thái này, kết nối điện bị đứt và dòng điện không thể chạy qua công tắc.

Vậy, để làm rõ:

  • Vị trí BẬT: Mạch kín, cho phép dòng điện chạy qua.
  • Vị trí TẮT: Mạch hở, ngăn dòng điện chạy qua.

Khi chúng ta kết nối một bên của công tắc với mặt đất, bên kia nối với một chân của Arduino, sau đó cấu hình chân Arduino ở chế độ đầu vào kỹ thuật số có kéo lên (pull-up), bảng dưới đây cho thấy mối quan hệ giữa vị trí của công tắc và các giá trị đọc được từ Arduino:

DIP switch position Binary representation Circuit state Arduino pin state
ON 1 CLOSED LOW
OFF 0 OPEN HIGH

Trong các phần tiếp theo, chúng ta sẽ dùng công tắc DIP 4 vị trí làm ví dụ. Bạn có thể dễ dàng điều chỉnh cho các công tắc DIP có 2 vị trí, 3 vị trí, 5 vị trí, 6 vị trí, 8 vị trí và 10 vị trí...

Sơ đồ đấu dây

sơ đồ đấu nối công tắc dip Arduino

This image is created using Fritzing. Click to enlarge image

Mã Arduino - Cầu dao DIP

Chúng ta sẽ học qua hai đoạn mã:

  • Đọc trạng thái BẬT/TẮT của từng vị trí trên công tắc DIP.
  • Mã hóa các vị trí thành một số.

Mã Arduino - Đọc trạng thái BẬT/TẮT của công tắc DIP

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // initialize serial communication Serial.begin(9600); // set the dip switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { // Read the state of each switch position for (int i = 0; i < POSITION_NUM; i++) { Serial.print("position "); Serial.print(i + 1); Serial.print(": "); int state = digitalRead(SWITCH_PINS[i]); if (state == ON) Serial.println("ON "); else Serial.println("OFF "); } Serial.println(); // add a delay to prevent rapid readings delay(500); }

Hướng dẫn từng bước

  • Nối dây theo sơ đồ nối dây ở trên.
  • Kết nối Arduino với PC bằng cáp USB.
  • Mở Arduino IDE.
  • Chọn board và cổng đúng.
  • Nhấn nút Tải lên trên Arduino IDE để tải mã lên Arduino.
  • Chuyển từng vị trí trên công tắc DIP sang trạng thái ON theo thứ tự.
  • Xem kết quả trên Trình theo dõi nối tiếp.
COM6
Send
position 1: OFF position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: ON position 4: OFF position 1: ON position 2: ON position 3: ON position 4: ON
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Mã Arduino - Mã hóa các trạng thái của công tắc DIP thành một số

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // Initialize serial communication Serial.begin(9600); // Set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } Serial.print("encoded state: "); Serial.println(encoded_state); // add a delay to prevent rapid readings delay(500); }

Hướng dẫn từng bước

  • Tải mã ở trên lên bo mạch Arduino.
  • Bật từng vị trí trên DIP switch lên trạng thái ON lần lượt.
  • Xem kết quả trên Serial Monitor, nó trông như hình dưới đây.
COM6
Send
encoded state: 0 encoded state: 1 encoded state: 2 encoded state: 3 encoded state: 4 encoded state: 5 encoded state: 6 encoded state: 7 encoded state: 8 encoded state: 9 encoded state: 10 encoded state: 11 encoded state: 12 encoded state: 13 encoded state: 14 encoded state: 15
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Xin lưu ý rằng giá trị phụ thuộc vào vị trí của từng công tắc trượt. Bảng dưới đây cho thấy sự ánh xạ giữa trạng thái BẬT/TẮT và giá trị số nguyên cho công tắc DIP 4 vị trí:

Position-1Position-2Position-3Position-4Binary ValueDecimal Value
OFF OFF OFF OFF 0000 0
OFF OFF OFF ON 0001 1
OFF OFF ON OFF 0010 2
OFF OFF ON ON 0011 3
OFF ON OFF OFF 0100 4
OFF ON OFF ON 0101 5
OFF ON ON OFF 0110 6
OFF ON ON ON 0111 7
ON OFF OFF OFF 1000 8
ON OFF OFF ON 1001 9
ON OFF ON OFF 1010 10
ON OFF ON ON 1011 11
ON ON OFF OFF 1100 12
ON ON OFF ON 1101 13
ON ON ON OFF 1110 14
ON ON ON ON 1111 15

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.