جهاز Android يتم التحكم فيه عبر البلوتوث من Arduino - دورة كاملة (الجزء 1)

مقدمة


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

قليلا عن المستوى والمؤلف والتحذيرات


أنا ، كاتب ، طفل عمره 16-17 عامًا من قرية بالقرب من موسكو ، متخصص في كتابة تطبيقات Android (وهناك صعوبة في حرق شيء ما) ، لذلك أتحمل مسؤولية النهج الأمثل لحل المشكلات.

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

التحدي


أسهل مهمة هي جعل محرك السيارة الذي يتم التحكم فيه من Arduino ، واستبدال جهاز التحكم عن بعد بأندرويد. ولكن في معظم اللحظات كان علي إعادة اختراع العجلة ، لأنه لم يتم العثور على حل مناسب على الإنترنت.

ستحتاج


  1. اردوينو
  2. درع المحرك (في حالتي الثانية)
  3. البلوتوث
  4. Android
  5. الأسلاك التقليدية

أساس التصميم


تم أخذ 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

Source: https://habr.com/ru/post/ar424087/


All Articles