Агуулгын хүснэгт:

Arduino дижитал луужингийн төсөл: 3 алхам
Arduino дижитал луужингийн төсөл: 3 алхам

Видео: Arduino дижитал луужингийн төсөл: 3 алхам

Видео: Arduino дижитал луужингийн төсөл: 3 алхам
Видео: Цифровой потенциометр X9C103 и Ардуино 2024, Арваннэгдүгээр
Anonim
Image
Image

Сайн уу? Энэхүү зааварчилгаанд та Arduino болон Processing IDE ашиглан дижитал луужин хэрхэн хийх талаар олж мэдэх болно. Энэ бол маш энгийн боловч сонирхолтой бөгөөд дажгүй харагдаж буй Arduino төсөл юм.

Та энэ хичээлийн демо жишээг дээрх видеоноос үзэх боломжтой. Та ийм сонирхолтой видеонуудыг миний YouTube суваг дээрээс, мөн HowToMechatronics.com вэбсайтаас электроникийн олон төсөл, хичээлүүдийг олж авах боломжтой.

Алхам 1: Шаардлагатай эд анги

Энэхүү төслийн хувьд танд дэлхийн соронзон орныг хэмжих Arduino самбар, MEMS соронзон хэмжүүр хэрэгтэй болно. Би MC5883L 3 - Axis Magnetometer агуулсан GY - 80 таслах самбарыг ашиглах болно.

Төслийн эх кодыг үргэлжлүүлэхийн өмнө танд MEMS соронз хэмжигч хэрхэн ажилладаг, I2C Харилцааны тусламжтайгаар GY - 80 таслагч самбарыг хэрхэн холбох, ашиглах талаар илүү дэлгэрэнгүй мэдээлэл хэрэгтэй бол та миний тусгай хичээлүүдийг шалгаж болно.

Алхам 2: Arduino эх код

Бидний хийх ёстой хамгийн эхний зүйл бол соронзон хэмжигчээс өгөгдлийг уншиж, боловсруулах IDE руу илгээх ноорог зургийг Arduino самбар дээр байршуулах явдал юм. Энд Arduino эх код байна:

/ * Arduino Compass * * Дежан Неделковский, * www. HowToMechatronics.com * */

#оруулах // I2C Arduino номын сан

#magnetometer_mX0 0x03 -ийг тодорхойлох

#магнитометр_mX1 0x04 #нарийвчлалтай соронз хэмжигч_mZ0 0x05 #нарийвчлалтай соронз хэмжигч_mZ1 0x06 #тодорхойлох магнитометр_mY0 0x07 #нарийвчлалтай соронзон хэмжүүр_mY1 0x08

int mX0, mX1, mX_out;

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

float heading, headingDegrees, headingFiltered, declination;

хөвөх Xm, Ym, Zm;

HMC5883 -ийн 0x1E // I2C 7 битийн хаягийг тодорхойлох

хүчингүй тохиргоо () {

// Цуваа ба I2C харилцааг эхлүүлэх Serial.begin (115200); Wire.begin (); саатал (100); Утас.beginTransmission (Magnetometer); Wire.write (0x02); // Wire.write горимын бүртгэлийг сонгох (0x00); // Тасралтгүй хэмжих горим Wire.endTransmission (); }

void loop () {

// ---- X-Axis Wire.beginTrmission (Magnetometer); // төхөөрөмж рүү дамжуулах Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTrmission (Magnetometer); // төхөөрөмж рүү дамжуулах Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y тэнхлэг

Wire.beginTransmission (Magnetometer); // төхөөрөмж рүү дамжуулах Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTrmission (Magnetometer); // төхөөрөмж рүү дамжуулах Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTrmission (Magnetometer); // төхөөрөмж рүү дамжуулах Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTrmission (Magnetometer); // төхөөрөмж рүү дамжуулах Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X тэнхлэг mX1 = mX1 << 8; mX_out = mX0+mX1; // Түүхий өгөгдөл // Өгөгдлийн хүснэгтээс: 0.92 mG/оронтой 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; гарчиг += хазайлт; // (<0 гарчиг) толгой += 2*PI байвал тэмдгүүдийг хүндэтгэх үед залруулга хийх;

// Хазайлтын өнцгийг нэмсэний улмаас залруулга хийх

хэрэв (толгой> 2*PI) гарчиг -= 2*PI;

headDegrees = гарчиг * 180/PI; // Зэрэглэлийн нэгжийн гарчиг

// Гаралтын өнцгийг тэгшлэх / Бага нэвтрүүлэх шүүлтүүр

headFiltered = headFiltered*0.85 + headDegrees*0.15;

// Гарчигын утгыг Цуваа портоор дамжуулан IDE боловсруулж байна

Serial.println (гарчиг Шүүлтүүртэй);

саатал (50); }

Алхам 3: IDE эх кодыг боловсруулж байна

Өмнөх Arduino ноорогыг байршуулсны дараа бид өгөгдлийг Processing IDE руу хүлээн авч, Digital Compass зурах хэрэгтэй. Луужин нь арын дэвсгэр зураг, сумны тогтмол дүрс, луужингийн биеийн эргэх дүрсээс бүрдэнэ. Тиймээс Arduino -той тооцоолсон дэлхийн соронзон орны утгыг луужин эргүүлэхэд ашигладаг.

Энд Processing IDE -ийн эх код байна:

/ * Arduino Compass * * Dejan Nedelkovski, * www. HowToMechatronics.com * */ импорт боловсруулах.сериал. *; java.awt.event. KeyEvent импортлох; java.io. IOException импортлох;

Цуваа myPort;

PI дүрс imgCompass; PImage imgCompassArrow; PI зургийн суурь;

String өгөгдөл = "";

хөвөх гарчиг;

хүчингүй тохиргоо () {

хэмжээ (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 (радиан (толгой))); // Луужинг Z -тэнхлэгийн дүрсний эргэн тойронд эргүүлнэ (imgCompass, -960, -540); // Луужингийн зургийг ачаалдаг бөгөөд координатын системийг нүүлгэн шилжүүлэх үед дүрсийг -960x, -540y (дэлгэцийн тал хэмжээтэй) popMatrix () болгож тохируулах шаардлагатай болдог; // Координатын системийг анхны байрлал руу буцаана 0, 0, 0 зураг (imgCompassArrow, 0, 0); // popMatrix () функцын textSize (30) функцээс болж rotateZ () функцэд нөлөөлдөггүй CompassArrow зургийг ачаална; текст ("Гарчиг:" + гарчиг, 40, 40); // Гарчгийн утгыг дэлгэц дээр хэвлэнэ

саатал (40);

}

// Цуваа портоос өгөгдлийг уншиж эхэлдэг

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // Цуваа портоос өгөгдлийг уншиж String хувьсагчийн "өгөгдөл" -д оруулдаг. гарчиг = хөвөх (өгөгдөл); // String утгыг Float утга болгон хөрвүүлэх}

Энэ төсөл танд таалагдана гэж найдаж байна. Хэрэв тийм бол та миний вэбсайтад зочилж илүү сонирхолтой төслүүдийг үзэх боломжтой.

Зөвлөмж болгож буй: