برمجة اردوينو باللغة الروسية. المدونة › اردوينو: برمجة بدون برمجة. وصف عام للغات البرمجة

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

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

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

من بين 65 تخصصًا تقدمه جامعة ستانفورد، يتطلب نصفها على الأقل مهارات البرمجة. منذ حوالي أربع سنوات ظهروا في ما يسمى بالأكاديميات الأكاديمية. وتعتقد لورا رايا، رئيسة مركز الدراسات العليا الهندسية للتكنولوجيا والفنون الرقمية في مدريد، أن الطريقة الوحيدة لمنع الناس من البطالة هي تعلم كيفية التحكم في الروبوتات. ويقول: "افهم منطق كيف ولماذا تعمل الأجهزة من أجل البقاء والاستقلالية". لم تعد المنتجات تباع مع كتيبات؛ من المتوقع أن يكون لدى المرء الحد الأدنى من الحدس التكنولوجي. كل ما نقوم به يتبع الخوارزمية.

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

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

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

إذًا، ما هو ArduBlock؟كما قلت سابقًا، هذه بيئة برمجة رسومية. تمت ترجمته بالكامل تقريبًا إلى اللغة الروسية. لكن ما يميز ArduBlock ليس هذا فحسب، بل أيضًا حقيقة أن برنامج ArduBlock الذي كتبناه يتحول إلى كود اردوينو بيئة تطوير متكاملة. هذا البرنامج مدمج في بيئة برمجة Arduino IDE، أي أنه مكون إضافي.

يوجد أدناه مثال على مصباح LED الوامض وبرنامج محول في Arduino IDE. كل العمل مع البرنامج بسيط للغاية ويمكن لأي طالب فهمه.

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

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


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

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

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

لتثبيت ArduBlok، يجب عليك أولاً تنزيل Arduino IDE وتثبيته من موقع Arduino الرسمي وفهم الإعدادات عند العمل معه. لوحة اردوينوأونو. كيفية القيام بذلك موصوفة على نفس الموقع أو على Amperka، أو شاهده على YouTube. حسنًا، عندما تتعرف على كل هذا، ستحتاج إلى تنزيل ArduBlok من الموقع الرسمي هنا. لا أنصح بتنزيل أحدث الإصدارات، فهي معقدة جدًا بالنسبة للمبتدئين، لكن الإصدار من 12-07-2013 هو الأفضل، وهذا الملف هو الأكثر شهرة هناك.

التجربة 3: مرة واحدة أم دائمًا؟

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

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

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

ثم أعد تسمية الملف الذي تم تنزيله إلى ardublock-all وفي مجلد "المستندات". نقوم بإنشاء المجلدات التالية: Arduino > أدوات > ArduBlockTool > أداة وفي الأخير نرمي الملف الذي تم تنزيله وإعادة تسميته. يعمل ArduBlok على الجميع أنظمة التشغيل، حتى على Linux، قمت بفحصه بنفسي على XP وWin7 وWin8، وجميع الأمثلة على Win7. تثبيت البرنامج هو نفسه لجميع الأنظمة.


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

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

حسنًا، بكل بساطة، قمت بإعداد أرشيف على قرص 7z Mail، وستجد مجلدين عند تفريغهما. واحد يعمل بالفعل برنامج اردوينو IDE، وفي مجلد آخر يجب إرسال المحتويات إلى مجلد المستندات.

للعمل في ArduBlok، تحتاج إلى تشغيل Arduino IDE. ثم نذهب إلى علامة التبويب "الأدوات" وهناك نجد عنصر ArduBlok ونضغط عليه - وها هو هدفنا.

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

المتغيرات والثوابت والأنواع

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


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

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

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


في قسم "الإدارة" سنجد مجموعة متنوعة من الدورات.


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

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

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


في قسم "الأرقام/الثوابت"، يمكننا تحديد القيم الرقمية أو إنشاء متغير، ولكن من غير المرجح أن تستخدم ما هو أدناه.


في قسم "المشغلين" سنجد جميع عوامل المقارنة والحساب الضرورية.

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

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


يستخدم قسم الأدوات المساعدة بشكل أساسي الرموز الموقوتة.


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

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

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


"DF Robot" - يتم استخدام هذا القسم في حالة توفر المستشعرات المحددة فيه، ويتم العثور عليها أحيانًا. ومثالنا اليوم ليس استثناءً، لدينا "مفتاح IR قابل للتعديل" و"مستشعر الخط". "حساس الخط" يختلف عن الذي في الصورة فهو من شركة Amperka. تصرفاتهم متطابقة، لكن مستشعر Ampere أفضل بكثير، لأنه يحتوي على منظم حساسية.

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

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


"Seedstudio Grove" - ​​لم أستخدم المستشعرات الموجودة في هذا القسم مطلقًا، على الرغم من وجود أذرع التحكم فقط. في الإصدارات الجديدة تم توسيع هذا القسم.


والقسم الأخير هو "مجموعة الرابط". لم أصادف أجهزة الاستشعار المعروضة فيه.

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

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

هنا مجموعة الأجزاء نفسها، تم شراء كل شيء على موقع Amperka.


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

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

  1. AMP-B001 Motor Shield (قناتان، 2 أ) 1890 روبل روسي
  2. AMP-B017 درع ترويكا 1690 روبل روسي
  3. AMP-X053 حجرة البطارية 3×2 AA 1 60 RUR
  4. AMP-B018 مستشعر الخط الرقمي 2580 روبل روسي
  5. ROB0049 منصة MiniQ ذات العجلتين 1,1890 روبل روسي
  6. SEN0019 مستشعر العوائق بالأشعة تحت الحمراء RUB 1,390
  7. FIT0032 حامل لجهاز استشعار العوائق بالأشعة تحت الحمراء RUB 1,90
  8. A000066 اردوينو أونو 1 1150 رور


أولاً، دعونا نجمع المنصة ذات العجلات ونلحم الأسلاك بالمحركات.


ثم سنقوم بتثبيت الرفوف لتركيب اللوحة اردوينو أونوالتي أخذت من القديم اللوحة الأمأو غيرها من المثبتات المماثلة.


ثم نعلق لوحة Arduino UNO على هذه الرفوف، لكن لا يمكننا ربط مسمار واحد - الموصلات في الطريق. يمكنك، بالطبع، فكها، لكن هذا حسب تقديرك.


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



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


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



نقوم بتثبيت Troyka Shield أعلى Motor Shield. إنه ضروري لراحة توصيل أجهزة الاستشعار. جميع المستشعرات التي نستخدمها رقمية، لذلك يتم توصيل مستشعرات الخط بالمنفذين 8 و9، كما يطلق عليهما أيضًا الدبابيس، كما يتم توصيل مستشعر العوائق بالأشعة تحت الحمراء بالمنفذ 12. تأكد من ملاحظة أنه لا يمكن استخدام المنافذ 4، 5، 6، 7 حيث يتم استخدامها بواسطة Motor Shield للتحكم في المحركات. حتى أنني قمت برسم هذه المنافذ خصيصًا باستخدام قلم تحديد أحمر حتى يتمكن الطلاب من اكتشاف ذلك.


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

هناك نوعان من توصيلات حجرة البطارية. أول توصيل للأسلاك بـ Troyka Shield. من الممكن أيضًا لحام قابس الطاقة وتوصيله بلوحة Arduino UNO نفسها.



الروبوت لدينا جاهز. قبل أن تبدأ البرمجة، سوف تحتاج إلى معرفة كيفية عمل كل شيء، وهي:
- المحركات:
يتم استخدام المنفذين 4 و5 للتحكم في محرك واحد، والمنفذين 6 و7 في الآخر؛
نقوم بتنظيم سرعة دوران المحركات باستخدام PWM على المنفذين 5 و6؛
للأمام أو للخلف عن طريق إرسال الإشارات إلى المنافذ 4 و7.
- أجهزة الاستشعار:
نحن جميعًا رقميون، لذا فهم يعطون إشارات منطقية على شكل 1 أو 0؛
ومن أجل ضبطها، لديها منظمات خاصة، وبمساعدة مفك البراغي المناسب يمكن معايرتها.

يمكن العثور على التفاصيل في Amperke. لماذا هنا؟ لأن هناك الكثير من المعلومات حول العمل مع Arduino.

حسنًا، ربما نظرنا إلى كل شيء بشكل سطحي، ودرسناه، وبالطبع قمنا بتجميع الروبوت. الآن يجب برمجته، ها هو - البرنامج الذي طال انتظاره!


وتحويل البرنامج إلى Arduino IDE:

إعداد الفراغ () (pinMode (8، INPUT)؛ pinMode (12، INPUT)؛ pinMode (9، INPUT)؛ pinMode (4، OUTPUT)؛ pinMode (7، OUTPUT)؛ pinMode (5، OUTPUT)؛ pinMode (6) ، OUTPUT)؛ ) حلقة باطلة() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) (digitalWrite(4, HIGH);analogWrite(5, 255);analogWrite( 6، 255)؛ الكتابة الرقمية (7، عالية) ) آخر ( الكتابة الرقمية (4، عالية)؛ التناظرية (5، 255)؛ التناظرية (6، 50)؛ الكتابة الرقمية (7، منخفضة)؛ ) ) آخر ( إذا (القراءة الرقمية (9)) ( الكتابة الرقمية (4، منخفض)؛ التناظرية (5، 50)؛ التناظرية (6، 255)؛ الكتابة الرقمية (7، عالية)؛ ) آخر ( الكتابة الرقمية (4، عالية)؛ التناظرية (5، 255)؛ التناظرية (6، 255)؛ الكتابة الرقمية (7، عالية) ) آخر ( الكتابة الرقمية (4، عالية)؛ التناظرية (5، 0)؛ التناظرية (6، 0)؛ الكتابة الرقمية (7، عالية؛ ) )

في الختام، أريد أن أقول إن هذا البرنامج هو مجرد هبة من السماء للتعليم؛ حتى للدراسة الذاتية، وسوف يساعدك على تعلم أوامر Arduino IDE. أهم ما يميزه هو أن هناك أكثر من 50 رمز تثبيت، ويبدأ في "الخلل". نعم، في الواقع، هذا هو تسليط الضوء، لأن البرمجة فقط على ArduBlok طوال الوقت لن تعلمك البرمجة في Arduino IDE. يمنحك ما يسمى بـ "الخلل" الفرصة للتفكير ومحاولة تذكر الأوامر الخاصة بالتصحيح الدقيق لأخطاء البرامج.

أتمنى لك النجاح.

مقدمة

تمت برمجة Freeduino/Arduino بلغة برمجة خاصة - تعتمد على C/C++، وتسمح لك باستخدام أي من وظائفها. بالمعنى الدقيق للكلمة، منفصلة لغة الاردوينوغير موجود، تمامًا كما لا يوجد مترجم Arduino - يتم تحويل البرامج المكتوبة (مع الحد الأدنى من التغييرات) إلى برنامج في C/C++، ثم يتم تجميعها بواسطة مترجم AVR-GCC. لذلك في الواقع، يتم استخدامه المتخصصة ل المتحكمات الدقيقة AVRخيار C/C++.

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

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

Serial.begin(9600);

وعند استخدام C/C++ "العارية"، سيتعين عليك التعامل مع الوثائق الخاصة بوحدة التحكم الدقيقة واستدعاء شيء مثل هذا:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1)؛
الهيئة الفرعية للتنفيذ(UCSR0B, RXEN0);
الهيئة الفرعية للتنفيذ (UCSR0B، TXEN0)؛
الهيئة الفرعية للتنفيذ(UCSR0B, RXCIE0);

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

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

وثائق أكثر اكتمالا (في إنجليزي) معروض على الموقع الرسمي للمشروع - http://www.arduino.cc. يوجد أيضًا منتدى وروابط لمكتبات إضافية وأوصافها.

قياسًا على الوصف الموجود على الموقع الرسمي لمشروع Arduino، يشير "المنفذ" إلى جهة اتصال متحكم متصل بموصل تحت الرقم المقابل. بالإضافة إلى ذلك، يوجد منفذ اتصال تسلسلي (منفذ COM).

هيكل البرنامج

في برنامجك يجب أن تعلن اثنين الوظائف الرئيسية: الإعداد () والحلقة ().

يتم استدعاء وظيفة setup() مرة واحدة، بعد كل عملية تشغيل أو إعادة ضبط للوحة Freeduino. استخدمه لتهيئة المتغيرات، وتعيين أوضاع تشغيل المنافذ الرقمية، وما إلى ذلك.

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

دعونا نلقي نظرة على مثال بسيط:

إعداد باطل () // الإعدادات الأولية
{
beginSerial(9600); // ضبط سرعة المنفذ التسلسلي على 9600 بت في الثانية
pinMode(3, INPUT); // ضبط المنفذ الثالث لإدخال البيانات
}

// يتحقق البرنامج من المنفذ الثالث لوجود إشارة عليه ويرسل الرد إليه
// كرسالة نصية إلى المنفذ التسلسلي للكمبيوتر
حلقة باطلة () // نص البرنامج
{
if (digitalRead(3) == HIGH) // شرط لاستقصاء المنفذ الثالث
serialWrite("H"); // إرسال رسالة على شكل حرف "H" إلى منفذ COM
آخر
serialWrite("L"); // أرسل رسالة على شكل حرف "L" إلى منفذ COM
تأخير (1000)؛ // تأخير 1 ثانية.
}

pinMode(port, mode);

وصف:

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

حدود:

المنفذ - رقم المنفذ الذي تريد ضبط وضعه (قيمة عددية من 0 إلى 13).

الوضع - إما الإدخال (الإدخال) أو الإخراج (الإخراج).

pinMode(13, OUTPUT); // سيكون الدبوس الثالث عشر هو الإخراج
pinMode(12, INPUT); // والثاني عشر هو الإدخال

ملحوظة:

يمكن استخدام المدخلات التناظرية كمدخلات/مخرجات رقمية عن طريق الوصول إليها باستخدام الأرقام من 14 (المدخل التناظري 0) إلى 19 (المدخل التناظري 5)

الكتابة الرقمية (المنفذ، القيمة)؛

وصف:

يضبط مستوى الجهد على مرتفع (عالي) أو منخفض (منخفض) على المنفذ المحدد.

حدود:

المنفذ: رقم المنفذ

القيمة: عالية أو منخفضة

الكتابة الرقمية (13، عالية)؛ // اضبط الدبوس 13 على الحالة "المرتفعة".

القيمة = القراءة الرقمية (المنفذ)؛

وصف:

يقرأ القيمة على المنفذ المحدد

حدود:

المنفذ: رقم المنفذ الذي تم استطلاعه

قيمة الإرجاع: تُرجع القيمة الحالية على المنفذ (مرتفع أو منخفض) من النوع int

كثافة العمليات فال؛
فال = قراءة رقمية(12); // استطلاع للدبوس الثاني عشر

ملحوظة:

إذا لم يكن هناك أي شيء متصل بمنفذ القراءة، فقد تقوم الدالة digitalRead() بإرجاع قيم عالية أو منخفضة بشكل غير منتظم.

إدخال / إخراج الإشارة التناظرية

القيمة = التناظرية القراءة (المنفذ)؛

وصف:

يقرأ قيمة من المنفذ التناظري المحدد. Freeduino يحتوي على 6 قنوات، محول تناظري إلى رقمي 10 بت لكل منهما. وهذا يعني أن جهد الدخل من 0 إلى 5 فولت يتم تحويله إلى قيمة عددية من 0 إلى 1023. دقة القراءة هي: قيم 5 فولت/1024 = 0.004883 فولت/القيمة (4.883 مللي فولت). يستغرق الأمر حوالي 100 نانو ثانية (0.0001 درجة مئوية) لقراءة قيمة إدخال تناظرية، وبالتالي فإن الحد الأقصى لمعدل القراءة يبلغ حوالي 10000 مرة في الثانية.

حدود:

قيمة الإرجاع: إرجاع رقم صحيح في النطاق من 0 إلى 1023 للقراءة من المنفذ المحدد.

كثافة العمليات فال؛
فال = التناظرية(0); // اقرأ القيمة عند الإدخال التناظري رقم 0

ملحوظة:

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

AnalogWrite(port, value);

وصف:

إخراج قيمة تناظرية إلى المنفذ. تعمل هذه الوظيفة على: 3، 5، 6، 9، 10، و11 منافذ Freeduino الرقمية.

يمكن استخدامه لتغيير سطوع LED، والتحكم في المحرك، وما إلى ذلك. بعد استدعاء وظيفة الكتابة التناظرية، يبدأ المنفذ المقابل في العمل في وضع تعديل عرض نبضة الجهد حتى يكون هناك استدعاء آخر لوظيفة الكتابة التناظرية (أو وظائف القراءة الرقمية / الكتابة الرقمية على نفس المنفذ).

حدود:

المنفذ: عدد المدخلات التناظرية التي يتم استقصاؤها

القيمة: عدد صحيح بين 0 و255. القيمة 0 تولد 0 فولت على المنفذ المحدد؛ قيمة 255 تولد +5 فولت على المنفذ المحدد. بالنسبة للقيم التي تتراوح بين 0 و255، يبدأ المنفذ بالتناوب بسرعة بين مستويات الجهد 0 و+5 فولت - كلما ارتفعت القيمة، كلما قام المنفذ بإنشاء المستوى العالي (5 فولت) في كثير من الأحيان.

AnalogWrite(9, 128); // اضبط الطرف 9 على قيمة تعادل 2.5V

ملحوظة:

ليست هناك حاجة للاتصال بـ pinMode لضبط المنفذ لإخراج الإشارات قبل الاتصال بـanalogWrite.

تردد توليد الإشارة حوالي 490 هرتز.

الوقت = ملي ()؛

وصف:

إرجاع عدد المللي ثانية منذ أن قام Freeduino بتنفيذ البرنامج الحالي. سوف يفيض العداد ويعاد ضبطه بعد حوالي 9 ساعات.

قيمة الإرجاع: تُرجع قيمة طويلة غير موقعة

وقت طويل غير موقع؛ // إعلان متغير زمني من النوع غير الموقع طويل
الوقت = ملي ()؛ // نقل عدد المللي ثانية

تأخير(time_ms);

وصف:

إيقاف البرنامج مؤقتًا لعدد معين من المللي ثانية.

حدود:

time_ms - وقت تأخير البرنامج بالمللي ثانية

تأخير (1000)؛ // توقف مؤقتًا لمدة ثانية واحدة

تأخير ميكروثانية

تأخير ميكروثانية(time_μs);

وصف:

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

حدود:

time_μs - وقت تأخير البرنامج بالميكروثانية

تأخير ميكروثانية(500); // توقف مؤقتًا لمدة 500 ميكروثانية

PulseIn(port, value);

وصف:

يقرأ النبض (مرتفع أو منخفض) من منفذ رقمي ويعيد مدة النبض بالميكروثانية.

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

حدود:

المنفذ: رقم المنفذ الذي نقرأ منه النبض

القيمة: نوع النبض مرتفع أو منخفض

قيمة الإرجاع: تُرجع مدة النبضة بالميكروثانية (اكتب int)

مدة كثافة العمليات؛ // إعلان متغير المدة من النوع int
المدة = نبض (دبوس، عالية)؛ // قياس مدة النبض

نقل البيانات التسلسلية

يحتوي Freeduino على وحدة تحكم مدمجة لنقل البيانات التسلسلية، والتي يمكن استخدامها للتواصل بين أجهزة Freeduino/Arduino وللاتصال بالكمبيوتر. على جهاز الكمبيوتر، يتم تمثيل الاتصال المقابل بواسطة منفذ USB COM.

يتم الاتصال عبر المنافذ الرقمية 0 و1، وبالتالي لا يمكنك استخدامها للإدخال/الإخراج الرقمي إذا كنت تستخدم وظائف تسلسلية.

Serial.begin(baud_rate);

وصف:

يضبط سرعة الإرسال منفذ كومبت في الثانية لنقل البيانات التسلسلية. للتواصل مع جهاز كمبيوتر، استخدم إحدى هذه السرعات القياسية: 300، 1200، 2400، 4800، 9600، 14400، 19200، 28800، 38400، 57600، أو 115200. يمكنك أيضًا تحديد سرعات أخرى عند الاتصال بوحدة تحكم دقيقة أخرى عن طريق المنافذ 0 و 1.

حدود:

baud_rate: معدل تدفق البيانات بالبت في الثانية.

Serial.begin(9600); // اضبط السرعة على 9600 بت في الثانية

المسلسل متاح

العد = Serial.available()؛

وصف:

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

قيمة الإرجاع:

تُرجع قيمة int - عدد البايتات المتاحة للقراءة في المخزن المؤقت التسلسلي، أو 0 إذا لم يكن هناك شيء متاح.

إذا (Serial.available() > 0) ( // إذا كانت هناك بيانات في المخزن المؤقت
// يجب أن يكون هناك استقبال للبيانات ومعالجتها هنا
}

شار = Serial.read();

وصف:

يقرأ البايت التالي من المخزن المؤقت للمنفذ التسلسلي.

قيمة الإرجاع:

البايت الأول المتاح للبيانات الواردة من المنفذ التسلسلي، أو -1 إذا لم تكن هناك بيانات واردة.

incomingByte = Serial.read(); // قراءة البايت

وصف:

مسح المخزن المؤقت لإدخال المنفذ التسلسلي. يتم فقدان البيانات الموجودة في المخزن المؤقت، وستكون الاستدعاءات الإضافية إلى Serial.read() أو Serial.available() منطقية للبيانات المستلمة بعد استدعاء Serial.flush().

Serial.flush(); // امسح المخزن المؤقت - ابدأ في تلقي البيانات "من الصفر"

وصف:

إخراج البيانات إلى المنفذ التسلسلي.

حدود:

تحتوي الوظيفة على عدة نماذج استدعاء اعتمادًا على نوع وتنسيق بيانات الإخراج.

يطبع Serial.print(b, DEC) سلسلة ASCII - التمثيل العشري لـ b.

كثافة العمليات ب = 79؛

Serial.print(b, HEX) يطبع سلسلة ASCII - التمثيل الست عشري للرقم b.

كثافة العمليات ب = 79؛

تقوم Serial.print(b, OCT) بطباعة سلسلة ASCII - التمثيل الثماني للرقم b.

كثافة العمليات ب = 79؛
Serial.print (ب، أكتوبر)؛ // سيتم إخراج السلسلة "117" إلى المنفذ

تقوم Serial.print(b, BIN) بطباعة سلسلة ASCII - التمثيل الثنائي للرقم b.

كثافة العمليات ب = 79؛
Serial.print(b, BIN); // سيتم إخراج السلسلة "1001111" إلى المنفذ

Serial.print(b, BYTE) يطبع البايت المنخفض لـ b.

كثافة العمليات ب = 79؛
Serial.print(b, BYTE); // سيعرض الرقم 79 (بايت واحد). في الشاشة
// من المنفذ التسلسلي نحصل على الرمز "O" - إنه
// الكود هو 79

Serial.print(str) إذا كانت str عبارة عن سلسلة أو صفيف أحرف، فسيتم إرسال str إلى بايت بايت منفذ COM.

بايت شار = (79، 80، 81)؛ // صفيف من 3 بايت بقيم 79،80،81
Serial.print("هنا بايتاتنا:"); // يُخرج السطر "هنا وحدات البايت الخاصة بنا:"
Serial.print(بايت); // إخراج 3 أحرف برموز 79،80،81 -
// هذه هي الأحرف "OPQ"

Serial.print(b) إذا كان b من النوع byte أو char، فسيقوم بطباعة الرقم b نفسه إلى المنفذ.

شار ب = 79؛
Serial.print (ب)؛ // سيتم إخراج الحرف "O" إلى المنفذ

Serial.print(b) إذا كان b من النوع عدد صحيح، فسيتم طباعة التمثيل العشري لـ b إلى المنفذ.

كثافة العمليات ب = 79؛
Serial.print (ب)؛ // سيتم إخراج السلسلة "79" إلى المنفذ

وصف:

الدالة Serial.println تشبه الدالة Serial.print، ولها نفس خيارات الاتصال. والفرق الوحيد هو أنه يتم إخراج حرفين إضافيين بعد البيانات - حرف إرجاع (ASCII 13، أو "\r") وحرف السطر الجديد (ASCII 10، أو "\n").

سيُخرج المثال 1 والمثال 2 نفس الشيء إلى المنفذ:

كثافة العمليات ب = 79؛
Serial.print (ب، ديسمبر)؛ // سيتم إخراج السلسلة "79" إلى المنفذ
Serial.print("\r\n"); // سيعرض الأحرف "\r\n" - تغذية السطر
Serial.print(b, HEX); // سيتم إخراج السلسلة "4F" إلى المنفذ
Serial.print("\r\n");// سوف يطبع الأحرف "\r\n" - تغذية السطر

كثافة العمليات ب = 79؛
Serial.println (ب، ديسمبر)؛ // سيتم إخراج السلسلة "79\r\n" إلى المنفذ
Serial.println(b, HEX); // سيتم إخراج السلسلة "4F\r\n" إلى المنفذ

في شاشة المنفذ التسلسلي نحصل عليه.