مقدمة
تاريخ مفصل لكيفية تجميع سيارة Arduino ، التي يتحكم فيها جهاز Android عبر Bluetooth ، من ثلاثة محركات. في عدة عشرات من الفقرات ، سأحاول أن أشرح قدر الإمكان خطوة بخطوة حيث لربط كل الأسلاك ، وكيفية كتابة طلب ملكية ، وعلى أي أشعل النار للأطفال اضطررت إلى القفز لأكثر من أسبوع.
قليلا عن المستوى والمؤلف والتحذيرات
أنا ، كاتب ، طفل عمره 16-17 عامًا من قرية بالقرب من موسكو ، متخصص في كتابة تطبيقات Android (وهناك صعوبة في حرق شيء ما) ، لذلك أتحمل مسؤولية النهج الأمثل لحل المشكلات.
عمليا أخذتني كل خطوة من الخطوات الموضحة أدناه أكثر مما يستحق الوقت. ربما لهذا السبب أريد مشاركة تجربتي. وفي الوقت نفسه ، سأكون سعيدًا جدًا إذا قمت بتوبيخ الأخطاء وأخبرتني بالتحسين.
التحدي
أسهل مهمة هي جعل محرك السيارة الذي يتم التحكم فيه من Arduino ، واستبدال جهاز التحكم عن بعد بأندرويد. ولكن في معظم اللحظات كان علي إعادة اختراع العجلة ، لأنه لم يتم العثور على حل مناسب على الإنترنت.
ستحتاج
- اردوينو
- درع المحرك (في حالتي الثانية)
- البلوتوث
- Android
- الأسلاك التقليدية
أساس التصميم
تم أخذ Lego Outdoor Challenger كأساس (في الواقع ، يبدو أقل إثارة للشفقة). كل ما تبقى منها: الحالة (تتم إزالة جميع عناصر الزخرفة) وثلاثة محركات.

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

في الجزء العلوي من اللوحة أضع محركين على الفور ، فليكن. للتحكم في المنفذ الثاني ، سيتعين عليك رمي سلك واحد من أي منفذ رقمي إلى H1 (الاتجاه) والثاني من دبوس مع دعم الرقائق (ملحوظ بـ "~" ، عادة 10 ، 11) إلى E1 (السرعة).

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


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

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

زاوية الاتصال والرمز
كل لون له لونه الخاص: الجزء السفلي أخضر ، أول أدناه أحمر ، والثاني أسود ، والثالث أبيض. في المرحلة الأولية ، تم استخدام اللوح ومصابيح LED لتصحيح الأخطاء البصرية.

يظهر مخطط الاتصال في الشكل. بالإضافة إلى أننا نسحب إلى اللون الأخضر ، والبعض الآخر نمتد إلى ناقص. من خلال المقاوم المركب للقضاء على التداخل وغياب دائرة كهربائية قصيرة ، قم بتوصيل الأسلاك بمخرجات A0-A2. يتم اختيارهم ببساطة من حفظ المنافذ الأخرى.

يتم إعطاء الرمز مع التعليقات. نقوم بتوصيل الدبابيس واستجوابهم من خلال digitarRead (). إذا كان هناك جهد ، سيتم إرجاع صحيح. بعد ذلك ، ننظر إذا كانت النتيجة تعني أن العجلات في أوضاع متطرفة ، فنحن نحظر المزيد من الانعطاف في هذا الاتجاه.
حيلة صغيرة: نظرًا لأن المخرجات على 5V و 3.3V ستكون مطلوبة في المستقبل ، يمكنك وضع علامة زائد على أحد الدبابيس الرقمية. قبل كل فحص للزاوية ، امنح تيارًا من خلال الكتابة الرقمية (whitePin) ، ثم تحقق من الزاوية وأزل التيار.
int speedTurn = 180; // , 0 255 // int pinRed = A0; int pinWhite = A1; int pinBlack = A2; int pinAngleStop = 12; // , , // void setup() { // pinMode(pinRed, INPUT); pinMode(pinBlack, INPUT); pinMode(pinWhite, INPUT); // pinMode(pinAngleStop, OUTPUT); // , pinMode(angleDirection, OUTPUT); pinMode(angleSpeed, OUTPUT); Serial.begin(9600); } // loop(), void turn(int angle) { digitalWrite(pinAngleStop, HIGH); // , delay(5); // , "" if(angle > 149) { if( digitalRead(pinWhite) == HIGH && digitalRead(pinBlack) == LOW && digitalRead(pinBlack) == LOW) { // , , // return; } // , digitalWrite(angleDirection, HIGH); analogWrite(angleSpeed, speedTurn); } else if (angle < 31) { if(digitalRead(pinRed) == HIGH && digitalRead(pinBlack) == HIGH && digitalRead(pinWhite) == HIGH) { // , , // return; } // , digitalWrite(angleDirection, LOW); analogWrite(angleSpeed, speedTurn); } digitalWrite(pinAngleStop, LOW); // delay(5); }
موازاة عجلات الجري
في البداية ، يتم توصيل محركي دفع معًا. تم فصلهما لسببين: الانعطاف يكون أكثر فعالية إذا كانت العجلات تدور في اتجاهات مختلفة ، ومحركان قويان لا يسحبان لوحة واحدة.
المشكلة: يحتوي درع المحرك على ناتجين ، ينتج كل منهما ما يصل إلى 2 أمبير. كل محرك يأكل 0.7A. يبدو أقل ، ولكن ليس بأقصى حمولات. لنفترض أن الماكينة عالقة في الرمال أو تستريح ، فالتيار يرتفع فوق الأمبير. ليس حرجًا ، ولكن من المحتمل أن يكون خطرًا
ولكن تبين أنه من الأهمية بمكان أن يسخن المجلس. بعد دقائق ونصف من السباق ، كان درع المحرك يسخن وبدأ في العمل القبيح: لم يتم توفير التيارات التيارات الصحيحة ، والعجلات لا تدور ، وهكذا.
الحل لكلتا المشكلتين: محرك واحد متصل بواقي موتور واحد ، والآخر بمحرك آخر. ومن الغريب أنه ساعد. انخفضت درجة الحرارة ، لا يوجد ارتفاع في درجة الحرارة. يمكنك وضع المبرد ، ولكن من الصعب تركيبه.

اتصال بلوتوث
استخدمت نموذج HC-05 ، الذي لعب مزحة قاتلة. يتم توصيل جميع البلوتوث بنفس الطريقة: سلك واحد بجهد 3.3 فولت (أحيانًا بدأ العمل فقط من 5 فولت) ، والثاني عند ناقص ، واثنان آخران في المنفذ 0 و 1 (القراءة والإرسال ، على التوالي). سلك موقّع من قبل RXD على البلوتوث عالق في TXD arduino ، و TXD في RXD (إذا قمت بخلطه ، فلن ترى البيانات).
هناك تحذير: يتم استخدام المنفذين 0 و 1 افتراضيًا بواسطة Serial ، والذي يتم من خلاله رسم المخطط. أي أنه أثناء توقف البلوتوث ، لن يتم إغراق الرسم. هناك طريقتان للخروج: أخرج البلوتوث في وقت ملء أو إعادة تعيين مدخلات ومخرجات البلوتوث. يتم تنفيذ الخيار الثاني في خطين.
#include <SoftwareSerial.h> \\ SoftwareSerial BTSerial(8, 9); \\ 8 9 0 1
المأزق الذي أكلني لمدة ثلاثة أيام من العمل هو سرعة الاتصال. بدافع من العادة ، قمت بتثبيت 9600 وذهبت للمحاولة. إما أن البيانات لم تأت ، ثم كان هناك فوضى من الشخصيات. وفي النهاية الجواب هو أن HC-05 يتصل على 38400! انتبه جيدًا إلى حقيقة أنه في Setup () ، سأقوم بتنفيذ BTSerial.begin (39400) ، على الرغم من Serial.begin (9600).
نظام إرسال الأوامر
أصبحت المقالة طويلة جدًا ، لذلك سأفكر في النظر في كود Arduino و Android في جزء ثانٍ منفصل ، والآن سأصف المبدأ.
هناك عصا تحكم على جهاز Android (دائرة ، يتم تنفيذها أيضًا في الجزء الثاني). يقرأ Android القراءات منه ويحولها إلى أرقام مناسبة لـ arduino: تتحول السرعة من البكسل إلى قيمة من -255 إلى 255 (سلبية - عكسية) ، وتحدد أيضًا الزاوية. لقد أعطيت هذه المهمة عن قصد إلى الهاتف ، لأنها أكثر قوة وقدرة على التعامل بهدوء مع حساب عدة مئات من القيم في الثانية.

بعد تثبيت المقبس ، يتم إرسال البيانات بالتنسيق التالي: @ speed # * angle #. @ - يشير إلى أن الأرقام التالية تحتوي على السرعة ، # - تشير إلى نهاية قيمة السرعة ، * - بداية قيمة الزاوية ، # - إنهاء تسجيل الزاوية. الدورة لا حصر لها ، يتم إرسال الأوامر كل 100 مللي ثانية (يتم تحديد الرقم الأمثل). إذا لم يتم الضغط على أي شيء على Android ، فلن يتم إرسال أي شيء.
يتم وصف خوارزمية استقبال البيانات بالتفصيل في رمز الرسم. لقد راسل أكثر من مرة ، وبالنسبة لي ، يعمل بشكل مثالي.
اختتام الجزء الأول
في هذه المقالة ، حاولت الكشف عن كل ما يتعلق بالجزء المادي من الماكينة. على الأرجح ، فاتني شيء ، لذا تأكد من السؤال.
لكن الأكثر إثارة للاهتمام ، بالنسبة لي ، بقي للثاني - برنامج Arduino وتطبيق Android ، السحر الحقيقي يحدث هناك ، على الأقل بالنسبة لي.
إذا لم تجد إجابة لجزء ما وتريد أن تزعجني بنقصها شخصيًا ، فأنتظر - dendolg1@mail.ru ،.
UPD: الجزء الثاني خارج بالفعل -
habr.com/post/424813