Зарегистрироваться

Самодельные часы с крупными символами, которые никогда не придётся настраивать.

В этом посте я расскажу о самодельных часах, которые не потребуют от пользователя вообще никаких настроек. Достаточно подать им питание, и они сами будут заботиться об отображении точного времени. Им не нужен ни интернет, ни Wi-Fi, ни подключение по витой паре, ни настройки в менюшках, ни подключение к смарт-домам / смартфонам. Вообще ничего. Просто «включил, поставил на полку и забыл». Идеальные часы? Конечно нет. Но, возможно, кому-то нижеследующий текст будет интересен.

Скажу сразу. Я, в общем, не планировал писать этот обзор.
Частью из-за того, что тема DIY-часов тут периодически поднимается и без меня, частью из-за того, что товара, из-за которого и стоит писать этот обзор, — а именно, самих индикаторов, на Али уже нет. Более того, даже магазин этот удалён.
Так бы и осталось это без внимания, если бы я в одном из комментариев не обмолвился о своей самоделке. В ответ я получил просьбы посетителей (и в комментариях и в личной переписке) рассказать об этой конструкции. Посему решился на написание этого текста. Меня извиняет лишь то, что
а) часы действительно имеют несколько функциональных «изюминок», отсутствующих у других,
б) что на этом ресурсе чаще обозреваются готовые наборы, а вот именно часов-самоделок, с публикацией исходного кода, не так и много, и
в) что управляющий код содержит немало полезного функционала, который может кому-то пригодиться в своих будущих конструкциях (например алгоритм пофазового опроса DS18B20 с порционным питанием, честный расчёт CRC термодатчика, корректную обработку скретчпада датчика на отрицательных температурах, работу с символьным потоком GPS и синхронизацию времени с коррекцией под часовые зоны).

О часах вцелом.
• Часы собраны на популярном контроллере Arduino. Алгоритмические задачи, реализуемые в данных часах, как раз подходят под вычислительные мощности ардуины.
• В качестве источника точного времени для синхронизации часы используют сигналы со спутников GPS.
• Отсутствие сигналов GPS не является препятствием к работе, поскольку часы имеют кнопки ручной установки времени и даже в самом худшем случае они будут просто классическими электронными часами с ручной установкой часов и минут.
• Часы периодически сохраняют время в собственной энергонезависимой памяти, поэтому даже после сбоев питания они начинают отсчёт с последней сохранённой минуты. Да, такое время после сбоя будет неточным, но это явно лучше, чем начинать отсчёт с 00:00. По мере нахождения сигнала GPS, время, без вмешательства, синхронизируется.
• Отображение несинхронизированного неточного времени зрительно отличается от точного синхронизированного времени
• Часы способны работать в любой часовой зоне.
• Часы умеют опрашивать один датчик температуры DS18B20 и периодически отображать температуру.
• Отсутствие или случайный выход из строя датчика температуры не является препятствием к работе, часы просто не будут отображать экран с температурой.
• В часах отсутствует динамическая индикация. Часы не мерцают при отображении информации.
• В часах предусмотрен автоматический режим пониженной яркости для условий тёмной и ночной обстановки. Яркость изменяется аналоговым способом, что избавляет от мерцания индикаторов и в этом случае.
• По возможности, в конструкции я намеренно применял готовые унифицированные модули, что способствует более простому повторению и требует меньшей радиолюбительской подготовки от повторяющих.

Это не первые мои часы. Наверное каждый, кто научился держать паяльник, рано или поздно к этому приходит. Первые мои часы, тогда ещё с отцом, мы собрали в начале 80-х. На серии К155 и с К514ИД1 + АЛС304 на выходе. Потом было много часов «Старт 7176», сегодня уже не скажу, сколько их было собрано, — и себе, и другим. На КР145ИК1901 и с ИВЛ1-7/5, кто помнит. С различными модификациями, коими тогда изобиловал журнал «Радио». В самом начале двухтысячных я открыл для себя микроконтроллеры Атмел, и в ту же пору сделал часы на 2313 (тогда это было ещё не ATtiny, а AT90S) и кингбрайтовских дюймовых семисегментниках, кои вполне живы до сих пор. Описываемые тут часы являются, пожалуй, логичным продолжением этой цепочки. Ещё с самых первых часов я мечтал создать устройство, чтобы ему не надо было устанавливать каждый раз время, и чтобы оно (время) само восстанавливалось после сбоев по питанию. С появлением интернетов и NTP эта мечта стала вполне осуществимой. Однако технология GPS и доступность GPS-приёмников позволили создать устройство, максимально независящее от человека, максимально устойчивое к нештатным ситуациям и максимально самодостаточное.

Сначала о главном элементе часов.
Об индикаторах.
Судя по всему, это была какая-то индивидуальная разработка конкретного китайского подвала. Как я сказал выше, на Али уже нет ни самого лота, ни магазина, мне его продавшего. У меня остался снимок заказа, откуда я покажу фотографии продавца:
Вот так это выглядело на странице продавца





По сути, ничего особенного. Модуль собран на сдвиговом регистре 74HC595, который нагружен сегментами светодиодного индикатора. Сдвиговые регистры хороши тем, что позволяют «стекировать», «собирать» их в цепочки «друг за другом», и, последовательно вгружая цифровой код на вход первого, проталкивать его вдоль всей цепочки регистров до последнего. Поэтому, занимая от контроллера всего несколько пинов, мы можем управлять достаточно большим количеством независимых элементов; в данном случае, тридцатью двумя сегментами табло (семь сегментов + «точка», умножить на 4). Тем, кому хочется больше узнать про сдвиговые регистры и их применение, поисковик но запросу «74HC595 arduino» выдаст огромное количество информации и примеров.
Главной же интересной особенностью именно этих модулей было то, что питание самих сегментов было организовано не от общей линии питания регистров, а от отдельной колодочки на плате, — там простенькая схемка на паре транзисторов. Раздельное питание сдвиговых регистров и сегментов — довольно неплохая идея. Я этой особенностью попользовался вовсю, организовав ступенчатую регулировку яркости табло, не затрагивая питание регистров.
Я сумел подобрать примерно аналогичный модуль на площадке Таобао. Он стоит ¥8.00 за односимвольный модуль (это чуть больше доллара) плюс локальная доставка. Я не покупал эти модули и не держал их в руках. Но не вижу причин, почему бы они не заработали с описываемыми часами. Они отличаются от применённых мной, прежде всего, цветом свечения (тут красный, у меня синий) — но не проблема и перепаять, при необходимости. И отсутствием дополнительной линии питания. Но зато тут применён драйвер ULN2003A, что вселяет оптимизм в уверенности по нагрузочной способности схемы и в успешную доделку под разделение линий питания сдвигового регистра и сегментов индикатора, буде это кому-то понадобится.
На Таобао сейчас есть даже более прикольная платка — за пять долларов (включая локальную доставку) мы можем получить готовое красное табло с управляемым двоеточием; (подчеркну: это именно табло, без мозгов).
Вкратце познакомлю со своими модулями; тонкие подробности, очевидно, уже не актуальны.

Ширина модуля 29 мм
Высота модуля 40 мм
Высота символа: 30 мм
Питание цифрового интерфейса: 5V
Питание символов индикатора:7-12V

Модули приходят с защитной плёнкой на рабочей плоскости:


С обратной стороны:

Флюс, конечно, не отмыт.
Клеммная колодка установлена с перекосами.
Явно «хижина дядюшки Ляо».
Тем не менее, все надписи присутствуют, а внизу даже нарисована стрелка, показывающая вход и выход последовательного потока загружаемых данных.

Все четыре модуля-индикатора я закрепил на промежуточной пластине-шасси, оставив пробел в половину ширины символа между часами и минутами, чтобы зрительно будущее двоеточие между ними смотрелось более комфортно.

Двоеточие оформил так. Взял прямоугольный кусочек листового чёрного АБС-пластика, просверлил два отверстия, разметив их с тем же углом наклона, что и сегменты на индикаторах. Вклеил в эти отверстия пятимиллиметровые молочные светодиоды и аккуратно сошлифовал дремелем полукруглые линзы диодов. Получилась чёрная плашка с молочным двоеточием. Эту плашку просто приклеил между закреплёнными индикаторами.


Цвет пластика «двоеточия» чуть-чуть не совпадает с чёрным цветом индикаторов, но за тонированным стеклом это не имеет никакого значения. И это явно лучше, чем просто впаянные и открытые светодиоды: во-первых, не видны белые торцы индикаторов, во-вторых нет боковой засветки от светодиодов.

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


