- วัสดุที่จำเป็น
- การคำนวณความเร็วและแสดงบนมาตรวัดความเร็วแบบอนาล็อก
- แผนภาพวงจรและการเชื่อมต่อ
- คำอธิบายการเขียนโปรแกรม
การวัดความเร็ว / รอบต่อนาทีของยานพาหนะหรือมอเตอร์เป็นโครงการที่น่าสนใจเสมอมา ในโครงการนี้เราจะไปสร้างSpeedometer อนาล็อกใช้ Arduino เราจะใช้โมดูล IR Sensor เพื่อวัดความเร็ว มีวิธีอื่น / เซ็นเซอร์สำหรับสิ่งนี้เช่นเซ็นเซอร์ฮอลล์ในการวัดความเร็ว แต่การใช้เซ็นเซอร์ IR นั้นทำได้ง่ายเนื่องจากโมดูลเซ็นเซอร์ IR เป็นอุปกรณ์ที่ใช้กันทั่วไปและเราสามารถหาซื้อได้ง่ายจากตลาดและยังสามารถใช้ได้กับทุกประเภท มอเตอร์ / ยานพาหนะ
ในโครงการนี้เราจะไปความเร็วการแสดงทั้งในรูปแบบดิจิตอลและอนาล็อกการทำโครงการนี้จะช่วยเพิ่มทักษะในการเรียนรู้Arduino และ Stepper motorเนื่องจากโครงการนี้เกี่ยวข้องกับการใช้ Interrupts และ Timers ในตอนท้ายของโปรเจ็กต์นี้คุณจะสามารถคำนวณความเร็วและระยะทางที่ครอบคลุมโดยวัตถุหมุนใด ๆ และแสดงบนหน้าจอ LCD 16x2 ในรูปแบบดิจิทัลและบนมิเตอร์อนาล็อก มาเริ่มกันที่Speedometer และ Odometer Circuit กับ Arduino
วัสดุที่จำเป็น
- Arduino
- มอเตอร์ไบโพลาร์ (4 สาย)
- ตัวขับมอเตอร์สเต็ป (โมดูล L298n)
- โมดูลเซ็นเซอร์ IR
- จอ LCD 16 * 2
- ตัวต้านทาน 2.2k
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม.
- แหล่งจ่ายไฟ
- พิมพ์ภาพมาตรวัดความเร็ว
การคำนวณความเร็วและแสดงบนมาตรวัดความเร็วแบบอนาล็อก
IR Sensorคืออุปกรณ์ที่สามารถตรวจจับวัตถุที่อยู่ด้านหน้าได้ เราใช้ใบพัดใบพัด (พัดลม) สองตัวและวางเซ็นเซอร์ IR ไว้ใกล้ ๆ ในลักษณะที่ทุกครั้งที่ใบพัดหมุนเซ็นเซอร์ IR ตรวจจับได้ จากนั้นเราใช้ความช่วยเหลือของตัวจับเวลาและอินเทอร์รัปต์ใน Arduino เพื่อคำนวณเวลาที่ใช้ในการหมุนมอเตอร์หนึ่งครั้ง
ในโครงการนี้เราได้ใช้การขัดจังหวะที่มีลำดับความสำคัญสูงสุดในการตรวจจับรอบต่อนาทีและเราได้กำหนดค่าในโหมดที่เพิ่มขึ้น ดังนั้นเมื่อใดก็ตามที่เอาต์พุตของเซ็นเซอร์อยู่ในระดับต่ำไปสูงฟังก์ชัน RPMCount () จะทำงาน และในขณะที่เราใช้ใบพัดสองใบมันหมายความว่าฟังก์ชันนี้จะถูกเรียก 4 ครั้งในการปฏิวัติครั้งเดียว
เมื่อทราบเวลาที่ใช้แล้วเราสามารถคำนวณ RPM ได้โดยใช้สูตรด้านล่างโดยที่ 1000 / เวลาที่ใช้จะให้ RPS (การปฏิวัติต่อวินาที) แก่เราและการคูณด้วย 60 จะทำให้คุณได้ RPM (รอบต่อนาที)
รอบต่อนาที = (60/2) * (1000 / (มิลลิวินาที() - เวลา)) * REV / bladesInFan;
หลังจากได้รับ RPM ความเร็วสามารถคำนวณได้จากสูตรที่กำหนด:
ความเร็ว = รอบต่อนาที * (2 * Pi * รัศมี) / 1,000
เรารู้ว่า Pi = 3.14 และรัศมี 4.7 นิ้ว
แต่ก่อนอื่นเราต้องแปลงรัศมีเป็นเมตรจากนิ้ว:
รัศมี = ((รัศมี * 2.54) /100.0) เมตร ความเร็ว = รอบต่อนาที * 60.0 * (2.0 * 3.14 * รัศมี) / 1,000.0) ในกิโลเมตรต่อชั่วโมง
ที่นี่เราได้คูณรอบต่อนาทีด้วย 60 เพื่อแปลงรอบต่อนาทีเป็นรอบต่อชั่วโมง (รอบต่อชั่วโมง) และหารด้วย 1,000 เพื่อแปลงเมตร / ชั่วโมงเป็นกิโลเมตร / ชั่วโมง
หลังจากมีความเร็วเป็น kmh เราสามารถแสดงค่าเหล่านี้ได้โดยตรงบน LCD ในรูปแบบดิจิทัล แต่เพื่อแสดงความเร็วในรูปแบบอะนาล็อกเราจำเป็นต้องทำการคำนวณอีกครั้งเพื่อหาว่าไม่มี ของขั้นตอนมอเตอร์สตาร์ทควรเคลื่อนที่เพื่อแสดงความเร็วบนมิเตอร์อนาล็อก
ที่นี่เราได้ใช้มอเตอร์สเต็ปเปอร์สองขั้ว 4 สายสำหรับมิเตอร์อนาล็อกซึ่งมี 1.8 องศาหมายถึง 200 ก้าวต่อการปฏิวัติ
ตอนนี้เราต้องแสดง 280 Kmh บนมาตรวัดความเร็ว ดังนั้นเพื่อแสดงมอเตอร์สเต็ป 280 Kmh จำเป็นต้องขยับ 280 องศา
ดังนั้นเราจึงมี maxSpeed = 280
และ maxSteps จะเป็น
maxSteps = 280 / 1.8 = 155 ขั้นตอน
ตอนนี้เรามีฟังก์ชั่นในรหัส Arduino ของเราคือฟังก์ชัน แผนที่ ซึ่งใช้ที่นี่เพื่อแมปความเร็วเป็นขั้นตอน
ขั้นตอน = แผนที่ (ความเร็ว 0, maxSpeed , 0, maxSteps);
ตอนนี้เรามี
ขั้นตอน = แผนที่ (ความเร็ว 0,280,0,155);
หลังจากคำนวณขั้นตอนแล้วเราสามารถใช้ขั้นตอนเหล่านี้โดยตรงในฟังก์ชันสเต็ปเปอร์มอเตอร์เพื่อเคลื่อนสเต็ปมอเตอร์ นอกจากนี้เรายังต้องดูแลขั้นตอนหรือมุมปัจจุบันของมอเตอร์สเต็ปเปอร์โดยใช้การคำนวณที่กำหนด
currSteps = ขั้นตอน ขั้นตอน = currSteps-preSteps preSteps = currSteps
นี่ currSteps เป็นขั้นตอนในปัจจุบันที่มาจากการคำนวณที่ผ่านมาและ preSteps จะดำเนินการขั้นตอนสุดท้าย
แผนภาพวงจรและการเชื่อมต่อ
แผนภาพวงจรสำหรับมาตรวัดความเร็วแบบอนาล็อกเป็นเรื่องง่ายที่นี่เราใช้ LCD 16x2 เพื่อแสดงความเร็วในรูปแบบดิจิทัลและมอเตอร์สเต็ปเปอร์เพื่อหมุนเข็มวัดความเร็วแบบอนาล็อก
16x2 LCD เชื่อมต่อที่หมุดอะนาล็อกต่อไปนี้ของ Arduino
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
ใช้ตัวต้านทาน 2.2k เพื่อตั้งค่าความสว่างของ LCD โมดูลเซ็นเซอร์ IR ซึ่งใช้ตรวจจับใบพัดลมเพื่อคำนวณรอบต่อนาทีเชื่อมต่อกับอินเทอร์รัปต์ 0 หมายถึงขา D2 ของ Arduino
ที่นี่เราได้ใช้คนขับรถมอเตอร์คือโมดูล L293N IN1, IN2, IN3 และ IN4 พินของไดรเวอร์สเต็ปเปอร์มอเตอร์เชื่อมต่อโดยตรงกับ D8, D9, D10 และ D11 ของ Arduino การเชื่อมต่อที่เหลือจะได้รับในแผนภาพวงจร
คำอธิบายการเขียนโปรแกรม
รหัสที่สมบูรณ์สำหรับ Arduino Speedomete r จะได้รับในตอนท้ายที่นี่เรากำลังอธิบายส่วนสำคัญบางส่วน
ในส่วนของการเขียนโปรแกรมเราได้รวมไลบรารีที่จำเป็นทั้งหมดเช่นไลบรารีสเต็ปเปอร์มอเตอร์ไลบรารี LCD LiquidCrystal และพินที่ประกาศไว้สำหรับพวกเขา
# รวม
หลังจากนี้เราได้นำตัวแปรและมาโครมาทำการคำนวณ การคำนวณได้อธิบายไว้แล้วในหัวข้อก่อนหน้านี้
REV ไบต์ระเหย; รอบต่อนาที int ยาวที่ไม่ได้ลงนาม, RPM; st ยาวที่ไม่ได้ลงนาม = 0; ไม่ได้ลงนามเป็นเวลานาน int ledPin = 13; int นำ = 0, RPMlen, prevRPM; int ธง = 0; int flag1 = 1; # กำหนดใบมีด InFan 2 รัศมีลอย = 4.7; // นิ้ว int preSteps = 0; ลอย stepAngle = 360.0 / (float) stepsPerRevolution; ลอย minSpeed = 0; ลอย maxSpeed = 280.0; ลอย minSteps = 0; ลอย maxSteps = maxSpeed / stepAngle;
หลังจากนี้เราจะเริ่มต้น LCD, Serial, interrupt และ Stepper motor ในฟังก์ชัน การตั้งค่า
การตั้งค่าเป็นโมฆะ () { myStepper.setSpeed (60); Serial.begin (9600); PinMode (ledPin, เอาท์พุท); lcd.begin (16,2); lcd.print ("มาตรวัดความเร็ว"); ล่าช้า (2000); attachInterrupt (0, RPMCount, RISING); }
หลังจากนี้เราจะอ่านรอบต่อนาทีในฟังก์ชัน ลูป และทำการคำนวณเพื่อรับความเร็วและแปลงเป็นขั้นตอนเพื่อเรียกใช้สเต็ปเปอร์มอเตอร์เพื่อแสดงความเร็วในรูปแบบอะนาล็อก
ห่วงเป็นโมฆะ () { readRPM (); รัศมี = ((รัศมี * 2.54) /100.0); // การแปลงเป็นเมตร int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) /1000.0); // RPM ใน 60 นาทีเส้นผ่านศูนย์กลางของยาง (2pi r) r คือรัศมี 1,000 ในการแปลงเป็น km int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); ถ้า (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("ความเร็ว:"); lcd.print (ความเร็ว); lcd.print ("กม. / ชม."); แฟล็ก 1 = 0; } int currSteps = ขั้นตอน;ขั้นตอน int = currSteps-preSteps; preSteps = currSteps; myStepper.step (ขั้นตอน); }
ที่นี่เรามี ฟังก์ชัน reapRPM () เพื่อคำนวณ RPM
int readRPM () { if (REV> = 10 หรือ millis ()> = st + 1000) // มันจะอัปเดต AFETR ทุกๆ 10 ครั้งหรือ 1 วินาทีในโหมดว่าง { if (flag == 0) flag = 1; รอบต่อนาที = (60/2) * (1,000 / (มิลลิวินาที () - เวลา)) * REV / bladeInFan; เวลา = มิลลิวินาที (); REV = 0; int x = รอบต่อนาที; ในขณะที่ (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (รอบต่อนาที DEC); RPM = รอบต่อนาที; ล่าช้า (500); st = มิลลิวินาที (); แฟล็ก 1 = 1; } }
ในที่สุดเราได้ขัดจังหวะกิจวัตรซึ่งมีหน้าที่ในการวัดการปฏิวัติของวัตถุ
โมฆะ RPMCount () { REV ++; ถ้า (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
นี่คือวิธีที่คุณก็สามารถสร้างอนาล็อก Speedometer ใช้ Arduino นอกจากนี้ยังสามารถสร้างขึ้นโดยใช้เซ็นเซอร์ Hall และสามารถแสดงความเร็วบนสมาร์ทโฟนได้ทำตามบทช่วยสอน Arduino Speedometer