فهرست مطالب:

کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12: 6 مرحله
کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12: 6 مرحله

تصویری: کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12: 6 مرحله

تصویری: کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12: 6 مرحله
تصویری: ساخت پروژه ساعت با ESP8266 ماژول وای فای | Internet Clock Using NodeMCU ESP8266 and 16x2 LCD 2024, نوامبر
Anonim
کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12
کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12

در این پروژه ، ما موقعیت یک سرو موتور را با استفاده از mpu6050 و HC-12 برای ارتباط بین Arduino UNO و ESP8266 NodeMCU کنترل می کنیم.

مرحله 1: درباره این پروژه

این یکی دیگر از پروژه های اینترنت اشیا است که بر اساس ماژول RF HC-12 طراحی شده است. در اینجا ، داده های imu (mpu6050) arduino برای کنترل سرو موتور (متصل به Nodemcu) استفاده می شود. در اینجا ، تجسم داده ها نیز در سمت آردوینو انجام می شود که در آن داده های گام mpu6050 (چرخش در محور X) با یک طرح پردازش تجسم می شود (بعداً بحث شد). اساساً این پروژه برای به خاطر سپردن جنبه های مختلف کنترل Imu & Servo با Arduino و ESP8266 nodemcu فقط کمی گرم است.

هدف، واقعگرایانه

هدف از این بسیار واضح ، ما در حال کنترل موقعیت موتور سروو با استفاده از مقدار گام IMU هستیم. و همه با هم این گام و موقعیت موتور هماهنگ با پردازش تجسم می شود.

مرحله 2: سخت افزار مورد نیاز است

ماژول NodeMCU ESP8266 12E Wifi

تخته نان بدون لحیم

سیم جامپر

MPU6050 accelo+ژیروسکوپ

ماژول های HC-12 RF (جفت)

سروو موتور SG90

مرحله 3: مدار و اتصالات

مدار و اتصالات
مدار و اتصالات
مدار و اتصالات
مدار و اتصالات

اتصالات مستقیماً جلو می روند. شما می توانید سروو را با 3.3 ولت Nodemcu خود تغذیه کنید. اگر nodemcu شما ولتاژ زیادی روی آن پین دارد ، می توانید از Vin برای تغذیه سروو استفاده کنید. اما بیشتر تخته های لولین 5V در Vin ندارند (بستگی به سازنده دارد).

این نمودارهای مدار با استفاده از EasyADA ساخته شده اند.

مرحله 4: کار کردن

کار کردن
کار کردن

به محض شروع طرح آردوینو ، زاویه گام (که از 45- تا 45 متغیر است) را به گیرنده hc12 Nodemcu ارسال می کند که با موقعیت سرو 0 تا 180 درجه ترسیم می شود. در اینجا ما از زاویه گام از -45 تا +45 درجه استفاده کردیم تا بتوانیم آن را به راحتی در موقعیت سرو قرار دهیم.

اکنون ، شما در فکر این هستید که چرا می توانیم به سادگی از روش نقشه به شرح زیر استفاده کنیم:-

int pos = نقشه (val ، -45 ، 45 ، 0 ، 180) ؛

زیرا زاویه منفی ارسال شده توسط فرستنده hc12 به صورت زیر دریافت می شود:

نیمه اول: (T) 0 تا 45 => 0 تا 45 (R)

نیمه دوم: (T) -45 تا -1 => 255 تا 210 (R)

بنابراین باید آن را روی 0 تا 180 به عنوان نقشه قرار دهید

if (val> = 0 && val <= 45) pos = (val*2) +90 ؛ else pos = (val-210)*2؛

من به دلیل خطای نامربوط از روش نقشه اجتناب می کنم. می توانید آن را امتحان کنید و نظر دهید که با شما کار می کند

if (val> = 0 && val <= 45) pos = map (val، 0، 45، 90، 180)؛ else pos = map (val، 255، 210، 0، 90)؛ // آرگومان چهارم می تواند 2 باشد (می توانید بررسی کنید)

MPU6050 محاسبه زاویه گام

من از کتابخانه MPU6050_tockn استفاده می کنم که بر اساس ارائه داده های خام از IMU است.

int pitchAngle = mpu6050.getAngleX ()

این امر زاویه چرخش در مورد محور x را برای ما به ارمغان می آورد. همانطور که در شکل مشاهده کردید ، imu من به صورت عمودی روی تخته نان قرار داده شده است ، بنابراین با زمین و رول اشتباه نگیرید. در واقع شما همیشه باید محور را بر روی صفحه بریکت چاپ کنید.

از طریق این کتابخانه ، نیازی نیست در مورد الکترونیک داخلی خواندن ثبت های خاص برای عملکرد خاص زحمت بکشید. شما فقط کار را مشخص کرده و کارتان تمام شده است!

Btw اگر می خواهید زاویه را خودتان محاسبه کنید. به راحتی می توانید این کار را به شرح زیر انجام دهید:

#عبارتند از

const int MPU6050_addr = 0x68؛ int16_t AcX، AcY، AcZ، Temp، GyroX، GyroY، GyroZ؛ void setup () {Wire.begin ()؛ Wire.beginTransmission (MPU6050_addr) ؛ Wire.write (0x6B) ؛ Wire.write (0) ؛ Wire.endTransmission (درست) ؛ Serial.begin (9600)؛ } void loop () {Wire.beginTransmission (MPU6050_addr)؛ Wire.write (0x3B) ؛ Wire.endTransmission (false) ؛ سیم. درخواست از (MPU6050_addr، 14، true)؛ AcX = Wire.read () << 8 | Wire.read ()؛ AcY = Wire.read () << 8 | Wire.read ()؛ AcZ = Wire.read () << 8 | Wire.read ()؛ Temp = 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 = نقشه (AcX ، minVal ، maxVal ، -90 ، 90) ؛ int yAng = نقشه (AcY ، minVal ، maxVal ، -90 ، 90) ؛ int zAng = نقشه (AcZ، minVal، maxVal، -90، 90)؛ x = RAD_TO_DEG * (atan2 (-yAng ، -zAng)+PI) ؛ y = RAD_TO_DEG * (atan2 (-xAng ، -zAng)+PI) ؛ z = RAD_TO_DEG * (atan2 (-yAng ، -xAng)+PI) ؛ Serial.print ("AngleX =")؛ // Pitch Serial.println (x)؛ Serial.print ("AngleY =")؛ // Roll Serial.println (y) ؛ Serial.print ("AngleZ =")؛ // Yaw Serial.println (z)؛ }

اما ، برای بدست آوردن زاویه لازم نیست که اینقدر کد بنویسید. شما باید حقایق پشت صحنه را بدانید اما استفاده از کتابخانه افراد دیگر در بسیاری از پروژه ها بسیار مثر است. برای دریافت اطلاعات فیلتر شده بیشتر از پیوند زیر می توانید در مورد این imu و سایر تقریب ها بخوانید: Explore-mpu6050.

کد آردوینو من در انتهای فرستنده تنها 30 خط با کمک کتابخانه MPU6050_tockn دارد بنابراین استفاده از کتابخانه خوب است مگر اینکه نیازی به تغییرات اساسی در عملکرد IMU نداشته باشید. اگر می خواهید برخی از داده های فیلتر شده را با استفاده از DMP (پردازشگر حرکت دیجیتال) IMU بخواهید ، کتابخانه ای به نام I2Cdev توسط Jeff Rowberg بسیار مفید است.

ادغام با پردازش

در اینجا پردازش برای تجسم داده های چرخشی در مورد محور x IMU که توسط داده های خام حاصل از MPU6050 محاسبه می شود ، استفاده می شود. ما داده های خام ورودی را در SerialEvent به روش زیر دریافت می کنیم:

void serialEvent (Serial myPort) {

inString = myPort.readString ()؛ سعی کنید {// تجزیه داده ها // println (inString) ؛ رشته 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 ("استثنا گرفتار")؛ }}

در اینجا می توانید تجسم را در تصویر پیوست شده در این مرحله مشاهده کنید. داده های موقعیت دریافت شده در انتهای nodemcu نیز همانطور که در تصویر نشان داده شده است در مانیتور سریال دیده می شود.

مرحله 5: کد

مخزن github را ضمیمه کرده ام. می توانید آن را کلون و فورک کنید تا در پروژه های خود استفاده کنید.

my_code

این repo شامل 2 طرح arduino برای فرستنده (arduino+IMU) و گیرنده (Nodemcu+Servo) است.

و یک طرح پردازش. اگر این کار به پروژه شما کمک کرد ، repo را ستاره گذاری کنید.

در این دستورالعمل ،

R- گیرنده و T- فرستنده

مرحله 6: نمایش ویدئو

فردا ویدیو را ضمیمه می کنم. من را دنبال کنید تا مطلع شوید.

با تشکر از همه شما!

توصیه شده: