Ở bài viết này, chúng ta sẽ học cách đo khoảng cách bằng Cảm biến khoảng cách (thiết bị dò khoảng cách siêu âm) và đầu vào digital của Arduino. Cụ thể, ta sẽ nối một mạch breadboard và sử dụng code Arduino đơn giản để điều khiển một đèn LED.
Ở những bài trước, bạn đã học được cách sử dụng nút nhấn và cảm biến chuyển động PIR (với đầu vào digital của Arduino). Hôm nay, chúng ta sẽ ôn lại những kỹ năng đó nhé.
Cảm biến khoảng cách sử dụng sóng âm để nhận tín diệu bật lại từ các vật thể trước mặt chúng, giống như loài dơi sử dụng khả năng định vị bằng tiếng vang để cảm nhận môi trường xung quanh. Cảm biến khoảng cách gửi đi tín hiệu và đo thời gian tín hiệu quay trở lại. Chương trình Arduino nhận thông tin này và tính toán khoảng cách giữa cảm biến và vật thể.
Mạch mẫu Cảm biến khoảng cách siêu âm với Arduino trên Tinkercad
Hãy xem mạch mẫu trên, nhấp Start Simulation và nhấp vào cảm biến khoảng cách. Thao tác này sẽ kích hoạt ra một khu vực hình quạt ở phía trước cảm biến, với một “đối tượng” hình tròn bên trong.
Nhấp và kéo vòng tròn “đối tượng” lại gần (hoặc ra xa hơn), bạn sẽ thấy giá trị khoảng cách thay đổi trên màn hình. Nhiều đèn LED sẽ sáng hơn khi đối tượng đến gần cảm biến.
Bước 1: Xây dựng mạch LED
Tương tự các bài viết trước, ta bắt đầu đấu dây Arduino và breadboard với nguồn và đất. Sau đó thêm ba đèn LED vào breadboard, như hình minh họa. Đây sẽ là các đèn hoạt động như một “biểu đồ” trực quan hiển thị khoảng cách đo được của cảm biến.
Kéo Arduino Uno và breadboard từ bảng components vào bảng làm việc.
Kết nối chân 5 volt và chân nối đất trên Arduino với đường dây nguồn (+) và đất (-) trên breadboard. Bạn có thể thay đổi màu sắc dây nếu muốn (sử dụng mục inspector hoặc phím số trên bàn phím).
Kéo ba đèn LED vào hàng E của breadboard, đặt cách nhau 2 lỗ. Bạn cũng có thể thay đổi màu đèn trong mục inspector (khi nhấp vào từng đèn).
Sử dụng điện trở 220 Ohm để nối từng cực âm của các đèn LED (chân trái) với thanh nối đất (màu đen) của bảng mạch. Bạn có thể thay đổi giá trị của điện trở bằng cách chọn nó và điều chỉnh từ menu.
Kết nối các cực dương của đèn LED (chân phải) với các chân digital 4, 3 và 2 trên Arduino. Cực dương của đèn LED (+) là nơi dòng điện chạy vào. Chúng sẽ nối với các chân đầu ra digital trên Arduino. Cực âm (-) là nơi mà dòng điện chạy qua, sẽ kết nối với đất.
Bước 2: Thêm cảm biến tiệm cận
Cảm biến tiệm cận có nhiều loại. Trong Tinkercad Circuits, bạn có thể chọn cảm biến ba chân hoặc cảm biến bốn chân. Nhìn chung, cảm biến khoảng cách có một chân nối với đất, một chân nối với 5 volt, chân thứ ba để gửi tín hiệu và chân thứ tư để nhận tín hiệu. Các chân “gửi” và “nhận” thường được kết hợp thành một chân.
Trong trình chỉnh sửa mạch (circuits editor), bạn hãy tìm cảm biến khoảng cách. Để tìm cảm biến bốn chân, hãy xem mục “ALL” trong bảng components (sử dụng menu thả xuống).
Đặt cảm biến ở phía bên trái các đèn LED, như trong hình.
Nối dây cảm biến để chân 5V kết nối với thanh điện áp 5V, chân GND kết nối với thanh nối đất, chân SIG hoặc TRIG với chân 7 của Arduino (và nếu sử dụng cảm biến bốn chân, chân ECHO kết nối với chân 6 của Arduino).
Bước 3: Code với khối
Giờ ta sẽ dùng trình chỉnh sửa code để xem trạng thái của cảm biến, sau đó thiết lập để đèn LED sáng dựa trên giá trị của cảm biến nhé.
Nhấp vào nút “Code” để mở trình chỉnh sửa. Các khối màu xám là chú thích để ghi lại nhận xét. Chúng không bắt buộc và sẽ không được thực thi khi chương trình .
Nhấp vào danh mục Variables. Tạo một biến mới có tên là “distanceThreshold” và sử dụng khối “set” để đặt nó thành 350 (cm).
Để lưu trữ giá trị cảm biến, hãy tạo một biến có tên là “cm“.
Kéo ra khối “set” và điều chỉnh từ menu thành biến cm vừa tạo.
Trong danh mục Input, hãy kéo khối “read ultrasonic distance sensor on” và đặt nó vào bên trong khối set.
Điều chỉnh từ menu bên trong khối input để đặt chân trigger thành 7, chân echo thành “same as trigger” và đơn vị tính thành cm.
Tùy chọn tạo một biến mới để chuyển đổi cm sang inch, với một khối set và một khối arithmetic để đặt inch bằng (cm / 2,54).
Thêm một số khối serial monitoring (giám sát) để xuất ra khoảng cách cảm biến, theo đơn vị cm và inch.
Nhấp vào danh mục Control và kéo ra một khối if then, sau đó điều hướng đến Math và kéo một khối comparator (so sánh) vào khối if.
Trong danh mục Variables, lấy biến cm và biến distanceThreshold; kéo chúng vào khối comparator, điều chỉnh từ menu để nó có nội dung “if cm > distanceThreshold then“.
Thêm ba khối đầu ra digital bên trong câu lệnh if để đặt các chân 2, 3 và 4 thành LOW.
Nhân đôi câu lệnh if này bốn lần, sau đó thêm các khối arithmetic và khối and/or để tạo ra năm câu lệnh if phát hiện các trạng thái tổng thể.
- Trạng thái đầu tiên là “the distance is farther than our threshold” nên không có đèn LED nào sáng.
- Khi khoảng cách gần hơn hoặc bằng khoảng cách Threshold và lớn hơn khoảng cách Threshold-100, chỉ sáng đèn LED của chân 2.
- Khi khoảng cách nằm giữa Threshold-100 và Threshold-250, thì làm sáng hai đèn LED.
Như vậy ta đã có tất cả các trạng thái mong muốn.
Bước 4: Giải thích code cảm biến khoảng cách
Khi mở trình sửa code, bạn có thể nhấp vào menu ở bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối code.
Trước setup(), ta tạo các biến để lưu trữ ngưỡng khoảng cách mong muốn, cũng như giá trị cảm biến theo đơn vị cm và inch. Chúng được khai báo bằng int vì là số nguyên.
Tiếp theo là một đoạn code để đọc cảm biến khoảng cách siêu âm. Đối với các bài viết trước, bạn đã khá quen thuộc với hàm setup() và loop(). Trong bài viết này, hàm readUltrasonicDistance() sẽ được sử dụng để mô tả code cảm biến và giữ nó tách biệt với phần chính của chương trình. Định nghĩa hàm bắt đầu với kiểu dữ liệu mà hàm sẽ trả về (hoặc gửi lại chương trình chính). Trong trường hợp này, hàm trả về long, là một số thập phân có nhiều chữ số. Tiếp theo là tên của hàm (tuỳ ý người dùng). Sau đó, trong dấu ngoặc đơn là các đối số mà hàm nhận. int triggerPin, int echoPin là các khai báo biến cho các chân kết nối của cảm biến. Các số pin sẽ được chỉ định khi bạn gọi hàm trong chương trình chính loop(). Bên trong hàm, các biến cục bộ này được sử dụng để tham chiếu thông tin bạn đã truyền cho nó từ vòng lặp chính loop() (hoặc từ một hàm khác). Bản thân hàm readUltrasonicDistance() này sẽ gửi một tín hiệu qua trigger Pin và báo cáo lại thời gian cần thiết để lấy lại tín hiệu qua echoPin.
Trong setup, các chân được cấu hình bằng pinMode(). Kết nối serial monitor được thiết lập bằng Serial.begin. Các chân 2, 3 và 4 được cấu hình làm đầu ra để điều khiển đèn LED.
Trong vòng lặp chính, distanceThreshold được đặt thành là 350 cm.
Để chuyển đổi cm sang inch, ta chia giá trị cho 2,54. Việc xuất ra serial monitor sẽ giúp bạn quan sát được sự thay đổi (khoảng cách) rõ ràng hơn, so với khi chỉ có mỗi đèn LED hiển thị trạng thái.
Sáu câu lệnh if của vòng lặp đánh giá các phạm vi khoảng cách khác nhau (từ 0 đến 350cm), sau đó chiếu sáng lượng đèn LED đưa trên khoảng cách.
Nếu muốn thấy sự thay đổi rõ ràng hơn trên các đèn, bạn có thể thay đổi biến distanceThreshold và/hoặc phạm vi mà bạn đang xem (bằng cách thay đổi các đối số trong câu lệnh if). Việc này được gọi là hiệu chuẩn.
Bước 5: Xây dựng mạch thật
Nếu thực hành trên mạch thật, bạn có thể dùng thử serial monitor của phần mềm Arduino (nút kính lúp ở phía trên bên phải của cửa sổ phác thảo).
Bạn có thể hiệu chuẩn bằng cách sau:
- Hãy đặt một vật gì đó trước cảm biến và quan sát khoảng cách trên serial monitor. Sau đó, thiết lập distanceThreshold thành giá trị đó.
- Điều chỉnh “giới hạn” ngưỡng khoảng cách khác nhau thành một khoảng phù hợp với giá trị ban đầu, ví dụ: nếu bàn tay của bạn cách 60 cm, phạm vi của bạn có thể là 60-40, 40-20 và 20-0.
- Cuối cùng, tải lại code và thử di chuyển vật thể trước cảm biến. Khi càng đến gần, bạn sẽ thấy các đèn LED bật sáng lên từng cái một.
Nguồn: instructables.com
Lượt dịch: Fuvitech.vn