فهرست مطالب:

پروژه قطب نمای دیجیتال آردوینو: 3 مرحله
پروژه قطب نمای دیجیتال آردوینو: 3 مرحله

تصویری: پروژه قطب نمای دیجیتال آردوینو: 3 مرحله

تصویری: پروژه قطب نمای دیجیتال آردوینو: 3 مرحله
تصویری: joystick control servo project - پروژه های آردوینو جلسه دوم 2024, جولای
Anonim
Image
Image

سلام! در این قسمت آموزشی خواهید دید که چگونه می توانید با استفاده از Arduino و Processing IDE یک قطب نما دیجیتال بسازید. این پروژه آردوینو بسیار ساده اما جالب و جالب است.

می توانید نمونه نمایشی این آموزش را در ویدئوی بالا مشاهده کنید. شما همیشه می توانید ویدیوهای جالب تری مانند این را در کانال YouTube من پیدا کنید و همچنین بسیاری از پروژه ها و آموزش های الکترونیکی را در وب سایت من ، HowToMechatronics.com پیدا کنید.

مرحله 1: قطعات مورد نیاز

برای این پروژه شما فقط به یک برد آردوینو و یک مغناطیس سنج MEMS برای اندازه گیری میدان مغناطیسی زمین نیاز دارید. من از تخته شکست GY -80 استفاده می کنم که شامل MC5883L 3 - Axis Magnetometer است.

قبل از ادامه کد منبع پروژه اگر به جزئیات بیشتری در مورد نحوه عملکرد مغناطیس سنج MEMS و همچنین نحوه اتصال و استفاده از برد شکست GY -80 از طریق ارتباط I2C نیاز دارید ، می توانید آموزش های خاص من را در این زمینه بررسی کنید.

مرحله 2: کد منبع آردوینو

آنچه ابتدا باید انجام دهیم این است که یک طرح را در برد آردوینو بارگذاری کنیم که داده ها را از مغناطیس سنج بخواند و آن را به IDE پردازش ارسال کند. در اینجا کد منبع آردوینو آمده است:

/ * Arduino Compass * * توسط Dejan Nedelkovski ، * www. HowToMechatronics.com * */

#شامل // کتابخانه آردوینو I2C

#تعریف مغناطیس سنج_mX0 0x03

#تعریف مغناطیس سنج_mX1 0x04 #تعریف مغناطیس سنج_mZ0 0x05 #تعریف مغناطیس سنج_mZ1 0x06 #مغناطیس سنج_mY0 0x07 #تعریف مغناطیس سنج_mY1 0x08

int mX0 ، mX1 ، mX_out ؛

int mY0 ، mY1 ، mY_out ؛ int mZ0 ، mZ1 ، mZ_out ؛

عنوان شناور ، عنوان درجه ، عنوان فیلتر ، انحراف ؛

شناور Xm ، Ym ، Zm ؛

#تعریف مغناطیس سنج 0x1E // آدرس I2C 7bit HMC5883

void setup () {

// راه اندازی ارتباطات سریال و I2C Serial.begin (115200) ؛ Wire.begin ()؛ تأخیر (100) ؛ Wire.beginTransmission (Magnetometer)؛ Wire.write (0x02) ؛ // انتخاب حالت ثبت نام Wire.write (0x00)؛ // حالت اندازه گیری مداوم Wire.endTransmission ()؛ }

حلقه خالی () {

// ---- X-Axis Wire.beginTransmission (Magnetometer) ؛ // انتقال به دستگاه Wire.write (Magnetometer_mX1) ؛ Wire.endTransmission ()؛ سیم. درخواست از (مغناطیس سنج ، 1) ؛ if (Wire.available () <= 1) {mX0 = Wire.read ()؛ } Wire.beginTransmission (مغناطیس سنج) ؛ // انتقال به دستگاه Wire.write (Magnetometer_mX0) ؛ Wire.endTransmission ()؛ سیم. درخواست از (مغناطیس سنج ، 1) ؛ if (Wire.available () <= 1) {mX1 = Wire.read ()؛ }

// ---- محور Y

Wire.beginTransmission (Magnetometer)؛ // انتقال به دستگاه Wire.write (Magnetometer_mY1) ؛ Wire.endTransmission ()؛ سیم. درخواست از (مغناطیس سنج ، 1) ؛ if (Wire.available () <= 1) {mY0 = Wire.read ()؛ } Wire.beginTransmission (مغناطیس سنج) ؛ // انتقال به دستگاه Wire.write (Magnetometer_mY0) ؛ Wire.endTransmission ()؛ سیم. درخواست از (مغناطیس سنج ، 1) ؛ if (Wire.available () <= 1) {mY1 = Wire.read ()؛ } // ---- Z-Axis Wire.beginTransmission (مغناطیس سنج) ؛ // انتقال به دستگاه Wire.write (Magnetometer_mZ1) ؛ Wire.endTransmission ()؛ سیم. درخواست از (مغناطیس سنج ، 1) ؛ if (Wire.available () <= 1) {mZ0 = Wire.read ()؛ } Wire.beginTransmission (مغناطیس سنج) ؛ // انتقال به دستگاه Wire.write (Magnetometer_mZ0) ؛ Wire.endTransmission ()؛ سیم. درخواست از (مغناطیس سنج ، 1) ؛ if (Wire.available () <= 1) {mZ1 = Wire.read ()؛ } // ---- محور X mX1 = mX1 << 8؛ mX_out = mX0+mX1 ؛ // داده های خام // از برگه داده: 0.92 میلی گرم/رقم Xm = mX_out*0.00092 ؛ // واحد گاوس //* میدان مغناطیسی زمین از 0.25 تا 0.65 گاوس متغیر است ، بنابراین این مقادیری است که باید تقریباً بدست آوریم.

// ---- محور Y

mY1 = mY1 << 8؛ mY_out = mY0+mY1 ؛ Ym = mY_out*0.00092 ؛

// ---- محور Z

mZ1 = mZ1 <0.073 کاهش راد = 0.073 ؛ عنوان += افول ؛ // تصحیح هنگامی که علائم مورد احترام قرار می گیرند اگر (عنوان <0) عنوان += 2*PI ؛

// تصحیح به دلیل اضافه شدن زاویه شیب

if (عنوان> 2*PI) عنوان -= 2*PI ؛

headingDegrees = عنوان * 180/PI ؛ // عنوان در واحد درجه

// صاف کردن زاویه خروجی / فیلتر کم گذر

headingFiltered = headingFiltered*0.85 + headingDerees*0.15؛

// ارسال مقدار عنوان از طریق Serial Port به Processing IDE

Serial.println (headingFiltered) ؛

تأخیر (50) ؛ }

مرحله 3: پردازش کد منبع IDE

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

در اینجا کد منبع Processing IDE آمده است:

/ * قطب نما آردوینو * * توسط دژان ندلکوفسکی ، * www. HowToMechatronics.com * */ import processing.serial. *؛ واردات java.awt.event. KeyEvent ؛ واردات java.io. IOException؛

سریال myPort ؛

PImage imgCompass؛ PImage imgCompassArrow؛ پس زمینه تصویر ؛

داده های رشته = ""؛

عنوان شناور ؛

void setup () {

اندازه (1920 ، 1080 ، P3D) ؛ صاف()؛ imgCompass = loadImage ("Compass.png")؛ imgCompassArrow = loadImage ("CompassArrow.png")؛ background = loadImage ("Background.png")؛ myPort = سریال جدید (این ، "COM4" ، 115200) ؛ // ارتباط سریال myPort.bufferUntil ('\ n') را آغاز می کند ؛ }

void draw () {

تصویر (پس زمینه ، 0 ، 0) ؛ // بارگذاری تصویر پس زمینه pushMatrix ()؛ ترجمه (عرض/2 ، ارتفاع/2 ، 0) ؛ // سیستم مختصات را به مرکز صفحه تبدیل می کند ، به طوری که چرخش درست در مرکز rotateZ (رادیان (-heading)) اتفاق می افتد. // قطب نما را در اطراف Z می چرخاند -تصویر محور (imgCompass ، -960 ، -540) ؛ // تصویر قطب نما را بارگذاری می کند و با جابجایی سیستم مختصات باید تصویر را در -960x ، -540y (نصف اندازه صفحه) popMatrix () تنظیم کنیم. // سیستم مختصات را به حالت اولیه 0 ، 0 ، 0 تصویر باز می گرداند (imgCompassArrow ، 0 ، 0) ؛ // بارگذاری تصویر CompassArrow که به دلیل عملکرد popMatrix () textSize (30) تحت تأثیر عملکرد rotateZ () قرار نمی گیرد ؛ متن ("عنوان:" + عنوان ، 40 ، 40) ؛ // مقدار عنوان را روی صفحه چاپ می کند

تأخیر (40) ؛

}

// خواندن داده ها را از پورت سریال شروع می کند

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n')؛ // داده ها را از پورت سریال می خواند و آنها را در متغیر String "data" قرار می دهد. عنوان = شناور (داده) ؛ // تبدیل مقدار String به مقدار Float}

امیدوارم از این پروژه خوشتان بیاید. اگر چنین است ، می توانید برای پروژه های جالب تر نیز از وب سایت من دیدن کنید.

توصیه شده: