GPS часы на Arduino
Многие автомобилисты хотели бы иметь в машине часы, которые всегда исправно идут без перебоев. Ведь многих работа обязывает постоянно находиться в машине, а время очень ценно. Обычно такие часы – дорогостоящее удовольствие. Но немногие задумываются, что их можно сделать самому. Как собрать такие часы и откуда же брать настройки? Есть несколько вариантов:
Вариант использовать Интернет не подходит, так как могут появиться сложности с синхронизацией времени, то есть нужно будет приобрести модем в машину, а это лишние ненужные расходы. Остается сделать выбор между GPS и RDS, последний вариант отпадает, так как нужно привязываться к какой-то станции, и не всегда возможна синхронизация. Самый лучший вариант – это GPS.
Один из простых вариантов, создание GPS часов с помощью платформы Arduino. Эта платформа одна из самых простых и имеет бесплатную программную оболочку IDE, с помощью которой и происходит программирование. С помощью Arduino создаются самостоятельные автоматические объекты и подключаются к программным обеспечениям на компьютерах, как с помощью стандартных проводных интерфейсов, так и беспроводными.
Для большей мобильности запитываем данную платформу с отдельным аккумулятором и подключаем к портативному компьютеру для заливки новой картинки.
Обозначение функций контактов GPS модулем EM-406A
Если имеется маркировка, то обозначения делать не обязательно – вставляются всего два разъема. Но, если маркировки нет, необходимо подключать вывод GND к GND, Rx – к digital pin 2, Tx – к digital pin 3. Нужно внимательно подключать провода, серого цвета идет шестой, а не первый.
Модуль GPS имеет светодиодную индикацию состояний:
- светится беспрерывно – спутник ищет и определяет координаты;
- мигает – все координаты уже установлены и данные передаются;
- не светится, питание подается с плохим контактом.
Модуль GPS
Можно регулировать его работу от 3.5 до 7 Мгц.
QVGA SPI 240×320 с дисплеем, является аналогом Adafruit ILI9341, благодаря этому увеличивается скорость работы и оттуда же идет демо стрелочных часов. Далее объединяем демо стрелочных часов с данными GPS. Картинку часов можно менять, загрузив другие модули.
Далее можно пользоваться уже готовым устройством и получать удовольствие. При включении быстро срабатывает и ловит при любых условиях.
GPS часы на Arduino
P.S. у библиотеки TFT_ILI9341 в файле User_Setup.h лучше сделать так:
Прикрепленные файлы: СКЕТЧ – БИБЛИОТЕКА
Автор: Максим Беляев, Лобня, Россия
Привет слушай а можиш мне на заказ изгатовить дисплей с атображением часов с датой вольтметра и термометром
Собирать одно устройство на продажу не выгодно. Тем более из плат Arduino – слишком дорого будет.
Привет. Как держит низкие температуры дисплей -30 например?
TFT LCD монитор 2,2″ SPI 240X320 QVGA, равно как все активные матрицы, допускают работу в расширенном температурном диапазоне от -20°С до +70°С. Для большинства LCD дисплеев рекомендуемый диапазон рабочих температур: от -20°C до + 40°C.
Всем ЖК материалам опасна верхняя граница рабочей температуры, или изотропический предел. Выше этого предела молекулы ЖК принимают произвольную ориентацию. Изотропическая температура называется температурой нематическо-изотропического перехода, или N-I перехода. Все же ЖКИ могут восстанавливаться после короткого воздействия изотропической температуры, хотя температуры свыше 110°C разрушают пленочные структуры индикатора.
Нижний предел температурного диапазона ЖКИ не так строго определен, как верхний. Низкие температуры приводят к увеличению времени срабатывания индикатора, потому как возрастает вязкость ЖК вещества и замедляется движение молекул. Однако ЖКИ часто оказываются работоспособными при температурах ниже их C-N перехода. Эффект низких температур легко обратим. К примеру ЖКИ, опущенный в жидкий азот, возвращается в нормальное состояние после быстрого нагрева.
Для поддержания нормального функционирования за пределами температурного диапазона используется температурная компенсация. Индикаторы с интегральными нагревателями могут работать при температурах до -55°C. Нагревающие элементы работают от температурно-управляемого источника питания. Их мощность находится в пределах 2 и 3 ватта на квадратный дюйм поверхности индикатора. При использовании нагревателей время отклика индикатора при низких температурах остается таким же, как и при 0°C.
Источник
Умные часы своими руками за 1500 рублей
Началась эта история с того, что начитавшись постов с тегом DIY я решил обзавестись набором МК + отладочная плата. Погуглив, узнал что самая дешевая в городе плата это LaunchPad от TI. Не долго думая, отправился за ней в магазин, и понеслась… как и у всех сначала были мигания светодиодами, потом подключение дисплея от Siemens CX75, и т.д.
Вскоре мне надоело делать что-то просто так, без цели, ради того что бы сделать. Так и возникла мысль создать себе гаджет, которым бы я пользовался постоянно.
За подробностями прошу под кат.
Обычно я хожу по улице в наушниках и не слышу звонка телефона, да и связка телефон + чехол + карман + ходьба = вибрации не чувствуется. И я придумал для себя гаджет: информатор об смс и звонках в виде часов/браслета. Опять же идея не нова, и в магазинах куча подобного хлама, но хотелось, во первых, сделать самому, а во вторых, все же дешевле получается. Первый блин, как говорится, комом:
«Не знаю, мои часы время не показывают.» (с)
Состав простой: МК, BT, диоды, стабилизатор напряжения, вибромотор, аккум, корпус от старых часов. Для него было написано приложение для android, и небольшая прога для МК. Чудо зверь, которому уже месяцев 6, который меня выручал и не раз.
Что делает прога на android: коннектимся по BT с часами, отправляем “1” — коннект прошел, запускаем сервис и прослушиваем входящие смс и звонки. При приеме оного, отправляем по BT идентификатор события “2” — смс, “3” — звонок.
Что делает прога на МК: при приеме символа с BT («1»,«2»,«3») включаем определенную последовательность вкл/выкл индикации и вибро.
Ни о каком режиме экономии энергии тогда я и не задумывался, да и о том, что стабилизатор работает на напряжениях 3,6 — 6 В тоже как то забыл выяснить. В итоге одного заряда аккума хватает на рабочие сутки, при условии что «часы» постоянно соединены по BT.
Месяца три назад я решил взяться за эту идею основательно и добавить функционал, которого не хватает: полноценные часы, отображение имени звонящего, текст и отправитель смс, возможность перепрошивки. С последним думал возникнут проблемы, потому как МК перепрошивается по Spy-Bi-Wire интерфейсу, а тянуть 3 пина на выход корпуса не хотелось, но потом вычитал в datasheet что у МК есть режим bootstrap Loader (BSL), позволяющий прошивать его через UART интерфейс.
Внутренности
Что мне понадобилось из деталей, что пришлось купить:
Сначала хотел поставить МК в корпусе QFN, но потом отказался, и взял в корпусе tssop28. Его проще разводить, так как под корпусом еще есть место.
Название детали | Назначение | Стоимость |
---|---|---|
msp430g2553ipw28 | микроконтроллер | 60 |
lir3048-lby2 | аккумулятор | 77 |
ds1337u+ | часы реального времени | 78 |
ADP3338AKCZ-3.3-RL7 | стабилизатор | 124 |
CP2102-GMR | USB-UART | 84 |
MCP73831T_2ACI_OT | зарядка li-ion, li-pol | 54 |
HC-06 | bluetooth | 120 |
LCD nokia 1202 | экран | 33 |
Итого: 630р.
Все детали покупались в городе, кроме BT – его заказывал из Китая, если покупать в городе, можно найти за 350р.
Остальное: mini usb, кнопки, вибромотор взял от старого коммуникатора; кварц и пассивка нашлись в закромах родины. Если покупать эту мелочевку, выйдет от силы рублей 300.
Детали есть, что дальше? Дальше собирался макет и писалась программа для МК. Отказавшись от Energia, я перешел на CCS 5.3 free версия с ограничением кода в 16kb чего вполне хватает, учитывая объем памяти МК (16kb). В МК задействованы: 2 таймера и WDT+ в режиме интервального таймера, HW I2C, ADC10, BSL, FLASH. Особое внимание уделялось потреблению устройства. В итоге 30 мА при полной нагрузке (BT не соединен, МК в штатном режиме, подсветка на максимум), 8 мА в ждущем (BT подключен, МК в режиме низкого потребления, подсветка отключена) и меньше 1 мА в режиме только часы (BT выключен, МК в режиме низкого потребления, подсветка отключена). Емкость аккума 200мА, так что одного заряда хватает на сутки и более. Одновременно с программированием МК, дорабатывалась программа на android, а именно: при входящем звонке, ищется соответствие номера в телефонной книжке и если соответствие найдено, заменяем номер на имя и отправляем по BT. А при поступлении смс отправляем еще и текст сообщения.
Плата
После написания программы и проверки жизнеспособности собранного макета, я приступил к разводке платы, вытравливанию, лужению и пайке.
На всю плату потребовалось 6 перемычек, 5 конденсаторов, 8 резисторов, 1 светодиод. Включаем… работает!
Корпус
Наверно это было самое сложное. Дремель, оргстекло, дихлорэтан, паста гои: адская смесь… я не буду особо описывать процесс изготовления корпуса (да и фото я забыл сделать). 2 слоя 6мм оргстекла на нижнюю часть корпуса и 2мм оргстекло и защитное стекло экрана от старого фотика на верхнюю. В процессе вытачивания корпуса возник вопрос о креплении часов на руку, обычные ремешки для часов были бы слишком запарными с их механизмами крепления, поэтому я купил вот такой за 350р.:
Парочка сквозных отверстий в корпусе и крепление для ремешка готово. Корпус получился на самом деле не очень, но на функциональность часов он никак не влияет и полностью выполняет свои функции.
Вот видео работы:
И напоследок распишу весь функционал моих часов:
- отображение даты и времени как основная функция;
- обновление даты и времени с телефона;
- изменение даты и времени вручную;
- подключение по BT к Android телефону;
- отключение питания BT при потере связи для экономии заряда аккумулятора;
- отображение заряда аккумулятора;
- информирование о входящем смс с выводом текста и именем отправителя на экран;
- информирование о входящем звонке с выводом имени звонящего на экран;
- отображение текста, набранного в поле программы на android;
- изменение настроек экрана (яркость и время выключения подсветки, контрастность экрана);
- возможность перепрошивки устройства.
ИТОГО: За 1500 деревянных и 3 месяца работы в свободное от работы и учебы время от идеи до воплощения.
Заключение
Пока я возился с этими часами, у меня возникло подозрение, что подобную статью уже опубликуют на хабре, но как то пронесло.
Часы ношу уже неделю, иногда исправляя программные глюки и недочеты. Недавно добавил возможность сброса входящего вызова.
Надеюсь, данный пост вдохновит и вас сделать что-нибудь полезное.
Источник
Создаем GPS часы на Arduino
Вам необходим источник точного времени от GPS? Данная статья покажет вам, как использовать модуль GPS для получения времени, даты и координат, и как показать их на LCD индикаторе с помощью Arduino.
Что необходимо?
- компьютер с установленной Arduino IDE;
- Arduino (мы используем Arduino Mega);
- LCD индикатор;
- GPS модуль (мы используем EM-411, возможны и другие, поддерживающие протокол NMEA, например, VK2828U7G5LF или GY-NEO6MV2);
- макетная плата, перемычки и потенциометр 5 кОм;
- библиотека TinyGPS (ссылка ниже).
Введение
Создание системы глобального позиционирования, или GPS, началось в начале 1970-х годов. Каждая страна (Россия, США, Китай и т.д.) обладают своей собственной системой, но большинство средств спутниковой навигации в мире используют систему США.
Каждый спутник системы имеет атомные часы, которые непрерывно контролируются и корректируются NORAD (командованием воздушно-космической обороны Северной Америки) каждый день.
По сути, приемник по своим часам измеряет TOA (время получения сигнала, time of arrival) четырех спутниковых сигналов. Исходя из TOA и TOT (времени отправки сигнала, time of transmission), приемник вычисляет четыре значения времени «пролета» сигнала (TOF, time of flight), которые отличаются друг от друга в зависимости от расстояния спутник-приемник. Затем, исходя из четырех значений TOF, приемник вычисляет свое положение в трехмерном пространстве и отклонение своих часов.
Самые недорогие GPS приемники обладают точностью около 20 метров для большинства мест на Земле. Теперь посмотрим, как изготовить свои собственные часы GPS с помощью Arduino.
Аппаратная часть
Мой GPS модуль имеет 6 контактов: GND, Vin, Tx, Rx и снова GND. Шестой вывод никуда не подключен. Контакт GND соединен с корпусом на Arduino, Vin подключаем к шине +5В на Arduino, Tx подключен к выводу 10 на Arduino, а вывод Rx никуда не подключаем, так как не будем посылать на GPS модуль никаких сообщений. Мой модуль передает спутниковые данные, используя интерфейс RS-232, со скоростью 4800 бит/сек, которые принимаются Arduino на выводе 10.
Ниже показана фотография GPS модуля:
GPS модуль EM-411
Модуль отправляет то, что известно как NMEA сообщения. Здесь вы можете увидеть пример одного NMEA сообщения и его разъяснение (выдержка из технического описания):
Название | Пример | Единицы | Описание |
---|---|---|---|
ID сообщения | $GPGGA | Заголовок протокола GGA | |
Время UTC | 161229.487 | hhmmss.sss (две цифры часы, две цифры минуты, затем секунды с точностью до тысячных) | |
Широта | 3723.2475 | ddmm.mmmm (первые две цифры градусы, затем минуты с точностью до десятитысячных) | |
Флаг N/S | N | N – север, S – юг | |
Долгота | 12158.3416 | ddmm.mmmm (первые две цифры градусы, затем минуты с точностью до десятитысячных) | |
Флаг E/W | W | E – восток, W – запад | |
Индикатор местоположения | 1 |
| |
Количество используемых спутников | 07 | В диапазоне от 0 до 12 | |
HDOP | 1.0 | Ухудшение точности по горизонтали | |
Высота относительно уровня моря | 9.0 | метры | |
Единицы измерения | M | метры | |
Геоидальное различие | Различие между земным эллипсоидом WGS-84 и уровнем моря (геноидом) | ||
Единицы измерения | M | метры | |
Возраст дифференциальных данных GPS | секунды | Нулевые поля, когда DGPS не используется | |
ID станции, передающей дифференциальные поправки | 0000 | ||
Контрольная сумма | *18 | ||
Конец сообщения |
Все эти данные принимаются Arduino через вывод 10. Библиотека TinyGPS читает сообщения GPGGA и GPRMC (для подробной информации о GPRMC смотрите техническое описание).
Arduino на схеме не показан. Подключите периферийные устройства согласно подписанным соединениям.
Схема GPS часов на arduino
Программное обеспечение
При подаче питания GPS модуль затрачивает некоторое время, чтобы получить правильное местоположения от спутников. Когда местоположение получено, модуль шлет NMEA сообщения на Arduino. Библиотека TinyGPS содержит функцию для получения времени и даты из GPRMC сообщения. Она называется crack_datetime() и принимает в качестве параметров семь указателей на переменные: год year , месяц month , день месяца day , часы hour , минуты minute , секунды second , и сотые доли секунды hundredths . Вызов функции выглядит так:
Вызов данной функции возвращает вам в переменных правильные значения до тех пор, пока с железом всё в порядке.
Чтобы получить ваше местоположение, можно вызвать функцию f_get_position() . Данная функция принимает в качестве параметров два указателя на переменные: широта latitude и долгота longitude . Вызов данной функции выглядит так:
Исходный текст программы:
Загрузки
Здесь все файлы, которые вам могут понадобиться:
Комплектующие: технические описания и ссылки на магазины (aliexpress и пр.)
Фото и видео
На фотографиях и видео я добавил смещение широты и долготы. Чтобы улучшить прием, я подключил GPS модуль через длинный кабель и высунул его в окно.
Дата и время
Широта и долгота
Подключение
Заключение
В данной статье мы рассмотрели, как получить дату, время и координаты от GPS модуля, а затем как их отобразить на LCD индикаторе. Теперь вы знаете, где находитесь!
Надеюсь статья оказалась полезной. Оставляйте комментарии!
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.
А подскажите, что будет отбражаться, по координатам при перемещении в южное полушарие?
а по поводу даты:
hour = hour + timeoffset;
if (hour > 23) < // отображаем часовое время
hour = hour — 24;
day = day + 1;
>
время верно показывает а вот число сдвинулось назад на день пока вижу, странно да и вообще отключаю антенну время все равно бежит я так понял GPS только для запуска нужен чи как?
Всё это просто замечательно, но есть парочка нюансов:
— поправку на поясное время сделали, но что будет показывать календарь в интервале от 00:00 до 03:00, например, московского времени? Вчерашнюю дату? И как быть с датами в конце-начале месяца (особенно в феврале, да ещё не забывая про високосный год)?
— даже и с такой поправкой кода, MEGA будет сильно избыточна — более популярной ( и дешёвой) UNO или NANO — «за глаза».
Решил так:
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
hour = hour + timeoffset;
if (hour > 23) hour = hour — 24;
Тогда время в часах будет в 24 часовом формате с учётом часового пояса.
При использовании SoftwareSerial основная проблема в задержке, которую добавляет этот программный порт, при вызове функций других библиотек (соответственно и других портов SoftwareSerial). На официальном сайте Arduino для получения непрерывных потоков данных с нескольких портов рекомендуют использовать дополнительно библиотеку AltSoftSerial.
Здесь https://www.pjrc.com/teensy. , в конце статьи есть рекомендации по выбору скоростей при использовании одновременно трех uart портов (аппаратный, SoftwareSerial и AltSoftSerial).
Скорее наоборот, в Mega есть свободные аппаратные uart-порты и можно не использовать SoftwareSerial, а в Uno всего один, и тот нужен для прошивки и монитора порта. А вот скорости порта наверно сперва лучше выставить по дефолту 9600 (с завода в модуле gps), а потом при желании поднять/опустить. Тут если автор даст комментарий какая скорость и почему при использовании нескольких SoftwareSerial uart-портов предпочтительней, что бы не перегружать контроллер и не допускать переполнения буфера порта, — буду весьма благодарен
На ардуино UNO чтобы создать что-то подобное, надо менять что-нибудь в коде и в схеме?
Очень понравилась статья, несколько дней пытался сделать похожее а здесь как угадали мои мысли.
Широту-долготу и время показывает после инициализации модуля, с датой приходится подождать.
Часовой пояс просто прибавляют и может появиться 25 часов, 26, и даже отрицательное.
При выводе дня пропущена команда вывода «0» если меньше 10.
Источник