Съдържание:

Цифров компас и търсач на курса: 6 стъпки
Цифров компас и търсач на курса: 6 стъпки

Видео: Цифров компас и търсач на курса: 6 стъпки

Видео: Цифров компас и търсач на курса: 6 стъпки
Видео: Как правильно пользоваться КОМПАСОМ без карты/@CorcoranALОриентирование/Азимут 2024, Ноември
Anonim
Цифров компас и търсач на курсове
Цифров компас и търсач на курсове

Автори:

Кълън Уилън

Андрю Луфт

Блейк Джонсън

Благодарности:

Калифорнийска морска академия

Еван Чанг-Сиу

Въведение:

Основата на този проект е цифров компас с проследяване на заглавията. Това позволява на потребителя да следва посока на дълги разстояния с помощта на цифров апарат. Разговорно заглавието е ъгъл, измерен по посока на часовниковата стрелка от север, който се счита за нула градуса, както е посочено от компаса. Устройството има две основни функции: първата е показване на текущото заглавие на устройството върху справка за цифров дисплей, а втората е възможността за въвеждане на заявена от потребителя заглавка, която ще се показва на пръстен от светодиоди в горната част на корпус на компас. След това потребителят ще регулира ориентацията на устройството, свързана със светещия светодиод. С промяната на посоката на устройството светодиодът ще се придвижва към централния светодиод, като по този начин показва, че е установено правилното заглавие.

Консумативи:

- DIYmall 6M GPS модул

- HiLetgo MPU9250/6500 9-ос 9 DOF 16 бита

- Пръстен Adafruit NeoPixel 16

- MakerFocus 4бр 3.7V литиева акумулаторна батерия

- дъска ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w/Mini -B USB жак - USB LiIon/LiPoly зарядно устройство - v1

- 2.8 TFT LCD с тъчскрийн пробивна платка с гнездо за MicroSD

Стъпка 1: Проектиране на функционалността на проекта

Проектиране на функционалността на проекта
Проектиране на функционалността на проекта

Първата стъпка е разбирането на логиката и окончателната оперативна функционалност. Тази логическа диаграма изобразява трите състояния на устройството и двете състояния на сензора.

Състояние 1: Състояние на зареждане

Състоянието на зареждане се използва, за да позволи на Arduino Mega да получи данни от двата сензора при стартиране. Устройството ще покаже натоварването на екрана, ще изчисти всички стойности на числото на екрана, а светодиодите на пръстена NeoPixel ще светнат в кръг.

Състояние 2: Режим на компас

В това състояние устройството ще действа като цифров компас. Пръстенът NeoPixel ще светне, за да посочи посоката на север по отношение на ориентацията на устройството. Истинското заглавие на устройството също ще бъде показано на LCD екрана заедно с географската ширина и дължина на устройството. Също така в това състояние потребителят ще може да въведе заглавието на потребителя, което да се показва в състояние 3.

Състояние 3: Режим на проследяване на заглавие

В това състояние устройството вече ще помогне на потребителя да се установи на желаната от него позиция. Устройството вече ще показва курса на устройствата и заглавията на потребителите на LCD екрана заедно с данните за географската ширина и дължина. Пръстенът NeoPixel сега ще светне, за да посочи посоката на потребителите по отношение на ориентацията на устройствата.

Както в състояние 2, така и в състояние 3 има две състояния на сензора, които позволяват на устройството да извлича данни от сензора, който предоставя най -точните данни в зависимост от експлоатационното състояние на устройството.

Състояние на сензора 1: MPU

Ако устройството не се движи, данните от заглавието ще бъдат изтеглени от MPU, тъй като това са най -точните данни, когато устройството не се движи.

Състояние на сензора 2: GPS

Ако устройството се движи, данните за заглавието ще бъдат изтеглени от GPS чипа, тъй като това са най -точните данни в това състояние.

Устройството може да превключва между тези състояния на сензора по всяко време, за да отчете условията на използване на променящия се уред. Това е важно за работата на устройството, тъй като и двата сензора, използвани в устройството, имат условия, които влияят върху точността на предоставените от тях данни. В случая на MPU чипът може лесно да бъде повлиян от локални магнитни полета, причинени от автомобили и метални строителни материали в сгради. По този начин се използва GPS чип, който може да осигури много по -точна позиция, която не се влияе от същите влияния. Въпреки това, GPS може да предоставя данни само за посоката, когато се движи, тъй като изчислява посоката, като използва промяната в данните за географската ширина и дължина. Следователно чиповете се допълват взаимно и с помощта на двете състояния на сензора осигуряват най -точната и надеждна функционалност на устройството.

Стъпка 2: Настройка и диаграма на проводника

Настройка и диаграма на проводника
Настройка и диаграма на проводника
Настройка и диаграма на проводника
Настройка и диаграма на проводника
Настройка и диаграма на проводника
Настройка и диаграма на проводника

