Mục lục:

Dự án la bàn kỹ thuật số Arduino: 3 bước
Dự án la bàn kỹ thuật số Arduino: 3 bước

Video: Dự án la bàn kỹ thuật số Arduino: 3 bước

Video: Dự án la bàn kỹ thuật số Arduino: 3 bước
Video: Học lập trình Arduino KHÔNG HỀ KHÓ - Bộ KIT học tập Arduino Uno R3 BLK 2024, Tháng bảy
Anonim
Image
Image

Xin chào! Trong hướng dẫn này, bạn sẽ thấy cách bạn có thể tạo một La bàn kỹ thuật số bằng cách sử dụng Arduino và IDE xử lý. Đây là Dự án Arduino khá đơn giản nhưng thú vị và trông rất ngầu.

Bạn có thể xem ví dụ demo của hướng dẫn này trên video ở trên. Bạn luôn có thể tìm thấy nhiều video thú vị hơn như thế này trên kênh YouTube của tôi cũng như tìm thấy rất nhiều dự án và hướng dẫn về điện tử trên trang web của tôi, HowToMechatronics.com

Bước 1: Các bộ phận cần thiết

Đối với dự án này, bạn sẽ chỉ cần một Bảng Arduino và một Từ kế MEMS, để đo từ trường trái đất. Tôi sẽ sử dụng bảng đột phá GY-80 có chứa MC5883L 3 - Axis Magnetometer.

Trước khi chúng ta tiếp tục với mã nguồn cho dự án Nếu bạn cần thêm chi tiết về cách hoạt động của từ kế MEMS cũng như cách kết nối và sử dụng bảng đột phá GY-80 qua Giao tiếp I2C, bạn có thể xem các hướng dẫn cụ thể của tôi về điều đó.

Bước 2: Mã nguồn Arduino

Những gì chúng ta cần làm trước tiên là tải một bản phác thảo lên Arduino Board, nó sẽ đọc dữ liệu từ từ kế và nó sẽ gửi nó đến IDE xử lý. Đây là mã nguồn Arduino:

/ * Arduino Compass * * của Dejan Nedelkovski, * www. HowToMechatronics.com * * /

#include // Thư viện Arduino I2C

#define Magnetometer_mX0 0x03

#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define Magnetometer_mY1 0x08

int mX0, mX1, mX_out;

int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;

tiêu đề nổi, tiêu đềDegrees, tiêu đềFiltered, declination;

float Xm, Ym, Zm;

#define Magnetometer 0x1E // I2C 7bit địa chỉ của HMC5883

void setup () {

// Khởi tạo giao tiếp Serial và I2C Serial.begin (115200); Wire.begin (); chậm trễ (100); Wire.beginTransmission (Từ kế); Wire.write (0x02); // Chọn thanh ghi chế độ Wire.write (0x00); // Chế độ đo liên tục Wire.endTransmission (); }

void loop () {

// ---- X-Axis Wire.beginTransmission (Từ kế); // truyền tới thiết bị Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Từ kế, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Từ kế); // truyền đến thiết bị Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Từ kế, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Trục Y

Wire.beginTransmission (Từ kế); // truyền tới thiết bị Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Từ kế, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Từ kế); // truyền đến thiết bị Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Từ kế, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Từ kế); // truyền đến thiết bị Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Từ kế, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Từ kế); // truyền đến thiết bị Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Từ kế, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Trục X mX1 = mX1 << 8; mX_out = mX0 + mX1; // Dữ liệu thô // Từ biểu dữ liệu: 0,92 mG / digit Xm = mX_out * 0,00092; // Đơn vị Gauss // * Từ trường Trái đất nằm trong khoảng từ 0,25 đến 0,65 Gauss, vì vậy đây là những giá trị mà chúng ta cần lấy gần đúng.

// ---- Trục Y

mY1 = mY1 << 8; mY_out = mY0 + mY1; Ym = mY_out * 0,00092;

//---- Trục Z

mZ1 = mZ1 <0,073 độ nghiêng rad = 0,073; đề mục + = declination; // Sửa khi các dấu hiệu được gọi lại if (tiêu đề <0) tiêu đề + = 2 * PI;

// Điều chỉnh do thêm góc nghiêng

if (tiêu đề> 2 * PI) tiêu đề - = 2 * PI;

headerDegrees = tiêu đề * 180 / PI; // Tiêu đề trong đơn vị Độ

// Làm mịn góc đầu ra / Bộ lọc thông thấp

headerFiltered = tiêu đềFiltered * 0.85 + headerDegrees * 0.15;

// Gửi giá trị tiêu đề qua Cổng nối tiếp đến IDE xử lý

Serial.println (headerFiltered);

chậm trễ (50); }

Bước 3: Xử lý mã nguồn IDE

Sau khi chúng tôi đã tải lên bản phác thảo Arduino trước đó, chúng tôi cần nhận dữ liệu vào IDE xử lý và vẽ La bàn kỹ thuật số. La bàn bao gồm hình nền, hình ảnh cố định của mũi tên và hình ảnh xoay của thân la bàn. Vì vậy, các giá trị của từ trường eart được tính bằng Arduino được sử dụng để xoay la bàn.

Đây là mã nguồn của IDE xử lý:

/ * Arduino Compass * * của Dejan Nedelkovski, * www. HowToMechatronics.com * * / import processing.serial. *; nhập java.awt.event. KeyEvent; nhập java.io. IOException;

Nối tiếp myPort;

PImage imgCompass; PImage imgCompassArrow; Nền PImage;

Dữ liệu chuỗi = "";

tiêu đề nổi;

void setup () {

kích thước (1920, 1080, P3D); mịn màng(); imgCompass = loadImage ("La bàn.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = new Serial (this, "COM4", 115200); // bắt đầu giao tiếp nối tiếp myPort.bufferUntil ('\ n'); }

void draw () {

hình ảnh (nền, 0, 0); // Tải hình nền pushMatrix (); dịch (chiều rộng / 2, chiều cao / 2, 0); // Chuyển hệ tọa độ vào tâm màn hình, sao cho phép quay xảy ra ngay tại tâm xoayZ (radian (-heading)); // Xoay La bàn quanh hình ảnh Z - Axis (imgCompass, -960, -540); // Tải hình ảnh La bàn và khi hệ tọa độ được di chuyển, chúng ta cần đặt hình ảnh ở -960x, -540y (một nửa kích thước màn hình) popMatrix (); // Đưa hệ tọa độ về vị trí ban đầu 0, 0, 0 ảnh (imgCompassArrow, 0, 0); // Tải hình ảnh CompassArrow không bị ảnh hưởng bởi hàm xoayZ () vì hàm popMatrix () textSize (30); text ("Tiêu đề:" + tiêu đề, 40, 40); // In giá trị của tiêu đề trên màn hình

chậm trễ (40);

}

// bắt đầu đọc dữ liệu từ Cổng nối tiếp

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // đọc dữ liệu từ Serial Port và đưa nó vào biến String "data". header = float (dữ liệu); // Chuyển giá trị String thành giá trị Float}

Tôi hy vọng bạn sẽ thích dự án này. Nếu đúng như vậy, bạn cũng có thể truy cập trang web của tôi để biết thêm các dự án thú vị.

Đề xuất: