فهرست مطالب:
- مرحله 1: درباره این پروژه
- مرحله 2: سخت افزار مورد نیاز است
- مرحله 3: مدار و اتصالات
- مرحله 4: کار کردن
- مرحله 5: کد
- مرحله 6: نمایش ویدئو
تصویری: کنترل سروو با استفاده از MPU6050 بین آردوینو و ESP8266 با HC-12: 6 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
در این پروژه ، ما موقعیت یک سرو موتور را با استفاده از 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: نمایش ویدئو
فردا ویدیو را ضمیمه می کنم. من را دنبال کنید تا مطلع شوید.
با تشکر از همه شما!
توصیه شده:
آموزش استفاده از آردوینو در داخل سروو و نحوه استفاده از آن: 6 مرحله
در داخل یک سروو و نحوه استفاده از آموزش کامل آردوینو: در این آموزش ، بیایید بررسی کنیم که این سرویس ویدئویی به چه صورت است
دیوار نصب برای IPad به عنوان کنترل پنل اتوماسیون خانگی ، با استفاده از آهنربای کنترل شده سروو برای فعال کردن صفحه: 4 مرحله (همراه با تصاویر)
دیوار نصب برای IPad به عنوان کنترل پنل اتوماسیون خانگی ، با استفاده از آهنربای کنترل شده سروو برای فعال کردن صفحه: اخیراً من زمان زیادی را صرف خودکارسازی وسایل داخل و اطراف خانه ام کرده ام. من از Domoticz به عنوان برنامه اتوماسیون خانگی خود استفاده می کنم ، برای جزئیات به www.domoticz.com مراجعه کنید. در جستجوی یک برنامه داشبورد که تمام اطلاعات Domoticz را نشان می دهد
آموزش شتاب سنج آردوینو: کنترل پل کشتی با استفاده از سروو موتور: 5 مرحله
آموزش شتاب سنج آردوینو: کنترل پل کشتی با استفاده از موتور سروو: سنسورهای شتاب سنج در اکثر تلفن های هوشمند ما وجود دارد تا طیف وسیعی از کاربردها و قابلیت هایی را که روزانه از آنها استفاده می کنیم به آنها ارائه دهیم ، حتی بدون اینکه بدانیم مسئول شتاب سنج است. یکی از این قابلیت ها قابلیت کنترل
آموزش آردوینو - کنترل موتور سروو با آردوینو: 5 مرحله
آموزش آردوینو - کنترل موتور سروو با آردوینو: این دستورالعمل نسخه مکتوب & quot؛ آردوینو: نحوه کنترل سروو موتور با آردوینو & quot؛ ویدیوی YouTube که اخیراً بارگذاری کرده ام. من اکیداً به شما توصیه می کنم که آن را بررسی کنید. از کانال YouTube دیدن کنید
رابط کاربری Android (remotexy) برای کنترل موتور سروو با استفاده از آردوینو و بلوتوث: 7 مرحله (همراه با تصاویر)
رابط کاربری Android (remotexy) برای کنترل موتور سروو با استفاده از آردوینو و بلوتوث: در این دستورالعمل سریع به شما این امکان را می دهم تا رابط کاربری Android را با استفاده از Remotexy Interface Maker برای کنترل سرو موتور متصل به Arduino Mega از طریق بلوتوث انجام دهید. این ویدئو نشان می دهد که چگونه UI سرعت و موقعیت سرو موتور را کنترل می کند