विषयसूची:

Arduino Digital Compass Project: 3 चरण
Arduino Digital Compass Project: 3 चरण

वीडियो: Arduino Digital Compass Project: 3 चरण

वीडियो: Arduino Digital Compass Project: 3 चरण
वीडियो: Amazing arduino project 2024, जुलाई
Anonim
Image
Image

नमस्कार! इस निर्देश में आप देखेंगे कि कैसे आप एक Arduino और प्रोसेसिंग IDE का उपयोग करके एक डिजिटल कम्पास बना सकते हैं। यह काफी सरल लेकिन दिलचस्प और शांत दिखने वाला Arduino प्रोजेक्ट है।

आप ऊपर दिए गए वीडियो में इस ट्यूटोरियल का डेमो उदाहरण देख सकते हैं। आप हमेशा मेरे YouTube चैनल पर इस तरह के और भी दिलचस्प वीडियो पा सकते हैं और साथ ही मेरी वेबसाइट HowToMechatronics.com पर ढेर सारे इलेक्ट्रॉनिक्स प्रोजेक्ट और ट्यूटोरियल पा सकते हैं।

चरण 1: आवश्यक भाग

इस परियोजना के लिए आपको पृथ्वी के चुंबकीय क्षेत्र को मापने के लिए सिर्फ एक Arduino बोर्ड और एक MEMS मैग्नेटोमीटर की आवश्यकता होगी। मैं GY - 80 ब्रेकआउट बोर्ड का उपयोग करूंगा जिसमें MC5883L 3 - एक्सिस मैग्नेटोमीटर शामिल है।

इससे पहले कि हम परियोजना के लिए स्रोत कोड जारी रखें यदि आपको अधिक विवरण की आवश्यकता है कि एमईएमएस मैग्नेटोमीटर कैसे काम करता है और साथ ही I2C संचार के माध्यम से GY - 80 ब्रेकआउट बोर्ड को कैसे कनेक्ट और उपयोग करना है, तो आप उसके लिए मेरे विशेष ट्यूटोरियल की जांच कर सकते हैं।

चरण 2: Arduino स्रोत कोड

हमें सबसे पहले Arduino बोर्ड पर एक स्केच अपलोड करने की आवश्यकता है जो मैग्नेटोमीटर से डेटा को पढ़ेगा और इसे प्रोसेसिंग आईडीई को भेजेगा। यहाँ Arduino स्रोत कोड है:

/* Arduino Compass* *Dejan Nedelkovski द्वारा, * www. HowToMechatronics.com * */

#शामिल करें //I2C Arduino लाइब्रेरी

# परिभाषित करें मैग्नेटोमीटर_mX0 0x03

#मैगनेटोमीटर_mX1 0x04 को परिभाषित करें #मैग्नेटोमीटर_mZ0 0x05 को परिभाषित करें #मैग्नेटोमीटर_mZ1 0x06 को परिभाषित करें #मैग्नेटोमीटर_mY0 0x07 को परिभाषित करें #मैग्नेटोमीटर_mY1 0x08 को परिभाषित करें

इंट एमएक्स0, एमएक्स1, एमएक्स_आउट;

int mY0, mY1, mY_out; इंट mZ0, mZ1, mZ_out;

फ्लोट हेडिंग, हेडिंगडिग्री, हेडिंग फ़िल्टर्ड, डिक्लेरेशन;

फ्लोट एक्सएम, वाईएम, जेडएम;

#define मैग्नेटोमीटर 0x1E // I2C 7bit HMC5883 का पता

व्यर्थ व्यवस्था(){

// सीरियल और I2C संचार Serial.begin (115200) शुरू करें; वायर.बेगिन (); देरी (100); Wire.beginTransmission (मैग्नेटोमीटर); वायर.राइट (0x02); // मोड रजिस्टर चुनें Wire.write(0x00); // सतत माप मोड Wire.endTransmission (); }

शून्य लूप () {

//---- एक्स-एक्सिस वायर.बेगिनट्रांसमिशन (मैग्नेटोमीटर); // डिवाइस को प्रेषित करें Wire.write(Magnetometer_mX1); वायर.एंडट्रांसमिशन (); Wire.requestFrom (मैग्नेटोमीटर, 1); अगर (वायर.उपलब्ध ()<=1) {mX0 = वायर.रीड (); } वायर.बेगिनट्रांसमिशन (मैग्नेटोमीटर); // डिवाइस को प्रेषित करें Wire.write(Magnetometer_mX0); वायर.एंडट्रांसमिशन (); Wire.requestFrom (मैग्नेटोमीटर, 1); अगर (वायर.उपलब्ध ()<=1) {mX1 = वायर.रीड (); }

//---- वाई-अक्ष

Wire.beginTransmission (मैग्नेटोमीटर); // डिवाइस को प्रेषित करें Wire.write(Magnetometer_mY1); वायर.एंडट्रांसमिशन (); Wire.requestFrom (मैग्नेटोमीटर, 1); अगर (वायर.उपलब्ध ()<=1) {mY0 = वायर.रीड (); } वायर.बेगिनट्रांसमिशन (मैग्नेटोमीटर); // डिवाइस को प्रेषित करें Wire.write(Magnetometer_mY0); वायर.एंडट्रांसमिशन (); Wire.requestFrom (मैग्नेटोमीटर, 1); अगर (वायर.उपलब्ध ()<=1) {mY1 = वायर.रीड (); } //---- Z-Axis Wire.beginTransmission(Magnetometer); // डिवाइस को प्रेषित करें Wire.write(Magnetometer_mZ1); वायर.एंडट्रांसमिशन (); Wire.requestFrom (मैग्नेटोमीटर, 1); अगर (वायर.उपलब्ध ()<=1) {mZ0 = वायर.रीड (); } वायर.बेगिनट्रांसमिशन (मैग्नेटोमीटर); // डिवाइस को प्रेषित करें Wire.write(Magnetometer_mZ0); वायर.एंडट्रांसमिशन (); Wire.requestFrom (मैग्नेटोमीटर, 1); अगर (वायर.उपलब्ध ()<=1) {mZ1 = वायर.रीड (); } //---- X-अक्ष mX1=mX1<<8; mX_out =mX0+mX1; // कच्चा डेटा // डेटाशीट से: 0.92 mG/अंक Xm = mX_out*0.00092; // गॉस इकाई //* पृथ्वी चुंबकीय क्षेत्र 0.25 से 0.65 गॉस तक है, इसलिए ये वे मान हैं जिन्हें हमें लगभग प्राप्त करने की आवश्यकता है।

//---- वाई-अक्ष

mY1=mY1<<8; mY_out =mY0+mY1; वाईएम = mY_out*0.00092;

//---- जेड-एक्सिस

mZ1=mZ1< ०.०७३ रेड डिक्लेरेशन = ०.०७३; शीर्षक + = गिरावट; // जब संकेतों का सम्मान किया जाता है तो सुधार करना (शीर्षक <0) शीर्षक + = 2 * पीआई;

// डिक्लेरेशन एंगल को जोड़ने के कारण सही करना

अगर (शीर्षक> 2*पीआई)शीर्षक -= 2*पीआई;

हेडिंगडिग्री = हेडिंग * १८०/पीआई; // डिग्री इकाई में शीर्षक

// आउटपुट एंगल / लो पास फिल्टर को स्मूथ करना

हेडिंगफिल्टर्ड = हेडिंगफिल्टर्ड*0.85 + हेडिंगडिग्री*0.15;

// सीरियल पोर्ट के माध्यम से हेडिंग वैल्यू को प्रोसेसिंग आईडीई में भेजना

Serial.println (शीर्षक फ़िल्टर किया गया);

देरी (50); }

चरण 3: प्रसंस्करण आईडीई स्रोत कोड

पिछले Arduino स्केच को अपलोड करने के बाद हमें प्रोसेसिंग IDE में डेटा प्राप्त करने और डिजिटल कम्पास को ड्रा करने की आवश्यकता होती है। कम्पास एक पृष्ठभूमि छवि, तीर की निश्चित छवि और कम्पास के शरीर की एक घूर्णन छवि से बना है। तो Arduino के साथ गणना किए गए कान चुंबकीय क्षेत्र के मूल्यों का उपयोग कंपास को घुमाने के लिए किया जाता है।

प्रसंस्करण आईडीई का स्रोत कोड यहां दिया गया है:

/* Arduino Compass* * Dejan Nedelkovski द्वारा, * www. HowToMechatronics.com * */ import processing.serial.*; आयात java.awt.event. KeyEvent; java.io. IOException आयात करें;

सीरियल मायपोर्ट;

PImage imgCompass; PImage imgCompassArrow; पिमेज बैकग्राउंड;

स्ट्रिंग डेटा = "";

फ्लोट हेडिंग;

व्यर्थ व्यवस्था() {

आकार (1920, 1080, P3D); निर्बाध(); imgCompass = loadImage ("कम्पास.पीएनजी"); imgCompassArrow = loadImage("CompassArrow.png"); बैकग्राउंड = लोडइमेज ("बैकग्राउंड.पीएनजी"); myPort = नया सीरियल (यह, "COM4", 115200); // धारावाहिक संचार शुरू करता है myPort.bufferUntil('\n'); }

शून्य ड्रा () {

छवि (पृष्ठभूमि, 0, 0); // बैकग्राउंड इमेज को लोड करता है पुशमैट्रिक्स (); अनुवाद (चौड़ाई / 2, ऊंचाई / 2, 0); // समन्वय प्रणाली को स्क्रीन के केंद्र में अनुवादित करता है, ताकि रोटेशन केंद्र में सही हो जाए रोटेटजेड (रेडियन (-हेडिंग)); // कम्पास को Z - अक्ष छवि के चारों ओर घुमाता है (imgCompass, -960, -540); // कम्पास छवि को लोड करता है और जैसे ही समन्वय प्रणाली को स्थानांतरित किया जाता है, हमें छवि को -960x, -540y (आधा स्क्रीन आकार) पॉपमैट्रिक्स () पर सेट करने की आवश्यकता होती है; // समन्वय प्रणाली को मूल स्थिति 0, 0, 0 छवि (imgCompassArrow, 0, 0) पर वापस लाता है; // CompassArrow छवि को लोड करता है जो कि पॉपमैट्रिक्स () फ़ंक्शन टेक्स्टसाइज़ (30) के कारण रोटेटज़ () फ़ंक्शन से प्रभावित नहीं होती है; पाठ ("शीर्षक:" + शीर्षक, 40, 40); // स्क्रीन पर शीर्षक के मूल्य को प्रिंट करता है

देरी (40);

}

// सीरियल पोर्ट से डेटा पढ़ना शुरू करें

शून्य सीरियलइवेंट (सीरियल मायपोर्ट) {डेटा = myPort.readStringUntil('\n');// सीरियल पोर्ट से डेटा पढ़ता है और इसे स्ट्रिंग वेरिएबल "डेटा" में डालता है। शीर्षक = फ्लोट (डेटा); // स्ट्रिंग मान को फ्लोट मान में परिवर्तित करना}

मुझे उम्मीद है कि आपको यह प्रोजेक्ट पसंद आएगा। यदि ऐसा है तो आप और भी अच्छे प्रोजेक्ट्स के लिए मेरी वेबसाइट पर भी जा सकते हैं।

सिफारिश की: