สารบัญ:
- ขั้นตอนที่ 1: อะไหล่ที่จำเป็น
- ขั้นตอนที่ 2: รหัสที่มา Arduino
- ขั้นตอนที่ 3: การประมวลผลซอร์สโค้ด IDE
วีดีโอ: โครงการ Arduino Digital Compass: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
สวัสดี! ในคำแนะนำนี้ คุณจะเห็นว่าคุณสามารถสร้างเข็มทิศดิจิตอลโดยใช้ Arduino และ IDE การประมวลผลได้อย่างไร นี่เป็นโครงการ Arduino ที่ค่อนข้างเรียบง่าย แต่น่าสนใจและดูดี
คุณสามารถดูตัวอย่างการสาธิตของบทช่วยสอนนี้ได้ในวิดีโอด้านบน คุณสามารถหาวิดีโอที่น่าสนใจกว่านี้ได้ในช่อง YouTube ของฉัน รวมทั้งพบโครงการอิเล็กทรอนิกส์และบทช่วยสอนมากมายบนเว็บไซต์ของฉัน HowToMechatronics.com
ขั้นตอนที่ 1: อะไหล่ที่จำเป็น
สำหรับโครงการนี้ คุณจะต้องใช้บอร์ด Arduino และ MEMS Magnetometer สำหรับวัดสนามแม่เหล็กโลก ฉันจะใช้บอร์ดฝ่าวงล้อม GY – 80 ซึ่งประกอบด้วย MC5883L 3 – Axis Magnetometer
ก่อนที่เราจะดำเนินการต่อด้วยซอร์สโค้ดสำหรับโครงการ หากคุณต้องการรายละเอียดเพิ่มเติมว่าเครื่องวัดสนามแม่เหล็กของ MEMS ทำงานอย่างไร รวมถึงวิธีการเชื่อมต่อและใช้งานบอร์ดฝ่าวงล้อม GY - 80 ผ่านการสื่อสาร I2C คุณสามารถตรวจสอบบทแนะนำเฉพาะของฉันสำหรับสิ่งนั้นได้
ขั้นตอนที่ 2: รหัสที่มา Arduino
สิ่งที่เราต้องทำก่อนคืออัปโหลดภาพสเก็ตช์ไปยังบอร์ด Arduino ซึ่งจะอ่านข้อมูลจากเครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กแล้วส่งไปยัง Processing IDE นี่คือรหัสที่มา Arduino:
/* Arduino Compass * * โดย Dejan Nedelkovski * www. HowToMechatronics.com * */
#include //I2C Arduino Library
#define เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก_mX0 0x03
#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define แมกนีโตมิเตอร์_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float heading, headingDegrees, headingกรอง, ปฏิเสธ;
ลอย Xm, Ym, Zm;
#define Magnetometer 0x1E //ที่อยู่ I2C 7 บิตของ HMC5883
การตั้งค่าเป็นโมฆะ (){
//เริ่มต้นการสื่อสารแบบ Serial และ I2C Serial.begin (115200); Wire.begin(); ล่าช้า (100); Wire.beginTransmission(เครื่องวัดสนามแม่เหล็ก); Wire.write(0x02); // เลือกโหมดการลงทะเบียน Wire.write(0x00); // โหมดการวัดต่อเนื่อง Wire.endTransmission(); }
วงเป็นโมฆะ (){
//---- X-Axis Wire.beginTransmission(เครื่องวัดสนามแม่เหล็ก); // ส่งไปยังอุปกรณ์ Wire.write(Magnetometer_mX1); Wire.endTransmission(); Wire.requestFrom(เครื่องวัดสนามแม่เหล็ก, 1); if(Wire.available()<=1) { mX0 = Wire.read(); } Wire.beginTransmission (เครื่องวัดสนามแม่เหล็ก); // ส่งไปยังอุปกรณ์ Wire.write(Magnetometer_mX0); Wire.endTransmission(); Wire.requestFrom(เครื่องวัดสนามแม่เหล็ก, 1); if(Wire.available()<=1) { mX1 = Wire.read(); }
//---- แกน Y
Wire.beginTransmission(เครื่องวัดสนามแม่เหล็ก); // ส่งไปยังอุปกรณ์ Wire.write(Magnetometer_mY1); Wire.endTransmission(); Wire.requestFrom(เครื่องวัดสนามแม่เหล็ก, 1); if(Wire.available()<=1) { mY0 = Wire.read(); } Wire.beginTransmission (เครื่องวัดสนามแม่เหล็ก); // ส่งไปยังอุปกรณ์ Wire.write(Magnetometer_mY0); Wire.endTransmission(); Wire.requestFrom(เครื่องวัดสนามแม่เหล็ก 1); if(Wire.available()<=1) { mY1 = Wire.read(); } //---- Z-Axis Wire.beginTransmission(เครื่องวัดสนามแม่เหล็ก); // ส่งไปยังอุปกรณ์ Wire.write(Magnetometer_mZ1); Wire.endTransmission(); Wire.requestFrom(เครื่องวัดสนามแม่เหล็ก, 1); if(Wire.available()<=1) { mZ0 = Wire.read(); } Wire.beginTransmission (เครื่องวัดสนามแม่เหล็ก); // ส่งไปยังอุปกรณ์ Wire.write(Magnetometer_mZ0); Wire.endTransmission(); Wire.requestFrom(เครื่องวัดสนามแม่เหล็ก 1); if(Wire.available()<=1) { mZ1 = Wire.read(); } //---- แกน X mX1=mX1<<8; mX_out =mX0+mX1; // ข้อมูลดิบ // จากแผ่นข้อมูล: 0.92 mG/digit 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; หัวข้อ += การปฏิเสธ; // แก้ไขเมื่อสัญญาณถูกกลับรายการ if(heading <0) heading += 2*PI;
// แก้ไขเนื่องจากการบวกมุมเอียง
ถ้า (หัวเรื่อง > 2*PI) หัวเรื่อง -= 2*PI;
headingDegrees = หัวเรื่อง * 180/PI; // หัวเรื่องในหน่วยองศา
// ปรับมุมเอาต์พุตให้เรียบ / Low pass filter
headingFiltered = headingFiltered*0.85 + headingDegrees*0.15;
//ส่งค่าหัวเรื่องผ่านพอร์ตอนุกรมไปยังการประมวลผล IDE
Serial.println (หัวเรื่องกรอง);
ล่าช้า (50); }
ขั้นตอนที่ 3: การประมวลผลซอร์สโค้ด IDE
หลังจากที่เราอัปโหลดภาพสเก็ตช์ Arduino ก่อนหน้านี้แล้ว เราจำเป็นต้องรับข้อมูลไปยัง Processing IDE และวาดเข็มทิศดิจิตอล เข็มทิศประกอบด้วยภาพพื้นหลัง รูปภาพคงที่ของลูกศร และรูปภาพที่หมุนได้ของตัวเข็มทิศ ดังนั้นค่าของสนามแม่เหล็กเอิร์ตที่คำนวณด้วย Arduino จะถูกใช้เพื่อหมุนเข็มทิศ
นี่คือซอร์สโค้ดของ Processing IDE:
/* Arduino Compass * * โดย Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial.*; นำเข้า java.awt.event. KeyEvent; นำเข้า java.io. IOException;
อนุกรม myPort;
รูปภาพ imgCompass; รูปภาพ imgCompassArrow; พื้นหลังภาพ;
ข้อมูลสตริง="";
หัวเรื่องลอย;
การตั้งค่าเป็นโมฆะ () {
ขนาด (1920, 1080, P3D); เรียบ(); imgCompass = loadImage("Compass.png"); imgCompassArrow = loadImage("CompassArrow.png"); พื้นหลัง = loadImage ("Background.png"); myPort = ซีเรียลใหม่ (นี่คือ "COM4", 115200); // เริ่มการสื่อสารแบบอนุกรม myPort.bufferUntil('\n'); }
โมฆะวาด () {
รูปภาพ(พื้นหลัง, 0, 0); // โหลดภาพพื้นหลัง pushMatrix(); แปล(กว้าง/2,สูง/2, 0); // แปลระบบพิกัดให้อยู่ตรงกลางของหน้าจอ เพื่อให้การหมุนเกิดขึ้นที่จุดศูนย์กลางของการหมุนZ(เรเดียน(-heading)); // หมุนเข็มทิศรอบๆ ภาพแกน Z (imgCompass, -960, -540); // โหลดอิมเมจ Compass และในขณะที่ระบบพิกัดถูกย้าย เราจำเป็นต้องตั้งค่ารูปภาพที่ -960x, -540y (ครึ่งหนึ่งของขนาดหน้าจอ) popMatrix(); // นำระบบพิกัดกลับมาที่ตำแหน่งเดิม 0, 0, 0 image(imgCompassArrow, 0, 0); // โหลดอิมเมจ CompassArrow ซึ่งไม่ได้รับผลกระทบจากฟังก์ชัน rotationZ() เนื่องจากฟังก์ชัน popMatrix() textSize(30); text("หัวเรื่อง:" + หัวเรื่อง, 40, 40); // พิมพ์ค่าของหัวเรื่องบนหน้าจอ
ล่าช้า(40);
}
// เริ่มอ่านข้อมูลจาก Serial Port
ถือเป็นโมฆะ serialEvent (Serial myPort) { data = myPort.readStringUntil('\n'); // อ่านข้อมูลจาก Serial Port และใส่ลงในตัวแปร String "data" หัวเรื่อง = ลอย (ข้อมูล); // การแปลงค่า String เป็นค่า Float }
ฉันหวังว่าคุณจะชอบโครงการนี้ หากเป็นเช่นนั้น คุณสามารถเยี่ยมชมเว็บไซต์ของฉันสำหรับโครงการดีๆ เพิ่มเติมได้
แนะนำ:
วิธีทำ RADAR โดยใช้ Arduino สำหรับโครงงานวิทยาศาสตร์ - โครงการ Arduino ที่ดีที่สุด: 5 ขั้นตอน
วิธีทำ RADAR โดยใช้ Arduino สำหรับโครงงานวิทยาศาสตร์ | โครงการ Arduino ที่ดีที่สุด: สวัสดีเพื่อน ๆ ในคำแนะนำนี้ฉันจะแสดงให้คุณเห็นถึงวิธีสร้างระบบเรดาร์ที่น่าทึ่งที่สร้างขึ้นโดยใช้ Arduino nano โครงการนี้เหมาะสำหรับโครงการวิทยาศาสตร์และคุณสามารถทำสิ่งนี้ได้อย่างง่ายดายด้วยการลงทุนและโอกาสที่น้อยมากหากรางวัลชนะเลิศนั้นยอดเยี่ยม
โครงการ Arduino-Tamagotchi (ฉันคือทามาก็อตจิ): 5 ขั้นตอน (พร้อมรูปภาพ)
โครงการ Arduino-Tamagotchi (ฉันคือทามาก็อตจิ): ฉันเบื่อกับการกักตัวและตัดสินใจสร้าง Arduino Tamagotchi เพราะฉันเกลียดสัตว์หลายชนิด ฉันจึงเลือกตัวเองเป็นทามาก็อตจิ ก่อนอื่นฉันสร้างคอนโซลของฉันบนเขียงหั่นขนม การเดินสายไฟนั้นง่ายมาก มีเพียงสามปุ่ม คือ Buzzer และ
Arduino Timers: 8 โครงการ: 10 ขั้นตอน (พร้อมรูปภาพ)
ตัวจับเวลา Arduino: 8 โครงการ: Arduino Uno หรือ Nano สามารถสร้างสัญญาณดิจิตอลที่แม่นยำบนหมุดเฉพาะหกตัวโดยใช้ตัวจับเวลาในตัวสามตัว พวกเขาต้องการคำสั่งเพียงไม่กี่คำสั่งในการตั้งค่าและไม่ต้องใช้รอบของ CPU ในการทำงาน!การใช้ตัวจับเวลาอาจเป็นเรื่องน่ากลัวหากคุณเริ่มต้นจาก
โครงการ Arduino ELECTRONIC-DICE: 4 ขั้นตอน
โครงการ Arduino ELECTRONIC-DICE: แนวคิดดั้งเดิมมาจาก https://www.instructables.com/id/Arduino-Project-E-Dice-Beginner/ ซึ่งเป็นโครงการโดย.A..มีการปรับปรุงบางอย่าง ฉันได้เพิ่ม LED และเอฟเฟกต์เสียง นอกจากนี้ ฉันใช้บอร์ด Arduino Leonardo แต่ไม่ใช่บอร์ด Arduino UNO แต่เ
วิธีทำเรดาร์ด้วย Arduino - โครงการ Arduino: 4 ขั้นตอน
วิธีทำเรดาร์ด้วย Arduino | โครงการ Arduino: ในบทความนี้ฉันจะสอนวิธีสร้างเรดาร์อย่างง่ายด้วย Arduino ชมวิดีโอการสอนแบบเต็มที่นี่: คลิกฉัน