Приветствую.Вот решил поработать на Ардуинке.
Маргать светодиодом научился,захотелось подключить что то посерьёзней.
Первое ,что пришло на ум, запустить 1602 экранчик.Погуглив нашёл полезный проект,для понимания,правда к нему ещё жпска требовалась.Как раз ко мне пришла с делэкстрима Ем-411,которую надо затестить.😒
Во первых решил прописать ардуино.И сразу получил ошибку.:)Оказываеся для жпса нужно добавить библиотеки. TinyGPS и NewSoftSerial для этого нужно,в сылках найти архивы,(можно не искать TinyGPS10.zip и NewSoftSerial10c.zip
) и содержимое сбросить в библиотеку программы(…\arduino-0022\libraries).После этого ошыбок не было.И ардуинка прописалась.
1.Дальше Подключил экранчик.
RS — pin 13
E — pin 12
D4 — pin 11
D5 — pin 10
D6 — pin 9
D7 — pin 8
Vss, R/W, Vo — GND
Vdd — 5V
Всё это дело запитал,и на экране появилась надпись"waiting".😁
Так как жпска не была подключена,ждать координат пришлось-бы долго.
1.Запитал Жпску 5 вольтами,подключил pin digital 2 к-ТХ ,и digital 3-Rx.Включил возле окна,подождал,и вдруг появились циферки.😁
Покурив,решил доработать прогу.
#include <NewSoftSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
TinyGPS gps;
//Tx, Rx
NewSoftSerial nss(2, 3);
//Конфигурация линий, куда подключен lcd: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
bool feedgps();
void setup() {
//4800 скорость обмена с GPS приемником
nss.begin(4800);
//16 символов, 2 строки
lcd.begin(16, 2);
lcd.print("waiting");
}
void loop() {
bool newdata = false;
unsigned long start = millis();
long lat, lon;
unsigned long age;
//задержка в секунду между обновлениями координат
while (millis() - start < 1000) {
if (readgps())
newdata = true;
}
if (newdata) {
gps.get_position(&lat, &lon, &age);
lcd.setCursor(0, 0);
lcd.print("lat: ");
lcd.setCursor(5, 0);
lcd.print(lat);
lcd.setCursor(0, 1);
lcd.print("lon: ");
lcd.setCursor(5, 1);
lcd.print(lon);
}
}
bool readgps() {
while (nss.available()) {
int b = nss.read();
//в TinyGPS есть баг, когда не обрабатываются данные с \r и \n
if('\r' != b) {
if (gps.encode(b))
return true;
}
}
return false;
}
Теперь понятней,где широта и долгота.
Пкурив ещё,решил сделать часы,просто ,для пробы.😃
#include <NewSoftSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
TinyGPS gps;
//Tx, Rx
NewSoftSerial nss(2, 3);
//Конфигурация линий, куда подключен lcd: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
bool feedgps();
void setup() {
//4800 скорость обмена с GPS приемником
nss.begin(4800);
//16 символов, 2 строки
lcd.begin(16, 2);
lcd.print("waiting");
}
void loop() {
bool newdata = false;
unsigned long fix_age, time, date, speed, course;
long lat, lon;
unsigned long age;
//задержка в секунду между обновлениями координат
{
if (readgps())
newdata = true;
}
if (newdata) {
gps.get_datetime(&date, &time, &fix_age);
lcd.setCursor(0, 0);
lcd.print("Time ");
lcd.setCursor(5, 0);
lcd.print(" ");
lcd.setCursor(5, 0);
lcd.print(time /1000000 + 2); //часы для израеля +2 часа.
lcd.setCursor(5, 0);
lcd.print(time /1000000 + 2); //часы для израеля +2 часа.
lcd.setCursor(7, 0);
lcd.print(":");
lcd.setCursor(8, 0);
lcd.print((time / 10000) % 100); //минуты
lcd.setCursor(10, 0);
lcd.print(":");
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.setCursor(11, 0);
lcd.print((time / 100) % 100); //секунды
lcd.setCursor(0, 1);
lcd.print("Date");
lcd.setCursor(5, 1);
lcd.print((date % 100)+2000); //год
lcd.setCursor(9, 1);
lcd.print(":");
lcd.setCursor(10, 1);
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print((date / 100) % 100); //месяц
lcd.setCursor(12, 1);
lcd.print(":");
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(date / 10000); //день
}
}
bool readgps() {
while (nss.available()) {
int b = nss.read();
//в TinyGPS есть баг, когда не обрабатываются данные с \r и \n
if('\r' != b) {
if (gps.encode(b))
return true;
}
}
return false;
}
Правда предвижу косяк,вместо 1 и двух часов ночи будет писать 25-26 часов.:(Но всё равно,доволен своим успехом.Теперь можно тестить и экраны и жпсы.
Сейчас хочу вывести количество спутников,и качество сигнала.Курю мануал.😒И жду совета умных людей.
Comments
время можно брать из ЖПСа
а чтоб не было 25 и тд сделать цыкл с проверкой например если больше 24 то ч =ч+24;д=д+1
Так я ведь,и берувремя с жпса.
Нашёл интересную книжку.
Так это как-бы часть модуля,для него ещё и антену искать надо,да и х.з.как он на деле,а Ем-411 уже проверен временем,и по правде даже удивил меня,в лучшую сторону,на середине комнаты продолжал выводить координаты.Вчера вечером у нас был сильный туман,Игловски жпс,холукс-1000,и жпс-трекер,на улице за 30 минут так и не смогли стартовать,а ем-411 смогла стартануть дома.Чудеса.😃
Саш, а ты че с коптеров слился? )
Не,я не слился.Просто взял отпуск.😁Жду интерсные дешёвые решения.
Теперь думаю как СД-карту засуноть.
Уф решил баг с 25 часами.
#include <NewSoftSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
TinyGPS gps;
//Tx, Rx
NewSoftSerial nss(2, 3);
//Конфигурация линий, куда подключен lcd: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
bool feedgps();
void setup() {
//4800 скорость обмена с GPS приемником
nss.begin(4800);
//16 символов, 2 строки
lcd.begin(16, 2);
lcd.print("waiting");
}
void loop() {
bool newdata = false;
unsigned long fix_age, time, date, speed, course;
long lat, lon;
unsigned long age;
//задержка в секунду между обновлениями координат
{
if (readgps())
newdata = true;
}
if (newdata) {
gps.get_datetime(&date, &time, &fix_age);
lcd.setCursor(0, 0);
lcd.print("Time ");
lcd.setCursor(5, 0);
lcd.print(" ");
int hour=time/1000000+2; //часы для израеля +2 часа.
int day=date / 10000;
if(hour>23)day=day+1;
if(hour>23)hour=hour-24;
lcd.setCursor(5, 0);
lcd.print(hour);
lcd.setCursor(7, 0);
lcd.print(":");
lcd.setCursor(8, 0);
lcd.print((time / 10000) % 100); //минуты
lcd.setCursor(10, 0);
lcd.print(":");
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.setCursor(11, 0);
lcd.print((time / 100) % 100); //секунды
lcd.setCursor(0, 1);
lcd.print("Date");
lcd.setCursor(5, 1);
lcd.print((date % 100)+2000); //год
lcd.setCursor(9, 1);
lcd.print(":");
lcd.setCursor(10, 1);
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print((date / 100) % 100); //месяц
lcd.setCursor(12, 1);
lcd.print(":");
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(day); //день
}
}
bool readgps() {
while (nss.available()) {
int b = nss.read();
//в TinyGPS есть баг, когда не обрабатываются данные с \r и \n
if('\r' != b) {
if (gps.encode(b))
return true;
}
}
return false;
}
😁
Решил я сделать с этого проектика,что-то уау прикольное.Т.е. замудрил ,что-то на вырост.
Увеличел экранчик до 20х10.Теперь связь между жпсом и ардуиной проходит через трансивер АРС220,т.е. жпс теперь мобильный.
Собрал всё воедино.И кое что добавил по курсу.В добавок научился рисовать символы😈.
Да ещё и кнопочку на Д5 запустил.😆
Ну вот собствено код.
В самом низу линейка компаса(курс по северу)Работает но пока не проверял.😒
С лева сверху,лат лот координаты.
С права с верху ,высота над уровнем моря.Но можно обнулить (т.е.до уровня поверхности на местности) с помощью кнопки что сидит на д5.Вертикальная стрелка перед “м” показывает,модель идёт на подъём или опускается.Должно хоть как,то помоч,для тех кто теряется в облаках.
С права чуть ниже высоты, находиться скорость км/ч.
Так-как проект промежуточный решил,не сосредотачиватся в коментах.Но стоит сделать.
Ну вот собствено и видео обзор.
При потере сигнала,экран продолжает отображать последние координаты,чем поможет во время поиска.
Так-что его можно назвать “наземный чёрный яшик”
По координатам,курсу,высоте,и скорости,думаю будет легче расчитать точку посадки.
Потребление энергии:
1.ЖПС+АРС220 3-5В. 54мА.
2.Ардуино+АРС220+20х4 4-5В 50 мА.
Предположительное время работы для (1.) с 1S. аккомулятором ёмкостью 1000мА/ч. и частотой обнавления ЖПС 1 сек.15-18ч.
Предположительное время работы для (2.) с 2S. аккомулятором ёмкостью 500-1000мА/ч .15-18ч.
Примерное максималное растояние между (1.) и (2.) 2.5 км.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"4683d68c3df9550077783119":{"_id":"4683d68c3df9550077783119","hid":24868,"name":"HATUUL","nick":"HATUUL","avatar_id":null,"css":""},"4a43c2533df955007776cb80":{"_id":"4a43c2533df955007776cb80","hid":50021,"name":"ВитГо","nick":"ВитГо","avatar_id":null,"css":""},"4d2ed4283df9550077757835":{"_id":"4d2ed4283df9550077757835","hid":78182,"name":"Covax","nick":"Covax","avatar_id":null,"css":""},"4e5e608b3df955007774eeb6":{"_id":"4e5e608b3df955007774eeb6","hid":98003,"name":"Riptor","nick":"Riptor","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"4f0ad8769970730077105854","hid":13338,"title":"Учусь подключать экран 16х02 и ЖПС на Ардуину. Кто со мной?","html":"<p>Приветствую.Вот решил поработать на Ардуинке.<br>\nМаргать светодиодом научился,захотелось подключить что то посерьёзней.<br>\nПервое ,что пришло на ум, запустить 1602 экранчик.Погуглив нашёл <a href=\"http://habrahabr.ru/blogs/arduino/108797/\" class=\"link link-ext\" data-nd-link-orig=\"http://habrahabr.ru/blogs/arduino/108797/\" target=\"_blank\" rel=\"nofollow noopener\">полезный проект,для понимания</a>,правда к нему ещё жпска требовалась.Как раз ко мне пришла с делэкстрима Ем-411,которую надо затестить.<span class=\"emoji emoji-unamused\" data-nd-emoji-src=\":unamused:\">😒</span><br>\nВо первых решил прописать ардуино.И сразу получил ошибку.:)Оказываеся для жпса нужно добавить библиотеки. <a href=\"http://arduiniana.org/libraries/tinygps/\" class=\"link link-ext\" data-nd-link-orig=\"http://arduiniana.org/libraries/tinygps/\" target=\"_blank\" rel=\"nofollow noopener\">TinyGPS</a> и <a href=\"http://arduiniana.org/libraries/newsoftserial/\" class=\"link link-ext\" data-nd-link-orig=\"http://arduiniana.org/libraries/newsoftserial/\" target=\"_blank\" rel=\"nofollow noopener\">NewSoftSerial</a> для этого нужно,в сылках найти архивы,(можно не искать <a href=\"http://arduiniana.org/TinyGPS/TinyGPS10.zip\" class=\"link link-ext\" data-nd-link-orig=\"http://arduiniana.org/TinyGPS/TinyGPS10.zip\" target=\"_blank\" rel=\"nofollow noopener\">TinyGPS10.zip</a> и <a href=\"http://arduiniana.org/NewSoftSerial/NewSoftSerial10c.zip\" class=\"link link-ext\" data-nd-link-orig=\"http://arduiniana.org/NewSoftSerial/NewSoftSerial10c.zip\" target=\"_blank\" rel=\"nofollow noopener\">NewSoftSerial10c.zip</a><!--cut</p>-->\n) и содержимое сбросить в библиотеку программы(…\\arduino-0022\\libraries).После этого ошыбок не было.И ардуинка прописалась.<br>\n1.Дальше Подключил экранчик.<br>\nRS — pin 13<br>\nE — pin 12<br>\nD4 — pin 11<br>\nD5 — pin 10<br>\nD6 — pin 9<br>\nD7 — pin 8<br>\nVss, R/W, Vo — GND<br>\nVdd — 5V<br>\nВсё это дело запитал,и на экране появилась надпись"waiting".<span class=\"emoji emoji-grin\" data-nd-emoji-src=\":grin:\">😁</span></p>\n<p><a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member24868/media/4f0ad36f9970730077fd554d\" target=\"_blank\" data-nd-media-id=\"4f0ad36f9970730077fd554d\" data-nd-image-orig=\"https://rcopen.com/member24868/media/4f0ad36f9970730077fd554d\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/4f0ad36f9970730077fd554d_sm\" alt width=\"170\" height=\"150\"></a><br>\nТак как жпска не была подключена,ждать координат пришлось-бы долго.<br>\n1.Запитал Жпску 5 вольтами,подключил pin digital 2 к-ТХ ,и digital 3-Rx.Включил возле окна,подождал,и вдруг появились циферки.<span class=\"emoji emoji-grin\" data-nd-emoji-src=\":grin:\">😁</span><br>\nПокурив,решил доработать прогу.</p>\n<pre class=\"hljs\"><code>#include <NewSoftSerial.h>\n#include <TinyGPS.h>\n#include <LiquidCrystal.h>\nTinyGPS gps;\n//Tx, Rx \nNewSoftSerial nss(2, 3);\n//Конфигурация линий, куда подключен lcd: RS, E, D4, D5, D6, D7\nLiquidCrystal lcd(13, 12, 11, 10, 9, 8);\nbool feedgps();\nvoid setup() {\n//4800 скорость обмена с GPS приемником\nnss.begin(4800);\n//16 символов, 2 строки\nlcd.begin(16, 2);\nlcd.print("waiting");\n\n}\nvoid loop() {\nbool newdata = false;\nunsigned long start = millis();\nlong lat, lon;\nunsigned long age;\n//задержка в секунду между обновлениями координат\nwhile (millis() - start < 1000) {\nif (readgps())\nnewdata = true;\n}\nif (newdata) {\ngps.get_position(&lat, &lon, &age);\n\nlcd.setCursor(0, 0);\nlcd.print("lat: ");\nlcd.setCursor(5, 0);\nlcd.print(lat);\nlcd.setCursor(0, 1);\nlcd.print("lon: ");\nlcd.setCursor(5, 1);\nlcd.print(lon);\n}\n}\nbool readgps() {\nwhile (nss.available()) {\nint b = nss.read();\n//в TinyGPS есть баг, когда не обрабатываются данные с \\r и \\n\nif('\\r' != b) {\nif (gps.encode(b))\nreturn true;\n}\n}\nreturn false;\n}\n</code></pre>\n<p>Теперь понятней,где широта и долгота.</p>\n<p><a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member24868/media/4f0ad4329970730077fd5b37\" target=\"_blank\" data-nd-media-id=\"4f0ad4329970730077fd5b37\" data-nd-image-orig=\"https://rcopen.com/member24868/media/4f0ad4329970730077fd5b37\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/4f0ad4329970730077fd5b37_sm\" alt width=\"170\" height=\"150\"></a><br>\nПкурив ещё,решил сделать часы,просто ,для пробы.<span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span></p>\n<pre class=\"hljs\"><code>#include <NewSoftSerial.h>\n#include <TinyGPS.h>\n#include <LiquidCrystal.h>\nTinyGPS gps;\n//Tx, Rx \nNewSoftSerial nss(2, 3);\n//Конфигурация линий, куда подключен lcd: RS, E, D4, D5, D6, D7\nLiquidCrystal lcd(13, 12, 11, 10, 9, 8);\nbool feedgps();\nvoid setup() {\n //4800 скорость обмена с GPS приемником\n nss.begin(4800);\n //16 символов, 2 строки\n lcd.begin(16, 2);\n lcd.print("waiting");\n\n}\nvoid loop() {\n bool newdata = false;\n unsigned long fix_age, time, date, speed, course;\n long lat, lon;\n unsigned long age;\n //задержка в секунду между обновлениями координат\n {\n if (readgps())\n newdata = true;\n }\n if (newdata) {\n gps.get_datetime(&date, &time, &fix_age);\n lcd.setCursor(0, 0);\n lcd.print("Time ");\n lcd.setCursor(5, 0);\n lcd.print(" ");\n lcd.setCursor(5, 0);\n lcd.print(time /1000000 + 2); //часы для израеля +2 часа.\n lcd.setCursor(5, 0);\n lcd.print(time /1000000 + 2); //часы для израеля +2 часа.\n lcd.setCursor(7, 0);\n lcd.print(":");\n lcd.setCursor(8, 0);\n lcd.print((time / 10000) % 100); //минуты\n lcd.setCursor(10, 0);\n lcd.print(":");\n lcd.setCursor(11, 0);\n lcd.print(" ");\n lcd.setCursor(11, 0);\n lcd.print((time / 100) % 100); //секунды\n lcd.setCursor(0, 1);\n lcd.print("Date");\n lcd.setCursor(5, 1);\n lcd.print((date % 100)+2000); //год\n lcd.setCursor(9, 1);\n lcd.print(":");\n lcd.setCursor(10, 1);\n lcd.print(" ");\n lcd.setCursor(10, 1);\n lcd.print((date / 100) % 100); //месяц\n lcd.setCursor(12, 1);\n lcd.print(":");\n lcd.setCursor(13, 1);\n lcd.print(" ");\n lcd.setCursor(13, 1);\n lcd.print(date / 10000); //день\n }\n}\nbool readgps() {\n while (nss.available()) {\n int b = nss.read();\n //в TinyGPS есть баг, когда не обрабатываются данные с \\r и \\n\n if('\\r' != b) {\n if (gps.encode(b))\n return true;\n }\n }\n return false;\n}\n</code></pre>\n<p><a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member24868/media/4f0ad4a69970730077fd6114\" target=\"_blank\" data-nd-media-id=\"4f0ad4a69970730077fd6114\" data-nd-image-orig=\"https://rcopen.com/member24868/media/4f0ad4a69970730077fd6114\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/4f0ad4a69970730077fd6114_sm\" alt width=\"170\" height=\"150\"></a><br>\nПравда предвижу косяк,вместо 1 и двух часов ночи будет писать 25-26 часов.:(Но всё равно,доволен своим успехом.Теперь можно тестить и экраны и жпсы.</p>\n<p>Сейчас хочу вывести количество спутников,и качество сигнала.Курю мануал.<span class=\"emoji emoji-unamused\" data-nd-emoji-src=\":unamused:\">😒</span>И жду совета умных людей.</p>\n","user":"4683d68c3df9550077783119","ts":"2012-01-09T12:07:18.000Z","st":1,"cache":{"comment_count":8,"last_comment":"4f1f0229997073007715a9ad","last_comment_hid":8,"last_ts":"2012-01-24T19:10:33.000Z","last_user":"4683d68c3df9550077783119"},"views":4395,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}