Talaan ng mga Nilalaman:

Proyekto ng Digital Compass ng Arduino: 3 Mga Hakbang
Proyekto ng Digital Compass ng Arduino: 3 Mga Hakbang

Video: Proyekto ng Digital Compass ng Arduino: 3 Mga Hakbang

Video: Proyekto ng Digital Compass ng Arduino: 3 Mga Hakbang
Video: Gearless Transmission using Elbow mechanism ๐Ÿ“Œ #mechanical #engineering #cad #project #prototype #3d 2024, Nobyembre
Anonim
Image
Image

Kamusta! Sa itinuturo na ito makikita mo kung paano ka makakagawa ng isang Digital Compass gamit ang isang Arduino at ang Processing IDE. Ito ay medyo simple ngunit kawili-wili at cool na naghahanap ng Arduino Project.

Maaari mong panoorin ang halimbawa ng demo ng tutorial na ito sa video sa itaas. Maaari kang makahanap ng mas maraming mga kagiliw-giliw na video tulad nito sa aking channel sa YouTube pati na rin makahanap ng maraming mga proyekto at tutorial sa electronics sa aking website, HowToMechatronics.com

Hakbang 1: Kinakailangan ang Mga Bahagi

Para sa proyektong ito kakailanganin mo lamang ang isang Arduino Board at isang MEMS Magnetometer, para sa pagsukat ng Earth magnetic field. Gagamitin ko ang GY - 80 breakout board na naglalaman ng MC5883L 3 - Axis Magnetometer.

Bago kami magpatuloy sa source code para sa proyekto Kung kailangan mo ng higit pang mga detalye kung paano gumagana ang magnetometer ng MEMS pati na rin kung paano ikonekta at gamitin ang breakout board ng GY - 80 sa pamamagitan ng I2C Communication maaari mong suriin ang aking mga partikular na tutorial para doon.

Hakbang 2: Arduino Source Code

Ang kailangan muna nating gawin ay mag-upload ng isang sketch sa Arduino Board na magbasa ng data mula sa magnetometer at ipapadala ito sa Processing IDE. Narito ang Source Code ng Arduino:

/ * Arduino Compass * * ni Dejan Nedelkovski, * www. HowToMechatronics.com * * /

#include // I2C Arduino Library

# tukuyin ang 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;

heading float, headingDegrees, headingFiltered, pagtanggi;

lumutang Xm, Ym, Zm;

#define Magnetometer 0x1E // I2C 7bit address ng HMC5883

walang bisa ang pag-setup () {

// Initialize Serial and I2C komunikasyon Serial.begin (115200); Wire.begin (); pagkaantala (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Select mode register Wire.write (0x00); // Patuloy na mode ng pagsukat Wire.endTransmission (); }

void loop () {

// ---- X-Axis Wire.beginTransmission (Magnetometer); // transfer to device Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); kung (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // transfer to device Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); kung (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y-Axis

Wire.beginTransmission (Magnetometer); // transfer to device Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); kung (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // transfer to device Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); kung (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometer); // transfer to device Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); kung (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // transfer to device Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); kung (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-Axis mX1 = mX1 << 8; mX_out = mX0 + mX1; // Raw data // Mula sa datasheet: 0.92 mG / digit Xm = mX_out * 0.00092; // Gauss unit // * Ang mga magnetic field ng Earth ay umaabot mula 0.25 hanggang 0.65 Gauss, kaya ito ang mga halagang kailangan nating makuha upang humigit-kumulang.

// ---- Y-Axis

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

// ---- Z-Axis

mZ1 = mZ1 <0.073 rad declination = 0.073; heading + = pagtanggi; // Pagwawasto kapag ang mga palatandaan ay iginagalang kung (heading <0) heading + = 2 * PI;

// Pagwawasto dahil sa pagdaragdag ng anggulo ng pagtanggi

kung (heading> 2 * PI) heading - = 2 * PI;

headingDegrees = heading * 180 / PI; // Ang heading sa yunit ng Degree

// Smoothing ang output anggulo / Mababang pass filter

headingFiltered = headingFiltered * 0.85 + headingDegrees * 0.15;

// Pagpapadala ng halaga ng heading sa pamamagitan ng Serial Port sa Processing IDE

Serial.println (headingFiltered);

antala (50); }

Hakbang 3: Pagproseso ng Source Code ng IDE

Matapos naming mai-upload ang nakaraang Arduino sketch kailangan naming matanggap ang data sa Processing IDE at iguhit ang Digital Compass. Ang compass ay binubuo ng isang imahe sa background, nakapirming imahe ng arrow, at isang umiikot na imahe ng katawan ng compass. Kaya ang mga halaga para sa eart magnetic field na kinakalkula sa Arduino ay ginagamit upang paikutin ang compass.

Narito ang source code ng Processing IDE:

/ * Arduino Compass * * ni Dejan Nedelkovski, * www. HowToMechatronics.com * * / pagproseso ng pag-import.serial. *; import java.awt.event. KeyEvent; i-import ang java.io. IOException;

Serial myPort;

PImage imgCompass; PImage imgCompassArrow; Background ng larawan;

String data = "";

float heading;

walang bisa ang pag-setup () {

laki (1920, 1080, P3D); makinis (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = bagong Serial (ito, "COM4", 115200); // nagsisimula ang serial na komunikasyon myPort.bufferUntil ('\ n'); }

walang bisa draw () {

imahe (background, 0, 0); // Load the Background image pushMatrix (); isalin (lapad / 2, taas / 2, 0); // Isinalin ang coordinate system sa gitna ng screen, upang ang pag-ikot ay mangyari mismo sa gitna ng rotateZ (radians (-heading)); // Paikutin ang Compass sa paligid ng Z - Axis na imahe (imgCompass, -960, -540); // Load the Compass image and as the coordinate system is relocated we need need to set the image at -960x, -540y (half the screen size) popMatrix (); // Nagdadala ng coordinate system ay bumalik sa orihinal na posisyon ng 0, 0, 0 na imahe (imgCompassArrow, 0, 0); // Load ang imahe ng CompassArrow na hindi apektado ng pagpapaikot ng rotateZ () dahil sa popMatrix () na function na textSize (30); teksto ("Pamagat:" + heading, 40, 40); // Nai-print ang halaga ng heading sa screen

pagkaantala (40);

}

// nagsisimula ng pagbabasa ng data mula sa Serial Port

walang bisa ang serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // binabasa ang data mula sa Serial Port at inilalagay ito sa "data" na variable ng String. heading = float (data); // Convering the the String value into Float value}

Sana magustuhan mo ang proyektong ito. Kung ito ay maaari mo ring bisitahin ang aking website para sa mas maraming mga cool na proyekto.

Inirerekumendang: