Điều khiển NHIỀU NÚT BẤM chỉ với một chân của Arduino

I. Giới thiệu

Qua quá trình làm việc với Arduino, mình thấy có một giải pháp rất hay về việc sử dụng button với Arduino. Đó là chỉ cần sử dụng một chân analog với các nút nhấn và các điện trở có trị số khác nhau, ta có thể làm ra một bàn phím. Qua bài viết này, mình xin chia sẻ thư viện mình mới viết cho vấn đề này.

II. Phần cứng

  1. Arduino UNO
  2. Breadboard
  3. Dây cắm breadboard
  4. 03 nút nhấn
  5. 04 điện trở các trị số khác nhau (trong đó nên có 1 điện trở 10kOhm).

III. Download thư viện

Đây là thư viện do mình mới viết trong chiều ngày hôm nay (21/11/2015) do thấy nó hay quá. Lúc mình viết thì mình không biết là đã các thư viện khác của các bạn nước ngoài, và khi viết xong xem lại các thư viện khác thì code của mình cũng hiệu quả như nhau và có phần đơn giản hơn. Tên của thư viện này là AnalogButton.

IV. Lắp mạch

Hình ảnh lắp mạch

V. Giải thích quy trình

Như các bạn đã biết về các chân analog của Arduino. Mặc định, nó có thể đọc được các giá trị điện thế từ 0 => 5V phân ra thành các giá trị từ 0 => 1023. Nói một cách khác, mỗi chân analog sẽ có 1024 mức dữ liệu. Nếu ta vận dụng một cách linh hoạt, xem lân cận một mức nào đó là điểm giữ, và khi giá trị điện thế tại chân analog rơi vào điểm giữ đó thì làm một việc gì đó. Mở rộng xe, nếu ta có nhiều điểm giữ như vậy, ta có thể làm ra những sự kiện khác nhau (bật tắt đèn các kiểu) chỉ với 1 chân analog duy nhất. 

Vấn đề đặt ra là:

  1. Làm thế nào để tạo ra điểm giữ, nói cách khác là làm thế nào để xác định được điểm giữ bằng các button?
  2. Vậy khi tạo ra điểm giữ được rồi làm thế nào để bảo Arduino chạy một sự kiện (một hàm) nào đó?

1. Làm thế nào để tạo ra điểm giữ, nói cách khác là làm thế nào để xác định được điểm giữ bằng các button?

Chắc hẳn các bạn đã biết về hàm analogRead. Đó chính là hàm đọc giá trị điện thế và chuyển nó thành các mức dữ liệu từ 0 => 1023 (tượng chưng cho 0V và 5V). Như vậy, ta chỉ việc thay đổi mức điện áp cấp vào chân analog là sẽ xác định được một điểm dừng, để làm được điều đó, ta dùng các điện trở tạo ra cầu phân áp (Xem hình lắp mạch ở trên).

Vì sao phải là các giá trị điện trở khác nhau?

Bởi vì nếu các điện trở giống nhau => các điểm dừng trùng nhau. Vì vậy, nếu muốn các điểm dừng sẽ khác nhau => các giá trị điện trở phải khác nhau.

Để xác định được mức điểm dừng, ta chỉ việc dùng hàm analogRead đọc giá trị A0 là xong. Tuy nhiên, để làm quen với thư viện, mình xin chia sẻ đoạn code dưới để các bạn xác định điểm dừng.

 

 

Khi bạn nhấn một nút bấm thì sẽ có một giá trị điểm dừng xuất hiện. Nếu không nhấn nút bấm nào hết thì giá trị điểm dừng là 0.

 

Trong trường hợp của mình đó là khi nhấn lần lượt các button1, button2, button3 nó lần được các giá trị 45, 826, 908 (do mình các điện trở khá là chênh lệch với nhau hehe).

2. Vậy khi tạo ra điểm giữ được rồi làm thế nào để bảo Arduino chạy một sự kiện (một hàm) nào đó?

Bạn chỉ việc thay thế các điểm dừng trên vào đoạn code mẫu dưới đây là xong!

Giá trị điểm dừng bạn nhập vào khi thực thi có thể không chính xác là vì bạn dùng điểm trở có mức sai số lớn hoăc bạn gắn trên breadboard bị lỏng => nhiễu điện! Vì vậy khi làm mạch thực tế các bạn nên dùng điện trở và nút xịn một tí nghen.

VI. Kết luận

Rất dễ dàng phải không nào, chỉ việc xác định điểm dừng rồi thêm nó vào đoạn code thé là xong. Câu hỏi cuối bài mình muốn đặt ra cho các bạn là, làm thế nào để nhấn nhiều nút một lúc :3, hay nói một các hoa mỹ là tổ hợp phím :3. Hehe, vấn đề này không khó, thư viện này có thể làm được, chỉ cần các bạn để ý cách tiếp cận của mình, đó là dựa vào điểm dừng! Điểm dừng này lại phụ thuộc vào áp, áp lại phụ thuộc vào điện trở,... :3. Vậy khi nhấn nhiều nút, điều gì sẽ xảy ra?

Chúc các bạn thành công ahehe.

Chia sẻ thêm video cho các bạn có hứng thú làm hehe.

lên
14 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Cài đặt NodeJS trên Windows - mô hình môi trường IOT chuyên nghiệp

NodeJS là một hệ sinh thái Javascript mà ở đó bạn có thể lập trình nó như mọi ngôn ngữ lập trình nhúng như C++, python,... nó cũng có thể chạy đa nền tàng như Java vậy đó nhé. Nhưng luôn ghi nhớ Javascript và Java là khác nhau bạn nhé. Nodejs được xây dựng trên bộ Javascript engine V8 của Google. Mình sẽ không nói quá nhiều về chuyên môn trong bài viết này vì nó sẽ đi lệch định hướng của cộng đồng Arduino Việt Nam và cũng có rất nhiều cộng đồng NodeJS ở Việt Nam sẽ giúp bạn am tường hơn về NodeJS. Qua bài viết này, mình mong muốn bạn sẽ biết cách cài đặt NodeJS và giúp bạn thấy được tiềm năng IOT của nó.

lên
35 thành viên đã đánh giá bài viết này hữu ích.

Nhà sáng tạo trẻ với Intel Galileo, bạn có dám thử thách mình với Intel Galileo

Là một người có sở thích tìm hiểu về mạch điện tử và mong muốn tự động hóa cuộc sống, ắc hẳn bạn đã từng nghe nói về những board mạch nhúng vi điều khiển như Intel Galileo, hay Raspberry Pi. Vào thời điểm hiện tại, Intel Galileo chỉ mới được ra đời được hơn 2 năm, nên các tài liệu và dự án liên quan đến board mạch này còn chưa nhiều như Raspberry Pi được. Đồng thời, các bạn học sinh và sinh viên Việt Nam đã được tự tay vọc board mạch Intel Galileo ở những cuộc thi mang tầm Quốc gia. Như vậy, với chính sách phát triển và đưa board mạch Intel Galileo vào việc tìm hiểu và nghiên cứu trong cộng trẻ Việt Nam, đây là một cơ hội rất tốt để những mầm xanh của đất nước được khám phá và tiếp cận việc thực hành những gì mình học một các thú vị.

lên
4 thành viên đã đánh giá bài viết này hữu ích.