جدول المحتويات:

التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 باستخدام HC-12: 6 خطوات
التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 باستخدام HC-12: 6 خطوات

فيديو: التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 باستخدام HC-12: 6 خطوات

فيديو: التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 باستخدام HC-12: 6 خطوات
فيديو: كيفيه السيطره على الـ Servo بستخدام Gyroscope ؟ 2024, يوليو
Anonim
التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 مع HC-12
التحكم في المؤازرة باستخدام MPU6050 بين Arduino و ESP8266 مع HC-12

في هذا المشروع ، نتحكم في موضع محرك مؤازر باستخدام 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- المرسل

الخطوة السادسة: التظاهر بالفيديو

سوف أرفق الفيديو غدا. اتبعني ليتم إخطاري.

شكرا لكم جميعا!

موصى به: