جدول المحتويات:
- الخطوة 1: طريقة الخلط »لا شيء
- الخطوة 2: الطريقة الطريقة »التدوير
- الخطوة 3: الطريقة الطريقة »بسيطة
- الخطوة 4: الطريقة الطريقة »التناسبية
فيديو: فهم خلط القنوات: 4 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
إذا سبق لك قيادة هيكل جهاز تحكم عن بعد ، فهناك احتمال كبير أنك استخدمت الخلط ، حتى لو لم تكن تعرف ذلك. على وجه التحديد ، إذا كنت قد استخدمت عصا تحكم واحدة أو أداة تحكم للتحكم في مركبة تستخدم التوجيه المنزلق أو التوجيه التفاضلي ، فقد استخدمت المزج.
المزج هو ببساطة كيفية استخدام البيانات من عصا التحكم الخاصة بك لتحديد مقدار الطاقة التي يجب توفيرها لكل جانب من جوانب الهيكل.
إذا فتحت عصا التحكم ، فسترى عمومًا مقياسين للجهد بالداخل. أحدهما لقياس موقعك الحالي على طول المحور Y (لأعلى ولأسفل) ، والآخر لقياس مكانك على طول المحور X (جنبًا إلى جنب).
على الرغم من أنني لم أحصل على تدريب رسمي حول هذا الموضوع ، فقد اضطررت إلى مزج الكود من قبل وأردت مؤخرًا الغوص بشكل أعمق في هذا الموضوع.
أولاً ، أود أن أشير إلى أن معظم أجهزة إرسال RC لديها قدرة خلط كما تفعل العديد من أجهزة التحكم في المحركات. ستكون هذه المعلومات مفيدة للغاية إذا كان عليك القيام بخلط التعليمات البرمجية بنفسك. لنفترض على سبيل المثال إذا كنت تستخدم Arduino لقراءة البيانات غير المختلطة من جهاز استقبال RC ، أو كنت تقرأ البيانات التناظرية من الأواني الموجودة في عصا التحكم ، أو إذا كنت تقرأ الإحداثيات من عصا التحكم الرقمية في تطبيق الهاتف المحمول.
دعنا نلقي نظرة على بعض أساليب الخلط المختلفة.
الخطوة 1: طريقة الخلط »لا شيء
دعنا أولاً نلقي نظرة على ما يحدث إذا لم تستخدم الخلط على الإطلاق. إذا قمت فقط بإرسال البيانات من محور إلى جانب واحد من الهيكل والمحور الآخر إلى الجانب الآخر ، فلن تستجيب سيارتك بالطريقة التي تريدها.
على سبيل المثال ، إذا قمت بدفع عصا التحكم إلى الأمام بشكل مستقيم ، يكون المحور Y عند دواسة الوقود الكاملة والمحور X عند 0. لذلك ستقود في دوائر بدلاً من السير بشكل مستقيم.
الخطوة 2: الطريقة الطريقة »التدوير
أشار لي أحد زملائي في العمل مرة إلى أنه في حالة الضرورة ، يمكنك تدوير جهاز الإرسال 45 درجة للحصول على مزيج فقير. إذا كنت تعتقد أن القيم من مقياسي الجهد في عصا التحكم هي المحور x و y على الشبكة (مع امتداد كلا المحورين من -100 إلى +100) ، فهذا منطقي للغاية لأنك ستذهب إلى +100 على كلا المحورين عندما تضغط على عصا التحكم لأعلى ولليمين. لذا ، إذا كان هذا يتجه مباشرة إلى قناتي الهيكل (الجانبين الأيسر والأيمن من الروبوت الخاص بك) ، فإنه سيجعل الروبوت الخاص بك يتقدم للأمام.
لذا فإن الطريقة الأولى للخلط التي جربتها كانت تدوير إحداثي x و y رياضيًا بمقدار 45 درجة حول النقطة المركزية للشبكة.
يعمل هذا بشكل جيد ، ومع ذلك لا يمكنني المضي قدمًا بقوة 100٪ لأنه عندما تقوم بالتناوب ، فإن الحركة الإجمالية تكون مقيدة بدائرة داخل الشبكة ، مما يعني أنه لا يمكنك الوصول إلى الزاوية اليمنى العليا.
ينتج عن هذا أيضًا عدم استخدام زوايا الشبكة. هذه ليست مشكلة إذا كنت تستخدم عصا تحكم / أداة تحد من حركتك بحيث لا يتم الوصول إلى هذه المناطق على أي حال ، ولكن بخلاف ذلك ، سترغب في أن يقوم هذا الجزء من الشبكة بعمل شيء ما بحيث تشعر حركاتك بأنها متناسبة تمامًا.
إذا كنت متعلمًا بصريًا مثلي ، فقد يكون هذا المفهوم أسهل من خلال مشاهدة الفيديو في بداية هذه التعليمات.
دعنا نلقي نظرة على بعض أمثلة التعليمات البرمجية.
ملاحظات حول أمثلة الكود الخاص بي: سأترك كيفية الحصول على قيم جويستيك _x و جويستيك _ ص لأنها ستتغير اعتمادًا على مشروعك. سأقوم أيضًا بتعيين / التقييد بـ ± 100 ولكن قد تحتاج على الأرجح إلى التعيين إلى 1000-2000 لـ PWM أو من 0 إلى 255 للإخراج التناظري وما إلى ذلك.
مثال اردوينو:
// تناوب رياضيا
راد مزدوج = -45 * M_PI / 180 ؛ int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad) ؛ int rightThrottle = joystick_y * cos (rad) + joystick_x * sin (rad) ؛ // تقييد leftThrottle = تقييد (leftThrottle ، -100 ، 100) ؛ rightThrottle = تقييد (rightThrottle ، -100 ، 100) ؛
مثال على JavaScript:
// رياضيًا rotatevar rad = -45 * Math. PI / 180 ؛ leftThrottle = joystick_x * Math.cos (rad) - joystick_y * Math.sin (rad) ؛ rightThrottle = joystick_y * Math.cos (rad) + joystick_x * Math.sin (rad) ؛ // constrainleftThrottle = تقييد (leftThrottle ، -100 ، 100) ؛ rightThrottle = تقييد (rightThrottle ، -100 ، 100) ؛ // قيمة دالة المساعد = دالة (num، min، max) {return Math.min (Math.max (num، min)، max) ؛ } ؛
الخطوة 3: الطريقة الطريقة »بسيطة
بعد ذلك ، لدينا معادلة بسيطة للغاية التقطتها لأول مرة من أحد مقاطع فيديو Shawn Hymel's Adventures in Science SparkFun حيث كان يعمل في مشروع مشابه جدًا للمشروع الذي كنت أعمل عليه.
تتيح لك هذه المعادلة الوصول إلى السرعة الكاملة عند المضي قدمًا ولكنها تشبه إلى حد كبير طريقة التدوير ، فهي تتجاهل مناطق ركن الشبكة. هذا لأنه في بعض الحالات يكون الحد الأقصى هو 100 وفي بعض الحالات يكون الحد الأقصى 200. لذلك يمكنك استخدام دالة تقييد لتجاهل أي شيء بعد 100.
وبالمناسبة أنا لا أسمي هذا بالانتقاص البسيط … هناك جمال في البساطة.
مثال اردوينو:
int leftThrottle = joystick_y + joystick_x ؛
int rightThrottle = joystick_y - joystick_x ؛ // تقييد leftThrottle = تقييد (leftThrottle ، -100 ، 100) ؛ rightThrottle = تقييد (rightThrottle ، -100 ، 100) ؛
مثال على JavaScript:
var leftChannel = joystick_y + joystick_x ؛
var rightChannel = joystick_y - joystick_x ؛ // تقييد leftChannel = تقييد (leftChannel ، -100 ، 100) ؛ rightChannel = تقييد (rightChannel ، -100 ، 100) ؛ // قيمة دالة المساعد = دالة (num، min، max) {return Math.min (Math.max (num، min)، max) ؛ } ؛
الخطوة 4: الطريقة الطريقة »التناسبية
لقد انطلقت من الطريقة البسيطة على أمل تحقيق أفضل ما في معادلة العالمين. الفكرة هنا هي أن تكون متناسبًا تمامًا في جميع الاتجاهات حتى قطريًا على الرغم من حقيقة أنك تتحرك لمسافة أكبر ، فإن لها نفس النطاق كما هو الحال عندما تتحرك عموديًا وهي مسافة أصغر.
ينتهي بك الأمر بمقياس من -200 إلى +200 في جميع الاتجاهات في الأمثلة الخاصة بي ، وأقوم بتعيين ذلك إلى ± 100 لأنه يمثل النسبة المئوية للطاقة التي تذهب إلى كل قناة - ومع ذلك سترغب في تعيينها لأي شيء يعمل في استخدامك- حالة لوحدة تحكم المحرك الخاص بك. على سبيل المثال ، إذا كنت ترسل إشارة PWM ، فيمكنك تعيين ذلك على 1000 إلى 2000 أو إذا كنت ترسل إشارة تناظرية ، فيمكنك تعيينها على 0-255 وتعيين الاتجاه على أنه منطقي وما إلى ذلك.
مثال اردوينو:
int leftThrottle = joystick_y + joystick_x ؛
int rightThrottle = joystick_y - joystick_x ؛ // في بعض الحالات يكون الحد الأقصى 100 ، وفي بعض الحالات يكون 200 // لنأخذ في الاعتبار الفرق ، لذا يكون الحد الأقصى دائمًا 200int فرق = القيمة المطلقة (abs (joystick_y) - abs (joystick_x)) ؛ leftThrottle = leftThrottle <0؟ leftThrottle - diff: leftThrottle + diff ؛ rightThrottle = rightThrottle <0؟ rightThrottle - فرق: rightThrottle + فرق ؛ // خريطة من ± 200 إلى ± 100 أو أي نطاق تريده // constrainleftThrottle = تقييد (leftThrottle ، -100 ، 100) ؛ rightThrottle = تقييد (rightThrottle ، -100 ، 100) ؛
مثال على JavaScript:
var leftThrottle = joystick_y + joystick_x ؛ var rightThrottle = joystick_y - joystick_x ؛ // في بعض الحالات يكون الحد الأقصى 100 ، وفي بعض الحالات يكون 200 ، // لنأخذ في الاعتبار الفرق ، لذا يكون الحد الأقصى دائمًا 200var diff = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)) ؛ leftThrottle = leftThrottle <0؟ leftThrottle - diff: leftThrottle + diff ؛ rightThrottle = rightThrottle <0؟ rightThrottle - diff: rightThrottle + diff ؛ // خريطة من ± 200 تراجعًا إلى ± 100 أو أيًا كان ما تريده -100 ، 100) ؛ // constrain leftThrottle = constrain (leftThrottle، -100، 100)؛ rightThrottle = constrain (rightThrottle، -100، 100)؛ // بعض الدوال المساعدة var constrain = function (num، min، max) {return Math.min (Math. ماكس (عدد ، دقيقة) ، كحد أقصى ؛ } ؛ var map = function (num، inMin، inMax، outMin، outMax) {var p، inSpan، outSpan، mapped؛ inMin = inMin + inMax ؛ الأسطوانات = الأسطوانات + inMax ؛ inMax = inMax + inMax ؛ inSpan = Math.abs (inMax-inMin) ؛ p = (num / inSpan) * 100 ؛ outMin = outMin + outMax ؛ outMax = outMax + outMax ؛ outSpan = Math.abs (outMax - outMin) ؛ تعيين = outSpan * (p / 100) - (outMax / 2) ؛ عودة تعيين؛}؛
موصى به:
متعدد القنوات Sonoff - أضواء تعمل بالصوت: 4 خطوات (بالصور)
Multi-Channel Sonoff - Voice Activated Lights: منذ 5 سنوات ، كانت الأضواء في مطبخي تسير على ما يرام. كانت إضاءة الجنزير معطلة وكانت الإضاءة أسفل المنضدة مجرد خردة. أردت أيضًا تقسيم الإضاءة إلى قنوات حتى أتمكن من إضاءة الغرفة بشكل أفضل من أجل الفرق
خلط ألوان RGB LED مع Arduino في Tinkercad: 5 خطوات (بالصور)
خلط ألوان RGB LED مع Arduino في Tinkercad: لنتعلم كيفية التحكم في مصابيح LED متعددة الألوان باستخدام مخرجات Arduino التناظرية. سنقوم بتوصيل RGB LED بـ Arduino Uno ونؤلف برنامجًا بسيطًا لتغيير لونه. يمكنك المتابعة بشكل افتراضي باستخدام Tinkercad Circuits. يمكنك حتى مشاهدة هذا
فهم بروتوكول الأشعة تحت الحمراء لأجهزة التحكم عن بعد لمكيف الهواء: 9 خطوات (بالصور)
فهم بروتوكول الأشعة تحت الحمراء لأجهزة التحكم عن بعد لمكيف الهواء: لقد تعلمت عن بروتوكولات الأشعة تحت الحمراء لبعض الوقت الآن. كيفية إرسال واستقبال إشارات الأشعة تحت الحمراء. في هذه المرحلة ، الشيء الوحيد المتبقي هو بروتوكول الأشعة تحت الحمراء لأجهزة التحكم عن بعد AC. على عكس أجهزة التحكم عن بعد التقليدية لجميع الأجهزة الإلكترونية تقريبًا (مثل التلفزيون) حيث
بناء كمبيوتر مع فهم أساسي للإلكترونيات: 9 خطوات (بالصور)
بناء كمبيوتر مع فهم أساسي للإلكترونيات: هل أردت يومًا أن تتظاهر أنك ذكي حقًا وأن تبني جهاز الكمبيوتر الخاص بك من الصفر؟ ألا تعرف شيئًا عما يتطلبه الأمر لصنع كمبيوتر بسيط؟ حسنًا ، من السهل إذا كنت تعرف ما يكفي عن الإلكترونيات لتجميع بعض الدوائر المتكاملة معًا
فهم ICSP لوحدات التحكم الدقيقة PIC: 4 خطوات (بالصور)
فهم ICSP لوحدات التحكم الدقيقة PIC: برمجة المتحكمات الدقيقة ليست صعبة. بناء مبرمج هو أول مشروع إلكترونيات عظيم. الهدف من هذه التعليمات هو شرح طريقة "البرمجة التسلسلية في الدائرة" البسيطة المستخدمة مع Microchip PICs