Სარჩევი:

Arduino ციფრული კომპასის პროექტი: 3 ნაბიჯი
Arduino ციფრული კომპასის პროექტი: 3 ნაბიჯი

ვიდეო: Arduino ციფრული კომპასის პროექტი: 3 ნაბიჯი

ვიდეო: Arduino ციფრული კომპასის პროექტი: 3 ნაბიჯი
ვიდეო: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, ივლისი
Anonim
Image
Image

გამარჯობა! ამ ინსტრუქციებში თქვენ ნახავთ, თუ როგორ შეგიძლიათ შექმნათ ციფრული კომპასი Arduino– ს და დამუშავების IDE– ს გამოყენებით. ეს არის საკმაოდ მარტივი, მაგრამ საინტერესო და მაგარი გარეგნობის არდუინოს პროექტი.

თქვენ შეგიძლიათ ნახოთ ამ გაკვეთილის დემო მაგალითი ზემოთ მოცემულ ვიდეოზე. თქვენ ყოველთვის შეგიძლიათ იპოვოთ მსგავსი საინტერესო ვიდეოები ჩემს YouTube არხზე, ასევე იპოვოთ ბევრი ელექტრონული პროექტი და გაკვეთილები ჩემს ვებგვერდზე, HowToMechatronics.com

ნაბიჯი 1: ნაწილები საჭირო

ამ პროექტისთვის დაგჭირდებათ არდუინოს დაფა და MEMS მაგნიტომეტრი, დედამიწის მაგნიტური ველის გასაზომად. მე გამოვიყენებ GY - 80 გარღვევის დაფას, რომელიც შეიცავს MC5883L 3 - აქსის მაგნიტომეტრს.

სანამ გავაგრძელებთ პროექტის წყაროს კოდს თუ გჭირდებათ მეტი დეტალები, თუ როგორ მუშაობს MEMS მაგნიტომეტრი, ასევე როგორ დააკავშიროთ და გამოიყენოთ GY -80 გარღვევის დაფა I2C კომუნიკაციის საშუალებით, შეგიძლიათ შეამოწმოთ ჩემი კონკრეტული გაკვეთილები.

ნაბიჯი 2: Arduino წყაროს კოდი

ის, რაც პირველ რიგში უნდა გავაკეთოთ, არის ესკიზის ატვირთვა არდუინოს დაფაზე, რომელიც წაიკითხავს მაგნიტომეტრის მონაცემებს და მას გაუგზავნის დამუშავების IDE- ს. აქ არის არდუინოს საწყისი კოდი:

/ * არდუინოს კომპასი * * დეიან ნედელკოვსკი, * 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;

float სათაური, სასაქონლო ხარისხი, სათაურიფილტრული, დახრილი;

ათწილადი Xm, Ym, Zm;

#განსაზღვრეთ მაგნიტომეტრი 0x1E // I2C 7 ბიტიანი მისამართი 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 (მაგნიტომეტრი); // გადაეცემა მოწყობილობას Wire.write (მაგნიტომეტრი_mX1); Wire.endTransmission (); მავთული. მოთხოვნა (მაგნიტომეტრი, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (მაგნიტომეტრი); // გადაცემა მოწყობილობაზე Wire.write (მაგნიტომეტრი_mX0); Wire.endTransmission (); მავთული. მოთხოვნა (მაგნიტომეტრი, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y- ღერძი

Wire.beginTransmission (Magnetometer); // გადაცემა მოწყობილობაზე Wire.write (მაგნიტომეტრი_ mY1); Wire.endTransmission (); მავთული. მოთხოვნა (მაგნიტომეტრი, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (მაგნიტომეტრი); // გადაცემა მოწყობილობაზე Wire.write (მაგნიტომეტრი_მY0); Wire.endTransmission (); მავთული. მოთხოვნა (მაგნიტომეტრი, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (მაგნიტომეტრი); // გადაცემა მოწყობილობაზე Wire.write (მაგნიტომეტრი_მზ 1); Wire.endTransmission (); მავთული. მოთხოვნა (მაგნიტომეტრი, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (მაგნიტომეტრი); // გადაეცემა მოწყობილობას Wire.write (მაგნიტომეტრი_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;

