- المواد المطلوبة:
- مخطط الرسم البياني:
- تشغيل الإعداد الخاص بك:
- برمجة اردوينو الخاص بك:
- تحضير تطبيق Android باستخدام المعالجة:
- عمل ميل اردوينو:
و MPU6050 هو IC 3 محاور التسارع وجيروسكوب 3 محاور مجتمعة في وحدة واحدة. كما أنه يحتوي على مستشعر درجة الحرارة و DCM لأداء مهمة معقدة. يستخدم MPU6050 بشكل شائع في بناء الطائرات بدون طيار وغيرها من الروبوتات البعيدة مثل الروبوت ذاتي التوازن. في هذا المشروع سوف نتعلم كيفية استخدام MPU6050 مبني على مقياس الميل أو مستوي الروح. كما نعلم يتم استخدام مقياس الميل للتحقق مما إذا كان السطح مستويًا تمامًا أم لا ، فهو متاح إما على شكل فقاعات روح أو كمقاييس رقمية. في هذا المشروع ، سنقوم ببناء مقياس ميل رقمي يمكن مراقبته باستخدام تطبيق Android. السبب في استخدام شاشة عن بُعد مثل الهاتف المحمول هو أنه يمكننا مراقبة القيم من MPU6050 دون الحاجة إلى إلقاء نظرة على الجهاز ، وسيكون هذا مفيدًا جدًا عند وضع MPU6050 على طائرة بدون طيار أو في بعض المواقع الأخرى التي يتعذر الوصول إليها.
المواد المطلوبة:
- اردوينو برو ميني (5 فولت)
- مستشعر جيروسكوبي MPU6050
- وحدة بلوتوث HC-05 أو HC-06
- مجلس FTDI
- اللوح
- توصيل الأسلاك
- هاتف ذكي
مخطط الرسم البياني:
يظهر أدناه مخطط الدائرة الكاملة لمشروع Arduino Tilt Sensor Project. تحتوي فقط على ثلاثة مكونات فقط ويمكن بناؤها بسهولة فوق اللوح.
و تتواصل MPU6050 بمساعدة I2C وبالتالي دبوس SDA متصلة دبوس A4 من اردوينو وهو دبوس SDA وتوصيل دبوس SCL إلى دبوس A5 من اردوينو. و بلوتوث وحدة HC-06 يعمل بمساعدة الاتصالات المسلسل ومن ثم يتم توصيل دبوس آر إكس بلوتوث لD11 دبوس وتوصيل دبوس تكساس بلوتوث لD10 دبوس من اردوينو. سيتم تكوين هذين الدبوسين D10 و D11 كدبوس تسلسلي عن طريق برمجة Arduino. تعمل الوحدة النمطية HC-05 والوحدة MSP6050 على + 5 فولت ومن ثم يتم تشغيلهما بواسطة دبوس Vcc الخاص بـ Arduino كما هو موضح أعلاه.
لقد استخدمت بعض الأسلاك التي تربط اللوح وقمت ببناء الإعداد على لوح توصيل صغير. بمجرد الانتهاء من الاتصالات ، يبدو لوحتي كما يلي.
تشغيل الإعداد الخاص بك:
يمكنك إما تشغيل دائرتك من خلال لوحة برمجة FTDI كما فعلت ، أو استخدام بطارية 9 فولت أو محول 12 فولت وتوصيله بالدبوس الخام في Arduino pro mini. يحتوي Arduino Pro-mini على منظم جهد داخلي يمكنه تحويل هذا الجهد الخارجي المنظم + 5V.
برمجة اردوينو الخاص بك:
بمجرد أن يصبح الجهاز جاهزًا ، يمكننا البدء في برمجة Arduino. كما هو الحال دائمًا ، يمكن العثور على الكود الكامل لهذا المشروع في أسفل هذه الصفحة. لكن لفهم المشروع بشكل أفضل ، قمت بتقسيم الكود إلى ثنايا صغيرة وشرحتها بالخطوات أدناه.
ستكون الخطوة الأولى هي ربط MPU6050 مع Arduino. بالنسبة لهذا المشروع ، سنستخدم المكتبة التي طورتها Korneliusz والتي يمكن تنزيلها من الرابط أدناه
MPU6050 ليبرتي - كورنليوس جارزبسكي
قم بتنزيل ملف ZIP وأضفه إلى Arduino IDE. ثم توجه إلى File-> Examples-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . سيؤدي هذا إلى فتح مثال البرنامج الذي يستخدم المكتبة التي قمنا بتنزيلها للتو. لذا انقر فوق تحميل وانتظر حتى يتم تحميل البرنامج على Arduino Pro mini. بمجرد الانتهاء من ذلك ، افتح الشاشة التسلسلية واضبط معدل الباود على 115200 وتحقق مما إذا كنت تحصل على ما يلي.
في البداية ، ستكون جميع القيم الثلاث صفرًا ، ولكن أثناء تحريك لوح التجارب ، يمكنك ملاحظة تغيير هذه القيم. إذا قاموا بتغيير هذا يعني أن اتصالك صحيح ، وإلا تحقق من اتصالاتك. خذ بعض الوقت هنا ولاحظ كيف تختلف القيم الثلاث Pitch Roll و Yaw وفقًا لطريقة إمالة المستشعر. إذا شعرت بالارتباك ، فاضغط على زر إعادة الضبط على Arduino وسيتم تهيئة القيم إلى الصفر مرة أخرى ، ثم قم بإمالة المستشعر في اتجاه واحد وتحقق من القيم المتغيرة. ستساعدك الصورة أدناه على فهم أفضل.
من بين هذه المعايير الثلاثة ، نحن مهتمون فقط بـ Roll and Pitch. فإن قيمة لفة تخبرنا عن الميل في X-محور والقيمة الملعب سوف تخبرنا عن الميل في Y-المحور. الآن بعد أن فهمنا الأساسيات ، دعنا نبدأ فعليًا في برمجة Arduino لقراءة هذه القيم ، أرسلها إلى Arduino عبر Bluetooth. كما هو الحال دائمًا ، لنبدأ بتضمين جميع المكتبات اللازمة لهذا المشروع
#تضمن
ثم نقوم بتهيئة البرنامج التسلسلي لوحدة Bluetooth. هذا ممكن بسبب مكتبة Software Serial في Arduino ، يمكن برمجة دبابيس IO للعمل كدبابيس تسلسلية. نحن هنا نستخدم الدبابيس الرقمية D10 و D11 ، حيث يكون D10 id Rx و D11 هو Tx.
SoftwareSerial BT (10 ، 11) ؛ // RX ، TX
بعد ذلك ، نقوم بتهيئة المتغيرات والكائنات اللازمة للبرنامج والانتقال إلى وظيفة الإعداد () حيث نحدد معدل البث بالباود للشاشة التسلسلية والبلوتوث. بالنسبة إلى HC-05 و HC-06 ، يكون معدل البث بالباود 9600 لذا فمن الضروري استخدام نفس السرعة. ثم نتحقق مما إذا كان ناقل IIC الخاص بـ Arduino متصلاً بـ MPU6050 إذا لم نطبع رسالة تحذير ونبقى هناك طالما أن الجهاز متصل. بعد ذلك ، نقوم بمعايرة الدوران وتعيين قيم العتبة الخاصة به باستخدام وظائفه الخاصة كما هو موضح أدناه.
إعداد باطل () {Serial.begin (115200) ؛ BT.begin (9600) ؛ // بدء اتصال Bluetooth بسرعة 9600 باود // تهيئة MPU6050 بينما (! mpu.begin (MPU6050_SCALE_2000DPS، MPU6050_RANGE_2G)) {Serial.println ("تعذر العثور على مستشعر MPU6050 صالح ، تحقق من الأسلاك!") ؛ تأخير (500) ؛ } mpu.calibrateGyro () ، // معايرة الجيروسكوب أثناء بدء mpu.setThreshold (3) ؛ // يتحكم في الحساسية}
السطر " mpu.calibrateGyro () ؛" قم بمعايرة MPU6050 للوضع الذي تم وضعه فيه حاليًا. يمكن استدعاء هذا الخط عدة مرات داخل البرنامج كلما احتاجت MPU6050 إلى المعايرة وتعيين جميع القيم على الصفر. "mpu.setThreshold (3) ؛" تتحكم هذه الوظيفة في مقدار اختلاف القيمة للحركة على المستشعر ، وستزيد القيمة المنخفضة جدًا من الضوضاء ، لذا كن حذرًا أثناء العبث بهذا.
داخل الحلقة الفارغة () ، قرأنا مرارًا قيم الجيروسكوب ومستشعر درجة الحرارة وحساب قيمة الملعب واللف والانعراج ، وإرسالها إلى وحدة Bluetooth. سيقرأ السطران التاليان قيم الدوران الخام وقيمة درجة الحرارة
معيار المتجه = mpu.readNormalizeGyro () ، temp = mpu.readTemperature () ؛
بعد ذلك ، نحسب الميل واللف والانعراج عن طريق الضرب في الخطوة الزمنية وإضافتها إلى القيم السابقة. A خطوة زمنية ليست سوى الفاصلة بين قراءات متتالية.
الملعب = الملعب + المعيار. YAxis * timeStep ؛ لفة = لفة + القاعدة. ياو = الانحراف + القاعدة. ZAxis * timeStep ؛
لفهم الخطوة الزمنية بشكل أفضل ، دعنا نلقي نظرة على السطر أدناه. يتم وضع هذا الخط لقراءة القيم من MPU6050 بالضبط عند فاصل زمني قدره 10 مللي ثانية أو 0.01 ثانية. لذلك نعلن أن قيمة timeStep هي 0.01. واستخدم السطر أدناه لتثبيت البرنامج إذا كان هناك المزيد من الوقت المتبقي. (مللي () - المؤقت ()) يعطي الوقت المستغرق لتنفيذ البرنامج حتى الآن. نطرحه فقط مع 0.01 ثانية وفي الوقت المتبقي ، نضع برنامجنا هناك باستخدام وظيفة التأخير.
تأخير ((timeStep * 1000) - (مللي () - مؤقت)) ؛
بمجرد أن ننتهي من قراءة القيم وحسابها ، يمكننا إرسالها إلى هاتفنا عبر البلوتوث. ولكن هناك مشكلة هنا. يمكن لوحدة البلوتوث التي نستخدمها إرسال 1 بايت فقط (8 بتات) مما يسمح لنا بإرسال أرقام فقط من 0 إلى 255. لذلك علينا تقسيم قيمنا وتعيينها داخل هذا النطاق. يتم ذلك من خلال الأسطر التالية
إذا (لفة> -100 & لفة <100) × = خريطة (لفة ، -100 ، 100 ، 0 ، 100) ؛ إذا (الملعب> -100 && الملعب <100) ص = الخريطة (الملعب ، -100 ، 100 ، 100 ، 200) ؛ إذا (temp> 0 && temp <50) t = 200 + int (temp) ؛
كما يمكنك معرفة ذلك ، يتم تعيين قيمة التدحرج إلى 0 إلى 100 في المتغير x ويتم تعيين درجة الصوت إلى 100 إلى 200 في المتغير y ويتم تعيين درجة الحرارة إلى 200 وما فوق في المتغير t. يمكننا استخدام نفس المعلومات لاسترداد البيانات مما أرسلناه. أخيرًا نكتب هذه القيم عبر البلوتوث باستخدام الأسطر التالية.
BT.write (x) ؛ BT.write (ذ) ؛ BT.write (ر) ؛
إذا كنت قد فهمت البرنامج الكامل ، فانتقل لأسفل لإلقاء نظرة على البرنامج وتحميله على لوحة Arduino.
تحضير تطبيق Android باستخدام المعالجة:
تم تطوير تطبيق Android لجهاز Arduino Inclinometer باستخدام معالجة IDE. هذا يشبه إلى حد كبير Arduino ويمكن استخدامه لإنشاء تطبيق النظام وتطبيق Android وتصميمات الويب وغير ذلك الكثير. لقد استخدمنا المعالجة بالفعل لتطوير بعض مشاريعنا الرائعة الأخرى المدرجة أدناه
- لعبة بينج بونج باستخدام اردوينو
- راديو FM يتم التحكم فيه بواسطة الهاتف الذكي باستخدام المعالجة.
- نظام رادار اردوينو باستخدام معالجة ومستشعر فوق صوتي
ومع ذلك ، لا يمكن شرح الكود الكامل حول كيفية إنشاء هذا التطبيق. إذن لديك طريقتان لتجاوز هذا. يمكنك إما تنزيل ملف APK من الرابط أدناه وتثبيت تطبيق android مباشرة على هاتفك. أو قم بالتمرير أدناه للعثور على رمز المعالجة الكامل وتعلم بنفسك كيف يعمل
داخل ملف ZIP ، يمكنك العثور على مجلد يسمى البيانات والذي يتكون من جميع الصور والمصادر الأخرى التي سيتم تحميلها في تطبيق android. يحدد السطر أدناه الاسم الذي يجب أن تتصل به البلوتوث تلقائيًا
bt.connectToDeviceByName ("HC-06") ؛
داخل وظيفة draw () ، سيتم تنفيذ الأشياء بشكل متكرر هنا نقوم برسم الصور وعرض النص وتحريك الأشرطة استنادًا إلى القيم التي تشكل وحدة Bluetooth. يمكنك التحقق مما يحدث داخل كل وظيفة من خلال قراءة البرنامج.
رسم باطل () // الحلقة اللانهائية {الخلفية (0) ؛ imageMode (CENTER) ، الصورة (الشعار ، العرض / 2 ، الارتفاع / 1.04 ، العرض ، الارتفاع / 12) ؛ تحميل الصور()؛ textfun () ؛ getval () ؛ }
أخيرًا ، هناك شيء آخر مهم يجب شرحه ، تذكر أننا قمنا بتقسيم قيمة الدرجة واللف والدرجة الحرارة إلى 0 إلى 255. لذا نعيدها مرة أخرى إلى القيم العادية عن طريق عكسها إلى القيم العادية.
if (info <100 && info> 0) x = map (info، 0، 100، - (width / 1.5) / 3، + (width / 1.5) / 3)؛ // x = info؛ وإلا إذا (المعلومات <200 && info> 100) y = خريطة (معلومات ، 100 ، 200 ، - (العرض / 4.5) /0.8 ، + (العرض / 4.5) /0.8) ؛ // y = info ؛ وإلا إذا (المعلومات> 200) temp = info -200 ؛ println (درجة الحرارة ، س ، ص) ؛
هناك طرق أفضل بكثير لنقل البيانات من وحدة Bluetooth إلى الهاتف ، ولكن نظرًا لأن هذا مجرد مشروع هواية تجاهلناه ، يمكنك البحث بعمق إذا كنت مهتمًا.
عمل ميل اردوينو:
بعد أن تصبح جاهزًا مع الأجهزة والتطبيق ، حان الوقت للاستمتاع بما قمنا ببنائه. قم بتحميل كود Arduino على اللوحة ، يمكنك أيضًا إزالة التعليقات الموجودة على خطوط Serial.println والتحقق مما إذا كان الجهاز يعمل كما هو متوقع باستخدام الشاشة التسلسلية. على أي حال ، هذا اختياري تمامًا.
بمجرد تحميل الرمز ، قم بتشغيل تطبيق Android على هاتفك المحمول. يجب أن يتصل التطبيق تلقائيًا بوحدة HC-06 الخاصة بك وسيعرض "Connect to: HC-06" أعلى التطبيق كما هو موضح أدناه.
في البداية ، ستكون جميع القيم صفرًا باستثناء قيمة درجة الحرارة. هذا لأن Arduino قام بمعايرة MPU-6050 لهذا الموضع كمرجع ، يمكنك الآن إمالة الجهاز والتحقق من أن القيم الموجودة على تطبيق الهاتف المحمول تتغير أيضًا مع الرسوم المتحركة. يمكن العثور على العمل الكامل للتطبيق في الفيديو أدناه. يمكنك الآن وضع اللوح في أي مكان والتحقق مما إذا كان السطح مستويًا تمامًا.
آمل أن تكون قد فهمت المشروع وتعلمت منه شيئًا مفيدًا. إذا كان لديك أي شك ، فيرجى استخدام قسم التعليقات أدناه أو المنتديات لحلها.