نقوم بجمع الروبوتات ذاتية الدفع على Arduino. روبوتات Arduino الجاهزة لكي تصنع درعًا ، ستحتاج

دعنا نتحدث عن كيفية استخدام Arduino لإنشاء روبوت يتوازن مثل Segway.

Segway من اللغة الإنجليزية. Segway هي مركبة قائمة بعجلتين ومجهزة بمحرك كهربائي. وتسمى أيضًا الجيروسكوبات أو الدراجات البخارية الكهربائية.

هل تساءلت يومًا كيف يعمل Segway؟ سنحاول في هذا البرنامج التعليمي أن نوضح لك كيفية صنع روبوت Arduino يوازن نفسه تمامًا مثل Segway.

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

يجب أن تكون النتيجة النهائية مثل هذا:

مخطط الروبوت

وحدة تشغيل المحرك L298N:

محرك تروس DC مع عجلة:

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

يمكن رؤية النسخة المكتملة من الروبوت ذاتي التوازن في الشكل أعلاه. يوجد في الجزء العلوي ست بطاريات Ni-Cd للطاقة لوحة الدوائر المطبوعة. بين المحركات ، يتم استخدام بطارية 9 فولت لسائق المحرك.

نظرية

في نظرية التحكم ، يتطلب الاحتفاظ ببعض المتغيرات (في هذه الحالة موضع الروبوت) وحدة تحكم خاصة تسمى PID (مشتق تكاملي متناسب). كل من هذه المعلمات لها "كسب" ، يشار إليه عادة بـ Kp و Ki و Kd. يوفر PID تصحيحًا بين القيمة المرغوبة (أو الإدخال) والقيمة الفعلية (أو الإخراج). الفرق بين المدخلات والمخرجات يسمى "خطأ".

تعمل وحدة التحكم PID على تقليل الخطأ إلى أصغر قيمة ممكنة عن طريق ضبط الإخراج باستمرار. في روبوت Arduino ذاتي التوازن ، يتم تعيين الإدخال (وهو المنحدر المرغوب بالدرجات) بواسطة البرنامج. يقرأ MPU6050 الميل الحالي للروبوت ويغذيه في خوارزمية PID التي تقوم بإجراء عمليات حسابية للتحكم في المحرك والحفاظ على الروبوت في وضع مستقيم.

يتطلب PID تعيين قيم Kp و Ki و Kd على القيم المثلى. يستخدم المهندسون برمجة، مثل MATLAB ، لحساب هذه القيم تلقائيًا. لسوء الحظ ، لا يمكننا استخدام MATLAB في حالتنا لأنها ستزيد من تعقيد المشروع. بدلاً من ذلك ، سنقوم بضبط قيم PID. هيريس كيفية القيام بذلك:

  1. اضبط Kp و Ki و Kd على الصفر.
  2. ضبط Kp. سيؤدي القليل جدًا من Kp إلى سقوط الروبوت لأن الإصلاح غير كافٍ. الكثير من Kp يجعل الروبوت يتحرك ذهابًا وإيابًا. Kp الجيد سيجعل الروبوت يميل إلى الأمام والخلف قليلاً (أو يتأرجح قليلاً).
  3. بمجرد تعيين Kp ، اضبط Kd. ستعمل قيمة Kd الجيدة على تقليل التذبذبات حتى يصبح الروبوت مستقرًا تقريبًا. أيضًا ، سيحافظ Kd المناسب على الروبوت حتى إذا تم دفعه.
  4. أخيرًا ، قم بتثبيت Ki. عند تشغيله ، سوف يتأرجح الروبوت حتى إذا تم ضبط Kp و Kd ، ولكنه سيستقر بمرور الوقت. ستعمل قيمة Ki الصحيحة على تقصير الوقت المطلوب حتى يستقر الروبوت.

يمكن رؤية سلوك الروبوت أدناه في الفيديو:

كود اردوينو لروبوت ذاتي التوازن

احتجنا إلى أربع مكتبات خارجية لإنشاء الروبوت الخاص بنا. تسهل مكتبة PID حساب قيم P و I و D. تستخدم مكتبة LMotorController للتحكم في محركين باستخدام الوحدة النمطية L298N. تم تصميم مكتبة I2Cdev ومكتبة MPU6050_6_Axis_MotionApps20 لقراءة البيانات من MPU6050. يمكنك تنزيل الكود بما في ذلك المكتبات في هذا المستودع.

#يشمل #يشمل #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 20 MPU6050 mpu؛ // MPU control / status vars bool dmpReady = false ؛ // تعيين صحيح إذا كان DMP init ناجحًا uint8_t mpuIntStatus ؛ // يحمل بايت حالة المقاطعة الفعلية من MPU uint8_t devStatus ؛ // حالة الإرجاع بعد كل عملية جهاز (0 = نجاح ،! 0 = خطأ) uint16_t packetSize ؛ // حجم حزمة DMP المتوقع (الافتراضي 42 بايت) uint16_t fifoCount ؛ // حساب جميع البايتات الموجودة حاليًا في FIFO uint8_t fifoBuffer ؛ // المخزن المؤقت لتخزين FIFO // التوجيه / الحركة vars Quaternion q ؛ // حاوية رباعية الجاذبية VectorFloat ؛ // ناقلات الجاذبية تطفو ypr ؛ // الانعراج / الملعب / حاوية لفة وناقل الجاذبية // PID double originalSetpoint = 173 ؛ نقطة الضبط المزدوجة = originalSetpoint ؛ double MovingAngleOffset = 0.1 ؛ مزدوج المدخلات والمخرجات ؛ // اضبط هذه القيم لتناسب تصميمك double Kp = 50 ؛ ضعف Kd = 1.4 ؛ مزدوج كي = 60 ؛ PID pid (& input ، & output ، & setpoint ، Kp ، Ki ، Kd ، DIRECT) ؛ محرك مزدوج SpeedFactorLeft = 0.6 ؛ محرك مزدوج SpeedFactorRight = 0.5 ؛ // MOTOR CONTROLLER int ENA = 5 ؛ عدد int IN1 = 6 ؛ كثافة العمليات IN2 = 7 ؛ عدد IN3 = 8 ؛ كثافة العمليات IN4 = 9 ؛ int ENB = 10 ؛ LMotorController motorController (ENA، IN1، IN2، ENB، IN3، IN4، motorSpeedFactorLeft، motorSpeedFactorRight) ؛ متغير منطقي mpuInterrupt = خطأ ؛ // يشير إلى ما إذا كان دبوس مقاطعة MPU قد ذهب إلى فراغ عالٍ dmpDataReady () (mpuInterrupt = true ؛) إعداد باطل () (// انضم إلى ناقل I2C (مكتبة I2Cdev لا تفعل ذلك تلقائيًا) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin ( )؛ TWBR = 24؛ // 400 كيلو هرتز ساعة I2C (200 كيلو هرتز إذا كانت وحدة المعالجة المركزية 8 ميجا هرتز) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire :: setup (400 ، صحيح) ؛ #endif mpu.initialize () ؛ devStatus = mpu.dmpInitialize () ؛ // قم بتوفير إزاحات الدوران الخاصة بك هنا ، والتي تم تحجيمها من أجل الحد الأدنى من الحساسية mpu.setXGyroOffset (220) ؛ mpu.setYGyroOffset (76) ؛ mpu.setZGyroOffset (-85) ؛ mpu.setZAccelOffset (1788) ؛ // 1688 المصنع الافتراضي للاختبار الخاص بي chip // تأكد من أنها تعمل (تُرجع 0 إذا كان الأمر كذلك) إذا (devStatus == 0) (// قم بتشغيل DMP ، والآن أصبح جاهزًا mpu.setDMPEnabled (صحيح) ؛ // تمكين Arduino interrupt Detection attachInterrupt (0، dmpDataReady ، RISING)؛ mpuIntStatus = mpu.getIntStatus ()؛ // اضبط علامة DMP Ready الخاصة بنا حتى تعرف وظيفة الحلقة الرئيسية () أنه من المناسب استخدامها dmpReady = true ؛ // احصل على حجم حزمة DMP المتوقع لحزمة المقارنة اللاحقة mpu.dmpGetFIFOPacketSize () ، // إعداد PID pid.SetMode (تلقائي) ؛ pid.SetSampleTime (10) ، pid. SetOutputLimits (-255، 255) ، ) else (// ERROR! // 1 = فشل تحميل الذاكرة الأولية // 2 = فشلت تحديثات تكوين DMP // (إذا كانت ستتعطل ، فعادة ما يكون الرمز 1) Serial.print (F ("تهيئة DMP فشل (رمز ")) ؛ Serial.print (devStatus) ؛ Serial.println (F (") ")) ؛)) حلقة باطلة () (// إذا فشلت البرمجة ، فلا تحاول القيام بأي شيء إذا (! dmpReady ) return؛ // انتظر مقاطعة MPU أو تتوفر حزمة (حزم) إضافية أثناء (! mpuInterrupt && fifoCount< packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is >حزمة واحدة متوفرة // (يتيح لنا ذلك قراءة المزيد على الفور دون انتظار مقاطعة) fifoCount - = packetSize ؛ mpu.dmpGetQuaternion (& q ، fifoBuffer) ؛ mpu.dmpGetGravity (& الجاذبية ، & q) ؛ mpu.dmpGetYawPitchRoll (ypr، & q، & gravity) ؛ الإدخال = ypr * 180 / M_PI + 180 ؛ ))

قد تعمل أو لا تعمل قيم Kp و Ki و Kd. إذا لم يفعلوا ذلك ، فاتبع الخطوات أعلاه. لاحظ أن الإمالة في الكود مضبوطة على 173 درجة. يمكنك تغيير هذه القيمة إذا أردت ، لكن لاحظ أن هذه هي الزاوية التي يجب أن يدعمها الروبوت. أيضًا ، إذا كانت محركاتك سريعة جدًا ، فيمكنك ضبط قيم المحرك SpeedFactorLeft والمحرك SpeedFactor Right.

هذا كل شئ حتى الان. أرك لاحقًا.

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

3 دطابعة

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

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

طابعة 3D؟ ربما يكون الجميع على دراية بطابعة مكتبية عادية يمكنها طباعة النص الذي نحتاجه على A4. لذا ، فإن الطابعة ثلاثية الأبعاد هي طابعة يمكنها طباعة الجزء المطلوب. هناك طابعات ثلاثية الأبعاد مختلفة. لدي طابعة بتقنية FDM (طبقة تلو طبقة). يمكن العثور على تقنيات الطباعة ثلاثية الأبعاد الأخرى المتوفرة على الإنترنت.

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

أولاً ، دعنا نحدد وصف النظام الأساسي. أريد أن تكون المنصة مزودة بعجلتين ويجب أن تتناسب مع Arduino وقوة ومحركات وبعض المستشعرات.

أنت الآن بحاجة إلى رسم مخطط النظام الأساسي على الورق ووضع المكونات الضرورية عليه. على سبيل المثال ، مثل هذا.

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

هذه هي المنصة التي توصلت إليها.

بعد ذلك ، تحتاج إلى تحويل النموذج ثلاثي الأبعاد إلى رمز G يمكن فهمه بواسطة الطابعة ثلاثية الأبعاد. لهذا هناك برامج خاصة - تقطيع. أنا أستخدم برنامج Repetier-Host مع قطاعة Sli3er. إليك ما يبدو عليه الجزء جاهزًا للطباعة.

وهنا النموذج المطبوع.

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

المحركات

الآن نحن بحاجة إلى التفكير في كيفية تحرك روبوتنا المحمول. أول ما يتبادر إلى الذهن هو العجلات. لنفعلها اذا.

إذا كان أي شخص يتذكر ، فقد حاولنا بالفعل توصيل المحرك بـ Arduino. من لا يتذكر أو لا يعرف أو لم يقرأ - انظر. هناك عيوب كبيرة في توصيل المحرك باستخدام MOSFET - من المستحيل تغيير سرعة واتجاه الدوران بسرعة. حان الوقت لتعليم Arduino كيفية التحكم في المحركات بشكل حقيقي!

للقيام بذلك ، يمكنك استخدام شريحة L293D. يسمح لك L293D بالتحكم في محركين في وقت واحد ، مع تيار 600 مللي أمبير لكل قناة وذروة تيار يصل إلى 1000 مللي أمبير ، وإذا قمت بدمج القنوات ، فإن تيار الذروة يصل إلى 1200 مللي أمبير و 2000 مللي أمبير. سأتحدث عن الجمعية أدناه.

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

هيا بنا نبدأ. دعونا نجمع مخططًا بسيطًا بمحرك واحد ونوجهه. انتبه إلى مخطط التجميع.

إذا كنت لا تعرف اللغة الإنجليزية أو ببساطة لا تفهم ورقة البيانات ، فإليك وصف الاتصال. آمل أن يعرف الجميع ترقيم الدوائر الدقيقة أو تعلموا من مقال عن الدوائر الدقيقة.

  • الدبوس 1 - مسئول عن سرعة دوران المحرك. يوجد رقم مشابه على الطرف 9. يأخذ قيمًا من 0 إلى 255 ، والتي يمكن تنظيمها بسهولة باستخدام PWM. لقد قمت بتوصيل EN بالدبوس الخامس من Arduino ، والذي يدعم PWM.
  • الدبابيس 2 و 7 - مسئولة عن اتجاه حركة المحرك. توجد مثيلاتها على المسامير 10 و 15. سيؤدي تطبيق منطق واحد على أحد هذه المسامير إلى جعل المحرك يدور في اتجاه واحد (اعتمادًا على اتصال المحرك) ، وتطبيق منطق واحد على الآخر سيجعل المحرك يدور في الاتجاه المعاكس.
  • الدبابيس 3 و 6 - تحتاج إلى توصيل المحرك بهما. القطبية ليست مهمة ، فقط اتجاه الدوران سيعتمد على الاتصال. مماثل - على الدبابيس 11 و 14.
  • الدبابيس 4 و 5 مطحون. لا أعتقد أنه يحتاج إلى تفسير. مماثل - 12 و 13.
  • دبوس 8 - قوة المحركات. يجب أن يتم تشغيله في النطاق من 4.5 إلى 36 فولت.
  • Pin 16 - يتم توفير وحدة منطقية لها من Arduino. 5 فولت إن وجدت.

عظيم! المحرك متصل. الآن يمكنك البرمجة.

#define FRW_BUT 7 // Forward button #define BCW_BUT 6 // Back button #define SPD 5 // Rotation speed control ... #define FRW 4 //...rtation direction (forward) ... # تحديد BCW 3 / /... اتجاه الدوران (للخلف) #define SPD_POT A5 int xspeed = 0 ؛ // متغير لتحديد سرعة دوران المحرك int frw_move = 0 ؛ // متغير للأمر "forward" int bcw_move = 0 ؛ // متغير لإعداد فراغ الأمر "الخلفي" (/ / Design pin pinMode (SPD ، OUTPUT) ؛ pinMode (FRW ، OUTPUT) ؛ pinMode (BCW ، الإخراج) ؛ pinMode (SPD_POT ، INPUT) ؛ pinMode (FRW_BUT ، INPUT_PULLUP) ؛ pinMode (BCW_BUT ، INPUT_PULLUP) ؛) حلقة فارغة () (// اقرأ القراءات من مقياس الجهد // واجلبها إلى النطاق المطلوب - من 0 إلى 255 // بعد - مررها إلى دبوس التحكم في السرعة xspeed = analogRead (SPD_POT) ؛ تقييد (xspeed ، 0 ، 1023) ؛ xspeed = map (xspeed ، 0 ، 1023 ، 0 ، 255) ؛ // حدد زر الأمام واضغط إذا (! digitalRead (FRW_BUT)) (frw_move = 1 ؛ ) else (frw_move = 0 ؛) // حدد الضغط على زر "الرجوع" إذا (! digitalRead (BCW_BUT)) (bcw_move = 1 ؛) else (bcw_move = 0 ؛) // اتصل بالوظيفة لإرسال البيانات إلى L293D المحرك () ؛) محرك باطل () (// أرسل البيانات إلى L293D analogWrite (SPD ، xspeed) ؛ الكتابة الرقمية (FRW ، frw_move) ؛ الكتابة الرقمية (BCW ، bcw_move) ؛)

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

Z.Y. نعم ، أعلم أن جودة الفيديو ليست رائعة ، لكنني سأحاول العثور على كاميرا مناسبة وترتيب مكان للتصوير في أسرع وقت ممكن.

الآن حول اتصال قنوات L293. إذا كنت تريد توصيل محرك أكثر قوة ، فيمكنك الجمع بين القنوات.

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

الطريقة الثانية هي لحام L293 آخر أعلى L293. نأخذ ونلحم دبوس 1 إلى دبوس 1 ، دبوس 2 إلى دبوس 2 وما إلى ذلك. تعطي هذه الطريقة أيضًا زيادة في القوة الحالية مرتين ، ولكنها ، على عكس الطريقة الأولى ، تترك القدرة على التحكم في محركين في وقت واحد. قد تكون لديك فكرة - هل يجب أن أقوم بلحام المزيد من L293s؟ لسوء الحظ ، لن يؤدي اللحام اللاحق للدوائر الدقيقة إلى زيادة القوة الحالية بمقدار 600 مللي أمبير أخرى. ستكون الزيادة صغيرة.

"آه ، سأضطر إلى تنظيف محرك 12 فولت ..." لا تنزعج. بالنسبة للمحركات الأكثر قوة ، فإن الأخ الأكبر L293 - L298 مناسب ، لكننا الآن لن نفكر فيه. سنفعل هذا بعد قليل.

محرك درع

توافق على أنه مع مثل هذه الحزمة من الأسلاك ، لا يبدو كل شيء جيدًا. للتخلص منه ، يمكنك لحام الدائرة بـ L293 على دائرة مطبوعة أو لوح تجارب للحام ، ولكن ماذا لو كنت لا تريد اللحام أو لا تعرف كيف؟ لهذا هناك حلول متكاملةعلى شكل دروع لـ Arduino ، على سبيل المثال. سأتحدث عن واحد منهم - Motor Shield V1 من DK Electronics.

هنا ، في الواقع ، صورة للدرع.

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

إلى عيوب اللوح. تُستخدم جميع المسامير الرقمية تقريبًا للعمل مع الدرع ، باستثناء 0 ، 1 ، 2 ، 13. كما نعلم ، يستخدم Arduino الدبابيس 0 و 1 للبرامج الثابتة ، لذلك من الأفضل عدم استخدامها.

هناك أيضا جانب جيد. إذا لم تقم بتوصيل الماكينات ، على سبيل المثال ، يتم تحرير المسامير 9 و 10 ، وإذا لم تستخدم أيًا من المحركات ، فسيتم تحرير المسامير 3 ، 5 ، 6 ، 11 ، اعتمادًا على المحرك غير المستخدم. و أبعد من ذلك. لا يزال لدينا ستة مخرجات تناظرية متاحة ، والتي يمكن استخدامها كرقمية إذا رغبت في ذلك.

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

سنحتاج

  • Arduino UNO - يمكن استخدام أي عامل شكل Arduino UNO آخر. ليوناردو أو إيسكرا ، على سبيل المثال.
  • Motor Shield - ستعمل الإصدارات الأخرى من هذا الدرع.
  • محركات 6V - يمكنك أن تأخذ أيًا مناسبًا لخصائص Motor Shield.
  • عجلات 42 مم - عجلات لتلائم المحركات والمنصة
  • حوامل المحرك - يجب توصيل المحركات بالمنصة. خذ الشخص الذي يناسبك.
  • الطاقة - أخذت حزمة بطارية وخرجت حوالي 5 فولت ، وهو ما لا يكفي لتشغيل المحركات و Arduino ، لذلك قمت بتوصيل محول DC / DC ورفع الجهد إلى 9V. إذا لم يكن هناك محول ، فيمكنك استخدام التاج المعتاد عن طريق توصيله بمصدر طاقة Arduino.

حان الوقت لتجميع الروبوت الخاص بنا.

الخطوة 1

نقوم بتوصيل Arduino و Motor Shield.

الخطوة 2

نقوم بتجميع المحركات وربطها بالمنصة.

الخطوه 3

نقوم بتجميع الطاقة من خلال محول دفعة.

بالنسبة لأولئك الذين لديهم كرونا. لا تنسى الطائر!

الخطوة 4

نقوم بربط المحركات بـ Motor Shield باستخدام Arduino.

الخطوة الخامسة

نضيف الطعام.

الخطوة 6 (اختياري)

نعلق الغطاء - لجماليات.

لدينا روبوت منتهي. حان الوقت الآن لبرمجتها. لنلق نظرة على الكود.

// تضمين المكتبة للعمل مع Motor Shield # تضمين // حدد المحرك الأيسر على الكتلة الطرفية رقم 2 AF_DCMotor l_motor (2) ؛ // حدد المحرك المناسب للكتلة الطرفية رقم 3 AF_DCMotor r_motor (3) ؛ // المتغيرات لتحديد السرعة // ووقت الحركة int spd = 50 ؛ إنتايم (1000) ؛ إعداد باطل () (// اضبط السرعة الأولية وأوقف تشغيل المحركات l_motor.setSpeed ​​(spd) ؛ l_motor.run (RELEASE) ؛ r_motor.setSpeed ​​(100) ؛ r_motor.run (RELEASE) ؛) الحلقة الفارغة () ( // Ride forward l_motor.run (FORWARD)؛ r_motor.run (FORWARD)؛ l_motor.setSpeed ​​(spd)؛ r_motor.setSpeed ​​(spd)؛ تشغيل (BACKWARD) ؛ l_motor.setSpeed ​​(spd) ؛ r_motor.setSpeed ​​(spd) ؛ تأخير (وقت) ؛ // تدور بعكس اتجاه عقارب الساعة l_motor.run (إلى الأمام) ؛ r_motor.run (BACKWARD) ؛ l_motor.setSpeed ​​(spd) ؛ r_motor . setSpeed ​​(spd) ؛

عظيم! حان الوقت للتحقق. هنا مقطع فيديو من الاختبار الخاص بي. ماذا عنك؟

"هل قلت شيئًا عن مجالس الروبوتات؟" - يمكن لمن قرأ الدرس التمهيدي للجزء 2 من الدورة أن يقول. نعم ، هناك مثل هذه الرسوم. ضع في اعتبارك منصة Strela الروبوتية.

حلم الروبوتات. (بالكاد). لقد وصفت مزايا اللوحة. مباشرة إلى النقطة.

تم تثبيت الأخ الأكبر L293 - L298 عليه. ويتم عرض المسامير بثلاثة أضعاف ، وهو أمر مناسب تمامًا لتوصيل العديد من أجهزة الاستشعار.

يمكن توصيل هذه اللوحة بدلاً من Arduino UNO و Motor Shield. بالإضافة إلى ذلك ، كتب الرجال من Amperka مكتبة للعمل مع Arrow ، مما يجعل التحكم في المحركات مهمة تافهة إلى حد ما.

بالنسبة لأولئك الذين لا يعرفون ، دعني أخبرك. تحتوي كل مكتبة عادية على أمثلة على كيفية استخدامها ، ومكتبة Arrow ليست استثناءً. للعثور عليهم ، انتقل إلى ملف -> أمثلة -> علامة التبويب Strela. هناك نختار مثال StrelaMotors ، حيث يتم تنفيذ رسم مشابه للرسم باستخدام Motor Shield. بالمناسبة ، هناك أيضًا أمثلة لـ Motor Shield. إذا كنت مهتمًا ، ألق نظرة.

ماذا يمكنك أن تفعل مع السهم - انظر أدناه ، وننتقل إلى الاتصال اللاسلكي عبر البلوتوث.

بلوتوث

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

كجهاز تحكم ، اخترت هاتفًا ذكيًا. سننظم الاتصالات باستخدام بروتوكول البلوتوث ، لذا حان الوقت للتعرف.

هذه هي وحدة HC-06. لن أخوض في الكثير من التفاصيل ، ولكن إذا كنت مهتمًا ، فلننتقل إلى الأمام. هدفنا هو توجيه الروبوت من الهاتف الذكي. لنبدأ ، ربما.

تحتاج أولاً إلى توصيل HC-06 بـ Arduino. سنقوم بالاتصال باستخدام Software Serial. تتيح لك هذه المكتبة محاكاة المنفذ التسلسلي على المسامير التي نحتاجها. من أجل التجربة ، دعنا نحاول القيام بذلك على المسامير A0 (RX) و A1 (TX). لماذا؟ تذكر ما قلته عن Motor Shield.

نربط مثل هذا:

  • Vcc - إلى 5V
  • GND إلى GND
  • RX إلى TX
  • TX إلى RX

سأقوم بتوصيل HC-06 بالروبوت الذي قمنا ببنائه أعلاه. للقيام بذلك ، سوف نستخدم الخطوط الثلاثة على Motor Shield.

الروبوت جاهز. يبقى أن تتم برمجتها.

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

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

// تضمين مكتبات للعمل مع Motor Shield و Software Serial #include #يشمل // تحديد دبابيس لمحاكاة SoftwareSerial mySerial (A0 ، A1) ؛ // RX ، TX // حدد المحرك الأيسر للطرف رقم 2 AF_DCMotor l_motor (2) ؛ // حدد المحرك المناسب للكتلة الطرفية رقم 3 AF_DCMotor r_motor (3) ؛ // المتغيرات لتحديد السرعة // وضبط دوران تعويم spd = 70.0 ؛ تعويم corr_l = 0.62 ؛ تعويم corr_r = 1 ؛ floatrot = 50.0 ؛ إعداد باطل () (// ضبط السرعة الأولية وإيقاف تشغيل المحركات l_motor.setSpeed ​​(spd) ؛ l_motor.run (RELEASE) ؛ r_motor.setSpeed ​​(spd) ؛ r_motor.run (RELEASE) ؛ // إنشاء اتصال مع HC-06 mySerial .begin (9600) ؛) حلقة باطلة () (// إذا كانت هناك بيانات ، // اتصل بوظيفة التحكم إذا (mySerial.available ()) (drive () ؛)) void drive () (// Variable for البيانات الواردة char control = mySerial.read () ؛ // اضبط السرعة أولاً إذا (((control - "0")> = 0) && ((control - "0")<= 9)) { spd = (control - "0") * 25.0; //сохраняем новое значение скорости } else if (control == "q") { spd = 255.0; } //Сравниваем команды, пришедшие со смартфона else if (control == "S") //Если пришла команда "S", стоим { l_motor.run(RELEASE); r_motor. run(RELEASE); } else if (control == "F") //Если пришла команда "F", едем вперед { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "B") //Если пришла команда "B", едем назад { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "I") //Если пришла команда "I", едем вперёд и направо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r + rot); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "J")//Если пришла команда "J", едем назад и направо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r + rot); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "G") //Если пришла команда "G", едем вперёд и налево { l_motor.setSpeed(spd * corr_l + rot); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "H") //Если пришла команда "H", едем назад и налево { l_motor.setSpeed(spd * corr_l + rot); r_motor.setSpeed(spd * corr_r); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "R") //Если пришла команда "R", крутимся вправо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(BACKWARD); } else if (control = "L") //Если пришла команда "L", крутимся влево { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); l_motor.run(FORWARD); r_motor.run(BACKWARD); } }

سئل الروبوت. الآن لنأخذ هاتفًا ذكيًا.

تحكم RC

هناك العديد من التطبيقات المختلفة لتوصيل Arduino والهاتف الذكي عبر البلوتوث. في البحث ، ستكون الكلمات الرئيسية: Arduino ، Bluetooth ، RC.

اخترت تطبيقًا يسمى Bluetooth RC Controller. إنه مثالي لغرضنا. عند الضغط على الزر ، يرسل التطبيق قيمة char إلى HC-06 ، والتي بدورها تمرر القيمة الواردة إلى Arduino. القيمة المرسلة عند النقر فوق الزر مضبوطة ذاتيًا.

لإنشاء اتصال مع الروبوت ، تحتاج إلى النقر فوق الترس وتحديد عنصر "الإعدادات" في "الإعدادات" ، تحتاج إلى التأكد من أن الأزرار تتوافق مع هذه الأحرف المرسلة ، أو تغيير كود Arduino.

بعد ضبط الأحرف ، يمكنك إنشاء اتصال بـ HC-06. انقر على الترس وانتقل إلى "الاتصال بالسيارة". تفتح نافذة بالأجهزة المقترنة. في ذلك نختار HC-06. إذا لم يكن موجودًا ، فنحن نبحث عنه باستخدام "البحث عن الأجهزة". إذا تم العثور على الجهاز ، ولكن لا تريد الاقتران ، فانتقل إلى Bluetooth على هاتفك الذكي وقم بالاقتران كالمعتاد. كلمة المرور الافتراضية هي 1234. بعد ذلك ، انتقل إلى "البحث عن الأجهزة" واتصل.

عند إنشاء الاتصال ، سيتم تشغيل الضوء الأخضر الموجود في الأعلى ، وسيتوقف HC-06 عن الوميض. يمكنك البدء في القيادة. الشريط الموجود في الأعلى مسؤول عن سرعة الحركة.

دعنا نعود إلى السهم. ميزة أخرى لـ Arrow هي القدرة على تثبيت تنسيق Bluetooth XBee ، والشيء الجيد هو أن الدبابيس الأخرى تظل مجانية. ونظرًا لوجود مكتبة جاهزة لـ Arrow تساعد على تقليل رمز التحكم في المحركات ، فمن المفيد جدًا استخدام Arrow للتحكم في الروبوت عبر Bluetooth.

للقيام بذلك ، تحتاج إلى توصيل XBee بـ Strela ، وميضه بالرسم من الأمثلة المسماة "ArduinoBluetoothRCCarOnStrela" والاتصال بـ XBee عبر وحدة التحكم RC.

نصيحة

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

تدور العجلات في الاتجاه الخاطئ- يتم التخلص من هذه المشكلة بسهولة عن طريق إعادة ترتيب الأسلاك في الكتل الطرفية أو برمجيًا.

وحدة بلوتوث لا تعمل- تحتاج إلى التحقق من وجود مصباح LED أحمر مشتعل على الوحدة. إذا لم يكن مضاءًا ، فتأكد من توصيل وحدة Bluetooth بشكل صحيح. إذا كان مؤشر LED قيد التشغيل ، ولكن تم إنشاء الاتصال ، فأنت بحاجة إلى التأكد من أن RX الخاص بالوحدة متصل بـ TX للوحة والعكس صحيح ، وكذلك تجربة طريقة إقران الوحدة مع Arduino عبر المعيار واجهة بلوتوث.

الروبوت لا يقود بشكل مستقيم- لقد وصفت هذه المشكلة أعلى قليلاً عندما تحدثت عن Bluetooth و Motor Shield.

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

إذا تم توصيل مصدر طاقة لا يمكن أن يوفر تيارًا كافيًا للمحركات ، فيمكن أن ينخفض ​​الجهد كثيرًا ، من 9 إلى 5 فولت ، على سبيل المثال ، ولن تكون 5 فولت كافية لـ Arduino وستتم إعادة تشغيله. الحل هو توصيل مصدر طاقة أكثر قوة. كيف أحسب ، سأقول أدناه.

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

عندما يكون مصدر الطاقة قويًا بدرجة كافية ، فإن انخفاض الجهد لا يزيد عن 0.2 فولت.

بعض النصائح للمبتدئين في مجال الروبوتات

بدء تخطيط الروبوت ، فإن أول شيء يجب فعله هو الاهتمام بحساب قوة وحدة الطاقة واختيار مصدر الطاقة المناسب. سيكون من العار أن لا تشغل 4 بطاريات AAA محركات 4 6 فولت الخاصة بك ، ولا يوجد مجال لمزيد من الإمداد بالطاقة.

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

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

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

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

خاتمة

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

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

سأبدأ بسرد الأجزاء التي ستكون مطلوبة عند البناء - Arduino UNO ؛

أجهزة تحديد المدى بالأشعة تحت الحمراء

- محركات 3 فولت مع علب تروس وعجلات ؛

- موصلات لبطاريات 3A ؛

- البطارية (في حالة عدم وجود بطاريات كافية) ؛

- تتابع للتحكم في المحركات ؛

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


ثم أقوم بربط المحركات بلوح من الخشب ، وشد هذا الشريط

علاوة على ذلك ، قمت بوضع اردوينو ، ومرحل ، ولوحة ذهنية ، ومحددات المدى ، وتحت قاعدة الهيكل.

الآن نقوم بتوصيل كل شيء وفقًا للمخطط

في النهاية ، نقوم بتحميل الرسم التخطيطي التالي في اردوينو:

Const int R = 13 ؛ // المسامير التي تتصل بها أجهزة تحديد المدى للأشعة تحت الحمراء const int L = 12 ؛ int motor L = 9 ؛ // المسامير التي يتصل بها المرحل int motorR = 11 ؛ int buttonState = 0 ؛ إعداد باطل () (pinMode (R ، INPUT) ؛ pinMode (L ، INPUT) ؛ pinMode (motorR ، الإخراج) ؛ pinMode (motorL ، الإخراج) ؛) الحلقة الفارغة () ((buttonState = digitalRead (L) ؛ إذا (buttonState == HIGH) (digitalWrite (motorR ، HIGH) ؛) else (digitalWrite (motorR ، LOW) ؛)) ((buttonState = digitalRead (R) ؛ إذا (buttonState == HIGH) (digitalWrite (motorL ، HIGH) ؛) آخر (كتابة رقمية (motorL ، منخفضة) ؛))))

مبدأ العملية بسيط للغاية. أداة تحديد المدى اليسرى مسؤولة عن العجلة اليمنى ، والعجلة اليمنى عن العجلة اليسرى

لتوضيح الأمر ، يمكنك مشاهدة مقطع فيديو يوضح عملية الإنشاء وعمل الروبوت

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

أتمنى أن تكون قد استمتعت بهذه الحرفة ، تذكر أن الحرف اليدوية رائعة!

الجزء الأخير من المقال يدور حول روبوت صغير نقوم بتجميعه على هيكل - غطاء من حاوية طعام بلاستيكية. عقل الروبوت الخاص بنا هو لوحة Arduino UNO ، وتتحكم لوحة Driver Motor Shield في المحركات ومحرك المؤازرة ، ومستشعر العوائق - السونار بالموجات فوق الصوتية - عيون مثل Wally (من الرسوم المتحركة) - "HC-SR04 Ultrasonic Sensor". و. كيف تصنع روبوت على اردوينو؟

9. توصيل البطارية والمحركات

عند توصيل البطارية ، يجب أن تكون متأكدًا تمامًا من صحة القطبية ، كما يقولون قياس 7 مرات ، قم بتوصيلها مرة واحدة. حاول اتباع هذه القاعدة - السلك الأحمر دائمًا هو + الطاقة ، السلك الأسود أرضي ، إنه ناقص ، إنه GND. يحاول المصنعون اتباع نفس القواعد. لذلك ، نقوم بتوصيل الأسلاك القادمة من حجرة البطارية بمجموعة + M و GND على لوحة التحكم في المحرك. نقوم بتوصيل الأسلاك من محركات القيادة إلى الكتل M1 و M2 من لوحة التحكم في المحرك. الجانب الأيسر ، في اتجاه السفر ، متصل بالكتلة M1 ، الجانب الأيمن للكتلة M2. لا داعي للقلق بشأن قطبية المحركات حتى الآن ، يمكن تغييرها إذا حدث خطأ ما أثناء الاختبار.

10. تحقق من القطبية والتوصيل الصحيح للوحدات

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

11. خطوة برمجة اردوينو

يتم تحميل البرنامج إلى متحكم Arduino من جهاز كمبيوتر ، باستخدام كابل USB وبرنامج خاص - بيئة البرمجة والتحرير للرسومات (البرامج) - Arduino IDE. يمكنك الحصول على البرنامج من موقع arduino.cc ، قسم التنزيل ، حيث يمكنك دائمًا تنزيل أحدث إصدار من البرنامج. بعد تثبيت بيئة البرمجة ، يبقى فقط الاختيار من قائمة برنامج التشغيل للوحة التي تريد استخدامها - في حالتنا ، Arduino UNO ومنفذ COM الذي يتم من خلاله توصيل Arduino عبر مضاهاة USB. هناك الكثير من جميع أنواع الكتيبات حول هذا الموضوع ، لذلك نتخطى هذه المرحلة (فقط في حالة - أدوات القائمة> المنفذ التسلسلي).

يتوفر برنامج الروبوت المصغر من موقعنا على الإنترنت ، على الرغم من أنه فقط بعد التسجيل ، نكتة Mini Robot على Arduino. لكي يعمل البرنامج ، هناك حاجة إلى مكتبات إضافية - AFMotor.h ، Sevo.h ، NewPing.h ، كلها موجودة في الأرشيف ، تحتاج إلى فك ضغط الأرشيف في مجلد برنامج مثبتاردوينو IDE. بالنسبة لي ، هذا هو دليل Arduino c: Program Files (x86) ، يجب وضع المكتبات في مجلد مكتبات Arduino c: Program Files (x86). ثم انتقل إلى دليل C: Program Files (x86) ArduinolibrariesAPC_4_ROBOT وانقر نقرًا مزدوجًا على APC_4_ROBOT.ino هذا هو الرسم نفسه ، ثم ستبدأ بيئة البرمجة. نقوم بتوصيل لوحة Arduino Uno العارية (أي بدون وحدات متصلة) عبر كبل USB بالكمبيوتر ، واضغط على الزر مع السهم إلى اليمين ، وسيبدأ البرنامج في التحميل إلى وحدة التحكم. تستغرق العملية برمتها بضع ثوانٍ ، وإذا تم توصيل كل شيء بشكل صحيح ، فلن تضيء أي نقوش حمراء ، وسيكمل المؤشر الموجود في الركن الأيمن السفلي حركته بنسبة 100٪. تم تثبيت برنامج Arduino في وحدة التحكم Atmega328.

12. بدء تشغيل الروبوت

روبوت صغير على Arduino - جاهز للتحرك. الروبوت والي

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

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

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

أعلى