Несколько пояснений по схеме.
1. В качестве ардуины применено Arduino Pro Mini. Но подойдёт любая, хоть Nano, хоть Uno. Я люблю ProMini за то, что их не жалко оставлять в готовых конструкциях, это самая бюджетная модель из линейки ардуино. Покупаю их сразу пригоршню и всегда имею запас «в тумбочке». Новичкам же, наверное, больше подойдёт упомянутые выше Nano или Uno, потому что они сразу, без переходников и сложностей, умеют подключаться к USB «большого брата».
2. Токоограничительные резисторы светодиодов двоеточия надо подбирать так, чтобы при дневном освещении и за тонированным стеклом яркость двоеточия не отличалась от яркости остальных символов. В зависимости от применённых светодиодов, значения этих резисторов могут лежать в пределах от 100 Ом до 6кОм.
3. К пину 3 подключён узел ночного приглушения яркости. Приглушение обеспечивает одноваттный резистор 740 Ом. Его значение подбирается в зависимости от желаемой степени затемнения. Для дневного режима (т.е. режима полной яркости), этот резистор полностью блокируется p-канальным мосфетом, управляемым от пина микроконтроллера. IRF9Z24N применён потому, что он у меня был. Подойдёт и IRF9Z14N, и любой другой, подходящий по параметрам. Почему яркость меняется мощным резистором, а не ШИМ? Чтобы полностью исключить мерцание. Часы питаются не от батарей, а стационарно. В данном случае этот ход оправдан, глаза дороже.
Если вам опция ночного затемнения не нужна, можно просто этот узел не собирать.
4. В качестве датчика освещения применён недорогой модуль на фоторезисторе и компараторе LM393. Порог чувствительности между тёмным и светлым уровнем устанавливается движком подстроечного резистора на модуле. Фоторезистор надо располагать так, чтобы на него не попадал собственный свет от индикаторов часов. У меня он расположен на боковой грани корпуса.
5. О питании в схеме. В силу того, что моим индикаторам требовалось два питания (причём, одно — не очень-то стандартное), я поступил так. Для первой ступени применил замечательные понижающие мини DC-DC преобразователи. (вот лот сразу на 10 штук, можно и поштучно). Важно только сначала выставить движком требуемое напряжение, капелькой лака (цапона или лака для ногтей) зафиксировать движок подстроечного резистора, а уж потом впаивать модуль в схему. Применение DC-DC модуля позволило в качестве источника питания использовать любой ненужный сетевой адаптер в широком диапазоне питающих напряжений (от 9 до 21 вольта). У меня это двенадцативольтовый адаптер от какого-то мертвого сетевого хаба. Для второго стабильного напряжения +5V поставил 7805 (КР142ЕН5А). Потому что он у меня был. Но ничто не мешает поставить такой же DC-DC преобразователь, настроенный на 5 вольт.
6. В качестве приёмника GPS-сигналов используется модуль GY-NEO6MV2. У меня точное время с GPS ловится, пусть и не сразу, в метре от окна в панельном доме далеко не на верхнем этаже за пластиковыми окнами с внутренним металлизированным напылением. Но уже сегодня вполне доступны более современные GPS+ГЛОНАСС модули, те же Neo-M8N, там надо только чуть сконфигурировать их параметры для работы с данным скетчем.

К программной части.

Для тех, кто решит повторить описанную тут конструкцию, я приготовил архив с исходником и всеми необходимыми библиотеками. Из папки «libraries» внутри архива надо распаковать те библиотеки, которых не хватает в папке «libraries» вашей ArduinoIDE.
На случай, если архив протухнет, повторю код ещё и тут:
Исходный код
#include <TimeLib.h>
#include <SPI.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <Bounce.h>
#include <OneWire.h>

const int TIMEZONE = 3; //Сюда установить часовую зону
float LATITUDE = 55.5, LONGITUDE = 37.5; // первоначальная позиция для Москвы, район аэропорта Остафьево.
int MaxTimeToSync=500; // Синхронизация каждые 500 секунд
#define MaxScreenTimer 114 // С какой полусекунды каждой минуты будет отображаться температура. Значение 114 -> с 57-й секунды до конца минуты.

#define HourPin 4 // Это контакт кнопки перевода часов
#define MinutePin 8 // Это контакт кнопки перевода минут

Bounce HourButt = Bounce(HourPin,40 );
Bounce MinuteButt = Bounce(MinutePin,40 );

#define DotPin 5 // К этому пину подключены светодиоды в виде двоеточия между часами и минутами
byte DotNightBright = 9; // Это значение яркости зажжённого двоеточия в ночном режиме.

enum { REG_SELECT = 10 }; // пин, управляющий защёлкой (SS в терминах SPI)

#define BrightnessPin 3

TinyGPS gps;
SoftwareSerial ss(9, 7); // К этим пинам подключается GPS-приёмник. Tx->9, Rx->7

#define LightSensorPin 2

#define DSdatapin 6 // К этому пину подключена линия данных датчика DS18B20
#define DSpowerpin 14 // С этого пина подаётся питание на датчик DS18B20

OneWire ds (DSdatapin);

int CurMins;

byte font[23] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000, // 0 — 9
0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b01111000, 0b00000000, 0b00010000, // 0. — 9.
0b10111111,0b10011100,0xff}; // -, °

byte Blinking = false;
byte TempPresent = false;
byte DSstatus,DSphase=0;
byte CRC;
byte tempdata[12];
unsigned int tempraw;
float CurrentTemp, DSTemp;

byte DarkNight = 0;

int Synced;
int TimeToSync=0;

int t = 0;
int sc,mm,hh,dd,mn,ye;
byte bb,bo=0;
byte dot=true;

char GPSchar;
float flat, flon;
unsigned long age;
int GPSyear;
byte GPSmonth, GPSday, GPShour, GPSminute, GPSsecond, GPShundredths;
unsigned long GPSage;
byte GPSpresent = false;
byte NeedToShowScreen = false;
byte ScreenPage=0;
int ScreenTimer;
unsigned long dotstart;

byte sm[9];

void TickEvery05s() // Эта процедура вызывается каждые полсекунды
{
dotstart= millis();
if (dot==true)
{if (Blinking ==true) {Blinking=false;analogWrite(DotPin,0);} else {Blinking=true; if (DarkNight==1) analogWrite(DotPin,DotNightBright); else analogWrite(DotPin,255);}} else analogWrite(DotPin,0);
if (ScreenTimer<120) ScreenTimer++; else ScreenTimer=0;

NeedToShowScreen = true;

if (DSphase==0) {digitalWrite(DSpowerpin, HIGH); } else
if (DSphase==1) {
ds.reset();
ds.write(0xCC);
ds.write(0x44);} else
if (DSphase==4) {
DSstatus=ds.reset();
ds.write(0xCC);
ds.write(0xBE);
CRC=0;
for (byte i = 0; i < 9; i++) tempdata[i] = ds.read ();
digitalWrite(DSpowerpin, LOW);} else
if (DSphase==5) {CRC=ds.crc8(tempdata,9);} else
if (DSphase==6) {
tempraw = (tempdata[1] << 8) | tempdata[0]; // Пересчитываем в температуру
int signBit = tempraw & 0x8000; // Проверяем самый левый бит: 0x8000= 0b10000000 00000000
if (signBit) // Если там единица — число отрицательное и его надо преобразовать
{ // Стандартное преобразование отрицательного числа, которое в микроконтроллере в дополнительной кодировке
tempraw = (tempraw ^ 0xffff) + 1; // Путем исключающего ИЛИ плюс единица
}
float celsius = (float)tempraw / 16.0;
if (signBit) celsius=-celsius; // Если отрицательное число
CurrentTemp=celsius;
if (CRC==0) TempPresent=true; else TempPresent=false;
if (DSstatus==0) TempPresent=false;
}

DSphase++;
if (DSphase>20) DSphase=0;

}

int encodeDigit(char c)
{
int m;
if (c=='-') m=20; else
if ((c>='0') and (c<='9')) m=c-48; else
m=22;
return m;
}

void Screen()
{
String b;
char s[16];

if (TempPresent==true)
{
b = dtostrf(CurrentTemp, 3, 0, s);
if (b==" -0") b=" 0";
if (b!=" 0") { if (b.charAt(1)==' ') b.setCharAt(1,' '); else if ((b.charAt(0)==' ') && (b.charAt(1)!='-')) b.setCharAt(0,' ');}
} else
{
b="---";
ScreenPage=0;
}

switch(ScreenPage) {
case 1: {
dot=false;
analogWrite(DotPin,0);
sm[0]=font[encodeDigit(b.charAt(0))];
sm[1]=font[encodeDigit(b.charAt(1))];
sm[2]=font[encodeDigit(b.charAt(2))];
sm[3]=font[21];
break;}
case 0:{
dot=true;
sm[3]=font[(byte)minute()%10];
sm[2]=font[(byte)minute()/10];
sm[1]=font[(byte)hour()%10];
sm[0]=font[(byte)hour()/10];
break;}}

digitalWrite (BrightnessPin, DarkNight);
digitalWrite(REG_SELECT, LOW);
SPI.transfer(sm[3]);
SPI.transfer(sm[2]);
SPI.transfer(sm[1]);
SPI.transfer(sm[0]);
digitalWrite(REG_SELECT, HIGH);

NeedToShowScreen = false;
}

