- Mô-đun cảm biến tốc độ LM393 (H206)
- Bố trí lắp đặt cảm biến H206
- Tự làm Sơ đồ mạch Robot cảm biến tốc độ Arduino LM393
- Logic đằng sau Đo tốc độ với mô-đun cảm biến tốc độ LM393
- Logic đằng sau đo khoảng cách bánh xe di chuyển
- Logic đằng sau việc đo góc của bot
- Mã rô bốt Arduino
- Thử nghiệm Robot Arduino để đo Khoảng cách, Tốc độ và Góc
Robot đã từ từ bắt đầu bò vào xã hội của chúng ta để làm cho cuộc sống của chúng ta trở nên đơn giản hơn. Chúng tôi đã có thể tìm thấy sáu robot giao thực phẩm có bánh xe từ Starship trên các con đường của Vương quốc Anh, điều hướng thông minh giữa những người dân thường để đến đích. Mỗi robot di động điều hướng vào môi trường phải luôn nhận thức được vị trí và định hướng của nó đối với thế giới thực. Có nhiều cách để đạt được điều này bằng cách sử dụng các công nghệ khác nhau như GPS, RF Triangulation, Gia tốc kế, Con quay hồi chuyển, v.v. Mỗi kỹ thuật đều có lợi thế riêng và là duy nhất của chính nó. Trong hướng dẫn cảm biến tốc độ Arduino LM393 này, chúng tôi sẽ sử dụng mô-đun cảm biến tốc độ LM393 đơn giản và dễ sử dụngđể đo một số thông số quan trọng như Tốc độ, Khoảng cách di chuyển và Góc của robot bằng Arduino. Với những thông số này, robot sẽ có thể biết trạng thái thế giới thực của nó và có thể sử dụng nó để điều hướng một cách an toàn.
Arduino là lựa chọn phổ biến nhất của những người có sở thích chế tạo rô bốt, từ một người đi theo đường dây đơn giản đến một rô bốt tự cân bằng hoặc lau sàn phức tạp hơn. Bạn có thể kiểm tra tất cả các loại rô bốt trong phần Người máy.
Chúng tôi sẽ chế tạo một robot nhỏ chạy bằng pin lithium và điều khiển nó bằng cần điều khiển. Trong thời gian chạy, chúng ta có thể đo tốc độ, khoảng cách và góc của robot và hiển thị thời gian thực trên màn hình LCD được kết nối với Arduino. Dự án này chỉ giúp bạn đo lường các thông số này, sau khi hoàn thành việc này, bạn có thể sử dụng các thông số này để vận hành bot của mình một cách tự chủ theo yêu cầu. Nghe thật thú vị phải không? Vậy hãy bắt đầu.
Mô-đun cảm biến tốc độ LM393 (H206)
Trước khi chúng ta tìm hiểu sơ đồ mạch và mã cho dự án, chúng ta hãy hiểu về Mô-đun cảm biến tốc độ LM393 vì nó đóng một vai trò quan trọng trong dự án. Các mô-đun Speed H206 cảm biến bao gồm một hồng ngoại Thiết bị cảm quang tích hợp với một vi mạch so sánh LM393 Voltage do đó tên cảm biến LM393 Speed. Mô-đun cũng bao gồm một tấm lưới phải được gắn vào trục quay của động cơ. Tất cả các thành phần được dán nhãn trong hình ảnh dưới đây.
Các cảm biến hồng ngoại Ánh sáng bao gồm một LED hồng ngoại và một hình ảnh transistor ngăn cách bởi một dông dài nhỏ. Toàn bộ sự sắp xếp cảm biến được đặt trong một vỏ màu đen như hình trên. Tấm lưới bao gồm các khe, tấm được bố trí ở giữa khe hở của Cảm biến ánh sáng hồng ngoại theo cách mà cảm biến có thể cảm nhận được các khoảng trống trên tấm lưới. Mỗi khe hở trong tấm lưới sẽ kích hoạt cảm biến IR khi đi qua khe hở; các bộ kích hoạt này sau đó được chuyển đổi thành tín hiệu điện áp bằng bộ so sánh. Bộ so sánh không có gì khác ngoài một IC LM393 từ bán dẫn ON. Mô-đun có ba chân, hai trong số đó được sử dụng để cấp nguồn cho mô-đun và một chân đầu ra được sử dụng để đếm số lần kích hoạt.
Bố trí lắp đặt cảm biến H206
Việc gắn các loại cảm biến này hơi phức tạp. Nó chỉ có thể được gắn cho động cơ có trục nhô ra ở cả hai bên. Một bên của trục được kết nối với bánh xe trong khi bên còn lại dùng để lắp tấm lưới như hình trên.
Vì bánh xe và đĩa được nối với cùng một trục nên cả hai đều quay cùng tốc độ và do đó bằng cách đo tốc độ của đĩa, chúng ta có thể đo được tốc độ của bánh xe. Đảm bảo rằng các khoảng trống trên tấm lưới đi qua cảm biến IR, chỉ khi đó cảm biến mới có thể đếm số lượng khe hở đã đi qua. Bạn cũng có thể đưa ra cách bố trí cơ khí của riêng mình để gắn cảm biến miễn là nó đáp ứng điều kiện được chỉ định. Cảm biến hồng ngoại thường được sử dụng trong nhiều dự án Robotics để hướng dẫn robot về các chướng ngại vật.
Tấm lưới hiển thị ở trên có 20 khe (lưới). Điều này có nghĩa là cảm biến sẽ tìm ra 20 khoảng trống cho một vòng quay hoàn chỉnh của bánh xe. Bằng cách đếm số lượng khoảng trống mà cảm biến đã phát hiện, chúng ta có thể tính toán khoảng cách mà bánh xe di chuyển, tương tự bằng cách đo tốc độ cảm biến tìm thấy khoảng trống mà chúng ta có thể phát hiện tốc độ của bánh xe. Trong rô bốt của chúng tôi, chúng tôi sẽ gắn cảm biến này vào cả hai bánh xe và do đó chúng tôi có thể tìm thấy góc của rô bốt. Tuy nhiên, góc quay có thể được tính toán hợp lý hơn bằng cách sử dụng Gia tốc kế hoặc Con quay hồi chuyển, hãy tìm hiểu tại đây để giao tiếp Gia tốc kế và con quay hồi chuyển với Arduino và thử đo góc quay bằng chúng.
Tự làm Sơ đồ mạch Robot cảm biến tốc độ Arduino LM393
Sơ đồ mạch hoàn chỉnh của robot cảm biến tốc độ và khoảng cách này được hiển thị bên dưới. Bot bao gồm Arduino Nano làm bộ não của nó, hai động cơ DC cho các bánh xe được điều khiển bởi mô-đun L298N H-Bridge Motor Driver. Joystick được sử dụng để điều khiển tốc độ và hướng của bot và hai cảm biến tốc độ H206 được sử dụng để đo tốc độ, khoảng cách và thiên thần của bot. Các giá trị đo được sau đó được hiển thị trong mô-đun LCD 16x2. Chiết áp kết nối với màn hình LCD có thể được sử dụng để điều chỉnh độ tương phản của màn hình LCD và điện trở được sử dụng để hạn chế dòng điện chạy đến đèn nền của màn hình LCD.
Các mạch hoàn chỉnh được cung cấp bởi một tế bào 7.4V Lithium. 7.4V này được cung cấp cho chân 12V của mô-đun điều khiển động cơ. Sau đó, bộ điều chỉnh điện áp trên mô-đun điều khiển động cơ sẽ chuyển đổi 7,4V thành + 5V được điều chỉnh, được sử dụng để cấp nguồn cho Arduino, LCD, Cảm biến và Cần điều khiển.
Động cơ được điều khiển bởi các chân kỹ thuật số 8,9,10 và 11 của Arduino. Vì tốc độ của động cơ cũng phải được kiểm soát, chúng ta nên cung cấp tín hiệu PWM cho cực dương của động cơ. Do đó, chúng ta có chân 9 và 10 đều là chân có khả năng PWM. Các giá trị X và Y tạo thành cần điều khiển được đọc bằng cách sử dụng các chân Analog A2 và A3 tương ứng.
Như chúng ta đã biết, cảm biến H206 tạo ra một kích hoạt khi phát hiện ra khoảng trống trong tấm lưới. Vì không phải lúc nào các bộ kích hoạt này cũng được đọc chính xác để tính toán tốc độ và khoảng cách chính xác nên cả hai chân của bộ kích hoạt (đầu ra) đều được kết nối với chân ngắt Ngoài 2 và 3 của Bảng Arduino. Lắp ráp toàn bộ mạch trên khung và gắn cảm biến tốc độ như đã giải thích, bot của tôi trông giống như bên dưới sau khi kết nối hoàn tất. Bạn cũng có thể xem video ở cuối trang này để biết cách gắn cảm biến.
Bây giờ phần cứng đã hoàn thành, chúng ta hãy đi vào logic về cách chúng ta sẽ đo tốc độ, khoảng cách và đơn của bot và sau đó tiếp tục phần lập trình.
Logic đằng sau Đo tốc độ với mô-đun cảm biến tốc độ LM393
Từ thiết lập lắp đặt cảm biến, bạn nên lưu ý rằng mô-đun cảm biến tốc độ LM393 (H206) chỉ đo các khoảng trống có trong tấm lưới. Trong khi lắp phải đảm bảo rằng bánh xe (cần đo tốc độ) và tấm lưới quay cùng tốc độ. Giống như ở đây, vì chúng ta đã lắp cả bánh xe và đĩa trên cùng một trục nên rõ ràng cả hai sẽ quay với cùng tốc độ.
Trong quá trình thiết lập, chúng tôi đã gắn hai cảm biến cho mỗi bánh xe để đo góc của bot. Nhưng nếu mục đích của bạn là chỉ đo tốc độ và khoảng cách, chúng tôi có thể gắn cảm biến trên bất kỳ bánh xe nào. Đầu ra của cảm biến (tín hiệu kích hoạt) thường được kết nối với chân ngắt bên ngoài của vi điều khiển. Mỗi khi phát hiện khoảng trống trong tấm lưới, một ngắt sẽ được kích hoạt và mã trong ISR (Quy trình dịch vụ ngắt) sẽ được thực thi. Nếu chúng ta có thể tính toán khoảng thời gian giữa hai lần kích hoạt như vậy, chúng ta có thể tính được tốc độ của bánh xe.
Trong Arduino, chúng ta có thể dễ dàng tính toán khoảng thời gian này bằng cách sử dụng hàm millis () . Hàm mili này sẽ tiếp tục tăng lên 1 trong mỗi mili giây kể từ thời điểm bật nguồn thiết bị. Vì vậy, khi ngắt đầu tiên xảy ra, chúng ta có thể lưu giá trị của millis () trong một biến giả (như pevtime trong mã này) và sau đó khi ngắt thứ hai xảy ra, chúng ta có thể tính thời gian thực hiện bằng cách trừ giá trị pevtime dưới dạng millis ().
Thời gian thực hiện = thời gian hiện tại - thời gian trước đó timetaken = millis () - pevtime ; // thời gian được tính bằng mili giây
Khi chúng tôi đã tính toán thời gian thực hiện, chúng tôi có thể chỉ cần tính giá trị của vòng / phút bằng cách sử dụng các công thức dưới đây, trong đó (1000 / lần thực hiện) cho RPS (Số vòng quay trên giây) và nó được nhân với 60 để chuyển đổi RPS thành RPM (Số vòng quay mỗi phút).
rpm = (1000 / timetaken) * 60;
Sau khi tính toán vòng / phút, chúng ta có thể tính vận tốc của xe bằng các công thức dưới đây với điều kiện chúng ta biết bán kính của bánh xe.
Vận tốc = 2π × RPS × bán kính của bánh xe. v = radius_of_wheel * rpm * 0,104
Lưu ý, công thức trên dùng để tính vận tốc theo m / s, nếu bạn muốn tính bằng km / giờ thì thay 0,0104 bằng 0,376. Nếu bạn tò mò muốn biết làm thế nào giá trị 0,104 thu được thì hãy thử đơn giản hóa công thức V = 2π × RPS × bán kính của bánh xe.
Kỹ thuật tương tự được sử dụng ngay cả khi cảm biến Hall được sử dụng để đo tốc độ của một vật thể đang quay. Nhưng đối với cảm biến H206 có một điểm bắt, tấm lưới có 20 khe và do đó để đo thời gian giữa hai khe hở sẽ làm quá tải vi điều khiển. Do đó, chúng tôi chỉ đo tốc độ khi một bánh xe quay hoàn toàn. Vì hai lần ngắt sẽ được tạo ra cho mỗi khoảng trống (một lần ở đầu và một lần ở cuối khoảng trống), chúng ta sẽ nhận được tổng cộng 40 lần ngắt để bánh xe thực hiện một vòng quay hoàn chỉnh. Vì vậy, chúng tôi đợi 40 lần ngắt trước khi thực sự tính toán tốc độ của bánh xe. Mã cho cùng một được hiển thị bên dưới
if (xoay> = 40) { timetaken = millis () - pevtime; // timetaken tính bằng mili giây rpm = (1000 / timetaken) * 60; // công thức tính vòng / phút pevtime = millis (); vòng quay = 0; }
Một nhược điểm khác của phương pháp này là giá trị của vận tốc sẽ không giảm về 0 vì thời gian ngắt sẽ luôn chờ bánh xe hoàn thành một vòng quay để tính toán giá trị vòng / phút. Có thể dễ dàng khắc phục nhược điểm này bằng cách thêm một đoạn mã đơn giản theo dõi khoảng thời gian giữa hai lần ngắt và nếu nó vượt quá mức bình thường thì chúng ta có thể buộc giá trị của vòng / phút và vận tốc bằng không. Liên kết trong đoạn mã dưới đây, chúng tôi đã sử dụng biến dtime để kiểm tra sự khác biệt về thời gian và nếu nó vượt quá 500 mili giây thì giá trị của vận tốc và vòng / phút buộc phải bằng 0.
/ * Để giảm xuống 0 nếu xe dừng * / if (millis () - dtime> 500) // không tìm thấy ngắt quãng trong 500ms { rpm = v = 0; // làm cho rpm và vận tốc là zero dtime = millis (); }
Logic đằng sau đo khoảng cách bánh xe di chuyển
Chúng ta đã biết rằng Arduino sẽ cảm nhận được 40 lần ngắt khi bánh xe quay hoàn toàn. Như vậy cứ một vòng quay của bánh xe thì rõ ràng là quãng đường mà bánh xe đi được bằng chu vi của bánh xe. Vì chúng ta đã biết bán kính của bánh xe, chúng ta có thể dễ dàng tính khoảng cách được bao phủ bằng công thức dưới đây
Khoảng cách = 2πr * số vòng quay khoảng cách = (2 * 3,141 * radius_of_wheel) * (left_intr / 40)
Trong đó chu vi của bánh xe được tính bằng công thức 2πr và sau đó nó được nhân với số vòng quay của bánh xe.
Logic đằng sau việc đo góc của bot
Có nhiều cách để xác định thiên thần của robot. Gia tốc kế và Con quay hồi chuyển thường được sử dụng để xác định các giá trị này. Nhưng một cách tiếp cận rẻ tiền khác là sử dụng cảm biến H206 trên cả hai bánh. Bằng cách này, chúng ta sẽ biết mỗi bánh xe đã quay được bao nhiêu vòng. Hình dưới đây minh họa cách tính góc.
Khi robot được khởi tạo, góc mà nó phải đối mặt được coi là 0 °. Từ đó nó quay sang trái góc được tăng lên theo âm và nếu nó quay sang phải thì thiên thần sẽ tăng lên theo dương. Để hiểu rõ, chúng ta hãy xem xét phạm vi từ -90 đến +90 như trong hình. Theo cách sắp xếp như vậy vì cả hai bánh xe đều có cùng đường kính, nếu bất kỳ một bánh xe nào trong số bánh xe quay hoàn toàn thì bot chúng ta sẽ quay một góc 90 °.
Ví dụ: nếu bánh xe Bên trái thực hiện một vòng quay hoàn toàn (80 lần ngắt) thì bot sẽ quay 90 ° về phía bên trái và tương tự nếu bánh xe Bên phải thực hiện một vòng quay hoàn toàn (80 lần ngắt) thì bot sẽ quay -90 ° về phía bên phải. Bây giờ chúng ta biết rằng nếu Arduino phát hiện ra 80 lần ngắt trên một bánh xe thì bot đã quay 90 ° và dựa vào bánh xe nào chúng ta có thể biết được liệu bot đã quay theo chiều dương (phải) hay tiêu cực (trái). Vì vậy, góc trái và góc phải có thể được tính bằng công thức dưới đây
int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
Trong đó 90 là góc được bao phủ khi thực hiện ngắt bằng 80. Giá trị kết quả được nhân với số ngắt. Chúng tôi cũng đã sử dụng mô-đun 360 để giá trị kết quả không bao giờ vượt quá 36. Khi chúng tôi đã tính toán cả góc trái và góc phải, góc hiệu dụng mà bot đang đối mặt có thể thu được đơn giản bằng cách trừ góc bên trái cho góc bên phải.
angle = angle_right - angle_left;
Mã rô bốt Arduino
Bạn có thể tìm thấy mã Arduino hoàn chỉnh cho rô bốt đo tốc độ và góc này ở cuối trang này. Mục đích của chương trình là tính toán tốc độ, khoảng cách và góc của bot bằng cách sử dụng các lôgic trên và hiển thị nó trên màn hình LCD. Ngoài ra, nó sẽ cung cấp một tùy chọn để điều khiển bot bằng Joystick.
Chúng tôi bắt đầu chương trình bằng cách xác định các chân I / O Kỹ thuật số cho hai động cơ. Lưu ý rằng chúng ta cũng phải điều khiển tốc độ của động cơ và do đó chúng ta phải sử dụng các chân PWM trên Arduino để điều khiển động cơ. Ở đây chúng tôi đã sử dụng chân 8,9,10 và 11.
#define LM_pos 9 // động cơ trái #define LM_neg 8 // động cơ trái #define RM_pos 10 // động cơ phải #define RM_neg 11 // động cơ phải #define joyX A2 #define joyY A3
Để đo tốc độ và khoảng cách được bao phủ, chúng ta cần biết bán kính của bánh xe, đo giá trị và nhập nó bằng mét như hình dưới đây. Đối với bot của tôi, bán kính là 0,033 mét nhưng nó có thể khác với bạn dựa trên bot của bạn.
bán kính float_of_wheel = 0,033; // Đo bán kính bánh xe của bạn và nhập vào đây bằng cm
Bên trong chức năng thiết lập , chúng tôi khởi tạo tất cả giá trị bằng 0 và sau đó hiển thị Văn bản giới thiệu trên màn hình LCD. Chúng tôi cũng đã khởi tạo màn hình nối tiếp cho mục đích gỡ lỗi. Sau đó, chúng tôi đã đề cập rằng các cảm biến tốc độ H206 được kết nối với chân 2 và 3 như các ngắt bên ngoài. Đó là lúc mà ngắt được phát hiện thì hàm ISR Left_ISR và Right_ISR sẽ được thực thi tương ứng.
void setup () { quay = rpm = pevtime = 0; // Khởi tạo tất cả các biến bằng không Serial.begin (9600); lcd.begin (16, 2); // Khởi tạo LCD 16 * 2 lcd.print ("Bot Monitor"); // Dòng thông báo Intro 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Dòng thông báo Intro delay 2 (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, OUTPUT); pinMode (LM_neg, OUTPUT); pinMode (RM_pos, OUTPUT); pinMode (RM_neg, OUTPUT); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); mountInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Left_ISR được gọi khi cảm biến bánh xe trái được kích hoạt đính kèm (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR được gọi khi cảm biến bánh xe bên phải được kích hoạt }
Bên trong quy trình Left_ISR, chúng tôi chỉ cần tăng một biến có tên là left_intr mà sau này sẽ được sử dụng để đo góc của bot. Bên trong Right_ISR, chúng tôi làm điều tương tự nhưng sau đó, chúng tôi cũng tính toán tốc độ ở đây. Vòng quay của biến được tăng lên cho mỗi lần ngắt và sau đó logic trên được sử dụng để tính toán tốc độ.
void Left_ISR () { left_intr ++; delay (10); } void Right_ISR () { right_intr ++; chậm trễ (10); luân chuyển ++; dtime = millis (); if (xoay> = 40) { timetaken = millis () - pevtime; // timetaken tính bằng mili giây rpm = (1000 / timetaken) * 60; // công thức tính vòng / phút pevtime = millis (); vòng quay = 0; } }
Bên trong hàm vòng lặp vô hạn chính, chúng tôi theo dõi các giá trị của X và Y từ cần điều khiển. Dựa trên giá trị nếu cần điều khiển được di chuyển, chúng tôi sẽ điều khiển bot tương ứng. Tốc độ của bot phụ thuộc vào khoảng cách mà cần điều khiển được đẩy.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); int tăng tốc = map (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, gia tốc); analogWrite (RM_pos, tăng tốc); } else { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } if (yValue> 550) analogWrite (RM_pos, 80); if (yValue <500) analogWrite (LM_pos, 100);
Điều này sẽ giúp người dùng di chuyển bot và kiểm tra xem các giá trị thu được có như mong đợi hay không. Cuối cùng, chúng ta có thể tính toán tốc độ, khoảng cách và góc của bot bằng cách sử dụng lôgic ở trên và hiển thị nó trên màn hình LCD bằng cách sử dụng mã bên dưới.
v = radius_of_wheel * rpm * 0.104; //0.033 là bán kính của bánh xe trong khoảng cách mét = (2 * 3.141 * radius_of_wheel) * (left_intr / 40); int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80); angle = angle_right - angle_left; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (right_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (khoảng cách); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (góc);
Thử nghiệm Robot Arduino để đo Khoảng cách, Tốc độ và Góc
Khi phần cứng của bạn đã sẵn sàng, hãy tải mã vào Arduino và sử dụng cần điều khiển để di chuyển bot của bạn. tốc độ của bot, khoảng cách được bao phủ bởi nó và góc sẽ được hiển thị trên màn hình LCD như hình dưới đây.
Trên màn hình LCD, thuật ngữ Lt và Rt đại diện cho Đếm Ngắt Trái và Đếm Ngắt Phải. Bạn có thể thấy các giá trị này tăng dần cho mọi khoảng trống được cảm biến phát hiện. Dấu S chỉ Tốc độ của bot tính bằng m / giây và chữ D chỉ Khoảng cách được tính bằng mét. Góc của bot được hiển thị ở cuối, trong đó 0 ° là thẳng và nó âm khi quay ngược chiều kim đồng hồ và dương cho quay theo chiều kim đồng hồ.
Bạn cũng có thể xem video ở cuối trang này để hiểu cách thức hoạt động của bot. Hy vọng bạn hiểu dự án và thích xây dựng nó. Nếu bạn có bất kỳ mối quan tâm nào, hãy để lại chúng trong phần bình luận và tôi sẽ cố gắng phản hồi lại bằng cách tốt nhất. Bạn cũng có thể sử dụng các diễn đàn để được trợ giúp kỹ thuật nhanh chóng.