Саморобний GPS приймач для автомобіля. Як зробити КПК з автомобільного навігатора. Ноутбук як GPS-навігатор

Головна / Контакти

Думаю для більшості з вас не стане відкриттям, що абсолютна більшість сучасних автомобільних навігаторів працюють на базі Windows CE, але сама операційна система дбайливо прихована виробником від пустотливих ручок користувача, щоб він не накоїв чогось зайвого.

Зроблено це простим, але радикальним методом – заміною рідної графічної оболонки Windows CE на оболонку від виробника пристрою, яка запускається при старті Windows. З одного боку це добре – зручне меню, основні функції запускаються в 1-2 кліки, лепота одним словом. Але з іншого боку, користувач обмежений лише тим функціоналом, що вирішив надати виробник, можливості встановити свої програми не передбачено. Однак, встановити торжество справедливості дуже просто, від вас знадобиться лише GPS-навігатор, дата-кабель, комп'ютер, який вміє працювати з Win CE пристроями в режимі Active Sync і кілька хвилин вільного часу.

Увага!Ця інструкція не є універсальною, але допомагає здебільшого. Відхилення від кроків та творче експериментування можуть привести ваш навігатор у непрацездатний стан, який можна буде вилікувати лише перепрошивкою. Якщо ви не маєте навіщо вам це робити – не робіть, бо нефіг!

Отже, як говорив Гагарін: "Поїхали!":

Якщо щось не зрозуміло, то ось картинка де все необхідне виділено:

Головне нічого більше не чіпайте, інакше шанс отримати напівдохлий шматок заліза дуже великий.

В результаті виконання цих нехитрих дій ви з навігатора отримаєте цілком повнофункціональний КПК на який можна легко встановити будь-які необхідні вам програми. Дрібниця а приємно.

З.И. Ні в якому разі! Чуєте? Ні за яких обставин! Навіть будучи у мотлох п'яними, обкуреними, уколотими (потрібне підкреслити), не встановлюйте пароль на Windows. Навіть з метою подивитися, що вийде!

Повнофункціональний КПК буде не зайвим навіть якщо ви вивчаєте основи дзеркальної фотографії, на нього завжди можна записати кілька інструкцій та порад для фотолюбителів, щоб вони завжди були під рукою.

Після кількох експериментів з Ардуін вирішив зробити простенький і не дуже дорогий GPS-tracker з відправкою координат по GPRS на сервер.
Використовується Arduino Mega 2560 (Arduino Uno), SIM900 - модуль GSM/GPRS (для відправки інформації на сервер), GPS приймач SKM53 GPS.

Все закуплено на ebay.com, у сумі близько 1500 р (приблизно 500р ардуїну, трохи менше – GSM модуль, трохи більше – GPS).

GPS приймач

Спочатку потрібно розібратися з роботою з GPS. Вибраний модуль - один із найдешевших і найпростіших. Тим не менш, виробник обіцяє наявність батарейки для збереження даних про супутники. По даташиту, холодний старт повинен займати 36 секунд, проте, в моїх умовах (10 поверх з підвіконня, впритул будинків немає) це зайняло аж 20 хвилин. Наступний старт, проте, вже 2 хвилини.

Важливий параметр пристроїв, що підключаються до ардуїни, - енергоспоживання. Якщо перевантажити перетворювач ардуїни, вона може згоріти. Для приймача максимальне енергоспоживання - 45mA @ 3.3v. Навіщо в специфікації вказувати силу струму на напрузі, відмінному від необхідного (5V), для мене загадка. Тим не менш, 45 mA перетворювач ардуїни витримає.

Підключення
GPS не керований, хоча має RX пін. Для чого – невідомо. Основне, що можна робити з цим приймачем - читати дані протоколу NMEA з TX піна. Рівні – 5V, якраз для ардуїни, швидкість – 9600 бод. Підключаю VIN у VCC ардуїни, GND у GND, TX у RX відповідного serial. Читаю дані спочатку вручну, потім із використанням бібліотеки TinyGPS. На диво, все читається. Після переходу на Uno довелося використовувати SoftwareSerial, і тут почалися проблеми - втрачається частина символів повідомлення. Це не дуже критично, тому що TinyGPS відсікає невалідні повідомлення, але досить неприємно: про частоту 1Гц можна забути.

Невелике зауваження щодо SoftwareSerial: на Uno немає хардверних портів (крім підключеного до USB Serial), тому доводиться використовувати програмний. Так от він може приймати дані тільки на піні, на якому плата підтримує переривання. У випадку Uno це 2 і 3. Більш того, дані одночасно може отримувати тільки один такий порт.

Ось так виглядає тестовий стенд.

GSM приймач/передавач


Тепер починається цікавіша частина. GSM модуль – SIM900. Він підтримує GSM та GPRS. Ні EDGE, ні тим більше 3G, не підтримуються. Для передачі даних про координати це, мабуть, добре – не буде затримок та проблем при перемиканні між режимами, плюс GPRS зараз є майже скрізь. Проте, для якихось складніших додатків цього може вистачити.

Підключення
Модуль управляється також за послідовним портом, з тим самим рівнем - 5V. І тут нам знадобляться і RX, і TX. Модуль - shield, тобто він встановлюється на ардуїну. Причому сумісний як із mega, так і з uno. Швидкість за замовчуванням – 115200.

Збираємо на Mega, і тут на нас чекає перший неприємний сюрприз: TX пін модуля потрапляє на 7й пін мегі. На 7м піну меги недоступні переривання, а значить, доведеться з'єднати 7й пін, скажімо, з 6м, на якому можливі переривання. Таким чином, витратимо один пін ардуїни марно. Ну, для меги це не дуже страшно – таки пінів вистачає. А ось для Uno це вже складніше (нагадую, там всього 2 піна, що підтримують переривання – 2 та 3). Як вирішення цієї проблеми можна запропонувати не встановлювати модуль на ардуїну, а з'єднати його дроти. Тоді можна використати Serial1.

Після підключення намагаємося «поговорити» з модулем (не забуваймо його включити). Вибираємо швидкість порту – 115200, при цьому добре, якщо всі вбудовані послідовні порти (4 на мезі, 1 на uno) та всі програмні працюють на одній швидкості. Так можна досягти стійкішої передачі даних. Чому - не знаю, хоч і здогадуюсь.

Отже, пишемо примітивний код для прокидання даних між послідовними портами, відправляємо atz у відповідь тиша. Що таке? А, якщо sensitive. ATZ отримуємо OK. Ура, модуль чує нас. А чи не зателефонувати нам заради інтересу? ATD +7499… Дзвонить міський телефон, з ардуїни йде димок, ноутбук вирубується. Згорів перетворювач Arduino. Було поганою ідеєю годувати його 19 вольтами, хоч і написано, що він може працювати від 6 до 20V, рекомендують 7-12V. У датасіті на GSM модуль ніде не сказано про споживану потужність під навантаженням. Що ж, Mega вирушає до складу запчастин. Із завмиранням серця включаю ноутбук, що одержав +19V по +5V лінії від USB. Працює і навіть USB не вигоріли. Дякую Lenovo за захист.

Після вигоряння перетворювача я пошукав струм, що споживається. Так ось, піковий – 2А, типовий – 0.5А. Таке не під силу перетворювачу ардуїни. Потрібне окреме харчування.

Програмування
Модуль надає широкі можливості передачі. Починаючи від голосових дзвінків та SMS та закінчуючи, власне, GPRS. Причому для останнього можна виконати HTTP запит за допомогою AT команд. Доведеться відправити кілька, але це того варто: формувати запит вручну не дуже хочеться. Є пара нюансів з відкриттям каналу передачі даних за GPRS - пам'ятаєте класичні AT+CGDCONT=1, IP, apn? Так от, тут те саме потрібно, але злегка хитріше.

Для отримання сторінки за певним URL потрібно надіслати такі команди:
AT+SAPBR=1,1 //Відкрити несучу (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //тип підключення - GPRS AT+SAPBR=3,1,"APN","internet" //APN, для Мегафону - internet AT+HTTPINIT //Ініціалізувати HTTP AT+HTTPPARA="CID",1 //Carrier ID для використання. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Власне URL, після sprintf з координатами AT+HTTPACTION=0 //Запросити дані методом GET //дочекатися відповіді AT+HTTPTERM //зупинити HTTP

В результаті, за наявності з'єднання, отримаємо відповідь від сервера. Тобто, фактично, ми вже вміємо надсилати дані про координати, якщо сервер приймає їх за GET.

живлення
Оскільки GSM модуль від перетворювача Arduino, як я з'ясував, погана ідея, було вирішено купити перетворювач 12v->5v, 3A, на тому ж ebay. Однак, модулю не подобається живлення у 5V. Йдемо на хак: підключаємо 5V до пін, з якого приходить 5V від ардуїни. Тоді вбудований перетворювач модуля (істотно потужніший за перетворювач ардуїни, MIC 29302WU) зробить з 5V те, що потрібно модулю.

Сервер

Сервер написав примітивний – зберігання координат та малювання на Яндекс.картах. Надалі можливе додавання різних фіч, включаючи підтримку багатьох користувачів, статус «на охороні/не на охороні», стан систем автомобіля (запалювання, фари тощо), можливе навіть керування системами автомобіля. Звичайно, з відповідною підтримкою трекера, що плавно перетворюється на повноцінну сигналізацію.

Польові випробування

Ось так виглядає зібраний девайс, без корпусу:

Після установки перетворювача живлення та укладання в корпус від дохлого DSL модема система виглядає так:

Припаював дроти, вийняв кілька контактів із колодок ардуїни. Виглядають так:

Підключив 12V в машині, проїхався Москвою, отримав трек:


Крапки треку досить далеко один від одного. Причина в тому, що надсилання даних по GPRS займає багато часу, і в цей час координати не зчитуються. Це очевидна помилка програмування. Лікується по-перше, відправкою відразу пачки координат з часом, по-друге, асинхронною роботою з модулем GPRS.

Час пошуку супутників на пасажирському сидінні автомобіля – пара хвилин.

Висновки

Створення GPS трекера на Ардуїно своїми руками можливе, хоча і не є тривіальним завданням. Головне питання зараз - як сховати пристрій у машині так, щоб він не піддавався впливам шкідливих факторів (вода, температура), не було закрито металом (GPS та GPRS екрануватимуться) і не було особливо помітно. Поки що просто лежить в салоні і підключається до гнізда прикурювача.

Ну і ще потрібно поправити код для плавнішого треку, хоча основне завдання трекер і так виконує.

Використані пристрої

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 заснований GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

