Съдържание:
- Стъпка 1: Необходими части
- Стъпка 2: Изходният код на Arduino
- Стъпка 3: Обработка на IDE изходния код
Видео: Проект за цифров компас на Arduino: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Здравейте! В тази инструкция ще видите как можете да направите цифров компас, използвайки Arduino и IDE за обработка. Това е доста прост, но интересен и готин Arduino проект.
Можете да гледате демонстрационния пример на този урок във видеото по -горе. Винаги можете да намерите по -интересни видеоклипове като този в моя канал в YouTube, както и да намерите много проекти за електроника и уроци на моя уебсайт, HowToMechatronics.com
Стъпка 1: Необходими части
За този проект ще ви трябват само Arduino Board и MEMS магнитометър за измерване на земното магнитно поле. Ще използвам пробивната платка GY - 80, която съдържа MC5883L 3 - осен магнитометър.
Преди да продължим с изходния код на проекта. Ако имате нужда от повече подробности как работи магнитометърът MEMS, както и как да свържете и използвате пробивната платка GY - 80 чрез комуникацията I2C, можете да проверите конкретните ми уроци за това.
Стъпка 2: Изходният код на Arduino
Това, което трябва първо да направим, е да качим скица на Arduino Board, която ще прочете данните от магнитометъра и ще ги изпрати до IDE за обработка. Ето изходния код на Arduino:
/ * Компас Arduino * * от Деян Неделковски, * www. HowToMechatronics.com * */
#include // I2C Arduino библиотека
#Определете магнитометър_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, склонение;
поплавък Xm, Ym, Zm;
#define Магнитометър 0x1E // I2C 7 -битов адрес на HMC5883
void setup () {
// Инициализиране на серийни и I2C комуникации Serial.begin (115200); Wire.begin (); забавяне (100); Wire.beginTransmission (магнитометър); Wire.write (0x02); // Избор на регистър на режим Wire.write (0x00); // Режим на непрекъснато измерване Wire.endTransmission (); }
void loop () {
// ---- Wire 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/цифра 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;
// Коригиране поради добавяне на ъгъла на склонение
if (заглавие> 2*PI) заглавие -= 2*PI;
headingDegrees = заглавие * 180/PI; // Заглавието в единица градуси
// Изглаждане на изходния ъгъл / Нискочестотен филтър
headingFiltered = headingFiltered*0,85 + headingDegrees*0,15;
// Изпращане на стойността на заглавието през серийния порт до IDE за обработка
Serial.println (headingFiltered);
забавяне (50); }
Стъпка 3: Обработка на IDE изходния код
След като качим предишната скица на Arduino, трябва да получим данните в IDE за обработка и да нарисуваме цифровия компас. Компасът се състои от фоново изображение, неподвижно изображение на стрелката и въртящо се изображение на тялото на компаса. Така че стойностите за земното магнитно поле, изчислени с Arduino, се използват за завъртане на компаса.
Ето изходния код на IDE за обработка:
/ * Arduino Compass * * от Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; импортиране на java.awt.event. KeyEvent; импортиране на java.io. IOException;
Сериен myPort;
PImage imgCompass; PImage imgCompassArrow; PImage фон;
Низови данни = "";
плаващ заглавие;
void setup () {
размер (1920, 1080, P3D); гладка (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = нов сериен (това, "COM4", 115200); // стартира серийната комуникация myPort.bufferUntil ('\ n'); }
void draw () {
изображение (фон, 0, 0); // Зарежда фоновото изображение pushMatrix (); превод (ширина/2, височина/2, 0); // Превежда координатната система в центъра на екрана, така че завъртането става точно в центъра rotateZ (радиани (-заглавие)); // Завърта компаса около Z -изображение на оста (imgCompass, -960, -540); // Зарежда изображението на компаса и тъй като координатната система се премества, трябва да настроим изображението на -960x, -540y (половината от размера на екрана) popMatrix (); // Връща координатната система обратно в първоначалната позиция 0, 0, 0 изображение (imgCompassArrow, 0, 0); // Зарежда изображението CompassArrow, което не се влияе от функцията rotateZ () поради функцията popMatrix () textSize (30); текст ("Заглавие:" + заглавие, 40, 40); // Отпечатва стойността на заглавието на екрана
забавяне (40);
}
// започва да чете данни от серийния порт
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // чете данните от серийния порт и ги поставя в променливата String "data". заглавие = поплавък (данни); // Конвертиране на стойността на String в Float стойност}
Надявам се този проект да ви хареса. Ако е така, можете да посетите и уебсайта ми за още готини проекти.
Препоръчано:
Цифров компас и търсач на курса: 6 стъпки
Цифров компас и търсач на заглавия: Автори: Кълън Уилън Андрю Луфт Блейк Джонсън Благодарности: Калифорнийска морска академия Евън Чанг-Сиу Въведение: Основата на този проект е цифров компас с проследяване на заглавията. Това позволява на потребителя да следва заглавие на голямо разстояние
Как да съборите цифров апарат и как работи цифров апарат: 4 стъпки
Как да съборите цифров апарат и как работи цифров апарат: Много хора знаят как да използват шублери за измерване. Този урок ще ви научи как да съборите цифров шублер и обяснение как работи цифровият апарат
Цифров компас с помощта на магнитометър Arduino и HMC5883L: 6 стъпки
Цифров компас, използващ магнитометър Arduino и HMC5883L: Здравейте, момчета, Този сензор може да посочи географския север, юг, изток и запад, ние хората също бихме могли да го използваме, когато е необходимо. Така. В тази статия нека се опитаме да разберем как работи сензорът за магнитометър и как да го свържем с микроконтролер
Как да използвате модул GY511 с Arduino [Направете цифров компас]: 11 стъпки
Как да използваме модул GY511 с Arduino [Направете цифров компас]: Общ преглед В някои проекти за електроника трябва всеки момент да знаем географското местоположение и съответно да извършим конкретна операция. В този урок ще научите как да използвате модула за компас LSM303DLHC GY-511 с Arduino за направата на цифрови компаси
Горелка с USB захранване! Този проект може да изгори чрез пластмаса / дърво / хартия (забавният проект също трябва да бъде много фино дърво): 3 стъпки
Горелка с USB захранване! Този проект може да изгори чрез пластмаси / дърво / хартия (забавният проект също трябва да бъде много фин дървен материал): НЕ ПРАВЕТЕ ТОВА С ИЗПОЛЗВАНЕ НА USB !!!! разбрах, че може да повреди компютъра ви от всички коментари. компютъра ми е добре. Използвайте зарядно устройство за телефон 600ma 5v. Използвах това и работи добре и нищо не може да се повреди, ако използвате предпазен щепсел, за да спрете захранването