СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Направление «Мобильные роботы и средства автоматизации» «GPS ТРЕКЕР КАК ИНСТРУМЕНТ АВТОМАТИЗАЦИИ И УПРАВЛЕНИЯ»

Категория: Технология

Нажмите, чтобы узнать подробности

Проектная работа по робототехнике

Просмотр содержимого документа
«Направление «Мобильные роботы и средства автоматизации» «GPS ТРЕКЕР КАК ИНСТРУМЕНТ АВТОМАТИЗАЦИИ И УПРАВЛЕНИЯ»»

МУНИЦИПАЛЬНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ОДИНЦОВСКАЯ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ

ШКОЛА №3

(143000 Московская область, г. Одинцово, ул. Верхнеек-Пролетарская д.14)







КОНКУРСНАЯ РАБОТА

Номинация (робототехника)

Направление «Мобильные роботы и средства автоматизации»

«GPS ТРЕКЕР КАК ИНСТРУМЕНТ АВТОМАТИЗАЦИИ И УПРАВЛЕНИЯ

НАЗВАНИЕ РАБОТЫ»






GPS трекер как инструмент автоматизации и управления


Выполнил:

Рычков Виталий, 98 класс

Московская Область

Г. Одинцово

Ул. Верхне-Пролетарская, д.14

Руководитель:

Талалаева Галина Викторовна,

Учитель технологии и робототехники

Одинцовской средней общеобразовательной школы №3

























Одинцово

2020





СОДЕРЖАНИЕ

Введение………………………………………………………………………….4

Раздел 1. Теоретическая часть

1.1 История появления манекенов. Техника папье-маше……………………5

1.2 Банк идей, эскизы. Выбор оптимальных идей и их обоснование……….7

1.3 Инструменты, материалы и приспособления…………..………………...9

1.4 Техника безопасности ……………………………..………………………9

Раздел 2. Технологическая часть:

Исследование, анализ, проблемы……………………………………………….11

2.2. Эскизный проект…………………………………………………………...11

2.3. Конструктивно-технологическая документация………………………..12

2.4. Экономическое обоснование……………………………………………..12

2.5. Экологическое обоснование………………………………………………14

2.6. Самооценка. ……………………………………………………………......14

2.7. Реклама……………………………………………………………………..14

Заключение…………………………………………………..............................15

Список литературы…………………………………………………………....16

Приложения…………………………………………………………………….17

ВВЕДЕНИЕ 3

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 4

1.1. Устройство и назначение 4

1.2. Техническое решение 5

1.3. Инструменты, материалы и приспособления 5

2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 5

2.1. Исследование, анализ проблемы 5

2.2. Эскизный проект 5

2.3. Конструкторско-технологическая документация 6

2.4. Экономическое обоснование 6

2.5. Экологическое обоснование 6

2.6. Самооценка 6

ЗАКЛЮЧЕНИЕ 6

СПИСОК ЛИТЕРАТУРЫ 7

ПРИЛОЖЕНИЯ 8

Приложение 1. Иллюстрации 8

Приложение 2. Исходный код 9

ВВЕДЕНИЕ 4

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 5

1.1. Устройство и назначение 5

1.2. Техническое решение 6

1.3. Инструменты, материалы и приспособления 6

2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 6

2.1. Исследование, анализ проблемы 6

2.2. Эскизный проект 6

2.3. Конструкторско-технологическая документация 7

2.4. 2.4. Экономическое обоснование 7

2.5. 2.5. Экологическое обоснование 7

2.6. 2.6. Самооценка 7

ЗАКЛЮЧЕНИЕ 7

СПИСОК ЛИТЕРАТУРЫ 8

ПРИЛОЖЕНИЯ 9

Приложение 1. Иллюстрации 9

Приложение 2. Исходный код 10

ВВЕДЕНИЕ 3

РАЗДЕЛ 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 4

РАЗДЕЛ 2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 5

ЗАКЛЮЧЕНИЕ 6

СПИСОК ЛИТЕРАТУРЫ 7

ПРИЛОЖЕНИЯ 8

ВВЕДЕНИЕ 3

Цель исследования: 3

РАЗДЕЛ 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 4

РАЗДЕЛ 2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 5

ЗАКЛЮЧЕНИЕ 6

СПИСОК ЛИТЕРАТУРЫ 7

ПРИЛОЖЕНИЯ 8















ВВЕДЕНИЕ


Давайте оОпустивм теоретический аспект работы орбитальных группировок спутников GPS и ГЛОНАСС, а поговорим  ниже изложеныо прикладныех аспектах применения технологии GPS-контроля. Метод завоевал популярность благодаря высокой достаточной точности  – погрешность составляет не более  5-10 метров, а также глобальному покрытию. Благодаря этому наблюдатель может легко отслеживать объектысигналы со спутников доступны практически на любом расстояниив любой точке земного шара.

Местоположение определяется с помощью спутников ГЛОНАСС и, GPS, Galileo и т. д., контроль же при этом ведется в реальном времени. Это достигается за счет постоянногой передачи информации в систему мониторинга – посредством надежной беспроводной связи (как правило, GSM/GPRS) приема данных со спутников и их обработки.

Таким образом, мы приходим к тому, что система GPS-контроля включает в себя геопозиционирования позволяет создавать и использовать устройства для определения, записи и обработки местоположения – GPS трекеры, а также онлайн сервис для наблюдения.

GPS -трекеры – это маленькие электронные «маячки»приемники, с помощью которых отслеживается определяется точное местоположениенахождение объектаов. Получаемые со спутников данные (координаты, точное время) могут быть записаны в виде маршрута (совокупности координат по широте и долготе), обработаны для вычисления углов азимута и в последствии использованы для различных целей. Это может быт воспроизведением маршрута с целью навигации по нему человека или технических средств.Для разных задач и объектов GPS-контроля предусмотрены разнообразные модели. Для людей подходят маленькие носимые устройства, для автомобилей и посылок – портативные маячки-закладки. Для постоянного отслеживания автотранспорталучше использовать GPS-трекеры, подключаемые к бортовой сети или в разъем диагностики (OBDII). Онлайн сервис GPS-контроля – это главный инструмент для наблюдения. Он позволяет отслеживать текущее местоположение, просматривать подробную историю поездок, создавать правила для оповещений о важных событиях (например, выход из геозоны). Для корпоративного использования предусмотрены аналитические отчеты по использованию транспорта и ГСМ, контролю выездных сотрудников и т.д. Благодаря мобильным приложениям GPS-контроль можно осуществлять откуда угодна – прямо с телефона или планшета.


Цель исследования:

Практическое исследование возможности использования бытовой системы геопозиционирования для автоматизации процессов управления техникой и/или помощи слабовидящим и незрячим людям.


Задачи исследования:

Подтверждение или опровержение возможности на современном этапе развития систем геопозиционирования и технических средств полноценного их использования для практического применения.



Актуальность:

Существует гуманитарная потребность в помощи людям с ослабленным зрением или вовсе незрячим в перемещении по заданным маршрутам, например, до аптеки или магазина. В этом случае при идеальных технических условиях устройство GPS трекер с возможностью воспроизведения заранее записанных маршрутов могло бы заменить традиционную собаку-поводыря.

Другим случаем практического применения может выступать навигация техники, например, сельскохозяйственной, по предопределенному заранее маршруту без участия оператора. Например, системное движение по пахотным землям.


Гипотеза исследования:

Основываясь на современном опыте использования средств навигации от мировых лидеров Google и Яндекс, выдвинута гипотеза возможности применения подобных алгоритмов без использования картографического обеспечения, а лишь на основе системы геопозиционирования, доступной бытовой элементной базы и математического обеспечения.


Требования к изделию:

- Изначально ставились критерии доступности элементной базы, низкая их себестоимость для создания прототипа и исследования задачи, низкое энергопотребление.быть красивым, привлекательным, иметь низкую себестоимость, безопасным, экологически чистым, эстетичным, легким, органично вписываться в интерьер класса.


Методы исследования:

В основе исследования лежит создание прототипа устройства, GPS трекера, с возможностью записи маршрута движения и последующего его чтения с выдачей навигационных данных и управляющих сигналов.

