- Mô-đun cảm biến tốc độ quang LM-393 có rãnh hồng ngoại
- Đo tốc độ và quãng đường đã đi để tính giá vé
Ngày nay công tơ kỹ thuật số đang thay thế công tơ analog trong mọi lĩnh vực dù là đồng hồ đo điện hay đồng hồ cước taxi. Nguyên nhân chính là do các bộ phận cơ khí có xu hướng bị mài mòn khi sử dụng trong thời gian dài và chúng không chính xác như đồng hồ kỹ thuật số.
Một ví dụ điển hình cho điều này là đồng hồ tốc độ analog và đồng hồ đo quãng đường được sử dụng trong xe đạp động cơ cũ để đo tốc độ và quãng đường đã đi. Chúng có một bộ phận đặc biệt gọi là bánh răng và bố trí giá đỡ, trong đó một sợi cáp được sử dụng để xoay chốt của đồng hồ tốc độ khi bánh xe quay. Điều này sẽ hao mòn khi sử dụng trong thời gian dài và cũng cần thay thế và bảo trì.
Trong máy đo kỹ thuật số, thay vì sử dụng các bộ phận cơ khí, một số cảm biến như bộ ngắt quang học hoặc cảm biến hội trường được sử dụng để tính toán tốc độ và khoảng cách. Điều này chính xác hơn so với đồng hồ đo tương tự và không cần bảo trì trong thời gian dài. Trước đây chúng tôi đã xây dựng nhiều dự án đồng hồ tốc độ kỹ thuật số sử dụng các cảm biến khác nhau:
- Tự làm đồng hồ tốc độ bằng Arduino và Ứng dụng Android đang xử lý
- Máy đo tốc độ kỹ thuật số và mạch đo tốc độ sử dụng vi điều khiển PIC
- Đo tốc độ, khoảng cách và góc cho rô bốt di động sử dụng cảm biến LM393 (H206)
Hôm nay, trong hướng dẫn này, chúng ta sẽ tạo một nguyên mẫu của Máy đo giá cước taxi kỹ thuật số sử dụng Arduino. Dự án này tính toán tốc độ và quãng đường di chuyển của bánh xe taxi và liên tục hiển thị trên màn hình LCD 16x2. Và dựa trên khoảng cách di chuyển, nó tạo ra giá vé khi chúng ta nhấn nút nhấn.
Hình ảnh dưới đây cho thấy thiết lập hoàn chỉnh của Dự án đồng hồ đo taxi kỹ thuật số
Nguyên mẫu này có khung gầm xe RC với mô-đun cảm biến tốc độ và bánh xe mã hóa gắn với động cơ. Khi tốc độ được đo, chúng ta có thể đo quãng đường đã đi và tìm giá trị số tiền vé bằng cách nhấn nút nhấn. Chúng ta có thể cài đặt tốc độ của bánh xe bằng chiết áp. Để tìm hiểu thêm về cách sử dụng mô-đun Cảm biến tốc độ LM-393 với Arduino, hãy nhấp vào liên kết. Chúng ta hãy xem một đoạn giới thiệu ngắn về Mô-đun cảm biến tốc độ.
Mô-đun cảm biến tốc độ quang LM-393 có rãnh hồng ngoại
Đây là một mô-đun loại khe có thể được sử dụng để đo tốc độ quay của bánh xe bộ mã hóa. Mô-đun cảm biến tốc độ này hoạt động dựa trên bộ ngắt quang loại khe còn được gọi là cảm biến nguồn quang. Mô-đun này yêu cầu điện áp từ 3,3V đến 5V và tạo ra đầu ra kỹ thuật số. Vì vậy, nó có thể được giao tiếp với bất kỳ vi điều khiển nào.
Cảm biến ánh sáng hồng ngoại bao gồm nguồn sáng (IR-LED) và cảm biến quang điện trở. Cả hai đều được đặt với một khoảng cách nhỏ ở giữa chúng. Khi một đối tượng được đặt vào giữa khe hở của IR LED và phototransistor, nó sẽ làm gián đoạn chùm ánh sáng khiến phototransistor ngừng cho dòng điện đi qua.
Vì vậy, với cảm biến này, một đĩa có rãnh (Bánh xe mã hóa) được sử dụng có thể được gắn vào động cơ và khi bánh xe quay cùng với động cơ, nó sẽ ngắt chùm ánh sáng giữa IR LED và phototransistor tạo ra đầu ra Bật và Tắt (Tạo xung).
Do đó, nó tạo ra đầu ra CAO khi có ngắt giữa nguồn và cảm biến (Khi bất kỳ đối tượng nào được đặt ở giữa) và tạo ra đầu ra THẤP khi không có đối tượng được đặt. Trong mô-đun, chúng tôi có một đèn LED để chỉ ra ngắt quang gây ra.
Mô-đun này đi kèm với IC so sánh LM393 được sử dụng để tạo ra các tín hiệu CAO và THẤP chính xác tại ĐẦU RA. Vì vậy, mô-đun này đôi khi được gọi là Cảm biến tốc độ LM393.
Đo tốc độ và quãng đường đã đi để tính giá vé
Để đo tốc độ quay, chúng ta cần biết số lượng khe có trong bánh xe mã hóa. Tôi có một bánh xe mã hóa với 20 khe cắm trong đó. Khi chúng quay một vòng hoàn chỉnh, chúng ta có 20 xung ở đầu ra. Vì vậy, để tính toán tốc độ, chúng ta cần số lượng xung được tạo ra trong một giây.
Ví dụ
Nếu có 40 xung trong một giây thì
Tốc độ = Noo. Trong số xung / Số lượng khe = 40/20 = 2RPS (Cách mạng mỗi giây)
Để tính toán tốc độ theo RPM (Số vòng quay mỗi phút), hãy nhân với 60.
Tốc độ tính bằng RPM = 2 X 60 = 120 RPM (Số vòng quay mỗi phút)
Đo khoảng cách
Đo quãng đường di chuyển của bánh xe thật đơn giản. Trước khi tính toán khoảng cách, cần biết chu vi của bánh xe.
Chu vi của bánh xe = π * d
Trong đó d là đường kính của bánh xe.
Giá trị của π là 3,14.
Em có một cái bánh xe (bánh xe ô tô RC) đường kính 6,60 cm nên chu vi là (20,7 cm).
Vì vậy, để tính toán khoảng cách đã di chuyển, chỉ cần nhân số xung phát hiện được với chu vi.
Khoảng cách đã đi = Chu vi của bánh xe x (Số xung / Số rãnh)
Vì vậy, khi một bánh xe có chu vi 20,7cm thực hiện 20 xung là một vòng quay của bánh xe mã hóa thì quãng đường bánh xe đi được tính bằng
Khoảng cách di chuyển = 20,7 x (20/20) = 20,7cm
Để tính khoảng cách bằng mét, hãy chia khoảng cách theo giá trị cm cho 100.
Lưu ý: Đây là bánh xe RC nhỏ, trong thời gian thực, xe có bánh xe lớn hơn thế này. Vì vậy, tôi giả định rằng chu vi của bánh xe là 230cm trong hướng dẫn này.
Tính giá vé dựa trên khoảng cách đã đi
Để có tổng số tiền vé, hãy nhân quãng đường đã đi với giá vé (số tiền / mét).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Tiếp theo gắn hai ngắt bên ngoài. Ngắt đầu tiên làm cho chân 2 của Arduino làm chân ngắt và gọi ISR (đếm) khi có RISING (THẤP ĐẾN CAO) được phát hiện ở chân 2. Chân 2 này được kết nối với đầu ra D0 của mô-đun cảm biến tốc độ.
Và thứ hai làm cho chân 3 của Arduino làm chân ngắt và gọi ISR (tạo ra) khi phát hiện mức CAO tại chân 3. Chân này được nối với nút nhấn bằng một điện trở kéo xuống.
mountInterrupt (digitalPinToInterrupt (2), đếm, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , CAO);
5. Tiếp theo, hãy xem về ISR mà chúng tôi đã sử dụng ở đây:
ISR1- count () ISR được gọi khi xảy ra RISING (THẤP ĐẾN CAO) tại chân 2 (kết nối với cảm biến tốc độ).
void count () // ISR cho số đếm từ cảm biến tốc độ { counter ++; // tăng giá trị bộ đếm lên một vòng quay ++; // Tăng giá trị quay lên một lần delay (10); }
ISR2- timerIsr () ISR được gọi cứ sau một giây và thực thi các dòng đó có bên trong ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); float speed = (counter / 20.0) * 60.0; vòng quay float = 230 * (vòng quay / 20); rotationinm = vòng quay / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (bước sóng quay); lcd.setCursor (0,1); lcd.print ("Tốc độ (RPM):"); lcd.print (tốc độ); bộ đếm = 0; int analogip = analogRead (A0); int Motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, tốc độ động cơ); Timer1.attachInterrupt (timerIsr); mountInterrupt (digitalPinToInterrupt (2), đếm, RISING); }
Hàm này chứa các dòng thực sự tách chân Timer1 và Ngắt ra trước vì chúng ta có các câu lệnh in LCD bên trong ISR.
Để tính toán SPEED trong RPM, chúng tôi sử dụng mã bên dưới trong đó 20.0 là số vị trí đặt trước trong bánh xe mã hóa.
float speed = (counter / 20.0) * 60.0;
Và để tính toán khoảng cách, mã dưới đây được sử dụng:
vòng quay float = 230 * (vòng quay / 20);
Ở đây, chu vi của bánh xe được giả định là 230cm (vì điều này là bình thường đối với ô tô thời gian thực)
Tiếp theo chuyển đổi khoảng cách theo m bằng cách chia khoảng cách cho 100
rotationinm = vòng quay / 100;
Sau đó, chúng tôi hiển thị TỐC ĐỘ và KHOẢNG CÁCH trên màn hình LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (bước sóng quay); lcd.setCursor (0,1); lcd.print ("Tốc độ (RPM):"); lcd.print (tốc độ);
QUAN TRỌNG: Chúng tôi phải đặt lại bộ đếm về 0 vì chúng tôi cần nhận được số điểm cộng được phát hiện trong mỗi giây nên chúng tôi sử dụng dòng này
bộ đếm = 0;
Tiếp theo đọc chân analog A0 và chuyển đổi nó thành giá trị số (0 đến 1023) và ánh xạ thêm các giá trị đó thành 0-255 cho đầu ra PWM (Tốc độ cài đặt của động cơ) và cuối cùng ghi các giá trị PWM đó bằng chức năng analogWrite được kết nối với ULN2003 IC động cơ.
int analogip = analogRead (A0); int Motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, tốc độ động cơ);
ISR3: createfare () ISR được sử dụng để tạo ra số tiền vé dựa trên quãng đường đã đi. ISR này được gọi khi chân ngắt 3 được phát hiện CAO (Khi nhấn nút nhấn). Chức năng này ngắt ngắt ở chân 2 và ngắt bộ định thời rồi xóa màn hình LCD.
khoảng trống generatefare () { detachInterrupt (digitalPinToInterrupt (2)); chân tại 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); rupee float = rotationinm * 5; lcd.print (rupee); lcd.setCursor (0,1); lcd.print ("5 Rs mỗi mét"); }
Sau đó quãng đường đi được sẽ được nhân với 5 (tôi đã sử dụng 5 cho tỷ giá 5 INR / mét). Bạn có thể thay đổi theo ý muốn của mình.
rupee float = rotationinm * 5;
Sau khi tính toán giá trị số tiền hiển thị trên màn hình LCD được kết nối với Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupee); lcd.setCursor (0,1); lcd.print ("5 Rs mỗi mét");
Mã hoàn chỉnh và video minh họa được đưa ra bên dưới.
Bạn có thể cải thiện hơn nữa nguyên mẫu này bằng cách tăng độ chính xác, mạnh mẽ và thêm nhiều tính năng hơn như ứng dụng android, thanh toán kỹ thuật số, v.v. và phát triển nó như một sản phẩm.