headingDerees = სათაური * 180/PI; // სათაური ხარისხების განყოფილებაში

// გამომავალი კუთხის გასწორება / დაბალი გამავლობის ფილტრი

headingFiltered = headingFiltered*0.85 + სასაქონლო ხარისხი*0.15;

// სათაურის მნიშვნელობის გაგზავნა სერიული პორტის საშუალებით IDE დამუშავებისთვის

Serial.println (სასაქონლო ფილტრი);

დაგვიანება (50); }

ნაბიჯი 3: IDE წყაროს კოდის დამუშავება

მას შემდეგ რაც ატვირთეთ Arduino– ს ესკიზი, ჩვენ უნდა მივიღოთ მონაცემები დამუშავების IDE– ში და დავხატოთ ციფრული კომპასი. კომპასი შედგება ფონის სურათისგან, ისრის ფიქსირებული გამოსახულებისგან და კომპასის სხეულის მბრუნავი გამოსახულებისგან. ამრიგად, არდისინოთი გამოთვლილი მიწიერი მაგნიტური ველის მნიშვნელობები გამოიყენება კომპასის დასატრიალებლად.

აქ არის დამუშავების IDE- ს საწყისი კოდი:

/ * არდუინო კომპასი * * დეიან ნედელკოვსკის მიერ, * www. HowToMechatronics.com * */ იმპორტის დამუშავება. სერიალი. *; java.awt.event. KeyEvent იმპორტი; იმპორტი java.io. IOException;

სერიული myPort;

PImage imgCompass; PImage imgCompassArrow; სურათის ფონი;

სიმებიანი მონაცემები = "";

float სასაქონლო;

void setup () {

ზომა (1920, 1080, P3D); გლუვი (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = ახალი სერიალი (ეს, "COM4", 115200); // იწყებს სერიულ კომუნიკაციას myPort.bufferUntil ('\ n'); }

ბათილად გათამაშება () {

სურათი (ფონი, 0, 0); // იტვირთება ფონის სურათი pushMatrix (); თარგმნა (სიგანე/2, სიმაღლე/2, 0); // თარგმნის კოორდინატთა სისტემას ეკრანის ცენტრში, ისე რომ ბრუნვა მოხდეს ზუსტად ცენტრში rotateZ (რადიანები (-სათაური)); // ატრიალებს კომპასს Z -ღერძის გამოსახულების გარშემო (imgCompass, -960, -540); // იტვირთება კომპასის სურათი და კოორდინატთა სისტემის გადაადგილებისას ჩვენ გვჭირდება გამოსახულების დაყენება -960x, -540y (ეკრანის ზომის ნახევარი) popMatrix (); // მოაქვს საკოორდინატო სისტემა დაუბრუნდა საწყის პოზიციას 0, 0, 0 სურათი (imgCompassArrow, 0, 0); // იტვირთება CompassArrow სურათი, რომელზედაც არ მოქმედებს rotateZ () ფუნქცია popMatrix () ფუნქციის გამო textSize (30); ტექსტი ("სათაური:" + სათაური, 40, 40); // ბეჭდავს სათაურის მნიშვნელობას ეკრანზე

დაგვიანება (40);

}

// იწყებს მონაცემების კითხვას სერიული პორტიდან

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // კითხულობს მონაცემებს სერიული პორტიდან და ათავსებს სიმების ცვლადში "მონაცემები". სათაური = float (მონაცემები); // სიმებიანი მნიშვნელობის გადატანა Float მნიშვნელობად}

იმედი მაქვს მოგეწონებათ ეს პროექტი. თუ ასეა, ასევე შეგიძლიათ ეწვიოთ ჩემს ვებსაიტს უფრო მაგარი პროექტებისთვის.

გირჩევთ: