جدول المحتويات:
- الخطوة 1: حول هذا المشروع
- الخطوة 2: الأجهزة المطلوبة
- الخطوة 3: الدائرة والتوصيلات
- الخطوة 4: العمل
- الخطوة 5: الكود
- الخطوة السادسة: التظاهر بالفيديو
فيديو: التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 باستخدام HC-12: 6 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
في هذا المشروع ، نتحكم في موضع محرك مؤازر باستخدام mpu6050 و HC-12 للاتصال بين Arduino UNO و ESP8266 NodeMCU.
الخطوة 1: حول هذا المشروع
إنه مشروع إنترنت الأشياء آخر يعتمد على وحدة HC-12 RF. هنا ، تُستخدم بيانات imu (mpu6050) من arduino للتحكم في محرك سيرفو (متصل بـ Nodemcu). هنا ، يتم إجراء تصور البيانات أيضًا على جانب اردوينو حيث يتم تصور بيانات درجة mpu6050 (الدوران حول المحور السيني) مع رسم معالجة (تمت مناقشته لاحقًا). في الأساس ، يعد هذا المشروع مجرد إحماء بسيط لتذكر الجوانب المختلفة للتحكم في Imu & Servo باستخدام Arduino و ESP8266 nodemcu.
هدف
الهدف من هذا واضح جدًا ، نحن نتحكم في موضع محرك سيرفو باستخدام قيمة الملعب لـ IMU. وكل هذا معًا يتم تصور هذه الخطوة وموضع المحرك المتزامن مع المعالجة.
الخطوة 2: الأجهزة المطلوبة
وحدة واي فاي NodeMCU ESP8266 12E
لوح لحام
سلك العبور
MPU6050 تسريع + الدوران
وحدات HC-12 RF (زوج)
محرك سيرفو SG90
الخطوة 3: الدائرة والتوصيلات
الاتصالات مباشرة إلى الأمام. يمكنك تشغيل المؤازرة بـ 3.3 فولت من Nodemcu الخاص بك. يمكنك أيضًا استخدام Vin لتشغيل المؤازرة إذا كان nodemcu الخاص بك يحتوي على هذا القدر من الجهد على هذا الدبوس. لكن معظم لوحات Lolin لا تحتوي على 5 فولت في Vin (يعتمد على الشركة المصنعة).
تم عمل مخططات الدوائر هذه باستخدام EasyADA.
الخطوة 4: العمل
بمجرد أن يبدأ رسم اردوينو ، سيرسل زاوية الملعب (التي تتراوح من -45 إلى 45) إلى مستقبل hc12 الخاص بـ Nodemcu الذي يتم تعيينه من 0 إلى 180 درجة مع وضع مؤازر. استخدمنا هنا زاوية الملعب من -45 إلى +45 درجة حتى نتمكن من تعيين ذلك بسهولة إلى موضع المؤازرة.
الآن ، أنت تفكر لماذا يمكننا ببساطة استخدام طريقة الخريطة على النحو التالي: -
int pos = map (val، -45، 45، 0، 180) ؛
لأن الزاوية السالبة التي يرسلها جهاز الإرسال hc12 يتم تلقيها على النحو التالي:
النصف الأول: (T) من 0 إلى 45 => 0 إلى 45 (R)
النصف الثاني: (T) -45 إلى -1 => 255 إلى 210 (R)
لذلك عليك تعيينها إلى 0 إلى 180 على النحو التالي
إذا (val> = 0 && val <= 45) pos = (val * 2) +90 ؛ آخر نقاط البيع = (val-210) * 2 ؛
أنا أتجنب طريقة الخريطة بسبب خطأ غير ذي صلة. يمكنك تجربة ذلك والتعليق أنه يعمل معك
إذا (val> = 0 && val <= 45) pos = map (val ، 0 ، 45 ، 90 ، 180) ؛ آخر pos = map (val، 255، 210، 0، 90) ؛ // يمكن أن تكون الوسيطة الرابعة 2 (يمكنك التحقق)
MPU6050 حساب زاوية الملعب
أنا أستخدم مكتبة MPU6050_tockn التي تعتمد على إعطاء بيانات أولية من IMU.
int pitchAngle = mpu6050.getAngleX ()
هذا سيحصل على زاوية الدوران حول المحور x. كما ترى في الشكل ، يتم وضع imu عموديًا على لوح التجارب ، لذا لا تخلط بينه وبين الملعب واللف. في الواقع ، يجب أن ترى دائمًا المحور مطبوعًا على لوحة الاختراق.
من خلال هذه المكتبة ، لا داعي للقلق بشأن الإلكترونيات الداخلية لقراءة سجلات محددة لعملية معينة. أنت فقط تحدد الوظيفة وأنت انتهيت!
راجع للشغل إذا كنت تريد حساب الزاوية بنفسك. يمكنك القيام بذلك بسهولة على النحو التالي:
#يشمل
const int MPU6050_addr = 0x68 ؛ int16_t AcX، AcY، AcZ، Temp، GyroX، GyroY، GyroZ؛ إعداد باطل () {Wire.begin () ؛ Wire.beginTransmission (MPU6050_addr) ؛ Wire.write (0x6B) ؛ Wire.write (0) ؛ Wire.endTransmission (صحيح) ؛ Serial.begin (9600) ؛ } حلقة فارغة () {Wire.beginTransmission (MPU6050_addr) ؛ Wire.write (0x3B) ؛ Wire.endTransmission (خطأ) ؛ Wire.request From (MPU6050_addr، 14، true) ؛ AcX = Wire.read () << 8 | Wire.read () ؛ AcY = Wire.read () << 8 | Wire.read () ؛ AcZ = Wire.read () << 8 | Wire.read () ؛ درجة الحرارة = Wire.read () << 8 | Wire.read () ؛ GyroX = Wire.read () << 8 | Wire.read () ؛ GyroY = Wire.read () << 8 | Wire.read () ؛ GyroZ = Wire.read () << 8 | Wire.read () ؛
int xAng = map (AcX، minVal، maxVal، -90، 90) ؛ int yAng = map (AcY، minVal، maxVal، -90، 90) ؛ int zAng = map (AcZ، minVal، maxVal، -90، 90) ؛ س = RAD_TO_DEG * (atan2 (-yAng، -zAng) + PI) ؛ y = RAD_TO_DEG * (atan2 (-xAng، -zAng) + PI) ؛ ض = RAD_TO_DEG * (atan2 (-yAng ، -xAng) + PI) ؛ Serial.print ("AngleX =") ؛ // الملعب Serial.println (x) ؛ Serial.print ("AngleY =") ؛ // Roll Serial.println (y) ؛ Serial.print ("AngleZ =") ؛ // ياو Serial.println (ض) ؛ }
لكن ليس من الضروري أن تكتب هذا القدر من الكود للحصول على الزاوية. يجب أن تعرف الحقائق وراء الكواليس ولكن استخدام مكتبة لأشخاص آخرين فعال للغاية في العديد من المشاريع. يمكنك أن تقرأ عن هذا imu والوسائل الأخرى للحصول على المزيد من البيانات المرشحة من الرابط التالي: Explore-mpu6050.
يحتوي كود اردوينو الخاص بي في نهاية الإرسال على 30 سطرًا فقط بمساعدة مكتبة MPU6050_tockn ، لذا فإن استخدام مكتبة جيد ما لم تكن بحاجة إلى بعض التغييرات الأساسية في وظائف IMU. تعد المكتبة المسماة I2Cdev بواسطة Jeff Rowberg مفيدة جدًا إذا كنت تريد بعض البيانات التي تمت تصفيتها باستخدام DMP (معالج الحركة الرقمية) الخاص بوحدة IMU.
التكامل مع المعالجة
تُستخدم المعالجة هنا لتصور بيانات الدوران حول المحور x لوحدة IMU كما تم حسابها بواسطة البيانات الأولية القادمة من MPU6050. نتلقى البيانات الأولية الواردة في SerialEvent بالطريقة التالية:
serialEvent باطلة (Serial myPort) {
inString = myPort.readString () ، جرب {// تحليل البيانات // println (inString) ؛ String dataStrings = split (inString، ':')؛ if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0؛ i <dataStrings.length - 1؛ i ++) {raw = float (سلاسل البيانات [i + 1]) ؛ }} else {println (inString)؛ }}} catch (استثناء هـ) {println ("Caught Exception")؛ }}
هنا يمكنك رؤية التصور في الصورة المرفقة في هذه الخطوة. تظهر بيانات الموضع المستلمة في نهاية nodemcu أيضًا على الشاشة التسلسلية كما هو موضح في الصورة.
الخطوة 5: الكود
لقد أرفقت مستودع جيثب. يمكنك استنساخه وشوكة لاستخدامه في مشاريعك.
رمز بلدي
يتضمن الريبو 2 رسم اردوينو لجهاز الإرسال (اردوينو + IMU) وجهاز الاستقبال (Nodemcu + Servo).
ورسم معالجة واحد. قم بتمييز الريبو بنجمة إذا كان هذا يساعد في مشروعك.
في هذا الدليل ،
R- المتلقي و T- المرسل
الخطوة السادسة: التظاهر بالفيديو
سوف أرفق الفيديو غدا. اتبعني ليتم إخطاري.
شكرا لكم جميعا!
موصى به:
التحكم في الستائر باستخدام ESP8266 ، التكامل بين Google Home و Openhab والتحكم في الويب: 5 خطوات (بالصور)
التحكم في الستائر باستخدام ESP8266 ، التكامل بين Google Home و Openhab والتحكم في الويب: في هذا Instructable ، أوضح لك كيف أضفت الأتمتة إلى الستائر الخاصة بي. أردت أن أكون قادرًا على إضافة وإزالة الأتمتة ، لذلك يتم تثبيت كل التثبيت. الأجزاء الرئيسية هي: محرك متدرج يتحكم سائق السائر bij ESP-01 والعتاد والتركيب
التثبيت على الحائط لجهاز IPad كلوحة تحكم في التشغيل الآلي للمنزل ، باستخدام مغناطيس يتم التحكم فيه عن طريق المؤازرة لتنشيط الشاشة: 4 خطوات (بالصور)
التثبيت على الحائط لجهاز IPad كلوحة تحكم في التشغيل الآلي للمنزل ، باستخدام مغناطيس يتم التحكم فيه بواسطة أجهزة مؤازرة لتنشيط الشاشة: لقد أمضيت مؤخرًا بعض الوقت في أتمتة الأشياء في منزلي وحوله. أنا أستخدم Domoticz كتطبيق أتمتة المنزل الخاص بي ، راجع www.domoticz.com للحصول على التفاصيل. في بحثي عن تطبيق لوحة تحكم يعرض جميع معلومات Domoticz
مهايئ اندلاع وحدة التحكم PS2 للتفاعل بين الأردوينو: 10 خطوات
PS2 Controller Breakout Adapter لـ Arduino Interfacing: تعد وحدة تحكم PlayStation 2 لوحة ألعاب مفيدة حقًا لمشاريع الروبوتات. إنه رخيص ومتوفر بكثرة (مستعمل) ، ويحتوي على مجموعة من الأزرار ومتوافق مع Arduino! لاستخدامه ، أنت بحاجة إلى موصل خاص لتوصيله بـ
ساعة كرة الكأس باستخدام المؤازرة: 18 خطوة
ساعة كرة الكأس باستخدام المؤازرة: تأتي الساعة بجميع الأشكال. لكني أريد أن أفعل شيئًا ما على مدار الساعة على شكل كرة جديد ، حيث يكون عقرب الاتصال الدقيق هو النصف السفلي من الكرة وعقرب الساعات هو النصف العلوي من الكرة. بادئ ذي بدء ، فكر في تحويل الساعة العادية. لكن بينما تتحرك الدقائق ساعة
وحدة التحكم المؤازرة التسلسلية القائمة على Arduino: 6 خطوات
وحدة التحكم المؤازرة التسلسلية القائمة على Arduino: هذه وحدة تحكم تسلسلية بسيطة للعديد من الماكينات القائمة على Arduino. (أول تعليمات لي أيضًا :)) جاء معظم العمل في هذا من جعل البرنامج يتحدث مع اردوينو وعمل بروتوكول لتمرير البيانات. كـ و