У спеціалізованих магазинах є широкий асортимент GPS-пристроїв різних цінових категорій. Потужні моделі з розширеним функціоналом досить дорого коштують, а найпростіші маячки відрізняються доступною ціною. Тим не менш, багато хто намагається уникнути витрат і виготовити GPS-маячок своїми руками. Наскільки складне це завдання, що знадобиться для її вирішення і чи виправдають витрачені зусилля?

Використання смартфона для GPS-стеження

Щоб використовувати смартфон з функцією GPS як GPS-трекер або маяк, потрібно трохи попрацювати з програмним забезпеченням. Зробити своїми руками GPS-трекер з телефону на базі Android, Windows Mobile або iOS дуже просто, жодного втручання у його конструкцію не знадобиться. Якщо смартфон буде застосовуватися як автомобільний трекер, доведеться виконати нескладні маніпуляції щодо його підключення до електромережі ТС.

Існує кілька програм, які дозволяють перетворити смартфон на трекер. Для пристрою на платформі Android можна завантажити на Google Play програму Loki, запустити його на смартфоні та виконати налаштування. Рекомендується активувати такі функції:

  • автозапуск;
  • повідомлення (за бажанням);
  • зовнішнє живлення (використання альтернативних налаштувань при підключенні до зовнішнього джерела живлення);
  • повне пробудження (за бажанням);
  • обробка команд.

Для навігації (визначення розташування) рекомендується встановити інтервал оновлення даних один раз на хвилину, для надсилання SMS-повідомлень при зникненні зв'язку з сервером обмеження часу – 5 хвилин. Налаштування у розділі «Події» здійснювати відповідно до власних потреб.

Після виконання налаштувань залишається зареєструватися на сайті Asgard та додати свій пристрій, вказавши ідентифікатор, визначений програмою Loki. Якщо в результаті на карті сайту з'явилася позначка вашого місця розташування, значить, все зроблено правильно, і смартфон можна використовувати як трекер, відстежуючи його розташування через Asgard.

Також для Android можна використовувати програму GPShome Tracker, а для Windows Mobile - GpsGate Client for Pocket PC. Перетворюючи смартфон на трекер або маячок, дуже важливо правильно налаштувати часовий пояс.

Для визначення координат через мережі Wi-Fi та GSM, пристрій повинен мати доступ до безлімітного мобільного інтернету, тому потрібно вибрати тариф, що дозволяє оптимізувати витрати. Якщо телефон використовуватиметься виключно як трекер, краще встановити SIM-карту лише для виходу в інтернет, а не для дзвінків. Використання GPS-приймача, що підвищує точність визначення координат, – вельми енергоємний процес, тому слід потурбуватися про забезпечення живлення саморобного трекера. Для цього потрібно обрізати нижній кінець автовилки (штекера прикурювача) та вставити шнур зарядного пристрою телефону у USB-роз'єм. Для підключення трекера безпосередньо до бортової системи необхідно придбати знижувальний конвертер постійного струму. А ті, хто трохи знається на електроніці, можуть зібрати аналог конвертера з пари конденсаторів і стабілізатора.

Якщо саморобний трекер (маячок) планується використовувати для прихованого стеження за переміщенням автомобіля, потрібно продумати, де його сховати так, щоб у разі потреби можна було легко дістати. І не забудьте активувати беззвучний режим, якщо в телефоні встановлено картку для інтернету та дзвінків.

Як зробити GPS-маячок своїми руками зі звичайного телефону

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

  • мобільний телефон;
  • GPS/GPRS-модуль;
  • GPS-приймач;
  • перехідник (можна використовувати старий зарядний пристрій із робочим штекером);
  • ніж та паяльник.

Обрізавши зарядний пристрій з боку блока живлення, потрібно зачистити дроти та припаяти їх до плати модуля, а штекер вставити в гніздо живлення телефону. Потім вмикається приймач та налаштовується телефон. За допомогою такого пристрою можна відстежувати місцезнаходження мобільних телефонів, які належать вашій родині. Інформація про їх координати надходитиме на мобільник, об'єднаний з GPS-модулем, у вигляді звичайних текстових повідомлень.

Деякі оператори мережі пропонують послугу «Маячок», активувати її можна на будь-якому мобільному телефоні без GPS-модуля. Складається список контактів абонентів, розташування яких потрібно відстежувати. Щоб отримати повідомлення з координатами, потрібно надіслати запит на встановлену форму.

Чи можна зробити GPS-трекер без телефону

Є альтернатива використанню смартфона або телефону у комплексі з GPS-модулем – будь-який пристрій із функцією GPS (ноутбук, КПК). Принцип такий самий, як для смартфона, - встановлення програми, налаштування, реєстрація пристрою на сайті.

А чи можна зібрати своїми руками сам GPS-модуль та приймач, з яких складається маяк чи трекер? Ось деякі компоненти, що входять до складу цих пристроїв:

  • фоторезистор, зазвичай короткохвильовий;
  • операційний підсилювач з урахуванням біполярних транзисторів;
  • випрямляч;
  • контролер конденсаторного типу;
  • сітчасті фільтри;
  • імпульсний тригер.

Всі ці деталі можна купити, а схему пристрою – знайти в інтернеті, але не всім під силу розібратися, як зробити GPS-трекер своїми руками.


Переваги та недоліки саморобної конструкції

Якщо використовується старий і непотрібний телефон (смартфон), основна перевага його переробки в трекер - економія. Якщо придбати апарат спеціально для цієї мети, економія від виготовлення GPS-трекера своїми руками практично невідчутна. Конструкція з мобільного телефону та GPS-модуля виходить досить громіздкою, людині носити її із собою незручно, а при встановленні в автомобілі великий ризик обриву проводів. Смартфон як трекер або маячок використовувати зручніше, але тільки для стеження за людьми. Його установка на автомобілі – це не найвдаліше рішення, оригінальний трекер має низку переваг перед саморобкою:

  • до року працює від батареї;
  • без усяких хитрощів підключається до бортової мережі, споживаючи мінімум енергії;
  • призначений для експлуатації у ширшому температурному діапазоні, ніж телефон;
  • завдяки герметичному корпусу може встановлюватись зовні автомобіля;
  • реагує на удари, розгойдування авто;
  • може комплектуватися тривожною кнопкою, мікрофоном, різними датчиками.

Якщо використовувати смартфон як пристрій прихованого стеження, функції комунікатора він виконувати не зможе.

Краще купити GPS-трекер або маячок, ніж використовувати саморобний пристрій на базі смартфона чи звичайного мобільного телефону. Заводський трекер надійніший, зручніший у встановленні на транспортний засіб, виконує більше функцій. Витрати на покупку трекера не такі вже й великі, а перетворення смартфона на пристрій стеження виправдане тільки за наявності непотрібного апарату.

Незважаючи на те, що сьогодні на ринку можна знайти безліч GPS-пристроїв різної цінової категорії та функціональності, не всі готові відразу купити готовий навігаційний пристрій і воліють його зробити своїми руками. Чи потрібно це сказати складно, але, без сумніву, можливо.

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

Другий спосіб простіший і під силу кожному - GPS-навігатор, зроблений за допомогою ноутбука. Що для цього знадобиться? По-перше, сам ноутбук, по-друге, GPS-приймач, наприклад, вбудований у сучасний мобільний телефон.

GPS-приймач підключається за будь-яким з інтерфейсів (Wi-Fi, Bluetooth або USB) у переносного ПК. Останні сьогодні є практично у кожного, до того ж, для навігатора буде достатньо навіть найпростішого нетбука або планшета.

Перед підключенням модуля GPS необхідно подбати, щоб на ПК стояло відповідне програмне забезпечення, яке буде здійснювати його підтримку. Знайти і завантажити його з інтернету не складе ніяких труднощів, тому що вибір тут неймовірно великий. Деякі програми підійдуть для заміських поїздок на довгі дистанції, деякі, навпаки, для поїздок містом. Якщо ПК має доступ до Інтернету, можна також встановити програми, які надають інформацію про пробки.

Підключивши до ПК навігатор, потрібно дочекатися, поки його визначить система, якщо потрібно додаткові драйвера, їх необхідно встановити. Пошуком займатися не потрібно, можна просто встановити автоматичний пошук в інтернеті. Пристрій визначився – можна запускати навігаційну програму та переконатися, що пристрій видно їй. Якщо все гаразд, саморобний GPS навігатор готовий, якщо виникають проблеми, потрібно покопатись у налаштуваннях ПЗ.

Чи варто зробити навігатор своїми руками або краще його купити - вирішувати кожному на власний розсуд. У будь-якому випадку, і в першому, і в другому випадку доведеться трохи докласти зусиль і витратити час.

Приймач видає такі дані:

  1. Координати – широту, довготу та висоту точки, в якій знаходиться
  2. Час за гринвічем – години, хвилини, секунди
  3. Загальна кількість супутників, виявлених приймачем
  4. Число супутників, з яких приймається сигнал.

Приймач має пам'ять на 200 пікселів. У пам'ять можуть бути занесені координати точки, що визначаються приймачем в даний момент часу, а також передбачена можливість записувати в пам'ять приймача координати точок з географічних карт.

За допомогою приймача можна визначати відстань та істинний (не плутати з магнітним) азимут від точки, в якій знаходиться приймач, до будь-якої точки, вибраної з пам'яті.

Модуль ЕВ-500 чудово підходить для мобільних додатків, оскільки має невеликі габарити та мале споживання струму.

Точність координат залежить від кількості супутників, сигнал із яких надходить на модуль, їх має бути не менше ніж 3.

Для виявлення супутників модуль використовує 66 каналів, при цьому, якщо пасивна антена, споживає 28 мА. Після виявлення супутників число каналів і, отже, струм, що споживається, зменшуються.

Напруга живлення від 3 до 4.2 вольт.

Зв'язок із модулем – за двома рівноцінними UART.

Висновки UART - TX0, RX0 та TX1, RX1.

На вихід GPS status підключений через резистор світлодіод. Поки зв'язок із супутниками не встановлений на виході логічний 1-світлодіод горить постійно, при виявленні супутників блимає з частотою 1 Гц. Після налагодження схеми його можна зняти.

Висновок V_RTC_3V3 – на цей висновок потрібно подати живлення, без цього модуль не запуститься. Можна з'єднати з живленням модуля, але краще підключити стандартну літієву батарейку типу CR на 3 вольти, тоді всі налаштування збережуться в пам'яті модуля і після вимкнення приймача. Споживання RTC лише 1 мкА, так що батарейки вистачить надовго.

Живлення подається на виведення VIN_3V3.

Антена підключається до виведення RF_INPUT. Доріжка, що з'єднує виведення модуля з фідером антени має бути якомога коротшим із земляним полігоном з боків. У мене пасивна антена

35*35 із полігоном під нею 70*70. Запустилася без проблем навіть у тумані на лісовій галявині. І точність дуже пристойна.

Хороша активна антена дорого коштує, хороший МШУ річ не з дешевих. Дешева китайська антена, в умовах сильних перешкод показала себе гірше за пасивну, як видно там підсилювач не зовсім малошумний. Крім того, вона живиться від 3,3 вольт мінімум, а з модуля подається в лінію.

2,8 В. Тому треба відсікати конденсатором постійну напругу на виведенні RF_INPUT, розкривати антену, заводити зовнішнє живлення – багато мороки.

Антену не варто розміщувати поруч із модулем, щоб шуми від модуля не заважали.

Це на карту GOOGLE нанесено координати виміряної точки. Відстань від стіни будинку до води метрів 10. Ми з приймачем стояли метрів за три від води.

Після того, як модуль буде розпаяний на платі, підключено живлення VIN_3V3 та V_RTC_3V3, антена та по світінню світлодіода ви переконалися, що все у вас працює – треба перевірити швидкістьобміну UART. Це необхідно для програмування USAR (синхронно асинхронний приймач) мікроконтролера.

З'єднайте RX1, TX1 або RX0, TX0 через MAX3232 (працює від 3 вольт) з COM порт комп'ютера. Для USB можна спаяти перехід на FT232RL – недорога надійна мікросхема з драйверами для всіх ОС. У мене запрацювала одразу без проблем.

Перевірте швидкість, на якій відгукнеться модуль, по даташиту це 9600 у мене заробив на 115200. Якщо не відгукнеться – перебирайте швидкості. Сигнал для цього не є обов'язковим – світлодіод може і не блимати. Я користуюсь терміналом у CVAVR або програмою Terminal v1.9b безкоштовна та дуже зручна.

Обмін відбувається за протоколом NMEA 0183.

Обв'язування ATMEGA 16 стандартне. Висновок REZET підтягнутий до живлення резистором 10 кОм. Тактова частота визначається кварцовим резонатором 7.3728 мГц. Живлення на АЦП мікроконтролера подається через LC фільтр – дросель 10 мкГн, конденсатор 1 мкФ. Виведення джерела опорної напруги АЦП AREF з'єднане з виведенням живлення АЦП. Роз'єм для програматора на схемі не показаний. До порту B підключений LCD дисплей WH1604B – 4 рядки по 16 символів. Підстроювальним резистором R2 20 кОм регулюється контрастність. Кнопка підсвічування тактова з метою економії заряду акумулятора.

Між UART модуля та USART мікроконтролера як гальванічної розв'язки встановлено мікросхему ADUM1201. Максимальна амплітуда імпульсів від модуля, якщо дивитися осцилографом не більше 2,8 В. Мікроконтролер сприймає імпульс як одиницю від 2.5 В. Мікросхема підніме амплітуду імпульсу до 5 вольт - величини напруги живлення мікроконтролера. Щоб уникнути збоїв ADUM краще поставити.

AT24C128 мікросхема електрично стирається і програмованого постійного пам'яті (ЕСППЗУ) з інтерфейсом шини I2C – пам'ять приймача, де і зберігатимуться дані всіх 200 точок, але про це пізніше. Висновки CDL-синхронізації послідовного зв'язку та CDA-послідовної передачі даних та адреси повинні бути підтягнуті до живлення резистором 4.7-5.1кОм. Висновок WP-захист від запису з'єднаний з GND. Висновки A0,A1-виводи адресації використовуються, якщо на шину підключені кілька мікросхем, можливі 4 комбінації. У нас одна мікросхема, тому висновки A0, A1 пов'язані з GND – адреса дорівнює нулю.

На операційному підсилювачі зібрано дільника. Напруга від акумулятора ділиться навпіл і подається на вхід АЦП мікроконтролера - біт порту A, для контролю величини напруги літієвого акумулятора.

Клавіатура для спілкування із приймачем зібрана на тактових кнопках. Кнопки ЧИТАННЯ та ЗАПИС – тактові. Кнопка НАВЕДЕННЯ – з фіксацією. Резистори 300 Ом потрібні для обмеження струму, щоб не спалити порт мікроконтролера.

Тепер про харчування приймача. У мене стоїть літієвий акумулятор на 3.7 вольт, при повній зарядці приблизно 4.15 В. Для живлення мікроконтролера з кварцем 7.3728 мГц і дисплея WH1604 треба 5 вольт. Хоча в датасіті на дисплей і стоїть Vdd від 3 до 5 вольт, але при стандартній схемі регулювання контрастності та напрузі живлення 3.3 вольта не видно нічого.

На модуль EB-500 бажано подавати 3.3 вольти. На мікросхемі LM2623 зібраний імпульсний стабілізатор, що підвищує, на 5 вольт. Мікросхема LM2623 розроблена спеціально для цифрової апаратури, має низький рівень шумів і мінімум обв'язки. Конденсатори C4 та C5 встановлені додатково для зменшення шумів.

Живлення для модуля EB-500 отримуємо з виходу лінійного стабілізатора LP2980-3.3. Мікросхема з дуже низьким споживанням, втрати на ній максимально 50 мВт, дуже мало гріється, а отримуємо стабілізовані 3.3 вольта практично без шумів.

Тепер про програму. Використаний компілятор.

Протокол NMEA 0183 містить багато будь-якої корисної інформації, але нас цікавлять лише координати, час, висота над рівнем моря, кількість видимих ​​і використовуваних супутників. Тому вибираємо лише 3 повідомлення (потрібна інформація виділена червоним):

1.$GPRMC,181057.000,A ,5542.2389,N,03741.6063,E,0.47,74.50,190311,A*51

Тут нас цікавить символ під номером 18 (відлік починаємо з 0) якщо це A то дані достовірні (є сигнал), якщо V - недостовірні.

2.$GPGGA,181058 .000,5542.2389 ,N,03741.6063 ,E,1,8 ,1.34,115.0 ,M,14.6,M,*54

Звідси беремо майже всю інформацію.

181058.000 - час

5542.2389 ,N - широта

03741.6063 ,E - довгота

1 - GPS fix (0 = Дані не вірні, 1 = Позиція зафіксована, 2 = DGPS (підвищена точність))

8 - кількість використаних супутників

1.34 – HDOP, горизонтальна точність

115.0 ,M - висота над рівнем моря

14.6,M - Геоїдальна відмінність - різницю між земним еліпсоїдом WGS-84 і рівнем моря(геоїдом)

Час з моменту останнього оновлення DGPS відсутній.

3.$GPGSV,4,1, 13 ,28,65,075,17,26,53,202,37,15,50,278,17,27,39,290,24*7D

Тут нас цікавлять символи номер 11 та 12.

13 - Повна кількість видимих ​​супутників.

Відразу після включення приймача запускається АЦП (установкою одиниці 6 біт регістру ADCSRA АЦП мікроконтролера) для перевірки рівня заряду літієвого акумулятора. У підпрограмі переривання після завершення перетворення АЦП забираються і підсумовуються 100 значень з регістру даних, потім обчислюється середнє значення напруги акумулятора. Якщо напруга на акумуляторі нижче або дорівнює 3.2 вольта, на екран дисплея виводиться повідомлення “ Акумулятор розряджений”. Гранична напруга, до якої може розрядитись акумулятор 2.7 вольта. Краще купувати акумулятор із контролером заряду.

Реєстр USART мікроконтролера UCSRB=0x90 це означає, що дозволено переривання після завершення прийому та включений приймач. Функція обробки переривання після завершення прийому полягає в наступному:

Дані забираються з буферного регістру UDR за умови, що (UCSRA&=0x18)==0 ,тобто в регістрі UCSRA немає прапор помилки кадрування і прапор переповнення. Якщо приймач перебуває у режимі запису чи читання (змінна flag=1), дані просто забираються з буфера приймача USART , ніж було переповнення буфера. Спроби відключати цей час приймач USART призводили до втрати зв'язку з модулем. Якщо flag=0, отримані з буфера дані аналізуються. Якщо знайдено початок рядка – символ $ за кодом ASCII це 36, весь рядок до кінця – код 13 (повернення каретки) міститься в масив gps. Потім перевіряємо символи з gps, gps та gps, шукаємо поєднання RMC, GGA або GSV всі інші повідомлення ігноруються. Якщо повідомлення RMC, змінне aприрівнюємо до елемента масиву gps, якщо GSV - обчислюємо із символів, що знаходяться в gpsі gps число видимих ​​супутників. Якщо це GGA переходимо з функції переривання в основну програму. У програмі спочатку перевіряємо змінну аякщо вона дорівнює 86 це символ V за кодом ASCII - відсутність сигналу, на дисплей виводиться повідомлення “ Немає сигналу

Якщо змінна a = 65 – символ A це означає, що з'явився сигнал. Виймаємо з масиву gps, куди поміщено все повідомлення GGA всі дані, що нас цікавлять. Обчислюємо час, координати, число супутників із якими встановлено зв'язок, висоту над рівнем моря. Всі ці дані плюс число видимих ​​супутників, обчислених у підпрограмі переривання, поміщаємо в буфери для виведення на LCD і виводимо на екран дисплея. Виходить така картинка:

У першому рядку виводиться широта точки та кількість супутників, з якими встановлено зв'язок, їх сім. Другий рядок – довгота та число видимих ​​супутників – 11. Третій рядок – час за грінвічем та висота над рівнем моря чи океану.

Для запису даних натискаємо кнопку "Запис". Всі дані зберігаються у зовнішній пам'яті мікросхеми ЕСППЗУ EEPROM AT24C128 з інтерфейсом шини I2C. Пам'ять мікросхеми організована як 16 384 слів по 8 біт у кожному. Внутрішньо 16384 байти пам'яті розділені на 256 сторінок по 64 байти в кожній. Запис може виконуватися як побайтно, і сторінками. Для спрощення життя вибрано посторінковий запис. Адреса мікросхеми один байт: три старших біта адреса AT24C він завжди 101, останній біт позначає запис або читання. Якщо нуль – запис, одиниця – читання. Адресація пам'яті - два байти, старші біти номер сторінки молодші – номер слова у цій сторінці. Виходить: номери сторінок від 0 до 255 – це 8 біт плюс номери слів у сторінці від 0 до 63 – ще 6 біт, так що для адресації пам'яті треба 14 біт. Щоб отримати старший байт беремо номер сторінки і зрушуємо його вправо на дві позиції - два старші біти обнуляться, а в шість молодших перемістяться 6 старших біт адреси сторінки. Потім той же номер сторінки зрушуємо вліво на шість позицій і отримуємо молодший байт адреси, де два старші біти - це два молодших біти адреси сторінки, інші шість - нулі. Тепер потрібно запам'ятати номер адреси зовнішньої пам'яті для точки, що записується. Для цього використовуємо енергонезалежну пам'ять мікроконтролера – EEPROM. Для ATMEGA16 EEPROM складає 512 байт. Розміщуємо в EEPROM два масиви eeprom unsigned char ad та eeprom unsigned char opred. Масив ad вказує на вільну сторінку пам'яті АТ24С128, одиниця означає, що сторінка зайнята, нуль – вільна. Наприклад: ad=0 означає, що сторінка 20 пам'яті АТ24С128 вільна, а якщо ad=1 тоді зайнята. Перед тим, як записати дані у зовнішню пам'ять, перебираємо всі елементи масиву ad, інкремінуючи номер елемента g від 0, поки не буде знайдена умова ad[g]=0. Адреса сторінки зовнішньої пам'яті дорівнює g. Тепер запам'ятовуємо відповідність адреси сторінки пам'яті АТ24С128 номеру точки, що запам'ятовується. opred[номер точки]=g (адресу сторінки пам'яті АТ24С128). Якщо треба стерти дані точки, то в ad[номер точки, що стирається] записуємо нуль, а в масиві opred переміщуємо номери елементів, так щоб, починаючи від номера точки на одиницю більше стирається: opred[номер точки]= opred[номер точки-1] , А номер загальної кількості записаних точок зменшуємо на одиницю. Якщо ж треба стерти всі дані з пам'яті, число записаних точок і масив ad обнуляем. При записі нових даних на згадку про АТ24С128 старі дані стираються. Змінна nomer що вказує на загальну кількість записаних точок також розміщується в EEPROM мікроконтролера.

Запис відбувається так:

Натискаємо та утримуємо 50 мс (затримка в 50 мс – захист від брязкоту контактів встановлена ​​на всіх кнопках) кнопку “ЗАПИС”. На екрані дисплея в першому рядку виводиться: “ Tочки:(№точки)”номер точки, записаної в EEPROM мікроконтролерапри цьому інкремінується. Якщо номер точки перевищує 200, з'являється повідомлення “ Пам'ять зайнята” та приймач виходить із режиму запис. У другий рядок треба ввести з клавіатури назву точки до 16 символів із цифр та малих літер російського алфавіту. Принцип введення такий самий, як у мобільному телефоні: натискати на кнопку клавіатури, доки не з'явиться потрібний символ. При помилці набору стирається символ ґратами. Висновки клавіатури підключені до бітів 3,4, 5 порту D і до бітів 2,3,4,5 порту C. Біти порту D налаштовані як виходи, біти порту C як входи з підтяжкою. На біти порту D із частотою 5мс подається низький рівень і при цьому зчитується значення бітів порту С. Наприклад, якщо на PIND.3 подано нуль і логічний нуль з'явився на PINС.2 значить, активна кнопка К4 – 3дежз.Кнопка активна 2.2 секунди - 16 бітний таймер T1 запускається з частотою 28800 Гц при появі нуля на відповідному биті порту C. При переході таймера через значення 65535 генерується переривання і програма переходить у функцію обробки переривання по переповнення тай. Якщо до закінчення 2.2 секунди стала активна інша кнопка, то, як і у разі переповнення таймера - таймер зупиняється, а всі значення, набрані раніше активної кнопці, обнуляються. Після набору назви точки – натискаємо *. У третій рядок виводитиметься повідомлення “ Поточна точка?” Якщо потрібно запам'ятати точку, що визначається приймачем на даний момент часу натискаємо *, на дисплей виводиться повідомлення “ Крапка записана” та приймач виходить із режиму запис. Якщо вводяться координати з карти, натискаємо #, на екрані виводиться запит “ Широта?” Вводимо координати широти вісім цифр без точок - 49˚52"16.54" вводяться, як 49521654 потім натискаємо *, виводиться запит “ Довгота?” так само вводиться і довгота, замість 3618"51.57" - 36185157 і потім *.

На дисплеї відображається повідомлення “Крапка записана” та приймач виходить із режиму запис. При записі координат з карти значення висоти не записується і під час читання координат цієї точки висота дорівнює нулю. Запис у EEPROM AT24C128 посторінково відбувається так:

  1. Формується умова старту – перехід із високого в низький стан на виведенні SDA за високого рівня виведення SCL.
  2. Передається байт із адресою мікросхеми 10100000 останній біт 0 – запис.
  3. Передається перший байт адреси пам'яті, потім другий байт адреси пам'яті.
  4. Передаються байти даних, адреси слів на сторінці при цьому інкремінуються. Зміни виводу SDA відбуваються, коли виводу SCL низький рівень.
  5. Формується умова зупинки – перехід із низького у високий стан на виведенні SDA за високого рівня виведення SCL.

Для читання даних із пам'яті приймача треба натиснути кнопку "Читання" (при цьому з 7 біта порту C зчитується логічний нуль) і на дисплеї виводиться: " Крапка:”. Набираємо номер точки координати, якою хочемо прочитати, і тиснемо *. На екрані виводяться координати нашої точки. При введенні номера точки в режимі читання на клавіатурі доступні лише цифри. Якщо вводиться число номер, якого перевищує кількість записаних точок, виводиться повідомлення “ Немає даних”, потім повертається повідомлення: “ Крапка:”. Якщо в пам'яті приладу немає збережених даних, при натисканні на кнопку “Читання” виводиться повідомлення “ Немає даних” та прилад виходить із режиму читання. Читаємо з EEPROM AT24C128 так: стартові, стопові умови та адресація такі самі, як при записі. Адреса, за якою записані координати точки, що зчитується (у програмі номер цієї точки позначений змінною nomer_1) знаходимо в масиві opred EEPROM мікроконтролера. Старший байт адреси буде opred>>2, молодший opred<<6. Только после передачи второго байта с адресом памяти посылается байт с адресом микросхемы 10100001, где последний бит 1 – чтение. В программе чтение идет побайтно, сначала считываются байты с названием точки. Считывается байт, по номеру кода в считанном байте определяется строка, содержащая код знакогенератора LCD модуля и символ соответствующий этому коду выводится на экран, затем младший байт адреса памяти инкременируется. Так выводятся 16 символов названия точки. Затем считываются байты с данными широты, долготы и высоты точки. После считывания очередного байта младший байт адреса памяти инкременируется. Все считанные параметры помещаются в буферы для вывода на LCD и выводятся на экран дисплея:

Перегортати дані можна за зростанням номерів точок цифрою 2 на клавіатурі, за спаданням нулем. Вихід із режиму читання #. У режимі читання дані можна стерти по одній точці або всі разом. Виводимо на екран точку, дані якої треба стерти та натискаємо *. Наприкінці першого рядка з'являється “Стор?” Для підтвердження *, якщо немає - #. Якщо треба стерти всі дані, тоді послідовно натискаємо *, з'являється “Стор?” , тиснемо на 1, замість “Стор?”з'являється “ Усе?” якщо підтвердження - *, ні - тиснемо на #. При стиранні в масив EEPROM мікроконтролера - ad, що вказує на вільну адресу сторінки в пам'яті AT24C128 записується нуль в елемент, з номером рівним адреси сторінки в AT24C128 точки, що стирається. Дані з цієї сторінки стираються під час запису в неї інших даних, тому не варто відключати приймач у режимі запису, доки не з'явиться повідомлення “Крапка записана”.

У приймачі передбачено режим наведення. У цьому режимі визначається відстань та істинний азимут від точки, в якій знаходиться приймач до будь-якої точки, вибраної з пам'яті приймача. Для переведення приймача в режим наведення натиснемо кнопку "Наведення", при цьому з другого біта порту D зчитується логічний нуль. На екрані відображається запит “ Крапка:” необхідно ввести номер точки відстань та азимут, до якої буде обчислюватися, та натиснути *. Координати цієї точки містяться в масив kr розміщений в EEPROM мікроконтролера. На екрані дисплея виводиться номер та назва точки, потім виводиться повідомлення “ Наведення” та екран дисплея набуває наступного вигляду:

На початок четвертого рядка виводиться азимут (287˚1"48"), за ним відстань до точки, що цікавить нас (3284 метра). Так що можна ходити азимутом, якщо звичайно, компас є. Магнітне відмінювання – різниця між магнітним та справжнім азимутом зазначено на багатьох картах. Формули, за якими обчислюються азимут та відстань взяті з підручника з геодезії та перероблені для роботи зі змінною типу float. Координати точки наведення зберігаються в енергонезалежній пам'яті мікроконтролера, тому, якщо залишити кнопку “Наведення” натиснутою та вимкнути прилад, то після включення приладу продовжиться наведення на ту саму точку. Щоб змінити точку наведення треба віджати кнопку, дочекатися появи сигналу і набрати номер нової точки.

Дизайн приладу, звичайно, залишає бажати кращого, але що вийшло, те вийшло.

Що стосується ф'юзів, у мене запрограмовані лише BODEN – включена схема скидання при зниженні напруги живлення та SUT1 – управляє режим запуску тактового генератора при включеній схемі скидання. Інші не запрограмовані, тобто рівні одиниці.

Список радіоелементів

Позначення Тип Номінал Кількість ПриміткаМагазинМій блокнот
Схема 1.
U1 ІС RS-232 інтерфейсу

MAX3232

1 У блокнот
EB1 GPS-модульEB-5001 У блокнот
D1 Світлодіод 1 У блокнот
С1-С5, С12 Конденсатор0.1 мкФ6 У блокнот
С8 Конденсатор100 пФ1 У блокнот
С9, С10 Конденсатор4.7 мкФ2 У блокнот
С11 Конденсатор0.01 мкФ1 У блокнот
R7 Резистор 1 У блокнот
J1 Роз'ємRS-2321 У блокнот
Antenna1 Антенний роз'єм 1 У блокнот
L1 Котушка індуктивності 1 У блокнот
В 1 Батарея живлення3 В1 У блокнот
Схема 2.
U2 Мікроконтролер 1 У блокнот
AD1 МікросхемаADUM12011 У блокнот
ОУ1 Операційний посилювач 1 У блокнот
AT1 МікросхемаAT24C1281 У блокнот
С6, С7 Конденсатор0.15 мкФ2 У блокнот
С13, С17 Конденсатор0.1 мкФ2 У блокнот
С14, С16 Конденсатор22 пФ2 У блокнот
С15 Конденсатор1 мкФ1 У блокнот
R1, R3 Резистор

20 ком

2 У блокнот
R2 Підстроювальний резистор20 ком1 У блокнот
R4 Резистор

10 Ом

1 У блокнот
R5, R6 Резистор

4.7 ком

2 У блокнот
R8 Резистор

10 ком

1 У блокнот
Y1 Кварцовий резонатор7.3728 мГц1 У блокнот
L2 Котушка індуктивності10 мкГн1 У блокнот
DS1 LCD-дисплейWH1604B1 У блокнот
К1 Тактова кнопка 1

© 2022 androidas.ru - Все про Android