Проектът използва и дъска за клониране на Arduino Mega, подобна на горната дъска. Всички компоненти в проекта ще бъдат свързани към тази платка. По -горе са подробни схеми за това как да свържете компонентите за този проект. Бутоните нямат подробна схема, тъй като те могат да бъдат настроени по много начини. В този проект те използват 100K издърпващ резистор и обикновен бутон за изпращане на 3 -волтов сигнал към назначения му пин.

Стъпка 3: Тестване на компоненти и основен код

Проектът ще извлича данни както от MPU, така и от GPS чипа, както е описано по -рано. Прикачени са три кода, които позволяват тестване на данни от MPU, GPS и MPU с екран за проверка на функционалността на частите. Важно е да се задействат компонентите на този етап, тъй като кодът е отделен за всеки чип и всички проблеми могат да бъдат решени без страх да не причинят непредвидени грешки в крайния код.

Задължителни библиотеки:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Всичко това може да бъде намерено чрез търсене в заглавията по -горе. Няма да публикувам връзки, тъй като има много копия на тези библиотеки от множество източници и придържайки се към стандарта на общността за свързване само с оригинали, ще ви позволя да ги намерите сами.

Стъпка 4: Калибриране на MPU

Калибриране на MPU
Калибриране на MPU

Заглавието, открито чрез MPU в състояние 2 и състояние 3, беше разделено на четири квадранта. Това беше необходимо, защото нашият метод за калибриране изискваше намирането на минималната и максималната величини от магнитометъра по осите му x и y. Това стана чрез завъртане на устройството на случаен принцип около трите му оси, без никакви значителни електромагнитни полета, различни от това на Земята. След това взехме минималните и максималните стойности по оста x и y и ги включихме в уравнение за мащабиране, за да ограничим величините между стойностите на отрицателни единица и единица. На горната фигура BigX и BigY са максималните стойности на данните от магнитометъра съответно по оста x и y, LittleX и LittleY са минималните стойности на данните от магнитометъра по х и y съответно, IMU.getMagX_uT () и IMU.getMagY_uT () са стойностите, които се изтеглят от магнитометъра по всяко време по оста x и y съответно, а Mx и My са новите мащабирани стойности, използвани за изчисляване на заглавието.

Стъпка 5: Окончателен код

Окончателен код
Окончателен код
Окончателен код
Окончателен код
Окончателен кодекс
Окончателен кодекс
Окончателен кодекс
Окончателен кодекс

Последната стъпка е създаването на окончателния код. Приложих копие от окончателния код на проектите. В рамките на бележките са направени, за да се улесни навигацията в кода. Най -голямото предизвикателство на този раздел беше да накарате квадрантите да работят правилно. Изпълнението на квадрантите се оказа по-досадно и противоречиво на логиката, отколкото бихме могли да очакваме. Първоначално внедрихме основен арктан (My/Mx) и след това преобразувахме от радиани в градуси, тъй като Arduino извежда в радиани по подразбиране. Единственият квадрант, в който работи, беше от 90 градуса до 180 градуса, което ни даде отрицателен резултат и в крайна сметка беше квадрант III. Решението на това приемаше абсолютната стойност, тъй като все още се увеличаваше правилно. След това тази стойност беше извадена от 360, за да светне правилния светодиод NeoPixel в състояние 2 и подобна математическа операция беше използвана в състояние 3 въз основа на това дали заглавието е по -голямо или по -малко от заглавието на потребителя, и двете могат да се видят в горния код. На горните фигури Heading съответства на NeoPixel светлината, която ще светне въз основа на разликата между заглавието на устройството и отклонението от север в случай на състояние 2 и от това на заглавието на потребителя. В този случай 90 до 180 градуса съответстват на квадрант III. И в двата случая tft.print кара екрана да чете посоката на устройството от север.

За другите три квадранта внедряването на arctan (My/Mx) доведе до инверсия на инкрементацията при завъртане на устройството, т.е. Решението на този проблем беше да обърнем арктангенса до формата на арктан (Mx/My). Въпреки че това реши инверсията на увеличаване, то не даде правилното заглавие на устройството, където се появиха квадрантите. Простото решение за това беше добавянето на промяна въз основа на съответния квадрант. Това може да се види на следващите фигури, които отново са парчета код от състояния 2 и 3 от всеки квадрант.

Първият оператор if се извършва, ако заглавието, изчислено чрез уравнението на MPU, е по -голямо от заглавието на потребителя. При това условие входната заглавие на потребителя се добавя към заглавието на устройството и съответната стойност се изважда от 360. Ако се изпълнява операторът else, уравнението на заглавието на MPU се изважда от входното заглавие на потребителя. Тези условия бяха приложени с цел не само да се получи точна стойност за NeoPixel, но и да се избегне получаване на стойност извън допустимия диапазон, който е от 0 до 359 градуса.

Препоръчано: