جدول المحتويات:

عداد سرعة السيارة يعمل بالتحكم عن بعد: 4 خطوات (بالصور)
عداد سرعة السيارة يعمل بالتحكم عن بعد: 4 خطوات (بالصور)

فيديو: عداد سرعة السيارة يعمل بالتحكم عن بعد: 4 خطوات (بالصور)

فيديو: عداد سرعة السيارة يعمل بالتحكم عن بعد: 4 خطوات (بالصور)
فيديو: تعرف على حل مشكلة توقف عداد السيارة 2024, سبتمبر
Anonim
يعمل RC سيارة عداد السرعة
يعمل RC سيارة عداد السرعة

هذا مشروع قصير قمت بإنشائه كجزء من بناء RC أكبر لسيارة لاند روفر خفيفة الوزن. قررت أنني تخيلت وجود عداد سرعة يعمل في لوحة القيادة ، لكنني كنت أعرف أن المؤازرة لن تقطعها. لم يكن هناك سوى خيار واحد معقول: نشر اردوينو!

القليل من الخلفية لتبدأ … أنا لست شخصًا في مجال الترميز أو الإلكترونيات. ما زلت أفكر في الكهرباء من حيث تدفق المياه وأشعر بالحيرة إلى حد ما من قبل المقاومات. ومع ذلك ، إذا كنت قادرًا على القيام بهذا العمل ، فيجب أن تكون قادرًا على ذلك أيضًا!

قائمة الاجزاء:

متحكم دقيق: لقد استخدمت شريحة ATTiny85 ، والتي تكلف كل منها حوالي جنيه إسترليني واحد.

مبرمج متحكم دقيق: من أجل الحصول على الكود على الشريحة ، تحتاج إلى طريقة لبرمجتها. مع اردوينو العادي ، يكون هذا مجرد كبل USB ، ولكن بالنسبة لشريحة ATTiny ، فأنت بحاجة إلى شيء إضافي. يمكنك استخدام اردوينو آخر للقيام بذلك أو ، مثلي ، يمكنك استخدام مبرمج Tiny AVR من Sparkfun.

learn.sparkfun.com/tutorials/tiny-avr-prog…

أود أن أوصي بهذا ، لأنني حاولت برمجتها بطرق مختلفة وهذه الطريقة هي الأسهل. اللوحة باهظة الثمن بعض الشيء ، لكنها استثمار جيد إذا كنت تقوم بالكثير من مشاريع ATTiny.

8 Pin Chip Socket: إذا وضعت الشريحة في مقبس بدلاً من لحامها مباشرةً ، يمكنك تحمل بعض الأخطاء في التجميع. تحدثت من التجربة - لا أحد يريد إزالة رقائق لإعادة برمجتها.

مكثف: يتم استخدام مكثف فصل 100nF (كود 104). لا أفهم السبب تمامًا ، لكني قرأت أن مكثفات الفصل مهمة على الإنترنت ، لذا يجب أن تكون صحيحة …

المقاوم: يستخدم المقاوم 10kΩ لسحب الخط لأسفل في اردوينو. مرة أخرى ، هناك لغز آخر للإلكترونيات.

Perfboard / Stripboard: بعض اللوح الأساسي لتجميع دائرتك.

سلك اللف: السلك المُغلف العادي سميك جدًا بحيث لا يمكن لحامه بالمحرك. سيؤدي استخدام الأسلاك الدقيقة المطلية بالمينا إلى تقليل الضغط على أطراف المحرك ويجعل حياتك أسهل كثيرًا.

سلك مؤازر: شريط من ثلاثة أسلاك ينتهي بمقبس أنثى من 3 سنون JR. حصلت على خاصتي من مؤازرة محترقة كنت أقوم بتعديلها.

محرك متدرج: لقد استخدمت محرك متدرج Nidec ثنائي القطب بقطر 6 مم. يجب أن تعمل أي خطوة صغيرة ، على الرغم من إبقائها صغيرة ، حيث يتم دفع السائر مباشرة من Arduino.

دبابيس الرأس: ليس ضروريًا ، ولكن إذا قمت بتوصيل السائر بأربعة دبابيس رأسية ووضعت مقبسًا على دائرتك ، فيمكنك بسهولة فصل لوحة القيادة لسهولة التثبيت.

الكمبيوتر: لبرمجة اللوحة الخاصة بك ، ستحتاج إلى جهاز كمبيوتر. ربما مع Arduino IDE. وربما كبل USB. إذا كان يحتوي على كابل طاقة أيضًا ، فهذا أفضل.

الخطوة 1: النظام

كان المخطط الأساسي للنظام الذي قمت بإنشائه هو طريقة يتم من خلالها تحويل إشارة تعديل عرض النبض (Pulse Width Modulation (PWM) القادمة من مستقبل RC إلى محرك متدرج من خلال متحكم ATTiny 85 (uC).

هنا مورد عن إشارات PWM و RC ، ولكن لتكرار هذا لا تحتاج إلى فهمه تمامًا.

en.wikipedia.org/wiki/Servo_control

ATTiny هي نكهتي المفضلة في Arduino لأنها صغيرة مع ما يكفي من دبابيس الإدخال / الإخراج للقيام بالأشياء الأساسية ، لذا فهي مناسبة تمامًا للنماذج الصغيرة ومشاريع RC. يتمثل الجانب السلبي الرئيسي لـ ATTiny في أنه يتطلب إعدادًا أكثر قليلاً من أجل برمجة واحد ، ولكن بمجرد الانتهاء من إعداده يكون رخيصًا جدًا بحيث يمكنك شراء مجموعات منها لجميع أنواع المشاريع.

حجم قرص عداد السرعة صغير جدًا بحيث لا يمكن أن يكون لديه محرك موجه مع ردود فعل ، لذلك من أجل الحصول على استجابة تناسبية ، يجب استخدام محرك متدرج. المحرك المتدرج هو محرك يتم تحريكه بكميات منفصلة (أو خطوات …!) ، مما يجعله مثاليًا لنظام عدم التغذية المرتدة مثل هذا. التحذير الوحيد هو أن "الخطوات" ستؤدي إلى أن تكون الحركة الناتجة متشنجة بدلاً من أن تكون سلسة. إذا حصلت على محرك خطوة بخطوات كافية لكل دورة ، فهذا ليس ملحوظًا ، ولكن مع محرك الخطوة الذي استخدمته في هذا المشروع الذي يحتوي على 20 خطوة فقط أو نحو ذلك في دوران كامل ، فإن قفزة الزاوية سيئة للغاية.

سيقوم النظام ، عند زيادة الطاقة ، بتشغيل السائر للخلف لمدة دورتين ، حتى يتم التخلص من الإبرة. يحتاج عداد السرعة إلى دبوس يستريح حيث تريد أن تكون علامة الصفر ، وإلا فسوف يدور إلى الأبد. ثم يقوم بتعيين إشارات PWM الأمامية والخلفية إلى عدد محدد من خطوات المحرك. الحق سهلة…؟

الخطوة 2: البرنامج

إخلاء المسئولية: أنا لست مبرمجًا. بالنسبة لهذا المشروع ، أنا المكافئ الرقمي للدكتور فرانكشتاين ، حيث أقوم بتجميع شيء يعمل من أجزاء مختلفة من التعليمات البرمجية.

لذا ، أتوجه بجزيل الشكر إلى Duane B ، الذي وضع الكود لتفسير إشارات RC:

rcarduino.blogspot.com/

وإلى Ardunaut ، الذي صنع الكود لتشغيل السائر كمقياس تناظري:

arduining.com/2012/04/22/arduino-driving-a…

ولكليهما ، خالص اعتذاري عما فعلته في التعليمات البرمجية الخاصة بك.

الآن هذا بعيد المنال ، إليك ما يجب تحميله على ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - استخدم رقم المقاطعة في attachInterrupt # حدد THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - استخدم رقم PIN في الرقم الرقمي من الخانق المحايد على سيارة RC كهربائية #define UPPER_THROTTLE 2000 // هذه هي المدة بالميكروثانية من أقصى دواسة الوقود على سيارة RC كهربائية # تعريف LOWER_THROTTLE 1000 // هذه هي المدة بالميكروثانية من nminimum خانق على سيارة RC كهربائية # تعريف DEADZONE 50 // هذه هي المنطقة الميتة الخانقة. مجموع deadzone ضعف هذا. # تضمين #define STEPS 21 // خطوات لكل ثورة (محدودة بـ 315 درجة) قم بتغيير هذا لضبط الحد الأقصى للسفر لعداد السرعة. #define COIL1 3 // دبابيس لفائف. يستخدم ATTiny دبابيس 0 ، 1 ، 3 ، 4 للسائق. الدبوس 2 هو الدبوس الوحيد الذي يمكنه التعامل مع المقاطعات لذا يجب أن يكون هو المدخل. #define COIL2 4 // حاول تغييرها إذا كان محرك السائر لا يعمل بشكل صحيح. #define COIL3 0 #define COIL4 1 // إنشاء مثيل لفئة السائر: Stepper stepper (STEPS ، COIL1 ، COIL2 ، COIL3 ، COIL4) ؛ عدد نقاط البيع = 0 ؛ // الموضع في الخطوات (0-630) = (0 ° -315 °) int SPEED = 0 ؛ تعويم ThrottleInAvg = 0 ؛ القياسات int MeasurementToAverage = 60 ؛ تعويم Resetcounter = 10 ؛ // الوقت لإعادة التعيين أثناء وجود الخانق الخامل int Resetval = 0 ؛ متقلبة int ThrottleIn = LOWER_THROTTLE ؛ StartPeriod طويلة غير موقعة متقلبة = 0 ؛ // set in the interrupt // يمكننا استخدام nThrottleIn = 0 في حلقة بدلاً من متغير منفصل ، ولكن باستخدام bNewThrottleSignal للإشارة إلى أن لدينا إشارة جديدة // هو أوضح لهذا المثال الأول إعداد باطل () {// tell the Arduino نريد استدعاء دالة calcInput عندما يتغير INT0 (الرقم الرقمي 2) من HIGH إلى LOW أو LOW إلى HIGH // سيسمح لنا التقاط هذه التغييرات بحساب المدة التي يتم فيها إرفاق نبض الإدخال (THROTTLE_SIGNAL_IN، calcInput، CHANGE) ؛ stepper.setSpeed (50) ؛ // اضبط سرعة المحرك على 30 دورة في الدقيقة (360 نقطة في الثانية تقريبًا). stepper.step (خطوات * 2) ؛ // إعادة تعيين الوضع (X خطوات عكس اتجاه عقارب الساعة). } حلقة فارغة () {Resetval = ملي ؛ لـ (int i = 0 ؛ i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg، (NEUTRAL_THROTTLE + DEADZONE)، UPPER_THROTTLE، 0، 255) ؛ إعادة تعيين = 0 ؛ } // عكس التعيين if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg، LOWER_THROTTLE، (NEUTRAL_THROTTLE - DEADZONE)، 255، 0) ؛ إعادة تعيين = 0 ؛ } // خارج النطاق العلوي الآخر إذا (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255 ؛ إعادة تعيين = 0 ؛ } // خارج النطاق أقل إذا (ThrottleInAvg Resetcounter) {stepper.step (4)؛ // أحاول إخبار السائر بإعادة ضبط نفسه إذا كانت إشارة RC في المنطقة الميتة لفترة طويلة. لست متأكدًا مما إذا كان هذا الجزء من الكود يعمل بالفعل. }} int val = SPEED؛ // احصل على قيمة مقياس الجهد (النطاق 0-1023) val = الخريطة (val ، 0 ، 255 ، 0 ، STEPS * 0.75) ؛ // نطاق وعاء الخريطة في نطاق السائر. if (abs (val - pos)> 2) {// إذا كان الفرق أكبر من خطوتين. إذا ((val - pos)> 0) {stepper.step (-1) ؛ // تحرك خطوة واحدة إلى اليسار. نقاط البيع ++ ؛ } إذا ((val - pos) <0) {stepper.step (1)؛ // تحرك خطوة واحدة إلى اليمين. نقاط البيع--؛ }} // تأخير (10) ؛ } void calcInput () {// إذا كان الدبوس مرتفعًا ، فهذه بداية المقاطعة إذا (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// احصل على الوقت باستخدام الميكرو - عندما يصبح رمزنا مشغولاً بالفعل ، سيصبح هذا غير دقيق ، ولكن بالنسبة للتطبيق الحالي ، // سهل الفهم ويعمل بشكل جيد للغاية. StartPeriod = micros ()؛ } else {// إذا كان الدبوس منخفضًا ، فهو الحافة المتساقطة للنبضة ، لذا يمكننا الآن حساب مدة النبضة بطرح // وقت البدء ulStartPeriod من الوقت الحالي الذي يتم إرجاعه بواسطة micros () إذا (StartPeriod) {ThrottleIn = (int) (ميكرو () - StartPeriod) ؛ StartPeriod = 0 ؛ }}}

الرجوع إلى هذا لمزيد من المعلومات حول برمجة ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

الخطوة 3: الأجهزة

الأجهزة
الأجهزة
الأجهزة
الأجهزة
الأجهزة
الأجهزة

الرجوع إلى مخطط الدائرة لبناء الدائرة. إن كيفية تجميعها متروك لك ، لكنني أقترح استخدام القليل من اللوح الشريطي / اللوح المثالي المستخدم في النماذج الأولية للوحة الدائرة ، وتركيب الشريحة في المقبس.

C1 = 100nF

R1 = 10 كيلو أوم

يجب أن يتم تركيب المكثف بالقرب من الشريحة قدر الإمكان ليكون أكثر فاعلية.

عند لحام الأسلاك المطلية بالمينا بالمحرك ، كن حذرًا للغاية ، لأن الأطراف الموجودة على المحركات تحب أن تنفصل وتقطع سلك الملف عن المحرك. لعلاج هذا ، فإن الحل الجيد هو لحام الأسلاك ، ثم وضع نقطة كبيرة من الإيبوكسي من جزأين على المفصل ، واتركه يعالج ، ثم لف الأسلاك معًا. هذا يقلل من الضغط على المفاصل الطرفية الفردية ويجب أن يمنعها من الانقطاع. إذا لم تقم بذلك ، فسوف ينطلقون في أقل وقت مناسب ، مضمون.

إذا قمت بعمل موصل دبوس الرأس ، وقمت بإعداد المسامير على النحو التالي: [Ca1، Cb1، Ca2، Cb2] مع وضع Ca1 للملف A ، السلك 1 إلخ. هذا يسمح لك بتغيير اتجاه دوران المقياس عن طريق تبديل القابس حول.

سيحتاج المقياس إلى نقطة توقف لمعايرة موضع الصفر. أوصي بإخراج الإبرة من المعدن إن أمكن. هذا يمنعها من الانثناء عندما تصل إلى النهاية. تتمثل إحدى طرق الحصول على الإبرة في وضع جيد في لصق الإبرة مؤقتًا على المحور ، وتشغيل الوحدة ، والسماح لها بالراحة ، ثم إزالة الإبرة وإعادة لصقها على المحور ، مع وضع الإبرة على المحور. نهاية. يعمل هذا على محاذاة الإبرة مع التروس المغناطيسية للمحرك ، ويضمن أن الإبرة يجب أن تستقر دائمًا على الطرف النهائي.

الخطوة 4: الخاتمة

نأمل أن تكون قد استمتعت بهذا التوجيه الموجز ، ووجدته مفيدًا. إذا قمت ببناء واحدة من هذه ، فأخبرني!

حظا طيبا وفقك الله!

موصى به: