لطالما كان قياس السرعة / عدد الدورات في الدقيقة لمركبة أو محرك مشروعًا رائعًا يجب تجربته. في هذا المشروع ، سنقوم ببناء عداد سرعة تناظري باستخدام Arduino. سوف نستخدم وحدة استشعار الأشعة تحت الحمراء لقياس السرعة. هناك طرق / أجهزة استشعار أخرى لهذا ، مثل مستشعر القاعة لقياس السرعة ، ولكن استخدام مستشعر الأشعة تحت الحمراء سهل لأن وحدة مستشعر الأشعة تحت الحمراء هي جهاز شائع جدًا ويمكننا الحصول عليها بسهولة من السوق ويمكن استخدامها أيضًا في أي نوع السيارات.
في هذا المشروع ، سوف نعرض السرعة في كل من الشكل التناظري والرقمي. من خلال القيام بهذا المشروع ، سنعمل أيضًا على تحسين مهاراتنا في تعلم Arduino و Stepper لأن هذا المشروع يتضمن استخدام المقاطعات والمؤقتات. في نهاية هذا المشروع ، ستكون قادرًا على حساب السرعة والمسافات التي يغطيها أي جسم دوار وعرضها على شاشة LCD مقاس 16 × 2 بتنسيق رقمي وأيضًا على عداد تناظري. لذلك دعونا نبدأ مع عداد السرعة ودائرة عداد المسافات مع Arduino
المواد المطلوبة
- اردوينو
- محرك متدرج ثنائي القطب (4 سلك)
- سائق محرك متدرج (وحدة L298n)
- وحدة استشعار الأشعة تحت الحمراء
- شاشة عرض LCD مقاس 16 * 2
- 2.2 كيلو المقاوم
- توصيل الأسلاك
- اللوح.
- مزود الطاقة
- طباعة صورة عداد السرعة
حساب السرعة وعرضها على عداد السرعة التناظري
مستشعر الأشعة تحت الحمراء هو جهاز يمكنه اكتشاف وجود جسم أمامه لقد استخدمنا دواران (مروحة) ووضعنا مستشعر الأشعة تحت الحمراء بالقرب منه بحيث يكتشفه مستشعر الأشعة تحت الحمراء في كل مرة تدور فيها الشفرات. ثم نستخدم مساعدة المؤقتات والمقاطعات في Arduino لحساب الوقت المستغرق لدوران كامل للمحرك.
هنا في هذا المشروع ، استخدمنا المقاطعة ذات الأولوية القصوى لاكتشاف rpm وقمنا بتكوينها في وضع الارتفاع. بحيث يتم تنفيذ وظيفة RPMCount () عندما ينتقل خرج المستشعر من LOW إلى High. وبما أننا استخدمنا دوّارين من الشفرات ، فهذا يعني أنه سيتم استدعاء الوظيفة 4 مرات في دورة واحدة.
بمجرد معرفة الوقت المستغرق ، يمكننا حساب RPM باستخدام الصيغ أدناه ، حيث سيعطينا 1000 / الوقت المستغرق RPS (ثورة في الثانية) ومضاعفته بـ 60 سيعطيك RPM (ثورة في الدقيقة)
rpm = (60/2) * (1000 / (مللي () - الوقت)) * REV / bladesInFan ؛
بعد الحصول على عدد الدورات في الدقيقة ، يمكن حساب السرعة باستخدام صيغة معينة:
السرعة = rpm * (2 * Pi * radius) / 1000
نعلم أن Pi = 3.14 ونصف القطر 4.7 بوصة
لكن علينا أولاً تحويل نصف القطر إلى أمتار من البوصة:
نصف القطر = ((radius * 2.54) /100.0) متر السرعة = rpm * 60.0 * (2.0 * 3.14 * radius) / 1000.0) بالكيلومترات في الساعة
هنا قمنا بضرب rpm في 60 لتحويل rpm إلى rph (ثورة في الساعة) وقسمنا على 1000 لتحويل متر / ساعة إلى كيلومتر / ساعة.
بعد الحصول على السرعة بالكيلومتر في الساعة ، يمكننا إظهار هذه القيم مباشرة على شاشة LCD في شكل رقمي ولكن لإظهار السرعة في الشكل التناظري ، نحتاج إلى إجراء عملية حسابية أخرى لمعرفة لا. من الخطوات ، يجب أن يتحرك محرك السائر لإظهار السرعة على المقياس التناظري.
استخدمنا هنا محرك متدرج ثنائي القطب بأربعة أسلاك للمقياس التناظري ، والذي لديه 1.8 درجة يعني 200 خطوة لكل ثورة.
الآن علينا إظهار 280 كم / ساعة على عداد السرعة. لذلك لإظهار 280 كيلومتر في الساعة ، يحتاج محرك السائر إلى التحرك بمقدار 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 مقاس 16 × 2 لإظهار السرعة في شكل رقمي ومحرك متدرج لتدوير إبرة عداد السرعة التناظرية.
يتم توصيل شاشة LCD مقاس 16 × 2 عند المسامير التناظرية التالية في Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
يستخدم المقاوم 2.2 كيلو لضبط سطوع شاشة LCD يتم توصيل وحدة مستشعر الأشعة تحت الحمراء ، والتي تستخدم للكشف عن شفرة المروحة لحساب عدد الدورات في الدقيقة ، بالمقاطعة 0 تعني D2 pin من Arduino.
هنا استخدمنا محرك متدرج وهو وحدة L293N. يتم توصيل دبوس IN1 و IN2 و IN3 و IN4 لمحرك السائر مباشرة بـ D8 و D9 و D10 و D11 من Arduino. يتم إعطاء بقية الاتصالات في مخطط الدائرة.
شرح البرمجة
تم تقديم رمز كامل لـ Arduino Speedomete r في النهاية ، وها نحن نشرح جزءًا مهمًا منه.
في جزء البرمجة ، قمنا بتضمين جميع المكتبات المطلوبة مثل مكتبة السائر الحركية ومكتبة LiquidCrystal LCD ودبابيس معلنة لها.
#تضمن
بعد ذلك ، أخذنا بعض المتغيرات ووحدات الماكرو لإجراء العمليات الحسابية. تم شرح الحسابات بالفعل في القسم السابق.
البايت المتغير REV ؛ دورة في الدقيقة طويلة بدون توقيع ، RPM ؛ شارع طويل بدون توقيع = 0 ؛ وقت طويل بدون توقيع int ledPin = 13 ؛ الصمام int = 0 ، RPMlen ، prevRPM ؛ علم int = 0 ؛ العلم 1 = 1 ؛ #define bladesInFan 2 نصف قطر الطفو = 4.7 ؛ // بوصة int preSteps = 0 ؛ تعويم stepAngle = 360.0 / (تعويم) stepsPerRevolution ؛ تعويم minSpeed = 0 ؛ تعويم maxSpeed = 280.0 ؛ تعويم minSteps = 0 ؛ تعويم maxSteps = maxSpeed / stepAngle ؛
بعد ذلك ، نقوم بتهيئة محرك LCD و Serial و interrupt و Stepper في وظيفة الإعداد
إعداد باطل () { myStepper.setSpeed (60) ، Serial.begin (9600) ؛ pinMode (ledPin ، الإخراج) ؛ lcd.begin (16.2) ؛ lcd.print ("عداد السرعة") ؛ تأخير (2000) ؛ attachInterrupt (0، RPMCount، RISING)؛ }
بعد ذلك ، نقرأ rpm في وظيفة الحلقة ونجري عملية حسابية للحصول على السرعة وتحويل ذلك إلى خطوات لتشغيل محرك متدرج لإظهار السرعة في شكل تناظري.
حلقة باطلة () { readRPM () ، نصف القطر = ((نصف القطر * 2.54) / 100.0) ؛ // التحويل بالمتر int السرعة = ((تعويم) RPM * 60.0 * (2.0 * 3.14 * radius) / 1000.0) ؛ // RPM في 60 دقيقة ، قطر الإطار (2pi r) r هو نصف قطر ، 1000 للتحويل بالكيلومتر int الخطوات = الخريطة (السرعة ، minSpeed ، maxSpeed ، minSteps ، maxSteps) ؛ if (flag1) { Serial.print (Speed) ؛ Serial.println ("Kmh") ؛ lcd.setCursor (0،0) ؛ lcd.print ("RPM:") ؛ lcd.print (دورة في الدقيقة) ؛ lcd.print ("") ؛ lcd.setCursor (0،1) ؛ lcd.print ("السرعة:") ؛ lcd.print (السرعة) ؛ lcd.print ("كم / ساعة") ؛ العلم 1 = 0 ؛ } int curSteps = خطوات؛خطوات int = CurrSteps-preSteps ؛ preSteps = CurrSteps ؛ myStepper.step (الخطوات) ؛ }
هنا لدينا وظيفة reapRPM () لحساب RPM.
int readRPM () { if (REV> = 10 or millis ()> = st + 1000) // سيتم تحديث AFETR كل 10 قراءات أو ثانية واحدة في وضع الخمول { if (flag == 0) flag = 1 ؛ rpm = (60/2) * (1000 / (مللي () - الوقت)) * REV / bladesInFan ؛ الوقت = مللي () ؛ REV = 0 ؛ int x = rpm ؛ بينما (س! = 0) { س = س / 10 ؛ RPMlen ++ ؛ } Serial.println (دورة في الدقيقة ، ديسمبر) ؛ دورة في الدقيقة = دورة في الدقيقة ؛ تأخير (500) ؛ ش = ميلي () ؛ العلم 1 = 1 ؛ } }
أخيرًا ، قمنا بمقاطعة الروتين المسؤول عن قياس ثورة الكائن
باطل RPMCount () { REV ++ ؛ إذا (أدى == منخفض) { قاد = مرتفع ؛ } آخر { أدى = منخفض ؛ } digitalWrite (ledPin ، led) ؛ }
هذه هي الطريقة التي يمكنك بها إنشاء عداد سرعة تناظري باستخدام Arduino. يمكن أيضًا بناء هذا باستخدام مستشعر Hall ويمكن عرض السرعة على الهواتف الذكية ، اتبع هذا البرنامج التعليمي Arduino Speedometer لنفسه.