Talaan ng mga Nilalaman:
- Hakbang 1: Kinakailangan ang Mga Bahagi
- Hakbang 2: Arduino Source Code
- Hakbang 3: Pagproseso ng Source Code ng IDE
Video: Proyekto ng Digital Compass ng Arduino: 3 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
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:
Isang Cool na Hack ng Laptop na Touchpad para sa Mga Proyekto ng Arduino !: 18 Mga Hakbang (na may Mga Larawan)
Isang Cool Laptop Touchpad Hack para sa Mga Proyekto ng Arduino !: Ilang sandali, noong nakikipag-usap ako sa isang touchpad ng PS / 2 na may isang Arduino microcontroller, nalaman kong ang dalawa sa mga onboard na koneksyon nito ay maaaring magamit bilang mga digital na input. Sa Instructable na ito, alamin natin kung paano natin magagamit ang isang pagdaragdag ng PS / 2 touchpad
Mga Timer ng Arduino: 8 Mga Proyekto: 10 Hakbang (na may Mga Larawan)
Mga Timer ng Arduino: 8 Mga Proyekto: Ang Arduino Uno o Nano ay maaaring makabuo ng tumpak na mga digital na signal sa anim na nakalaang mga pin sa pamamagitan ng paggamit ng tatlong built-in na timer. Nangangailangan lamang sila ng ilang mga utos upang i-set up at gumamit ng walang mga siklo ng CPU upang tumakbo! Ang paggamit ng mga timer ay maaaring maging pananakot kung nagsimula ka mula sa ika
Mga Elektronikong Proyekto para sa Mga Nagsisimula: 14 Mga Hakbang (na may Mga Larawan)
Mga Elektronikong Proyekto para sa mga Nagsisimula: Kung ang iyong nais na makapasok sa electronics at kailangan ng isang lugar upang simulan ang itinuturo na ito ay para sa iyo. Mayroong isang bilang ng mga napaka murang mga kit sa eBay at Aliexpress na maaari kang makakuha ng para sa 2 o 3 dolyar na maaaring magbigay sa iyo ng ilang karanasan sa identifi ng bahagi
10 Pangunahing Mga Proyekto ng Arduino para sa Mga Nagsisimula! Gumawa ng hindi bababa sa 15 Mga Proyekto Na May Isang solong Lupon !: 6 Mga Hakbang
10 Pangunahing Mga Proyekto ng Arduino para sa Mga Nagsisimula! Gumawa ng hindi bababa sa 15 Mga Proyekto Na May Isang solong Lupon !: Arduino Project & Lupon ng Tutorial; May kasamang 10 pangunahing mga proyekto ng Arduino. Lahat ng mga source code, ang Gerber file at marami pa. Walang SMD! Madaling paghihinang para sa lahat. Madaling naaalis at mapapalitan na mga bahagi. Maaari kang gumawa ng hindi bababa sa 15 mga proyekto sa isang solong bo
USB Powered Burner! Ang Proyekto na Ito ay Maaaring Sunog Sa Pamamagitan ng Plastics / Wood / Paper (masaya na Proyekto din Ay Dapat Maging Napakahusay na Kahoy): 3 Mga Hakbang
USB Powered Burner! Ang Proyekto na Ito ay Maaaring Sunugin Sa Pamamagitan ng Plastics / Wood / Paper (masaya na Proyekto din Ay Dapat Maging Napakahusay na Kahoy): HUWAG GAWIN ANG PAGGAMIT NG ITO !!!! nalaman ko na maaari itong makapinsala sa iyong computer mula sa lahat ng mga komento. maayos naman ang computer ko. Gumamit ng isang 600ma 5v charger ng telepono. ginamit ko ito at gumagana ito ng maayos at walang maaaring mapinsala kung gumamit ka ng isang plug ng kaligtasan upang ihinto ang kapangyarihan s