- Vật liệu thiết yếu
- Tính toán tốc độ và hiển thị nó trên đồng hồ tốc độ tương tự
- Sơ đồ mạch và kết nối
- Giải thích lập trình
Đo tốc độ / vòng / phút của một chiếc xe hoặc một động cơ luôn là một dự án hấp dẫn để thử. Trong dự án này, chúng tôi sẽ xây dựng một Đồng hồ tốc độ tương tự bằng Arduino. Chúng tôi sẽ sử dụng mô-đun Cảm biến IR để đo tốc độ. Có những cách / cảm biến khác cho việc này, như cảm biến Hall để đo tốc độ, nhưng sử dụng cảm biến IR rất dễ dàng vì mô-đun cảm biến IR là thiết bị rất phổ biến và chúng ta có thể dễ dàng mua được từ thị trường và nó cũng có thể được sử dụng trên mọi loại xe cơ giới.
Trong dự án này, chúng tôi sẽ hiển thị tốc độ ở cả dạng analog và kỹ thuật số. Bằng cách thực hiện dự án này, chúng tôi cũng sẽ nâng cao kỹ năng học Arduino và Động cơ bước vì dự án này liên quan đến việc sử dụng Ngắt và Bộ hẹn giờ. Vào cuối dự án này, bạn sẽ có thể tính toán tốc độ và khoảng cách được bao phủ bởi bất kỳ vật thể quay nào và hiển thị chúng trên màn hình LCD 16x2 ở định dạng kỹ thuật số và cả trên đồng hồ kim. Vì vậy, hãy bắt đầu với Mạch đồng hồ tốc độ và đồng hồ đo tốc độ này với Arduino
Vật liệu thiết yếu
- Arduino
- Một động cơ bước lưỡng cực (4 dây)
- Trình điều khiển động cơ bước (Mô-đun L298n)
- Mô-đun cảm biến hồng ngoại
- Màn hình LCD 16 * 2
- Điện trở 2,2k
- Kết nối dây
- Bảng mạch.
- Nguồn cấp
- Bản in hình đồng hồ tốc độ
Tính toán tốc độ và hiển thị nó trên đồng hồ tốc độ tương tự
Cảm biến IR là một thiết bị có thể phát hiện sự hiện diện của một đối tượng phía trước nó. Chúng tôi đã sử dụng hai cánh quạt (quạt) và đặt cảm biến IR gần nó theo cách mà mỗi khi cánh quay, cảm biến IR sẽ phát hiện ra nó. Sau đó, chúng tôi sử dụng sự trợ giúp của bộ hẹn giờ và Ngắt trong Arduino để tính toán thời gian thực hiện cho một vòng quay hoàn chỉnh của động cơ.
Ở đây trong dự án này, chúng tôi đã sử dụng ngắt ưu tiên cao nhất để phát hiện vòng / phút và chúng tôi đã định cấu hình nó ở chế độ tăng. Vì vậy, bất cứ khi nào đầu ra cảm biến từ THẤP đến Cao, hàm RPMCount () sẽ được thực thi. Và như chúng tôi đã sử dụng rôto hai cánh, có nghĩa là chức năng sẽ được gọi 4 lần trong một vòng quay.
Sau khi biết thời gian thực hiện, chúng tôi có thể tính RPM bằng cách sử dụng các công thức dưới đây, Trong đó 1000 / lần thực hiện sẽ cho chúng tôi RPS (vòng quay mỗi giây) và nhân thêm nó với 60 sẽ cho bạn RPM (vòng quay mỗi phút)
vòng / phút = (60/2) * (1000 / (mili () - thời gian)) * REV / lưỡiInFan;
Sau khi nhận được RPM, tốc độ có thể được tính theo công thức đã cho:
Tốc độ = vòng / phút * (bán kính 2 * Pi *) / 1000
Chúng ta biết rằng Pi = 3,14 và bán kính là 4,7 inch
Nhưng trước tiên, chúng ta cần chuyển đổi bán kính thành mét từ inch:
bán kính = ((bán kính * 2,54) /100,0) mét Tốc độ = vòng / phút * 60,0 * (2,0 * 3,14 * bán kính) / 1000,0) tính bằng km trên giờ
Ở đây chúng tôi đã nhân vòng / phút với 60 để chuyển đổi vòng / phút sang rph (vòng quay mỗi giờ) và chia cho 1000 để chuyển đổi mét / giờ sang Kilomét / giờ.
Sau khi có tốc độ theo kmh, chúng ta có thể hiển thị các giá trị này trực tiếp trên màn hình LCD ở dạng kỹ thuật số nhưng để hiển thị tốc độ ở dạng tương tự, chúng ta cần thực hiện thêm một phép tính nữa để tìm ra không. của bước, động cơ bước sẽ di chuyển để hiển thị tốc độ trên đồng hồ tương tự.
Ở đây chúng tôi đã sử dụng động cơ bước lưỡng cực 4 dây cho đồng hồ đo tương tự, có 1,8 độ nghĩa là 200 bước mỗi vòng quay.
Bây giờ chúng ta phải hiển thị 280 Kmh trên đồng hồ tốc độ. Vì vậy, để hiển thị 280 Kmh động cơ bước cần di chuyển 280 độ
Vì vậy, chúng tôi có maxSpeed = 280
Và maxSteps sẽ là
maxSteps = 280 / 1.8 = 155 bước
Bây giờ chúng ta có một hàm trong mã Arduino cụ thể là hàm bản đồ được sử dụng ở đây để ánh xạ tốc độ thành các bước.
Bước = bản đồ (tốc độ, 0, maxSpeed , 0, maxSteps);
Vì vậy, bây giờ chúng tôi có
số bước = bản đồ (tốc độ, 0,280,0,155);
Sau khi tính toán các bước, chúng ta có thể áp dụng trực tiếp các bước này trong chức năng động cơ bước để di chuyển động cơ bước. Chúng ta cũng cần quan tâm đến các bước hoặc góc hiện tại của động cơ bước bằng cách sử dụng các phép tính đã cho
currSteps = Bước bước = currSteps-preSteps preSteps = currSteps
ở đây currSteps là các bước hiện tại đến từ phép tính cuối cùng và preSteps là các bước thực hiện cuối cùng.
Sơ đồ mạch và kết nối
Sơ đồ mạch cho Đồng hồ tốc độ Analog này rất đơn giản, ở đây chúng tôi đã sử dụng LCD 16x2 để hiển thị tốc độ ở dạng số và động cơ bước để quay kim đồng hồ tốc độ dạng analog.
LCD 16x2 được kết nối tại các chân analog sau của Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Một điện trở 2,2k được sử dụng để đặt độ sáng của màn hình LCD. Một mô-đun cảm biến IR, được sử dụng để phát hiện cánh quạt để tính toán vòng / phút, được kết nối với ngắt 0 nghĩa là chân D2 của Arduino.
Ở đây chúng tôi đã sử dụng một trình điều khiển động cơ bước cụ thể là mô-đun L293N. Chân IN1, IN2, IN3 và IN4 của trình điều khiển động cơ bước được kết nối trực tiếp với D8, D9, D10 và D11 của Arduino. Phần còn lại của các kết nối được đưa ra trong Sơ đồ mạch.
Giải thích lập trình
Mã hoàn chỉnh cho Arduino Speedomete r được đưa ra ở cuối, ở đây chúng tôi sẽ giải thích một vài phần quan trọng của nó.
Trong phần lập trình, chúng tôi đã bao gồm tất cả các thư viện cần thiết như thư viện động cơ bước, thư viện LiquidCrystal LCD và các chân khai báo cho chúng.
#include
Sau đó, chúng tôi đã sử dụng một số biến và macro để thực hiện các phép tính. Các phép tính đã được giải thích trong phần trước.
byte dễ bay hơi REV; không dấu dài int rpm, RPM; unsigned long st = 0; lâu không dấu; int ledPin = 13; int led = 0, RPMlen, prevRPM; cờ int = 0; int flag1 = 1; # lưỡi cắt mịnInFan 2 bán kính phao = 4,7; // inch int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Sau đó, chúng tôi khởi tạo động cơ LCD, Nối tiếp, ngắt và Bước trong chức năng thiết lập
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Đồng hồ tốc độ"); chậm trễ (2000); mountInterrupt (0, RPMCount, RISING); }
Sau đó, chúng tôi đọc rpm trong hàm vòng lặp và thực hiện một phép tính để có được tốc độ và chuyển nó thành các bước chạy động cơ bước để hiển thị tốc độ ở dạng tương tự.
void loop () { readRPM (); bán kính = ((bán kính * 2.54) /100.0); // che trong mét int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) /1000.0); // RPM trong 60 phút, đường kính của lốp (2pi r) r là bán kính, 1000 để chuyển đổi theo km int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Tốc độ); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Tốc độ:"); lcd.print (Tốc độ); lcd.print ("Km / h"); cờ1 = 0; } int currSteps = Các bước;int step = currSteps-preSteps; preSteps = currSteps; myStepper.step (các bước); }
Ở đây chúng ta có hàm ReachRPM () để tính RPM.
int readRPM () { if (REV> = 10 hoặc millis ()> = st + 1000) // NÓ SẼ CẬP NHẬT AFETR MỖI 10 BÀI ĐỌC hoặc 1 giây ở chế độ nhàn rỗi { if (flag == 0) flag = 1; vòng / phút = (60/2) * (1000 / (mili () - thời gian)) * REV / lưỡiInFan; thời gian = mili (); REV = 0; int x = vòng / phút; while (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = vòng / phút; chậm trễ (500); st = millis (); cờ1 = 1; } }
Cuối cùng, chúng tôi có quy trình ngắt có trách nhiệm đo lường vòng quay của đối tượng
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, đã dẫn); }
Đây là cách bạn có thể đơn giản tạo một Đồng hồ tốc độ tương tự bằng Arduino. Điều này cũng có thể được xây dựng bằng cách sử dụng cảm biến Hall và tốc độ có thể được hiển thị trên điện thoại thông minh, hãy làm theo hướng dẫn này về Đồng hồ tốc độ Arduino.