void Synctime()
{
byte monthes [13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; // Сколько дней по месяцам в невисокосном году.

if (Synced>0) Synced=0;

gps.f_get_position(&flat, &flon, &GPSage);
if ((flat !=TinyGPS::GPS_INVALID_F_ANGLE) && (flon !=TinyGPS::GPS_INVALID_F_ANGLE)) {GPSpresent=true;} else GPSpresent=false;
gps.crack_datetime(&GPSyear, &GPSmonth, &GPSday, &GPShour, &GPSminute, &GPSsecond, &GPShundredths, &GPSage);
if ((GPSage!=TinyGPS::GPS_INVALID_AGE) && (GPSpresent==true) && (GPShour+GPSminute>0))
{
GPShour=GPShour+TIMEZONE;
if (GPShour>23) { // Корректируем время с GPS под часовые зоны восточной долготы. Жители обоих Америк и других стран с отрицательными часовыми зонами перепишут эту процедуру под себя. :)
GPShour=GPShour-24;
if (((GPSyear % 4 == 0) && (GPSyear % 100 != 0)) || (GPSyear % 400 == 0)) {monthes[2]=29;} // Корректируем февраль, если год високосный
GPSday++;
if (GPSday>monthes[GPSmonth])
{
GPSday=1;
GPSmonth++;
if (GPSmonth>12) {GPSmonth=1; GPSyear++;}
}
}
if (flat == TinyGPS::GPS_INVALID_F_ANGLE) {flat=0.0;} else {flat=round(flat*100); flat=flat/100;}
if (flon == TinyGPS::GPS_INVALID_F_ANGLE) {flon=0.0;} else {flon=round(flon*100); flon=flon/100;}
if ((flat !=TinyGPS::GPS_INVALID_F_ANGLE) && (flon !=TinyGPS::GPS_INVALID_F_ANGLE))
{
LATITUDE = flat, LONGITUDE = flon;
if (GPSage>1500) {;} else {
setTime(GPShour, GPSminute, GPSsecond, GPSday, GPSmonth, GPSyear);
Synced=2;
}
}
}}

void setup()
{
mm=EEPROM.read(0); hh=EEPROM.read(1); dd=EEPROM.read(2); mn=EEPROM.read(3); ye=EEPROM.read(4); // При включении устройства читаем сохранённое время. Оно неточное, но это лучше, чем отображать нули.
setTime(hh, mm, 0, dd, mn, ye);
pinMode(DotPin, OUTPUT); analogWrite(DotPin,0);
pinMode(BrightnessPin, OUTPUT); digitalWrite (BrightnessPin, 1);
pinMode(LightSensorPin, INPUT);
SPI.begin();
pinMode(REG_SELECT, OUTPUT);
DarkNight=digitalRead(LightSensorPin);
Screen();
pinMode(HourPin, INPUT_PULLUP);
pinMode(MinutePin, INPUT_PULLUP);
pinMode(DSpowerpin, OUTPUT); digitalWrite(DSpowerpin, HIGH);
CurMins=hour()*60+minute();
DSphase=0;
ScreenPage=0;
ScreenTimer=0;
NeedToShowScreen = true;
CurrentTemp=85;
TempPresent=false;

Synced=-1;

MsTimer2::set(500, TickEvery05s); // 500ms period
MsTimer2::start();

ss.begin(9600);
}

time_t prevDisplay = 0;

void loop()
{
bool newData = false;
if (ss.available()){
char GPSchar = ss.read();
if (gps.encode(GPSchar)) newData = true;}
if (newData==true)
{
gps.f_get_position(&flat, &flon, &GPSage);
if ((flat !=TinyGPS::GPS_INVALID_F_ANGLE) && (flon !=TinyGPS::GPS_INVALID_F_ANGLE)) {GPSpresent=true; NeedToShowScreen=true;} else GPSpresent=false;

}
if (TempPresent==true) {if (ScreenTimer>=MaxScreenTimer) {ScreenPage=1; dot=false; analogWrite(DotPin,0);} else {ScreenPage=0; dot=true;}} else {ScreenPage=0; dot=true;}

// Опрос кнопок
if (HourButt. update()) {if (HourButt. read()== LOW) {hh=hour();mm=minute();sc=second();dd=day();mn=month();ye=year(); hh++; if (hh==24) hh=0; setTime(hh, mm, sc, dd, mn, ye); Synced=1; ScreenTimer=0; ScreenPage=0; Screen(); HourButt .rebounce(500);}}
if (MinuteButt.update()) {if (MinuteButt.read()== LOW) {hh=hour();mm=minute();sc=second();dd=day();mn=month();ye=year(); mm++; if (mm==60) mm=0; setTime(hh, mm, sc, dd, mn, ye); Synced=1; ScreenTimer=0; ScreenPage=0; Screen(); MinuteButt.rebounce(500);}}
if (now() != prevDisplay) {
prevDisplay = now();
CurMins=hour()*60+ minute();
if (second() == 0) if (Synced>0) { // Если время не скомпрометировано, то записываем его в EEPROM без секунд.
t=EEPROM.read(0); if (minute() != t) EEPROM.write(0, minute());
t=EEPROM.read(1); if (hour() != t) EEPROM.write(1, hour());
t=EEPROM.read(2); if (day() != t) EEPROM.write(2, day());
t=EEPROM.read(3); if (month() != t) EEPROM.write(3, month());
t=EEPROM.read(4); if (year() != t) EEPROM.write(4, year());
}
TimeToSync++;
if (TimeToSync >= MaxTimeToSync) {
Synctime();
TimeToSync=0;}
}
if ((TimeToSync%10==0) && (Synced < 1)) Synctime(); // Если время ещё не синхронизировано, то пытаемся его синхронизировать чаще.

DarkNight=digitalRead(LightSensorPin);
if (NeedToShowScreen == true) Screen();
if (Synced<0) if (millis()-dotstart>30) analogWrite(DotPin,0);
delay(1);
}

О работе с DS18B20. В моём решении питание датчику подаётся не постоянно, а только на требуемый для получения и считывания температуры период, оставляя всё остальное время датчик обесточенным. Такой подход сводит к минимуму самонагрев датчика, и, как следствие, завышение считываемых показаний. Вся работа по обслуживанию термодатчика содержится в процедуре, вызываемой по прерыванию таймера каждые полсекунды. Для того, чтобы не задерживать эту процедуру надолго, вся работа разбита на несколько тактов, т.е. каждые полсекунды делается один такт — маленький кусочек этой работы. Такой подход нисколько не задерживает основной цикл (в котором работают другие процессы) и полностью соответствует рекомендуемыми производителем временным интервалам. Так, в первом такте на датчик подаётся питание, в следующем такте (т.е. через полсекунды) датчику отправляется запрос на преобразование, ещё через полторы секунды готовое значение считывается из датчика и снимается питающее напряжение (оно больше не нужно до следующего цикла), в следующем такте рассчитывается контрольная сумма, ещё один такт тратится на пересчёт сырых данных в градусы Цельсия. Оставшиеся семь секунд десятисекундного цикла датчик отдыхает обесточенным.

Реализация расчёта контрольной суммы табличным методом, содержащаяся в стандартной библиотеке OneWire, взята из официального аппнота к DS18B20, но, как оказалось, мало кто сейчас читает официальные даташиты и аппноты. Бóльшая часть исходников к ардуино, доступных в сети, вообще не содержит какого-либо просчёта CRC, и, как следствие, такие «упрощённые» алгоритмы спотыкаются на неудобных значениях (+85°, 0°, +125°). Что довольно удивительно, на мой взгляд.
Вторая проблема, часто встречаемая в доступных исходниках по работе с DS18B20 — это пересчёт отрицательных значений температуры из дополнительной двоичной кодировки. Это удивительно, — ведь, вроде бы, обычная бинарная математика, но, такое впечатление, что половина авторов просто не проверяла свои скетчи на отрицательных температурах. Если ниже нуля ваша программа сразу показывает 65536 градусов, а вы не находитесь внутри Солнца, то гляньте в этот скетч, там всё в комментариях есть.

О синхронизации времени в часах. Как я уже сказал выше, текущее время я периодически пишу в EEPROM. С целью экономии износа ячеек, я не пишу секунды, а часы и минуты пишу только в том случае, если время не скомпрометировано и если значение внутри ячейки не совпадает с записываемой переменной. Более сложных алгоритмов по экономии ресурса EEPROM я не применял: не тот масштаб задачи. При включении питания значение времени читается из энергонезависимой памяти. При этом оно считается скомпрометированным и имеет наименьший приоритет важности. Тем не менее, даже такое время по ряду причин всё равно лучше, чем 00:00. Как только время будет установлено вручную с кнопок, оно получит более высокий приоритет и уже будет считаться приемлемым. Время, полученное с GPS и прошедшее проверку, считается наиболее точным, имеет наивысший приоритет и замещает собой установленное вручную и, уж конечно, считанное из памяти. Если время удачно синхронизировано, последующая синхронизация ожидается неспешно, примерно через четверть часа. В случае, если время скомпрометировано или или всё ещё не синхронизировано после включения, попытки синхронизации предпринимаются гораздо чаще, каждые десять секунд.

О конструктивном оформлении часов.


Я использовал готовый корпус производства Gainta. Дремелем в передней плоскости вырезал прямоугольное окно под индикаторы. На одной боковой плоскости виден фоторезистор. На другую боковину выведены толкатели стандартных тактовых кнопок (установка часов и минут), и разъёмы для подключения термодатчика и адаптера питания (мой адаптер питания имеет штекер 5,5x2,1 и втыкается вот в такое гнездо).
Переднюю сторону корпуса, по хорошему, надо закрыть тоненьким тонированным стеклом.
С советских времён у меня хранилось тонированное в серый цвет оргстекло толщиной 1,5 мм. Его осталось очень мало и на данную площадь его, увы, не хватило. Но сейчас же другое время, чего сейчас нельзя найти? Оказалось, что вот тонированного оргстекла такой толщины сейчас нельзя найти. Судя по всему, его не существует. Возможно найти тонированный плексиглаc толщиной 3 мм — и это всё. Но в Москве никто не продаст тебе кусочек плексигласа 15x10 сантиметров. Покупай трёхметровый лист — и никаких гвоздей. Такой плексиглас (стандартными кусками формата A4) возможно купить на ebay, но это довольно дорого.
Решил проблему так. Заказал по размерам обычное прозрачное оргстекло 2 мм (оно-то вполне доступно) и оттонировал его парой слоёв (спереди и сзади) вот такой тонировочной плёнки свётло-серого цвета (покупал дешевле, были скидки). Оттонированное стекло приклеил прозрачным силиконовым герметиком к корпусу. Получилось, на мой взгляд, вполне смотрибельно.



Часы работают уже более года, проблем не выявлено. Было несколько сбоев времени из-за неустойчивого приёма GPS (у меня для приёма условия, всё-таки, довольно экстремальные), но время без вмешательств самовосстанавливалось со следующей синхронизацией. Это действительно конструкция «включил коробочку и забыл». А бóльшего от неё и не требуется.

Главное, ради чего всё это писáлось. Я искренне надеюсь, что моя статья предоставит достаточное количество идей, и информационной помощи тем, кому эта сфера интересна. А, возможно, кому-то послужит недостающим импульсом для начала собственного творчества и реализации собственных идей.

Так, даже в существующем виде данная конструкция предоставляет широкое поле для фантазии и творчества. Мы уже сейчас внутри алгоритма, помимо текущего времени, совершенно бесплатно имеем дату и свои координаты. Мало того, что можно просто выводить эту информацию, из неё ещё можно получать рассветы и закаты Солнца непосредственно для вашей местности, можно получать фазу Луны, день недели, високосность года, рассчитывать Пасхалию и т.д. Осталось ещё шесть свободных пинов, а, значит, можно подключать ещё какие-то датчики или исполнительные механизмы: звуковые сигнализаторы, реле, ключи коммутации, кнопки, беспроводные передатчики/приёмники и т.д.


Добавлено спустя сутки:
В нескольких комментариях к обзору мне сказали, что хорошо бы зрительно отличать неточное время, которое ещё не синхронизировано от правильного синхронизированного. Я дописал код, теперь эта возможность у пользователя есть.
Пока время ещё не сихронизировано и является скомпрометированным, двоеточие между разрядами часов и минут мигает в тревожном, коротко-«рваном» ритме. Как только точное время будет получено со спутников, двоеточие станет мигать привычным образом: одно мигание в секунду.
Вот в этом коротком ролике я показал, как зрительно выглядит сначала недостоверное, а потом синхронизированное время. Прошу прощения за качество, яркий синий светодиодный свет очень трудно снимать…

Исходник в тексте обзора, а также в прилагаемом архиве обновлён.
Спасибо читателям за идею!

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

PS: Никто ничего для обзора не предоставлял и не спонсировал. Всё, что описано в конструкции, покупалось в разное время за свои собственные деньги или было найдено в собственных закромах.
Добавить в избранное +162 +265
+
avatar
  • marwit1
  • 15 декабря 2017, 03:07
+11
Отличная штука. Надо тоже сделать, а то надоело свои радиочасы филипс настраивать после отключения электричества. И в качестве ночника сгодятся. Вот за такие обзоры и люблю этот сайт…
+
avatar
  • peetbull
  • 15 декабря 2017, 10:09
+1
а в них разве батарейки нет?
+
avatar
  • vigera
  • 15 декабря 2017, 03:07
+9
У меня с часами всё гораздо проще — в их качестве трудится древний спутниковый ресивер Nokia Dbox2 под нейтрино и с синхронизацией времени по ntp, для которого это сейчас осталось главной и единственной функцией :)
Подключен по RJ45 к роутеру, грузится сразу в стендбай, яркость единожды отрегулирована на комфортную из меню.
Дисплей приятного зелёного цвета размером 65 х 40мм, день недели и дата в комплекте, шрифты и языки тоже легко меняются на нужные.
Из недостатков — долгое время загрузки линукса при пропадании электричества.
+
avatar
  • t0t0shka
  • 15 декабря 2017, 11:30
0
Оригинально :-P
+
avatar
  • scaldov
  • 15 декабря 2017, 17:23
0
но ведь neutrino — это не линукс!
+
avatar
  • vigera
  • 15 декабря 2017, 17:46
0
Строго говоря, нейтрино — это GUI линукса (альтернативный энигме).
+
avatar
  • scaldov
  • 15 декабря 2017, 18:00
+2
лол, а я думал, что это QNX
+
avatar
  • vigera
  • 15 декабря 2017, 18:07
+1
Вспомнил молодость, зашёл только что на свои «часы» по telnet. Откликнулись:
Kernel 2.4.34-dbox2 (17:04:37)
BusyBox v1.2.1 (2007.02.09-15:41+0000) Built-in shell (ash)

:)
+
avatar
  • anapogo
  • 16 декабря 2017, 10:15
+1
Да, часы на Линукс… Вы батенька оригинал :-)
+
avatar
  • Hegy
  • 15 декабря 2017, 03:21
+9
Отличная работа! Занимательный пост. Я собрал аналог sonoff. Полуумная розетка на esp и твердотельном реле. Управлять можно по WiFi, но приоритетным является таймер. Используется для освещения в аквариуме. Текущее время получает по WiFi. Подумываю приобрести модуль точного времени для ардуинки. В связи с чем, вопрос. Почему Вы избегаете использования подобного модуля здесь? Нет желания менять батарейку?

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

Уж лучше бы они показывали просто нули до следующей синхронизации.

И снова, понимаю, Вы ответите, что это легко настраивается в коде. Не навязываю. Просто высказал свое мнение.
+
avatar
  • Dimon_
  • 15 декабря 2017, 03:46
0
Ну, в общем и целом, да, вы правы. Хранить время в DS1307 гораздо лучше, чем в EEPROM. Хотя бы потому, что в RTC оно идёт, а в EEPROM лежит.
Не стал усложнять конструкцию, — это единственный повод. И RTC надо покупать, а EEPROM уже дана бесплатно. Жизнь батарейки при поданном напряжении неважна (только саморазряд), часы идут от Vcc, батарейка же расходуется только при отсутствии основного питания. Поэтому одной хватит на годы и годы.

Но меня бы просто съедала постоянная мысль о том, что часы в данный момент могут лгать
Процедура синхронизация от источника образцового времени (у меня от GPS) после сбоя (т.е. когда часы конкретно знают, что время они показывают неточное) у меня долбится каждые 10 секунд. И горячий старт приёмника при хороших условиях — это минута, а то и меньше. Так что лгать они будут очень недолго.
Но чтобы избежать и этого периода, вполне возможно чуть доработать описанную выше конструкцию. (Вот! Об этом я и писал, начались идеи и творчество! Это и есть цель обзора!) Пины A4 и A5 свободны, подключаем DS1307 и в скетче чтение/сохранение в EEPROM заменяем на чтение/сохранение в часы реального времени. Библиотека DS1307RTC доступна, модули на Али в изобилии, чуть больше доллара с доставкой. :)
+
avatar
  • Kiril22
  • 15 декабря 2017, 04:23
0
Мне кажется, лучше применить модуль на основе DS3231. По своему опыту гораздо точнее, чем DS1307. Разница в цене в самодельном единичном устройстве ничтожна.
+
avatar
  • Dimon_
  • 15 декабря 2017, 04:30
+2
Ну для конкретно данного случая выбор RTC абсолютно неважен, поскольку точность достигается не ходом RTC, а точностью источника образцового времени. А вот в часах только с разовой установкой, да, 1307, особенно с китайскими кварцевыми резонаторами, — штука не супер прецизионная, вы правы :)
+
avatar
  • Lexeich
  • 15 декабря 2017, 10:11
0
Былое…
«Среднесуточная точность хода: +- 15 минут»
© прапорщик Гриша
:).
+
avatar
  • dkuznets
  • 16 декабря 2017, 09:55
0
Прикрутил к своему монстрику (5 дюймов индикаторы) DS3231 и забыл про 1307, как про страшный сон.
А для редкой синхронизации свою старую поделку (лет 8 валялась) ethernet-модуль на PIC18F258 использовал. Раз в месяц на сервере скрипт срабатывает и посылает UDP пакет с текущим временем часам.
+
avatar
  • Naevus
  • 15 декабря 2017, 10:38
+1
Бонусом получаем термодатчик в модуле.
+
avatar
  • vovoshka
  • 15 декабря 2017, 10:22
+2
не знаю как это реализовано здесь, часто видел, что когда «часы конкретно знают, что время они показывают неточное» очень наглядно показывать это миганием (примерно 1гц) всего отображаемого на часах.
+
avatar
  • Dimon_
  • 15 декабря 2017, 11:45
+1
Хорошая идея, попробую реализовать. Спасибо.
1 герц, конечно, не нужно (оно и так 1 герц), но попробую реализовать в скважности мигания двоеточия, по характеру мигания пользователю будет понятно.
+
avatar
  • vovoshka
  • 15 декабря 2017, 17:58
+3
еще один хинт, который возможно будет желание взять на вооружение.
третий модуль семисегментника ставится вверх ногами. двоеточие готово без вставки дополнительных элементов ;)
+
avatar
  • Dimon_
  • 15 декабря 2017, 19:43
+8
Я это видел много раз. Решение «на безрыбье».
Мне визуально не нравится.
Потому что такое «псевдо-двоеточие» будет очень длинным — точки будут на верхней и нижней границе высоты символов, это некрасиво. А то и ещё шире: выше и ниже границ символов, такое бывает.
В реальном же знаке двоеточия точки должны быть ближе к горизонтальной центральной оси табло.
И индикаторы тогда придётся ставить вплотную, и даже в этом случае точки этого «двоеточия» не встанут на одну линию. А красиво — это чтобы группы часов и минут были раздвинуты для знака двоеточия.

Я не поленился и нарисовал в векторе. Сравните, какой вариант зрительно красивее:

+
avatar
  • vovoshka
  • 15 декабря 2017, 20:29
+1
Тоже согласен. Правильное смотрится красивее и читабельнее, а вот в изготовлении сложнее. Хотя я думаю, что привыкнув, в упрощенном варианте слабо видится отличие.
А вот еще мне режет глаз 62 минуты на картинке. )))
за труды в рисовании и обзор большое спасибо :)
+
avatar
  • vovoshka
  • 15 декабря 2017, 18:04
0
1 герц, конечно, не нужно (оно и так 1 герц),
небольшое недопонимание.
миганием (примерно 1гц) всего отображаемого на часах.
имелось ввиду, что все отображаемые символы (4 цифры и 2 точки) мигают как обычно мигает разделитель.
так в свое время делали многие устройства, включая «Электронику».
но там это нужно было в том числе для привлечения внимания пользователя с целью установки верного времени.
+
avatar
  • Dimon_
  • 15 декабря 2017, 20:08
+1
Ну это уже мне кажется, пожалуй, слишком экстремальным. Такое я видел много раз на старых часах. Думаю, так, как это сейчас оформлено в скетче, наиболее приемлемо. Зрительно различается, но не долбит по глазам.
+
avatar
  • Dimon_
  • 15 декабря 2017, 15:21
+2
Готово, спасибо за идею!
+
avatar
0
Не стал усложнять конструкцию, — это единственный повод. И RTC надо покупать, а EEPROM уже дана бесплатно.
Предлагаю одно минималистическое усложнение, помогающее поберечь eeprom занедорого :)
От «высокого» питания делаем резистивный делитель на пин с АЦП. (Выставляем максимальное для АЦП значение). И при снижении напряжения на этом «контролирующем» пине на 20% — резко сохраняем все в eeprom (поскольку это падение говорит о том, что напряжение на входе снижается, т.е. пропадает). А в остальное время — не трогаем ту eeprom-ку.
+
avatar
  • Dimon_
  • 16 декабря 2017, 04:17
0
Боюсь в конструкции с сетевым питанием этот совет бесполезен. В отличие от батарейного питания, разряд которого растянут по времени, просадка при отключении питания — процесс достаточно быстрый.
Смотрите. Время записи в EEPROM — 5-9 ms.
Время процесса разряда сглаживающих конденсаторов источника питания, конечно, невозможно сказать точно (зависит от ёмкости и потребляемого девайсом тока), но очевидно, что это лавинообразный экспоненциальный процесс. Не думаю, что сильно ошибусь, если назову период в 20-400 ms. В любом случае, снижение напряжения на 20% — это уже почти завершённый процесс, процентов 70-80 уже закончено, остаток напряжения свалится довольно быстро. В таких условиях время записи может ещё увеличиться, если оно вообще на таком запасе энергии способно успешно закончиться. А микроконтроллер ещё должен успеть понять, что напряжение падает и успеть принять решение к записи.
Так что, боюсь, не для этого случая. А вот в батарейном питании — да.
+
avatar
  • ACE
  • 16 декабря 2017, 05:30
+1
Теоретически, может выйти. Если запитать ардуину/контроллер через диод и достаточно ёмкий конденсатор после него. Всё остальное питается до диода, там же измеряем напряжение. МК потребляет мало, на конденсаторе может проработать достаточно долго для сохранения данных. Индикаторы же достаточно быстро разрядят конденсаторы источника питания. Минусы: чуть меньшее напряжение на МК, надежность зависит от возможной потери ёмкости конденсатором.
Это, разумеется, чисто теоретическое измышление, в данном случае переделывать не предлагаю и сам смысла не вижу. Ну и раз уж оставил коммент, то спасибо за обзор, всегда интересно почитать про самоделки. Результат понравился. Я вот свои часы, чтобы с синхронизацией, так и не собрался сделать, после прочтения опять задумался, что все-таки надо бы сделать :)
+
avatar
0
В цепь питания МК ставим диод и ионистор. скажем на четверть фарада (вообще просто большого конденсатора должно хватить, мне кажется ты немного перепутал с таймингами, не думаю что у ардуины все так плохо с EEPROM что запись туда идет пол секунды, но предположим что так). Цепь питания до диода заводим на порт МК и настраиваем прерывание по заднему фронту настраиваем прерывание в котором выполняем запись в EEPROM
+
avatar
  • vadimpl
  • 16 декабря 2017, 09:39
+1
Оффтоп.
Полуумная розетка
Спасибо, взял на вооружение.
+
avatar
  • alex116
  • 15 декабря 2017, 03:51
+2
Отличный пост. Для тех, у кого руки растут из плечевого сустава а не из жопы.
+
avatar
+11
Обе из одного?
+
avatar
  • giga6yte
  • 15 декабря 2017, 05:30
0
Страшно представить)
+
avatar
  • stels
  • 15 декабря 2017, 06:29
-1
Обе из одного?
зачем ограничивать себя двумя?
+
avatar
0
Если руки золотые — неважно откуда они растут.
+
avatar
  • Boing
  • 17 декабря 2017, 00:54
0
обе растут откуда надо, но мозги ска просто отказываются пытаться даже начать понимать ардуину и 8266… хотя вторых несколько модулей лежат и лента на готове
+
avatar
  • KRAB
  • 15 декабря 2017, 06:08
0
А я в качестве часов использую ресивер DVB-T2 с часами. Часы синхронизируются по спутнику.
+
avatar
  • falcon99
  • 15 декабря 2017, 06:21
+6
DVB-T2 и спутники? Не перепутали с DVB-S?
+
avatar
  • Kartus
  • 15 декабря 2017, 07:05
0
и спутники? Не перепутали
По Спутник ТВ синхронизация)))
+
avatar
0
аха, а часы всегда отображаются? у меня тока в выключенном состоянии, при включении ресивера дисплей показывет номер канала, а так удобно, не бегут и не отстают.
+
avatar
  • ksiman
  • 15 декабря 2017, 07:12
+2
Идея хороша, но сигналы GPS принимаются только рядом с окном
+
avatar
  • vot
  • 15 декабря 2017, 12:07
+1
Идея хороша, но сигналы GPS принимаются только рядом с окном
Да, если использовать не Гармин
+
avatar
  • ebook
  • 15 декабря 2017, 07:25
+1
жирно плюсую!!!
+
avatar
  • Fig
  • 15 декабря 2017, 07:46
0
понижающие мини DC-DC преобразователи
Правда, что 1.8а выдают? Нагревается?
+
avatar
  • Dimon_
  • 15 декабря 2017, 15:36
+1
mySKU.pro/blog/aliexpress/47974.html
mySKU.pro/blog/china-stores/31213.html

В общем и целом, да, отдаст.
Нагревается, но всё в пределах ожидаемого.
+
avatar
  • dro1975
  • 15 декабря 2017, 08:44
+2

Лет 6 назад собрал на Атмеге 8 часики, с нормальным кварцем за месяц убегают секунд на 30. Куча режимов и видов индикации, два термодатчика d18b20 улица-дом, наборное поле из 3мм светодиодов (225 штук). 155 на индикации-пятница, 15 число. Очень доволен часами. Тоже подумываю собрать с GPS на кухню, там от окошка не далеко. Спасибо за интересную схему.
+
avatar
0
6 лет назд? А уже динозарв.
+
avatar
-2
Брал подобные индикаторы на Космодроме в Харькове.
По цене около 90 центов за штуку.
Там же есть и большего размера.
+
avatar
  • klop
  • 15 декабря 2017, 10:16
+2
Поскольку занимаюсь подобной темой, проанализировал плюсы и минусы. Ниже чисто ИМХО!
Руки из нужного места — это плюс! Но минусов в этой идее и реализации столько, что доверять показаниям таких часов я бы не рискнул. Весьма слабое место — метод синхронизации. Ладно еще, если окна на юг, да и то на подоконнике. А периодические запись и восстановление времени из EEPROM при пропадании питания — это, извините, уж вообще ни в какие ворота!
Часы периодически сохраняют время в собственной энергонезависимой памяти, поэтому даже после сбоев питания они начинают отсчёт с последней сохранённой минуты. Да, такое время после сбоя будет неточным, но это явно лучше, чем начинать отсчёт с 00:00. По мере нахождения сигнала GPS, время, без вмешательства, синхронизируется.
EEPROM штука с ограниченным ресурсом и при частой перезаписи долго не протянет. А при редкой записи смысл ТОЧНОЕ ВРЕМЯ при сбое питания вообще теряется. Вы хотя бы добавьте светодиод, который горит/тухнет, если очередной сеанс синхронизации был успешным/неуспешным (и/или был сбой питания). Но, думаю, всю концепцию надо пересмотреть и все-таки DS3231 использовать.
В своем проекте я пошел другим путем. У меня используется DS3231, но ежесекундно в ардуине идет корректировка показаний из-за накапливаемой погрешности. Точная установка производится вручную по мере накопления ошибки, после этого автоматически расчитывается новый корректировочный коэффициент, в связи с чем точность хода увеличивается на порядок при каждой ручной установке времени. Так, весной я запустил часы и через месяц (они убежали примерно на 2 секунды) снова выставил точное время. На сегодня (15 декабря) разбежка 1 секунда. В следующем году, когда она достигнет 2-х секунд, снова выставлю точное время. Ну а следующей корректировки, думаю уже не будет (по крайней мере при моей жизни). Часы получились полностью автономными и не зависят от внешних источников синхронизации вообще.
+
avatar
  • Dimon_
  • 15 декабря 2017, 10:36
+2
Спасибо за мнение.
Не стану спорить, но подискутировать — с удовольствием.
Ладно еще, если окна на юг, да и то на подоконнике.
У меня окна не на юг. Часы в глубине комнаты примерно на метр от окна. Окно с внутренним напылением в стеклопакете. Современные приёмники весьма неплохо научились принимать GPS, поверьте. Ведь у каждого есть мобильник или планшет. И текущую позицию приложение с картами показывает, в общем и целом, в любой точке комнаты. А тут и триангуляция с нескольких спутников не нужна, достаточно только времени. Почему же вы считаете такую синхронизацию слабым местом? Время с GPS в общем случае точнее NTP, поскольку там ещё время жизни пакетов есть, на что многие забивают.
снова выставлю точное время.

Идея интересная. Но она явно требует присутствия человека. Поскольку для того, чтобы устройство стало точным, кто-то должен отслеживать точность и несколько раз корректировать ход. Понимаю, три-четыре раза засечь и откорреткировать — это не такой великий труд. Но я принципиально хотел создать устройство, совсем-совсем отвязанное от участия человека.
И, да, прихожу к мнению, что поменяю я EEPROM на RTC.
+
avatar
  • klop
  • 15 декабря 2017, 11:11
0
Возможно, мне просто не везет с помещениями. Есть и планшеты и смарты (в том числе Redmi 3S с неплохим приемником всех систем навигации). Но ни на работе (окна на восток, бетон/кирпич), ни дома (запад, 10 этаж кирпич) ничего не ловится, если отойти от окна. Вот если бы к GSM привязаться — другое дело, МТС, к примеру, неплохую точность дает.
Понимаю, три-четыре раза засечь и откорреткировать — это не такой великий труд.
На фоне количества труда по сборке, наладке часов это пренебрежительно малая величина, но сам факт — да, вручную время выставить придется 2-3 раза. Зато я всегда абсолютно уверен в показаниях часов, и все остальные часы в доме подвожу по ним, не сомневаясь совершенно. А для меня это очень важно.
+
avatar
  • ABATAPA
  • 15 декабря 2017, 11:35
0
ничего не ловится, если отойти от окна
Не «не ловится», а недостаточно количества видимых сигналов спутников и точности вычислений для определения координат.
Но точное время есть в каждом пакете, поэтому достаточно «видеть» один спутник, чтобы его получить.
Запустите любую программу, визуализирующую видимые спутники, и если будет хоть один, даже серым — время будет.
+
avatar
  • klop
  • 15 декабря 2017, 11:56
-1
Вы не видели такого, что ни одного спутника не видно? Везет вам. Но не забывайте, что сигнал со спутника еще и здорово зависит от погоды. Ливень и снегопад могут вам здорово подгадить в самый неподходящий момент…
+
avatar
  • SinuX
  • 15 декабря 2017, 12:21
+1
Вы путаете позиционирование с получением только времени, для первого нужен хороший сигнал, а второе по собственному опыту работает где угодно, чуть ли не под землёй)
+
avatar
  • klop
  • 15 декабря 2017, 12:39
0
по собственному опыту работает где угодно, чуть ли не под землёй
А теперь читаем у автора:
ловится, пусть и не сразу, в метре от окна
Так, что у всех условия разные.
+
avatar
  • Rzzz
  • 16 декабря 2017, 01:47
+3
Когда проектировались эти системы, что наша, что американская, специально выбирался диапазон, чтобы погода влияла минимально.
По своему опыту: под диким ливнем с грозой, когда небо почернело, дождь заливает стекла так что стеклоочистители не справляются (судовые стеклочистители, не автомобильные, другая тема), видимость метров 100, радиолокатор ослеп полностью (9,5 ГГц очень хорошо поглощаются водой) — ГЛОНАСС и GPS только немного теряют уровень приёма, координаты рисует уверенно и кораблик на электронной карте показывается где надо. DOP вырастает на десяток метров.
+
avatar
  • Rzzz
  • 16 декабря 2017, 01:36
+2
Для большинства мест нашей страны окна на юг не обязательны для работы ГПС в помещении. Наклон орбиты ГПС — 55°, следовательно до широты Москвы спутники видно и из северного окна. У ГЛОНАССа наклон 60°, и такая картина до широты Питера. Кроме того, приёмник принимает и отраженный сигнал, пусть там точность ниже, но как-никак что-то принимает.
Проверять прием телефоном не очень корректно, потому как в телефоне AGPS, альманах и эфемериды он грузит через интернет, кроме того, предварительно определяет место по сотовым станциям и wifi-точкам.
+
avatar
0
Кстати тоже возникали такие же вопросы. С точки зрения инженера со стажем работы схема, так скажем, не блещет изящностью. Во всяком случае изделие не для серийного производства это точно.
А в вашем проекте тоже есть вопросы. На кой черт заниматься коррекцией каждую секунду когда: 1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток. 2. У вас все равно под рукой модуль реального времени и вы упираетесь в его точность.
По мне дак при нормальном коде хватило бы синхронизации раз в минуту, можно даже реже.
А у автора идея хорошая, но реализация не понятная. Если есть GPS модуль, то нафига запоминать время. Разве нельзя просто получить время со спутника когда тебе угодно. Короче лишний огород. А так да, за основательный подход конечно плюс.
+
avatar
  • klop
  • 15 декабря 2017, 11:42
0
На кой черт заниматься коррекцией каждую секунду когда: 1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток.
Потому, что Ардуина МОЖЕТ раз в секунду делать весь пересчет, производительности хватает.
У вас все равно под рукой модуль реального времени и вы упираетесь в его точность.
Не упираюсь. Для моей концепции нужен не точный модуль, а СТАБИЛЬНО врущий. Поэтому я мог бы применить и супер неточный DS1307 с тем же результатом, если бы в нем была термостабилизация, как у DS3231.
+
avatar
  • Dimon_
  • 15 декабря 2017, 12:34
0
Всё верно, я разделяю вашу концепцию. Для данного конкретного проекта она не применима, но принципиально — идея интересная. Последовательное приближение к идеальной точности. Расскажите о своей реализации данного алгоритма, думаю, многим будет интересно.
+
avatar
0
То есть вы по сути берете посредственные часы и осуществляете цифровую подстройку хода и периодически осуществляете ручную калибровку? Потому как в вашем предыдущем посте вообще непонятно чью погрешность вы вычисляете. Написали бы просто цифровая подстройка хода аналогично наручным часам электроника. Там как раз примерно то же самое было.
+
avatar
  • klop
  • 15 декабря 2017, 14:25
0
Написали бы просто цифровая подстройка хода аналогично наручным часам электроника
Именно! Гениальная идея для часов из Белоруссии, которые я и ношу всю жизнь и не променяю ни на какие другие. Почему эту идею не подхватили во всем мире для меня загадка. Я немного продвинул эту идею, увеличив точность хода и удобство настройки. Но далеко не все знают про эти часы, особенно молодое поколение.
+
avatar
  • mooni73
  • 15 декабря 2017, 14:51
+1
Пробовал я носить эти супер-часы. Проблема в температуре: когда они на руке и когда в столе — требуется разная коррекция.
+
avatar
  • Rzzz
  • 16 декабря 2017, 01:52
+1
Та же фигня. Так я до конца и не вывел в ноль погрешность. Гонялся за ней несколько месяцев, потом надоело. Сейчас вообще не сильно волнует. Часы должны быть от 0 до +5 минут от реального времени, точнее мне не надо.
+
avatar
  • Dimon_
  • 15 декабря 2017, 11:47
+1
Разве нельзя просто получить время со спутника когда тебе угодно.
Нет. Приёмник имеет горячий старт около одной минуты и холодный старт до 15 минут. Вот на этот период мы не можем получить время, и оно показывается из EEPROM. Но коллективное мнение присутствующих меня убедило, что лучше удорожить проект на полтора доллара и поменять EEPROM на RTC.
+
avatar
  • ksiman
  • 15 декабря 2017, 12:00
0
учше удорожить проект на полтора доллара и поменять EEPROM на RTC.
Это удешевление, ибо GPS + EEPROM стоят всяко дороже RTC
+
avatar
  • Dimon_
  • 15 декабря 2017, 12:10
+3
От GPS не откажусь принципиально в этом проекте. Потому что это неотъемлемое свойство данного проекта: точное время без любого, даже малейшего, вмешательства человека, в принципе.
А часов типа «RTC на 7 сегментов» — их пруд пруди… Не вижу смысла; их китайцы штампуют всяко дешевле меня, в любом виде, — хоть в конструкторе, хоть готовые, любых цветов, размеров и форм.
+
avatar
  • f1203
  • 15 декабря 2017, 12:59
0
А если Вы переедите в другой регион вмешательство все таки потребуется, часовая зона зашита в коде. Нельзя ли определять TIMEZONE по сигналам GPS?
+
avatar
0
Спутнику накласть в какой таймзоне вы находитесь, он скормит вам ваши координаты и время по Гринвичу, а дальше ваши проблемы.
+
avatar
0
Теоретически да, но для этого надо забить карту привязок координат к часовым поясам и регулярно её обновлять (не только у нас чудесатое правительство которые ни как не может определиться кто, когда в каком часовм поясе живет и переодически что то правит). Поэтому имхо, для стационарных часов проще разок при переезде поменять часовой пояс, чем гемороиться с автоматическим определением.
+
avatar
  • Dimon_
  • 15 декабря 2017, 21:08
+1
Нельзя ли определять TIMEZONE по сигналам GPS?
Не так это просто.
Координаты GPS — это параметры физические. Их можно измерить, вычислить или определить. А часовая зона — это понятие политическое.
Условно говоря: есть государство и его политика говорит: «у нас на территории будет вот такая (или вот такие) часовые зоны». На одной и той же долготе могут быть разные государства с разной часовой политикой.
Вбить навороченную карту со всеми часовыми зонами и со всеми летними/змними политиками — это мозгов ардуины точно не хватит. И это всё ещё надо будет поддерживать в актуальном состоянии. В одной и той же точке поверхности планеты вполне может меняться часовая политика. Меняются государства, меняются премьер-министры… А на судах часовая зона вообще зависит исключительно от решения капитана :)
+
avatar
  • SEM
  • 16 декабря 2017, 10:36
0
Можно добавить в схему какие-нибудь DIP-переключатели для ввода поправки, там надо то максимум ± 2 часа, наверняка есть свободные ноги (порты).
Если конструкционно применить переключалку со стрелочкой под отвёртку, как в некоторых блоках питания, и на корпусе написать "-2, -1, 0, +1, +2", то с местной подстройкой справится «любая домохозяйка».

+
avatar
  • g00gle
  • 15 декабря 2017, 14:00
0
Тогда надо было и секундные индикаторы ставить, чтобы секундочки сверять. или сразу десятые секунд.
Ну и я не представляю зачем такая точность в быту. Если только ради того что «я могу».
+
avatar
  • Bald
  • 15 декабря 2017, 13:42
0
Gps то остаётся в любом случае
+
avatar
0
Я рассматриваю проект с точки зрения возможности реализации на автономном питании (не на таких индикаторах конечно). А при моем подходе лучше обеспечить вменяемую точность и калиброваться раз в сутки, как собственно и делают обычно часы с синхронизацией. В таком случае можно вообще забить на наличие каких либо еепромов или ртсок. Даже если не получится обеспечить точность силами машинного времени, можно прикрутить внешний часовой кварц.
+
avatar
0
Эм. и что с того, что он имеет холодный старт 15 минут (у меня правда приемник менее чем за минуту стартует). Вы же все равно от розетки питаетесь. Вам не нужно экономить электиричество (это важно для работы от аккумулятора, когда каждый мкА*ч на счету). Не выключайте просто приемник и все. Пусть он постоянно держит спутники. И получайте сигнал каждую секунду. А в тех редких случаях когда пропадало питание, да придется подождать прежде чем часы покажут время. Но как часто у тебя дома выключается электричество?
+
avatar
0
1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток.
Задам вопрос по другому, а зачем вообще заниматься отсчитыванием времени средствами МК если в начале каждой секунды тебе говорят «сейчас 10:34:21» (причем перфекционисты могут радоваться, что тебе так же сообщают и о начале секунды с точностью измеряемой в долях микросекунды). Зачем что то самому отсчитывать?
+
avatar
  • djinn_82
  • 15 декабря 2017, 17:30
0
А при чём окна именно на юг?
+
avatar
0
Я себе домой тоже GPS часы собрал. И я не понимаю твоих претензий к GPS синхронизации. Почему окно обязательно должно выходить на юг? Почему часы обязательно должны стоять на подоконнике (антенну да, я на стекло приклеил, но сами то часы можно в удобном месте поставить). Причем это автор еще зачем то с EEPROM развлекался, я гораздо более тупо сделал, данные со спутника получил, на экран вывел. Следующий пакет данных получил, опять на экран вывел. Все. Единственное, что добавил, это еще опрос порта TIMEPULSE, по фронту с которого прибавляется одна секунда, что бы убрать задержку на передачу по протоколу. Но в целом я даже не пытаюсь сам отсчитывать время. Что получил то и отобразил. Проблемы возникают только при перетыкании питания и то это редкость и после них они опять приходят в норму. GPS ловится всегда. И сдается мне, что если завтра GPS сломается то правильность показания моих часов будет не самое большое что будет меня беспокоить.

В своем проекте я пошел другим путем. У меня используется DS3231, но ежесекундно в ардуине идет корректировка показаний из-за накапливаемой погрешности. Точная установка производится вручную по мере накопления ошибки, после этого автоматически расчитывается новый корректировочный коэффициент, в связи с чем точность хода увеличивается на порядок при каждой ручной установке времени. Так, весной я запустил часы и через месяц (они убежали примерно на 2 секунды) снова выставил точное время. На сегодня (15 декабря) разбежка 1 секунда. В следующем году, когда она достигнет 2-х секунд, снова выставлю точное время. Ну а следующей корректировки, думаю уже не будет (по крайней мере при моей жизни). Часы получились полностью автономными и не зависят от внешних источников синхронизации вообще.
Вот ты сейчас долго и скучно рассказывал каким образом ты крутил алгоритмами, что бы повысить точность хода. И скомпенсировать погрешности. И ты достиг каких то хороших вариантов по точности. Но какая бы хорошая точность у тебя не была, она у тебя копится. Пусть по секунде в месяц. Пусть по секунде в год, но все равно копится. Профит с GPS в том, что погрешность не накапливается. У тебя есть какая то фиксировання погрешность связанная с задержками на обработку сигнала, на обновление экрана и т д. Вот все она есть и она фиксированная и измеряется в тысячных долях секунды. Все. Что через минуту после включения, что через 5 лет.
+
avatar
0
Я вам тогда еще точнее и проще вариант дам. ESP8266 и сихронизация с NTP сервером, раз в 64 секунды. И у вас точность как такая, которая DS3221 и не снилась. И ни каких танцев с ручной регулировкой и подстройкой, гавное стабильная связь с роутером.
+
avatar
0
Таможня на GPS модули не ругается?
+
avatar
  • Dimon_
  • 15 декабря 2017, 10:59
+1
Нет никаких причин, чтобы ругаться. Это не законченное устройство, а электронный компонент, к тому же модуль не содержит элементов записи, фиксации и передачи, поскольку является радиоприёмником.
+
avatar
  • Q2W
  • 15 декабря 2017, 11:25
0
А бывают цифровые индикаторы, но чтоб RGB?
Хочется цветом ещё показывать, всё уже плохо или ещё более-менее.
+
avatar
  • Dimon_
  • 15 декабря 2017, 11:52
0
Не встречал. Но выше подсказали идею сигнализировать об этом другим характером мигания двоеточия, попробую быстренько реализовать.

А на RGB — это можно матричную панель взять. Но это уже совсем другая реализация будет.
+
avatar
  • Dimon_
  • 15 декабря 2017, 15:24
0
показывать, всё уже плохо или ещё более-менее.
Дописал проект. Это, конечно, не цветом, а миганием. Но зрительно отличить теперь возможно.
+
avatar
+1
Эх!.. Прочитав название, в голову полезли мысли, что же там придумано: датчик рассветов-закатов на фоторезисторе и вычисление времени с учетом географического положения? а может фотографирование звездного неба и вычисление времени по положению звезд? А оказалось как обычно — время спрашиваем у прохожих))) По мне — так проще вайфай было заюзать, плюс модуль часов, но что ж и такая идея имеет право на существование. За реализацию плюс.

P.S. Хранение неточного времени в EEPROM — это жесть! Уж лучше не знать никакого времени вообще, чем ошибаться и опоздать на поезд.
+
avatar
  • Dimon_
  • 15 декабря 2017, 11:56
+1
По мне — так проще вайфай было заюзать
Я принципиально хотел создать устройство, совсем-совсем отвязанное от участия человека. Подключать часы к wi-fi — это либо прописывать в коде ssid-пароль, либо делать меню с установками. Т.е. это уже зависимость от оператора.
Wi-fi может пропадать при сбоях роутера. Пароль может (и должен!) периодически меняться. Wi-fi может быть не оплачено в текущем месяце :)
Уж лучше не знать никакого времени вообще, чем ошибаться
Дискуссионно, но я принимаю вашу точку зрения. По мне — нет. И оно очень быстро само станет точным.
+
avatar
+6
Дискуссионно, но я принимаю вашу точку зрения. По мне — нет. И оно очень быстро само станет точным.
Обычная ситуация с высокой вероятностью возникновения:
Человек покупает Ваши часы и ставит их в спальне на тумбочке в 2 метрах от окна. Поскольку погода солнечная, GPS-сигнал ловит даже на таком расстоянии от окна.
И вот однажды ночью случается ужасная гроза, молния попадает в трансформаторную будку, электричество на 2 часа пропадает, а поскольку GPS-сигнал в такую погоду становится значительно хуже, то часы уже не могут синхронизироваться.
Человек спокойно просыпается и неспеша собирается на работу, поглядывая на Ваши часы. Приехав на работу, он узнает, что пропустил чрезвычайно важную встречу, подписание контракта сорвано, его увольняют с работы.
Лишившись работы, начинает пить, жена выгоняет с дому, жизнь на помойке и суицид через полгода.
Его дети подают многомиллионный иск о возмещении морального ущерба к производителю часов.Производитель банкротится, начинает пить, жена выгоняет с дому, жизнь на помойке и суицид через полгода.

Не такой уж этот вопрос и дискуссионный)))
+
avatar
  • klop
  • 15 декабря 2017, 14:37
0
Охренеть, история! )))
Но в общем да, теоретически может случиться и типа такого. Такова плата за зависимость.
+
avatar
  • Dimon_
  • 15 декабря 2017, 15:26
+3
ситуация с высокой вероятностью возникновения:


:)

Но я доделал проект.
Теперь, поглядывая на часы, наш многострадальный герой сумеет отличить, правильное ли они время показывают.
+
avatar
  • tituszx
  • 16 декабря 2017, 00:52
+1
А что мешает часы на DS1307 или DS3231 поставить и их синхронизировать? У меня так сделано. Сразу после включения время показывают, синхронизируются раз в час, хотя это излишне, но почему бы нет))
+
avatar
  • Varicap
  • 16 декабря 2017, 18:42
0
Поддерживаю!
Поставить часы на DS3231 и синхронизировать их от GPS раз в 15-30 дней.
А также добавить 2 LED-модуля для отображения секунд.
+
avatar
  • batal
  • 15 декабря 2017, 11:52
0
А можно про корпус поподробнее?
+
avatar
  • Dimon_
  • 15 декабря 2017, 12:30
+1
Конечно.
www.gainta.com/g1034b.html

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

В Чипе-дипе сейчас коммунизм на них, даже в розницу дешевле, чем в Вольтмастере.
+
avatar
  • batal
  • 15 декабря 2017, 15:41
0
А перед индикаторами стекло темное — это вы сами делали? Я думал это корпус с полупрозрачной лицевой стенкой :)

Не подскажете где такое стекло можно взять? (может у китайцев где-то есть, сходу найти не смог). А то сейчас приходится колхозить с тонировочной пленкой :)
+
avatar
  • Dimon_
  • 15 декабря 2017, 15:45
+2
В обзоре, между фоткой часов в выключенном состоянии и фоткой с индикацией времени, есть целый абзац про это. Я там как раз про это и размышлял… :)
+
avatar
  • batal
  • 15 декабря 2017, 16:18
+1
Ох. Приношу извинения :) Нашел и прочитал. Спасибо большое за обзор и инфу :)
+
avatar
  • akantus
  • 15 декабря 2017, 18:12
0
на мой взгляд, разъем сбоку как-то не удачно, хозяин барин конечно, но я бы сделал сзади, повторяю, это на мой взгляд.
+
avatar
  • WHALE
  • 15 декабря 2017, 11:53
+4
говорят из старых планшетов получаются отличные часы )
+
avatar
  • Dimon_
  • 15 декабря 2017, 11:59
+2
Ожидал, я ожидал этой реплики. :)
Всё так. Потому и сомневался, нужно ли писать эту статью. По мне, так DIY — благо, под любым способом.
+
avatar
  • Rokko
  • 15 декабря 2017, 12:31
+2
У меня уже пару лет из планшета — очень нравиться. Время сами подгружают при отключении питания. Ночью видно отлично. Цвет можно любой замутить.
+
avatar
  • WHALE
  • 15 декабря 2017, 12:38
0
можно еще метеостанцию и прогноз погоды показывать )
+
avatar
  • Rokko
  • 15 декабря 2017, 12:57
0
Ага. Только мне это не надо. Хватает термометра на кухне.
+
avatar
-1
жалко я в исходном коде ничего не понимаю, а то бы попилил бы под себя…
+
avatar
  • Dimon_
  • 15 декабря 2017, 12:14
+2
Это очень, очень хороший повод научиться разбираться в коде. :)
Поверьте, это совсем не сложный язык. Примеров, справочников и уроков — море.

«Не надо звать, не надо ждать, а можно взять и почитать» © В.Берестов.
+
avatar
0
да пытаюсь, смотрю, но ничего не понимаю :) надо себя заставить подойти к этому плотнее, пока только пробовал в FLprog простую логику нарисовать и всё :)
+
avatar
0
Не совсем так. Во первых компилятор на WinXP выдаёт очень странные ошибки, а каждый раз запускать для программирования Win7, которая гудит всеми вентиляторами компьютера — не вариант… Но это ерунда. На самом деле беда в том, что компилятор у Arduino внешний, а среда разработки просто не способна дружелюбно показывать пользователю ошибки по типу того, как это сделано в Delphi 7.
+
avatar
  • kalobyte
  • 15 декабря 2017, 12:49
0
не каждый может понимать код
еще мало кто может его писать даже при всем желании научиться
это как с музыкой или рисованием — надо иметь талант к этому
+
avatar
  • Bald
  • 15 декабря 2017, 13:35
+2
Понять чужой код ещё сложнее чем написать
+
avatar
  • kalobyte
  • 15 декабря 2017, 15:05
0
это да
+
avatar
  • qwerty2
  • 15 декабря 2017, 12:40
0
Пайка SMDшек вручную — это ужасно. Как мне теперь это развидеть?
+
avatar
  • Dimon_
  • 15 декабря 2017, 12:44
+2
Да ладно вам :)
Вполне себе бытовая технология. Я, например, дома, время от времени паяю какую-то SMD-деталюшку и вручную, хотя и паста, и флюс, и фен есть — иногда ведь так проще.
Почему же китайцу на продажу нельзя? :)
+
avatar
0
Коллега,

Приятно читать статьи с вменяемыми рассуждениями и прослеживать ход мысли. Ссылки на мануалы и оперирование данными из них — весьма похвальны :) За это — спасибо!
Но кое-что я покритикую.
Вы неверно используете термин «скомпрометированные данные». Первоначальный смысл — данные, ставшие известными тем, кому не следует знать. В данном случае лучше подошел бы термин «невалидные», «устаревшие» и т.п.
GPS\Глонасс как источник точного времени неплох, но например в моем доме ни один из современных приемников не берет сигнал внутри помещения. ТОлько будучи вплотную прислоненным к окну. Универсальный и пригодный всегда — инет через W-Fi.
+
avatar
  • Dimon_
  • 15 декабря 2017, 13:38
+3
Вы неверно используете термин «скомпрометированные данные».
Нет, с лингвистической точки зрения я прав.
КОМПРОМЕТАЦИЯ (от французского compromettre — подрывать репутацию). Данные, как и человек, могут считаться скомпрометированными, если к ним (к нему) подорвано доверие или если они не вызывают доверия.
Это и есть первоначальное словарное значение этого слова
Первоначальный смысл — данные, ставшие известными тем, кому не следует знать
Немножечко не так. Это не первоначальный смысл. Это применимость данного термина к области информационной безопасности и криптографии. Вот, применительно к этой сфере, вы совершенно и бесспорно правы.

Универсальный и пригодный всегда — инет через W-Fi.
Да, понимаю такую точку зрения, её озвучили выше. Я ответил так :)
+
avatar
  • Bald
  • 15 декабря 2017, 13:32
+2
Мой вариант на тему часы
+
avatar
  • muraveiX
  • 15 декабря 2017, 13:56
0
Если вывод 3 Ардуины это пин МК, то полевик включен не кошерно.
+
avatar
  • Dimon_
  • 15 декабря 2017, 20:18
+1
Ммм. А как кашрут предписывает управлять p-канальным ключом нагрузкой с общим минусом?
+
avatar
  • muraveiX
  • 16 декабря 2017, 19:43
0
Честным ОК или ОС. Дело в том что пин, внутри МК, связан с диодами с землей и питанием. Это значит, как бы вы его(пин) не закрывали, на нем будет 5в, а на истоке 7.5. 7.5-5=2.5в
Gate Threshold Voltage= 2-4в, значит полевик имеет полное право не закрыться, вопреки вашему желанию.
Кроме того, эти 7.5в постараются бесперебойно :) запитать МК, если его его питание подкачает.
Я бы добавил npn.
+
avatar
+1
Я тоже давно уже хочу сделать похожие часы. Но только с немного другой целью — чтоб можно было точно отслеживать начало каждого часа (посетители ЭТОГО сайта думаю понимают зачем это надо). Т.е. в идеале достаточно пип-пип-пип-пип-пип-пиииип как раньше было на радио-Маяк. Но для отладки цифровое табло тоже нужно (а также чтоб лучше изучить убогое программирование Arduiono). Поэтому, пока нет GPS модуля (получу его в лучшем случае весной-летом), потихоньку изобретаю индикатор.

Есть готовая плата со статической индикацией (т.е. не мерцает!), но там туча проводов (около 30), поэтому сначала хочу попробовать запустить (прошить загрузчик) в бесплатную (сдутую откуда-то) Atmega 128, так чтоб она работала без кварца, и уже по I2C или RS-232 слать в неё с Ардуины цифры…


1. Что думаете, вообще возможно запустить Atmega 128 без кварца?
2. Каких ожидать задержек из-за обработки времени с GPS модуля аж через два преобразования RS-232 (~18кБит/сек) или I2C портами (50кГц)?
3. Будет ли работать в квартире (у окна) самый дешёвый GPS модуль, который купил «GY-NEO6MV2» или нужно что-то получше?
+
avatar
  • tituszx
  • 16 декабря 2017, 00:48
0
Использовал такой GPS модуль для синхронизации часов, работает нормально, даже в пяти метрах от окна (именно выдача времени). Через программу настройки модуля можно поставить только 2-d fix, работать должно побыстрее, да и так в настройках можно покопаться, например оставив только одно сообщение со временем
+
avatar
  • Rzzz
  • 16 декабря 2017, 02:00
0
Обрезки прозрачных пластиков можно поспрашивать в рекламных мастерских, которые лазерной резкой занимаются. Отдадут или даром или за минимальный бакшиш.
+
avatar
  • Dimon_
  • 16 декабря 2017, 03:22
0
Моей реплике уже больше года. Я вам ответил заранее. Я тогда как раз стёклышко, в том числе и для этих часов, готовил. Ничего не изменилось в ситуации. Если есть что ответить — отвечайте сюда, я с благодарностью приму адреса и телефоны. Без шуток.
+
avatar
  • Rzzz
  • 16 декабря 2017, 15:14
0
Ладно, соглашусь. Дело это вполне реальное вообще, но индивидуально для каждого. У меня такая контора была под рукой одно время.э, потом съехала.
+
avatar
  • Rzzz
  • 16 декабря 2017, 15:32
+2
Вообще, покритиковать хочется с инженерной точки зрения.

1. Отображение неправильного времени совершенно недопустимо. Поэтому все заморочки с сохранением в EPROM не имеют смысла.

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

3. Стремление избежать динамической индикации абсолютно не понятно.
+
avatar
  • ssurneed
  • 17 декабря 2017, 08:23
0