В качестве элементной базы взят микроконтроллер с интерпретатором JavaScript, выполняющий алгоритмы записи/чтения маршрута и вычисления расстояний и углов между контрольными точками на нем. Для связи с системой GPS и в качестве органов управления использованы модульные элементы от компании «Амперка» (http://amperka.ru).

Проведен ряд полевых испытаний с целью определения возможности полноценного практического применения подобных устройств.


Этапы проекта:

  1. 1. Информационный (поиск информации по теме проекта).

  2. 2. Технологический (моделирование, практическая работа по изготовлению изделия, создание технологической карты).

  3. 3. Обобщение деятельностирезультатов полевых испытаний, выводы.

  4. 4. Представление результатов деятельностиисследования.



  1. РАЗДЕЛ 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ


    1. ………..Устройство и назначение

GPS трекер представляет собой прототип технического устройства для записи маршрута и навигации по нему при воспроизведении без географической карты.

При идеальных условиях с повышенной точностью позиционирования мог бы служить поводырем для незрячих.

В общем случае – как командное устройство для автоматизированного управления, например, аграрной техникой на полях.



    1. Техническое решение

В режимах записи и воспроизведения производится вычисление дистанции между контрольными точками, угла между ними относительно севера и направления на следующую точку на основе координат, полученных со спутников и записанных ранее

Вычисление выполняется с учетом текущей широты на референц-эллипсоиде Красовского

В ходе навигации направление и повороты на контрольных точках прототипом озвучиваются сигналами зуммера. В последующих версиях устройства возможно использование стереофонического аудиовыхода для разделения левого и правого направлений.












    1. Инструменты, материалы и приспособления
  • Iskra JS — микроконтроллер с встроенным интерпретатором JavaScript. Совместим с платами-шилдами для Arduino

  • Troyka Slot Shield – коммутатор для подключения модулей специализированного формата (Troyka-модули)

  • Приёмник GPS/GLONASS со встроенной антенной v2 (Troyka-модуль)

  • SD картридер (Troyka-модуль)

  • Четырёхразрядный индикатор v2 (Troyka-модуль)

  • Аккумулятор Power Bank (Li-Ion, 2000 мА·ч)

  • Зуммер (Troyka-модуль)

  • Кнопки: простая и со светодиодом (Troyka-модули)

Кнопки: простая и со светодиодом (Troyka-модули), Зуммер (Troyka-модуль), Аккумулятор Power Bank (Li-Ion, 2000 мА·ч), Четырёхразрядный индикатор v2 (Troyka-модуль), SD картридер (Troyka-модуль), Приёмник GPS/GLONASS со встроенной антенной v2 (Troyka-модуль)

Вставь текст с 5и6 слайда









    1. 1.3. Техника безопасности при работе с режущими инструментами

  1. РАЗДЕЛ 2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ
    1. 2.1. Исследование, анализ проблемы

Задачей проекта, в первую очередь, является определение практической применимости системы геопозиционирования на бытовом уровне, что отличается от военного ее применения точностью и погрешностями.

В ходе работ с использованием прототипа GPS трекера был проведен ряд полевых испытаний в различных условиях (открытая местность, плотная городская застройка в различных местах города).

Результаты испытаний приведены в разделе «заключение».


    1. 2.2. Эскизный проект нарисовать на бумаге карандашем и сфоткать

В силу того, что для макетирования и создания прототипа использовалась готовая элементная база от отечественной компании «Амперка» разработка эскизного проекта не потребовалась. Внешний вид прототипа приведен в приложении 1.




    1. 2.3. Конструкторско-технологическая документация

Пару предложений и картинки в приложении (Приложение 1)

В приложении 2 приведен исходный код под интерпретатор JavaScript на платформе Espruino


    1. 2.4. Экономическое обоснование

Стоимость компонент для прототипирования (6330 ₽ руб.):

  • Iskra JS: 1 390 ₽ руб.

  • Troyka Slot Shield: 590 руб. ₽

  • Приёмник GPS/GLONASS: 1 290 руб. ₽

  • SD картридер: 390 руб. ₽

  • Четырёхразрядный индикатор: 690 руб. ₽

  • Аккумулятор Power Bank: 1 540 руб. ₽

  • Зуммер (Troyka-модуль): 130 руб. ₽

  • Кнопки: простая и со светодиодом: 120 руб. ₽ и 190 руб. ₽ соответственно



    1. 2.5. Экологическое обоснование

Не требуется ввиду того, что изделие никоим образом не виляет на окружающую среду и человека, в частности.


    1. 2.6. Самооценка

Проведенные исследования и испытания дали мне общее понимание принципов гепозиционирования, связанных с ним технических ограничений и перспективных возможностей в этой области. Наличие доступной элементной базы для прототипирования и испытаний позволяют практически понять эти перспективные возможности. Кроме того, разработка позволила на практике применить навыки программирования на JavaScript.

Работа доставила мне огромное удовольствие. В ходе работы над изделием серьезных трудностей не испытываешь. Изделие выполнено аккуратно. Эстетично, а самое главное оно функционально и долго послужит …………………………………….


ЗАКЛЮЧЕНИЕ



В ходе исследований и испытаний определено:

  1. Алгоритмы математического расчета расстояний и углов между контрольными точками на маршруте в принципе работоспособны, но требуют достаточно точных входных данных.

Доступное аппаратное обеспечение позволяет создать устройство автоматизации управления движением техническими средствами, но не в условиях городской застройки, а, например, применительно к сельскохозяйственной или иной технике, работающей на открытых полях, где отсутствуют искажения сигнала GPS и в наличии большее количество спутников в зоне видимости. Технически устройство в состоянии выдавать соответствующие управляющие сигналы на исполнительные механизмы в процессе чтения ранее записанного маршрута и вычисления расстояний и углов поворота.

Современное состояние средств геопозиционирования, включая спутниковые группировки и приемники не достаточны для применения в качестве помощи (электронного поводыря) для слабовидящих и незрячих людей.

  1. Выявлено, что для бытового применения в отличие от военного современные системы геопозиционирования, такие как GPS, ГЛОНАСС, Galileo навигационные сигналы намеренно загрубляются, что не позволяет достаточно точно определять текущие координаты. Кроме того, в условиях городской застройки сигналы дополнительно искажаются и погрешность измерения возрастает порой в разы.

  2. Подтверждено, что современные навигационные системы (Google, Яндекс) решают вышеперечисленные проблемы и достигают достаточно высокой точности именно из-за наличия дополнительно картографии и более сложного математического обеспечения с учетом ускорений, погрешностей и прогнозированием дальнейшего маршрута.




СПИСОК ЛИТЕРАТУРЫ





  1. Статья Википедии «Земной эллипсоид»:

https://ru.wikipedia.org/wiki/%D0%97%D0%B5%D0%BC%D0%BD%D0%BE%D0%B9_%D1%8D%D0%BB%D0%BB%D0%B8%D0%BF%D1%81%D0%BE%D0%B8%D0%B4

  1. Онлайн калькулятор «Радиус на определенной широте»: https://planetcalc.ru/7721/




ПРИЛОЖЕНИЯ



Приложение 1. Иллюстрации




Рисунок 1 – Внешний вид прототипа GPS трекера



Приложение 2. Исходный кодСценарий JavaScript










































!!! По завершении работы по отладке.


Serial3.setup(9600, {rx: P0, tx: P1}); //Для нашей модели GPS сенсора (9600. Для других по умолчанию - 115200).


var myButton = require('@amperka/button').connect(P6, {holdTime: 3.5});

var myButton1 = require('@amperka/button').connect(P11, {holdTime: 3.5});

var sdCard = require('@amperka/card-reader').connect(P8);

var myLed = require('@amperka/led').connect(P3); myLed.brightness(0.6);

var quad2 = require('@amperka/quaddisplay2').connect(P10);

var myBuzzer = require('@amperka/buzzer').connect(P2);


var WriteOn=false; //Режим записи активирован

var ReadOn=false; //Режим чтения активирован

var Pos; //Координаты текущей позиции

var mtr; //1 метр в десятичных градусах на текущей широте

var s; //Количество спутников

var r; //Счетчик для режима чтения (четный - показ кол-ва спутников, номера контрольной точки, расстояния до нее. Нечетный - угол на точку)

var tw; //ID для таймера SetInterval режима записи

var tr; //ID для таймера SetInterval режима чтения

var f; //Объект File для чтения

var bs = 0; //Счетчик для BeepSeq

var sq; //Массив для звуковой последовательности

var crd; //Координаты предыдущей точки для режима записи (для вычисления расстояния до новой точки и угла)

var t = Date.now(); //Время до установки фиксации четырьмя спутниками

var init; //true = Активирована инициализация устройства

var q; //Стринг, отправляемый на дисплей

var i; //Счетчик контрольных точек

var delta=0; //Расстояние между текущей и целевой точками

var angle=0; //Угол текущего положения относительно севера


var gps = require("GPS").connect(Serial3, function(data){

Pos=data;


s=Pos.satellites;

if(s9){s='E';}

if(!WriteOn && !ReadOn){

if(Pos.fix==1){

if (t!=0){ //Только что зафиксировалось (До сих пор были часы)

BeepSeq(['3900,350','3900,350','3900,350']);

t=0; //Сброс времени начала отсчета фиксации (минимум четыре спутника)

}

q=s.toString() + ' ' + Math.round(E.getTemperature());

}

else{ //Пока нет фиксации, показываем время

if (t==0){t = Date.now();} //Запуск нового отсчета фиксации

q=new Date(Date.now() - t);

var mm=q.getMinutes();

var ss=q.getSeconds();

q=(mm '0' + mm : mm) + '.' + (ss '0' + ss : ss);

}

QuadDisplay(q);

}

});


function RecordTrack(){

if(ReadOn){return false;} //Доп. проверка для предотвращения случайной перезаписи файла трека

i=0; //Инициализация счетчика контрольных точек

tw = setInterval(function() {

if(i==0){ //Первая запись с созданием нового файла трека

crd=Pos.lat + ';' + Pos.lon; //Кэш предыдущей координаты для вычисления в следующем цикле

//sdCard.writeFile('Track.csv', Pos.lat + ';' + Pos.lon);

sdCard.writeFile('Track.csv', crd);

BeepSeq(['3900,350']);

i+=1;

}

else{ //Дозапись последующих строк в ранее созданный файл трека

delta=GetDelta(crd);

if(delta = 9){ //Запись следующей точки, только если между предыдущей (crd) и текущей не менее 9 м.

AppendFile();

}

}

QuadDisplay(i.toString() + ' ' + delta.toFixed(1).toString()); //Под GetDelta()

}, 1000);

}


function AppendFile(){

BeepSeq(['3900,350']);

angle=GetAngle(parseFloat(crd.split(';')[0]), parseFloat(crd.split(';')[1]), parseFloat(Pos.lat), parseFloat(Pos.lon));

sdCard.appendFile('Track.csv',';' + angle + "\r\n" + Pos.lat + ';' + Pos.lon);

crd=Pos.lat + ';' + Pos.lon; //Кэш предыдущей координаты для вычисления в следующем цикле

i+=1;

}


function ReadTrack(){

var ln=''; //Очередная строка файла трека

var dest=true; //Достигнута контрольная точка (true - для чтения первой строки файла трека)

var m=0; //Счетчик переключения отображения (либо расстояние, либо угол)

var ang; //Угол на следующую точку относительно севера

var angPrev; //Угол предыдущей точки относительно севера

var corridor; //Разница углов между текущей и предыдущей точками

var turn; //Угол, на который нужно повернуть к следующей точке

f = E.openFile("Track.csv","r");

i=1; //Инициализация счетчика контрольных точек

tr = setInterval(function() {

if (dest==true){ //Если очередная точка достигнута

dest = false;

ln=ReadLine();

}

if (ln!=''){ //Не дочитана последняя строка файла трека

delta = GetDelta(ln); //Расстояние до следующей точки

if (i1) { //Только если первая точка пройдена

corridor = GetAngle(parseFloat(Pos.lat), parseFloat(Pos.lon), parseFloat(ln.split(';')[0]), parseFloat(ln.split(';')[1])) - angPrev; //Угол "коридора" движения

if (ln.split(';').length==3){ //Если в наличии запись угла (в последней точке его нет)

ang=ln.split(';')[2]; //Угол следующей точки относительно севера

if(ang 180) angPrev = 360; //Исключение, если угол более 180 градусов, то предыдущий считать не нулем, а 360 (чтобы левый - отрицательный, а правый - положительный)

turn = ang - angPrev; //Угол поворота на следующую точку относительно вектора движения. (Отрицательный - слева, положительный - справа)

if (turn 180){

turn = turn - 360;

}

else if (turn

turn = turn + 360;

}

}

}

if (i==1){

QuadDisplay(delta.toFixed(1).toString()); //Пока первая точка не найдена, то только расстояние до нее

}

else{

m++;

if(m//1 сек. спутники, номер точки

QuadDisplay(s.toString() + ' ' + i.toString());

}

else if(m//4 сек. расстояние до следующей точки

QuadDisplay(delta.toFixed(1).toString());

}

else if(m//4 сек. угол "коридора" вектора на следующую точку

QuadDisplay(Math.round(corridor).toString());

}

else if(m//2 сек. угол на следующую точку

QuadDisplay(Math.round(turn).toString());

}

else{ //Сброс счетчика дисплея

m=0;

}

}


if (delta //

dest=true;

if (ln.split(';').length==3) angPrev = ln.split(';')[2]; //Запомнить угол первой пройденной точки для дальнейшего сравнения при движении к следующей

if (i==1){

if (ln!='' && !myBuzzer.isOn()) BeepSeq(['3900,350']); //Сигнал для первой точки

}

i++;

if(turn 25){

myBuzzer.turnOff();

BeepSeq(['3900,500','0,1000','3900,500']); //Два сигнала, что нужно повернуть направо

}

else if (turn

myBuzzer.turnOff();

BeepSeq(['3900,500','0,1000','3900,500','0,1000','3900,500']); //Три сигнала, что нужно повернуть налево

}

else if (turn = -15 || turn

if (ln!=''){

myBuzzer.turnOff();

BeepSeq(['3900,350']); //Один сигнал только если есть еще точка впереди. Иначе - сигнал окончания трека в ReadEnd()

}

}

}

else { //Точка не достигнута. Проверяем, в "коридоре" ли

if (!isNaN(delta) && dest==false){

if (corridor //Высокая скважность - отклонение влево. Надо отклониться направо

//myBuzzer.turnOff();

if (!myBuzzer.isOn()) Beep(500,3900);

}

else if (corridor 15){ //Низкая скважность - отклонение вправо. Надо отклониться левее

//myBuzzer.turnOff();

if (!myBuzzer.isOn()) Beep(75,3900);

}

else{

myBuzzer.turnOff();

}

}

}

}

else{ //Конец файла трека

myBuzzer.turnOff();

//BeepSeq(['700,150','1000,200','1200,300','1500,500','1200,200','1500,300']); //Октавой ниже, но слышно хуже на такой частоте бипера

BeepSeq(['1000,200','3500,200','3600,300','3900,500','3600,200','3900,300']);

ReadEnd();

}

}, 1000);

}


function GetDelta (coord) { //Получить расстояние от текущей точки до целевой

//Радиус на заданной широте

var a = 6378137.0; //Большая полуось эллипсоида Красовского в метрах (1940 г. https://ru.wikipedia.org/wiki/Референц-эллипсоид_Красовского)

var b = 6356752.3142; //Малая полуось в метрах

radius=Math.sqrt((Math.pow(Math.pow(a, 2) * Math.cos(Pos.lat), 2) + Math.pow(Math.pow(b, 2) * Math.sin(Pos.lat), 2)) / (Math.pow(a * Math.cos(Pos.lat), 2) + Math.pow(b * Math.sin(Pos.lat), 2)));

if(isNaN(radius) || typeof(radius)=='undefined'){radius = 6378135;} //Если радиус не определен, то берем средний радиус Земли в метрах

var rad = Math.PI/180.0; //1 Радиан

var lat1 = parseFloat(Pos.lat) * rad;

var lon1 = parseFloat(Pos.lon) * rad;

var lat2 = parseFloat(coord.split(';')[0]) * rad;

var lon2 = parseFloat(coord.split(';')[1]) * rad;

var theta = lon2 - lon1;

var delta = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(theta));

if (delta


delta = delta * radius;

return delta;

}


function GetAngle(lat1, long1, lat2, long2){

var dlon_W, dlon_E, dphi, atn2, dlon, tc;

var sign;

lat1 = lat1*Math.PI/180; //Конвертируем десятичные градусы в радианы

long1 = long1*Math.PI/180;

lat2 = lat2*Math.PI/180;

long2 = long2*Math.PI/180;

dlon_W = (long2 - long1) - (2*Math.PI*(Math.floor((long2 - long1)/(2*Math.PI))));

dlon_E = (long1 - long2) - (2*Math.PI*(Math.floor((long1 - long2)/(2*Math.PI))));

dphi = Math.log((Math.tan((lat2/2) + (Math.PI/4)))/(Math.tan((lat1/2) + (Math.PI/4))));

if (dlon_W

dlon_W = -1*dlon_W;

//get sign

if (dlon_W = 0)

sign = 1;

else

sign = -1;

if (Math.abs(dlon_W) = Math.abs(dphi)) {

atn2 = (sign * Math.PI/2) - Math.atan(dphi / dlon_W);

}

else {

if (dphi 0) {

atn2 = Math.atan(dlon_W / dphi);

}

else {

if ((-1*dlon_W) = 0) {

atn2 = Math.PI + Math.atan(dlon_W / dphi);

}

else {

atn2 = (-1*Math.PI) + Math.atan(dlon_W / dphi);

}

}

}

}

else {

//get sign

if (dlon_W = 0)

sign = 1;

else

sign = -1;

if (Math.abs(dlon_E) = Math.abs(dphi)) {

if (dlon_E 0)

atn2 = sign * Math.PI/2 - Math.atan(dphi / (dlon_E));

else

atn2 = 0;

}

else {

if (dphi 0) {

atn2 = Math.atan((dlon_E) / dphi);

}

else {

if ((dlon_E) = 0) {

atn2 = Math.PI + Math.atan((dlon_E) / dphi);

}

else {

atn2 = (-1*Math.PI) + Math.atan((dlon_E) / dphi);

}

}

}

dlon = dlon_E;

}

tc = atn2 - (2*Math.PI*(Math.floor((atn2)/(2*Math.PI))));

return 360-((tc*180)/Math.PI);

}


function ReadLine(){ //Чтение очередной строки в файле трека

var b;

var str='';

while (b!='\n'){

b=f.read(1);

if (b!=undefined){

str+=b;

}

else{

str='';

break;

}

}

return str;

}


function ReadEnd(){ //Завершено чтение файла трека

LED('');

clearInterval(tr);

f.close();

ReadOn=false;

}


myButton.on('hold', function() {

BeepSeq(['3900,350']);

LED('0.1,2');

WriteOn=true;

RecordTrack();

});


myButton.on('click', function() {

if(WriteOn){ //Выключение режима записи

WriteOn=false;

sdCard.appendFile('Track.csv',"\r\n");

if(tw!=undefined){clearInterval(tw);} //Уничтожить таймер по ID

LED('');

BeepSeq(['3900,350']);

}

else if(ReadOn){ //Выключение режима чтения

BeepSeq(['3900,350']);

ReadEnd();

}

else{ //Старт режима чтения

BeepSeq(['3900,350']);

LED('0.1,0.9');

ReadOn=true;

ReadTrack();

}

});


myButton1.on('click', function() { //Принудительная запись точки при повороте

if(WriteOn){

AppendFile();

}

});


function LED(state){

if (state!=''){

var s=state.split(',');

myLed.blink(s[0],s[1]);

}

else{

myLed.turnOff();

}

}


function QuadDisplay(show){

if (show=='init'){

init=true;

quad2.marquee('1234567890', 300); //Бегущая строка на дисплее по событию включения (Init)

setTimeout(function(){quad2.display(''); init=false;},3000);

}

else{

if(!init){

quad2.display(show);

}

}

}


function Beep(t, f){ //Вкл/Выкл повторяющегося зуммера длительностью t и частотой f

if (t0){

myBuzzer.frequency(f);

myBuzzer.beep(0.1, t/1000);

}

}


function BeepSeq(seq){ //Звуковая последовательность (через Beep1 (например, ['1000,500','1000,500'), где первый элемент в последовательности пар = частота, а второй = время в ms)

bs=0;

sq=seq;

Beep1();

}


function Beep1() {

myBuzzer.turnOff();


if (bs

myBuzzer.frequency(sq[bs].split(',')[0]);

myBuzzer.turnOn();

setTimeout(Beep1, sq[bs].split(',')[1]);

}

else{

myBuzzer.turnOff();

}

bs += 1;

}


function Init(){

QuadDisplay('init'); //Запустить по включению устройства

BeepSeq(['1000,500','1000,500','1500,500','1500,500','1700,500','1700,500','1500,500']); //Звуковая последовательность инициализации устройства (если не звучит, то что-то пошло не так, например, не инициализировались библиотеки или HW)

}


Init();


Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!