Самодельные часы с крупными символами, которые никогда не придётся настраивать.
В этом посте я расскажу о самодельных часах, которые не потребуют от пользователя вообще никаких настроек. Достаточно подать им питание, и они сами будут заботиться об отображении точного времени. Им не нужен ни интернет, ни Wi-Fi, ни подключение по витой паре, ни настройки в менюшках, ни подключение к смарт-домам / смартфонам. Вообще ничего. Просто «включил, поставил на полку и забыл». Идеальные часы? Конечно нет. Но стремятся к этому. И, возможно, кому-то нижеследующий текст будет интересен.
Скажу сразу. Я, в общем, не планировал писать этот обзор.
Частью из-за того, что тема DIY-часов тут периодически поднимается и без меня, частью из-за того, что товара, из-за которого и стоит писать этот обзор, — а именно, самих индикаторов, на Али уже нет. Более того, даже магазин этот удалён.
Так бы и осталось это без внимания, если бы я в одном из комментариев не обмолвился о своей самоделке. В ответ я получил просьбы посетителей (и в комментариях и в личной переписке) рассказать об этой конструкции. Посему решился на написание этого текста. Меня извиняет лишь то, что
а) часы действительно имеют несколько функциональных «изюминок», отсутствующих у других,
б) что на этом ресурсе чаще обозреваются готовые наборы, а вот именно часов-самоделок, с публикацией исходного кода, не так и много, и
в) что управляющий код содержит немало полезного функционала, который может кому-то пригодиться в своих будущих конструкциях (например алгоритм пофазового опроса DS18B20 с порционным питанием, честный расчёт CRC термодатчика, корректную обработку скретчпада датчика на отрицательных температурах, работу с символьным потоком GPS и синхронизацию времени с коррекцией под часовые зоны).
О часах вцелом.
• Часы собраны на популярном контроллере Arduino. Алгоритмические задачи, реализуемые в данных часах, как раз подходят под вычислительные мощности ардуины.
• В качестве источника точного времени для синхронизации часы используют сигналы со спутников GPS.
• Отсутствие сигналов GPS не является препятствием к работе, поскольку часы имеют кнопки ручной установки времени и даже в самом худшем случае они будут просто классическими электронными часами с ручной установкой часов и минут.
• Часы периодически сохраняют время в собственной энергонезависимой памяти, поэтому даже после сбоев питания они начинают отсчёт с последней сохранённой минуты. Да, такое время после сбоя будет неточным, но это явно лучше, чем начинать отсчёт с 00:00. По мере нахождения сигнала GPS, время, без вмешательства, синхронизируется.
• Часы хранят текущее время в специализированной микросхеме реального времени DS3231 с аварийным питанием от литиевой батарейки. Выход из строя (отсутствие) микросхемы реального времени или резервной батарейки не является препятствием к работе часов, они просто начнут терять время при сбоях по питанию, но автоматически восстанавливать его при синхронизации от спутника или при ручной установке.
• Отображение несинхронизированного неточного времени на дисплее визуально отличается от точного синхронизированного времени, если такая ситуация возникнет.
• Часы способны работать в любой часовой зоне. Коррекция часовой зоны производится с кнопок и не требует перекомпиляции или перезаливки кода.
• Часы умеют опрашивать один датчик температуры 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. В качестве часов реального времени я использовал модуль со встроенной батареей. Но, разумеется, подойдёт модуль в любом исполнении. Важно только убедиться, что обе сигнальные линии подтянуты к плюсу питания (в указанном модуле они уже подтянуты производителем). Чип DS3231 предпочтительнее, чем DS3107, поскольку имеет несравнимо более высокую точность хода.
6. О питании в схеме. В силу того, что моим индикаторам требовалось два питания (причём, одно — не очень-то стандартное), я поступил так. Для первой ступени применил замечательные понижающие мини DC-DC преобразователи. (вот лот сразу на 10 штук, можно и поштучно). Важно только сначала выставить движком требуемое напряжение, капелькой лака (цапона или лака для ногтей) зафиксировать движок подстроечного резистора, а уж потом впаивать модуль в схему. Применение DC-DC модуля позволило в качестве источника питания использовать любой ненужный сетевой адаптер в широком диапазоне питающих напряжений (от 9 до 21 вольта). У меня это двенадцативольтовый адаптер от какого-то мертвого сетевого хаба. Для второго стабильного напряжения +5V поставил 7805 (КР142ЕН5А). Потому что он у меня был. Но ничто не мешает поставить такой же DC-DC преобразователь, настроенный на 5 вольт.
7. В качестве приёмника GPS-сигналов используется модуль GY-NEO6MV2. У меня точное время с GPS ловится, пусть и не сразу, в метре от окна в панельном доме далеко не на верхнем этаже за пластиковыми окнами с внутренним металлизированным напылением. Но уже сегодня вполне доступны более современные GPS+ГЛОНАСС модули, те же Neo-M8N, там надо только чуть сконфигурировать их параметры для работы с данным скетчем.
К программной части.
Для тех, кто решит повторить описанную тут конструкцию, я приготовил архив с исходником и всеми необходимыми библиотеками. Из папки «libraries» внутри архива надо распаковать те библиотеки, которых не хватает в папке «libraries» вашей ArduinoIDE.
На случай, если архив протухнет, повторю код ещё и тут:
#define defaultTimezone 3; // Сюда установить часовую зону по умолчанию.
// Часовую зону всегда можно оперативно откорректировать. Для вызова меню установки часовой зоны,
// часы надо включить при одновременно зажатых кнопках перевода Часов и Минут.
// Для выхода из режима установки можно просто выключить часы и включить их снова в штатном режие.
// Одновременное нажатие кнопок часов и минут также приводит к выходу из режима установки часовой зоны
float LATITUDE = 55.5, LONGITUDE = 37.5; // первоначальная позиция для Москвы, район аэропорта Остафьево.
int MaxTimeToSync=500; // Синхронизация каждые 500 секунд
#define MaxScreenTimer 114 // С какой полусекунды каждой минуты будет отображаться температура. Значение 114 -> с 57-й секунды до конца минуты.
// Подключение часов реальноговремени
// DS3231 -> Arduino
// D (SDA) -> A4
// C (SCL) -> A5
#define HourPin 4 // Это контакт кнопки перевода часов
#define MinutePin 8 // Это контакт кнопки перевода минут
#define DotPin 5 // К этому пину подключены светодиоды в виде двоеточия между часами и минутами
byte DotNightBright = 9; // Это значение яркости зажжённого двоеточия в ночном режиме.
//
// pin 5 o------+-----+
// |,, |,,
// V V
// — -
// | |
// | | | |
// |R| |R| Значения R подбираются в зависимости от яркости светодиодов, от 100 ом до 6кОм.
// | | | |
// | |
// | |
// Gnd o----------+-----+
enum { REG_SELECT = 10 }; // пин, управляющий защёлкой (SS в терминах SPI)
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;
char 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;}}
// Опрос кнопок
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); RTC.set(now()); 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); RTC.set(now()); Synced=1; ScreenTimer=0; ScreenPage=0; Screen(); MinuteButt.rebounce(500);}}
if (now() != prevDisplay) {
prevDisplay = now();
CurMins=hour()*60+ minute();
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
получаю из RTC. В случае, если часы реального времени не обнаружены, системное время начинается с 00:00, но это время считается скомпрометированным, имеет наименьший приоритет и зрительно на дисплее будет отличаться от обычного. Как только время будет установлено вручную с кнопок, оно получит более высокий приоритет и уже будет считаться приемлемым. Ещё более приоритетным является время из RTC. Время, полученное с GPS и прошедшее проверку, считается наиболее точным и имеет наивысший приоритет. Оно корректирует показания, хранящиеся в RTC и, уж конечно, замещает собой установленное вручную с кнопок и считанное из памяти. Если время удачно синхронизировано, последующая синхронизация ожидается неспешно, примерно через четверть часа. В случае, если время скомпрометировано или или всё ещё не синхронизировано со спутника после включения, попытки синхронизации предпринимаются гораздо чаще, каждые десять секунд.
О конструктивном оформлении часов.
Я использовал готовый корпус производства Gainta. Дремелем в передней плоскости вырезал прямоугольное окно под индикаторы. На одной боковой плоскости виден фоторезистор. На другую боковину выведены толкатели стандартных тактовых кнопок (установка часов и минут), и разъёмы для подключения термодатчика и адаптера питания (мой адаптер питания имеет штекер 5,5x2,1 и втыкается вот в такое гнездо).
Переднюю сторону корпуса, по хорошему, надо закрыть тоненьким тонированным стеклом.
С советских времён у меня хранилось тонированное в серый цвет оргстекло толщиной 1,5 мм. Его осталось очень мало и на данную площадь его, увы, не хватило. Но сейчас же другое время, чего сейчас нельзя найти? Оказалось, что вот тонированного оргстекла такой толщины сейчас нельзя найти. Судя по всему, его не существует. Возможно найти тонированный плексиглаc толщиной 3 мм — и это всё. Но в Москве никто не продаст тебе кусочек плексигласа 15x10 сантиметров. Покупай трёхметровый лист — и никаких гвоздей. Такой плексиглас (стандартными кусками формата A4) возможно купить на ebay, но это довольно дорого.
Решил проблему так. Заказал по размерам обычное прозрачное оргстекло 2 мм (оно-то вполне доступно) и оттонировал его парой слоёв (спереди и сзади) вот такой тонировочной плёнки свётло-серого цвета (покупал дешевле, были скидки). Оттонированное стекло приклеил прозрачным силиконовым герметиком к корпусу. Получилось, на мой взгляд, вполне смотрибельно.
Часы работают уже более года, проблем не выявлено. Было несколько сбоев времени из-за неустойчивого приёма GPS (у меня для приёма условия, всё-таки, довольно экстремальные), но время без вмешательств самовосстанавливалось со следующей синхронизацией. Это действительно конструкция «включил коробочку и забыл». А бóльшего от неё и не требуется.
Главное, ради чего всё это писáлось. Я искренне надеюсь, что моя статья предоставит достаточное количество идей, и информационной помощи тем, кому эта сфера интересна. А, возможно, кому-то послужит недостающим импульсом для начала собственного творчества и реализации собственных идей.
Так, даже в существующем виде данная конструкция предоставляет широкое поле для фантазии и творчества. Мы уже сейчас внутри алгоритма, помимо текущего времени, совершенно бесплатно имеем дату и свои координаты. Мало того, что можно просто выводить эту информацию, из неё ещё можно получать рассветы и закаты Солнца непосредственно для вашей местности, можно получать фазу Луны, день недели, високосность года, рассчитывать Пасхалию и т.д. Осталось ещё шесть свободных пинов, а, значит, можно подключать ещё какие-то датчики или исполнительные механизмы: звуковые сигнализаторы, реле, ключи коммутации, кнопки, беспроводные передатчики/приёмники и т.д. Добавлено спустя сутки:
В нескольких комментариях к обзору мне сказали, что хорошо бы зрительно отличать гарантированно неточное время, от правильного синхронизированного. Я дописал код, теперь эта возможность у пользователя есть.
Если возникнет ситуация, когда время не может быть получено ни от одного из источников, когда оно ещё явно не сихронизировано и является скомпрометированным, двоеточие между разрядами часов и минут будет мигать в тревожном, коротко-«рваном» ритме. Как только точное время будет получено со спутников, двоеточие станет мигать привычным образом: одно мигание в секунду.
Вот в этом коротком ролике я показал, как зрительно выглядит сначала недостоверное, а потом синхронизированное время. Прошу прощения за качество, яркий синий светодиодный свет очень трудно снимать…
Исходник в тексте обзора, а также в прилагаемом архиве обновлён. Добавлено спустя полтора месяца:
Я откорректировал проект, полностью отказавшись от хранения времени в EEPROM, в пользу хранения его в RTC: в энергонезависимой памяти при отсутствии питания хранящееся время статично, а в часах реального времени оно всё равно идёт. Удорожание проекта на один доллар окупается гораздо более удобной и комфортной эксплуатацией и более широким функционалом. Исходник снова обновил. Текст обзора поправил.
Спасибо читателям за ценные идеи!
* Все ссылки по тексту выше — исключительно для иллюстрации. Скорее всего, сегодня аналогичные товары можно купить по другой цене и у другого продавца.
PS: Никто ничего для обзора не предоставлял и не спонсировал. Всё, что описано в конструкции, покупалось в разное время за свои собственные деньги или было найдено в собственных закромах.
Отличная штука. Надо тоже сделать, а то надоело свои радиочасы филипс настраивать после отключения электричества. И в качестве ночника сгодятся. Вот за такие обзоры и люблю этот сайт…
У меня с часами всё гораздо проще — в их качестве трудится древний спутниковый ресивер Nokia Dbox2 под нейтрино и с синхронизацией времени по ntp, для которого это сейчас осталось главной и единственной функцией :)
Подключен по RJ45 к роутеру, грузится сразу в стендбай, яркость единожды отрегулирована на комфортную из меню.
Дисплей приятного зелёного цвета размером 65 х 40мм, день недели и дата в комплекте, шрифты и языки тоже легко меняются на нужные.
Из недостатков — долгое время загрузки линукса при пропадании электричества.
Отличная работа! Занимательный пост. Я собрал аналог sonoff. Полуумная розетка на esp и твердотельном реле. Управлять можно по WiFi, но приоритетным является таймер. Используется для освещения в аквариуме. Текущее время получает по WiFi. Подумываю приобрести модуль точного времени для ардуинки. В связи с чем, вопрос. Почему Вы избегаете использования подобного модуля здесь? Нет желания менять батарейку?
Я не критикую. Но для себя бы делал без записи в постоянную память. Ведь если питание пропадёт на пару часов, то и время будет соответствующее. Да, я понимаю, что только лишь до следующей синхронизации. Но меня бы просто съедала постоянная мысль о том, что часы в данный момент могут лгать и надо их проверить.
Уж лучше бы они показывали просто нули до следующей синхронизации.
И снова, понимаю, Вы ответите, что это легко настраивается в коде. Не навязываю. Просто высказал свое мнение.
Ну, в общем и целом, да, вы правы. Хранить время в DS1307 гораздо лучше, чем в EEPROM. Хотя бы потому, что в RTC оно идёт, а в EEPROM лежит.
Не стал усложнять конструкцию, — это единственный повод. И RTC надо покупать, а EEPROM уже дана бесплатно. Жизнь батарейки при поданном напряжении неважна (только саморазряд), часы идут от Vcc, батарейка же расходуется только при отсутствии основного питания. Поэтому одной хватит на годы и годы.
Но меня бы просто съедала постоянная мысль о том, что часы в данный момент могут лгать
Процедура синхронизация от источника образцового времени (у меня от GPS) после сбоя (т.е. когда часы конкретно знают, что время они показывают неточное) у меня долбится каждые 10 секунд. И горячий старт приёмника при хороших условиях — это минута, а то и меньше. Так что лгать они будут очень недолго.
Но чтобы избежать и этого периода, вполне возможно чуть доработать описанную выше конструкцию. (Вот! Об этом я и писал, начались идеи и творчество! Это и есть цель обзора!) Пины A4 и A5 свободны, подключаем DS1307 и в скетче чтение/сохранение в EEPROM заменяем на чтение/сохранение в часы реального времени. Библиотека DS1307RTC доступна, модули на Али в изобилии, чуть больше доллара с доставкой. :)
Мне кажется, лучше применить модуль на основе DS3231. По своему опыту гораздо точнее, чем DS1307. Разница в цене в самодельном единичном устройстве ничтожна.
Ну для конкретно данного случая выбор RTC абсолютно неважен, поскольку точность достигается не ходом RTC, а точностью источника образцового времени. А вот в часах только с разовой установкой, да, 1307, особенно с китайскими кварцевыми резонаторами, — штука не супер прецизионная, вы правы :)
Прикрутил к своему монстрику (5 дюймов индикаторы) DS3231 и забыл про 1307, как про страшный сон.
А для редкой синхронизации свою старую поделку (лет 8 валялась) ethernet-модуль на PIC18F258 использовал. Раз в месяц на сервере скрипт срабатывает и посылает UDP пакет с текущим временем часам.
не знаю как это реализовано здесь, часто видел, что когда «часы конкретно знают, что время они показывают неточное» очень наглядно показывать это миганием (примерно 1гц) всего отображаемого на часах.
Хорошая идея, попробую реализовать. Спасибо.
1 герц, конечно, не нужно (оно и так 1 герц), но попробую реализовать в скважности мигания двоеточия, по характеру мигания пользователю будет понятно.
еще один хинт, который возможно будет желание взять на вооружение.
третий модуль семисегментника ставится вверх ногами. двоеточие готово без вставки дополнительных элементов ;)
Я это видел много раз. Решение «на безрыбье».
Мне визуально не нравится.
Потому что такое «псевдо-двоеточие» будет очень длинным — точки будут на верхней и нижней границе высоты символов, это некрасиво. А то и ещё шире: выше и ниже границ символов, такое бывает.
В реальном же знаке двоеточия точки должны быть ближе к горизонтальной центральной оси табло.
И индикаторы тогда придётся ставить вплотную, и даже в этом случае точки этого «двоеточия» не встанут на одну линию. А красиво — это чтобы группы часов и минут были раздвинуты для знака двоеточия.
Я не поленился и нарисовал в векторе. Сравните, какой вариант зрительно красивее:
Тоже согласен. Правильное смотрится красивее и читабельнее, а вот в изготовлении сложнее. Хотя я думаю, что привыкнув, в упрощенном варианте слабо видится отличие.
А вот еще мне режет глаз 62 минуты на картинке. )))
за труды в рисовании и обзор большое спасибо :)
миганием (примерно 1гц) всего отображаемого на часах.
имелось ввиду, что все отображаемые символы (4 цифры и 2 точки) мигают как обычно мигает разделитель.
так в свое время делали многие устройства, включая «Электронику».
но там это нужно было в том числе для привлечения внимания пользователя с целью установки верного времени.
Ну это уже мне кажется, пожалуй, слишком экстремальным. Такое я видел много раз на старых часах. Думаю, так, как это сейчас оформлено в скетче, наиболее приемлемо. Зрительно различается, но не долбит по глазам.
Не стал усложнять конструкцию, — это единственный повод. И RTC надо покупать, а EEPROM уже дана бесплатно.
Предлагаю одно минималистическое усложнение, помогающее поберечь eeprom занедорого :)
От «высокого» питания делаем резистивный делитель на пин с АЦП. (Выставляем максимальное для АЦП значение). И при снижении напряжения на этом «контролирующем» пине на 20% — резко сохраняем все в eeprom (поскольку это падение говорит о том, что напряжение на входе снижается, т.е. пропадает). А в остальное время — не трогаем ту eeprom-ку.
Боюсь в конструкции с сетевым питанием этот совет бесполезен. В отличие от батарейного питания, разряд которого растянут по времени, просадка при отключении питания — процесс достаточно быстрый.
Смотрите. Время записи в EEPROM — 5-9 ms.
Время процесса разряда сглаживающих конденсаторов источника питания, конечно, невозможно сказать точно (зависит от ёмкости и потребляемого девайсом тока), но очевидно, что это лавинообразный экспоненциальный процесс. Не думаю, что сильно ошибусь, если назову период в 20-400 ms. В любом случае, снижение напряжения на 20% — это уже почти завершённый процесс, процентов 70-80 уже закончено, остаток напряжения свалится довольно быстро. В таких условиях время записи может ещё увеличиться, если оно вообще на таком запасе энергии способно успешно закончиться. А микроконтроллер ещё должен успеть понять, что напряжение падает и успеть принять решение к записи.
Так что, боюсь, не для этого случая. А вот в батарейном питании — да.
Теоретически, может выйти. Если запитать ардуину/контроллер через диод и достаточно ёмкий конденсатор после него. Всё остальное питается до диода, там же измеряем напряжение. МК потребляет мало, на конденсаторе может проработать достаточно долго для сохранения данных. Индикаторы же достаточно быстро разрядят конденсаторы источника питания. Минусы: чуть меньшее напряжение на МК, надежность зависит от возможной потери ёмкости конденсатором.
Это, разумеется, чисто теоретическое измышление, в данном случае переделывать не предлагаю и сам смысла не вижу. Ну и раз уж оставил коммент, то спасибо за обзор, всегда интересно почитать про самоделки. Результат понравился. Я вот свои часы, чтобы с синхронизацией, так и не собрался сделать, после прочтения опять задумался, что все-таки надо бы сделать :)
В цепь питания МК ставим диод и ионистор. скажем на четверть фарада (вообще просто большого конденсатора должно хватить, мне кажется ты немного перепутал с таймингами, не думаю что у ардуины все так плохо с EEPROM что запись туда идет пол секунды, но предположим что так). Цепь питания до диода заводим на порт МК и настраиваем прерывание по заднему фронту настраиваем прерывание в котором выполняем запись в EEPROM
В связи с чем, вопрос. Почему Вы избегаете использования подобного модуля здесь? Нет желания менять батарейку?
Переписал код и чуть изменил конструкцию описываемых часов. Теперь вместо EEPROM время хранится модуле RTC. Сбои по питанию теперь переживаются вообще незаметно. Текст обзора поправил, исходник обновил.
обе растут откуда надо, но мозги ска просто отказываются пытаться даже начать понимать ардуину и 8266… хотя вторых несколько модулей лежат и лента на готове
аха, а часы всегда отображаются? у меня тока в выключенном состоянии, при включении ресивера дисплей показывет номер канала, а так удобно, не бегут и не отстают.
Лет 6 назад собрал на Атмеге 8 часики, с нормальным кварцем за месяц убегают секунд на 30. Куча режимов и видов индикации, два термодатчика d18b20 улица-дом, наборное поле из 3мм светодиодов (225 штук). 155 на индикации-пятница, 15 число. Очень доволен часами. Тоже подумываю собрать с GPS на кухню, там от окошка не далеко. Спасибо за интересную схему.
Поскольку занимаюсь подобной темой, проанализировал плюсы и минусы. Ниже чисто ИМХО!
Руки из нужного места — это плюс! Но минусов в этой идее и реализации столько, что доверять показаниям таких часов я бы не рискнул. Весьма слабое место — метод синхронизации. Ладно еще, если окна на юг, да и то на подоконнике. А периодические запись и восстановление времени из EEPROM при пропадании питания — это, извините, уж вообще ни в какие ворота!
Часы периодически сохраняют время в собственной энергонезависимой памяти, поэтому даже после сбоев питания они начинают отсчёт с последней сохранённой минуты. Да, такое время после сбоя будет неточным, но это явно лучше, чем начинать отсчёт с 00:00. По мере нахождения сигнала GPS, время, без вмешательства, синхронизируется.
EEPROM штука с ограниченным ресурсом и при частой перезаписи долго не протянет. А при редкой записи смысл ТОЧНОЕ ВРЕМЯ при сбое питания вообще теряется. Вы хотя бы добавьте светодиод, который горит/тухнет, если очередной сеанс синхронизации был успешным/неуспешным (и/или был сбой питания). Но, думаю, всю концепцию надо пересмотреть и все-таки DS3231 использовать.
В своем проекте я пошел другим путем. У меня используется DS3231, но ежесекундно в ардуине идет корректировка показаний из-за накапливаемой погрешности. Точная установка производится вручную по мере накопления ошибки, после этого автоматически расчитывается новый корректировочный коэффициент, в связи с чем точность хода увеличивается на порядок при каждой ручной установке времени. Так, весной я запустил часы и через месяц (они убежали примерно на 2 секунды) снова выставил точное время. На сегодня (15 декабря) разбежка 1 секунда. В следующем году, когда она достигнет 2-х секунд, снова выставлю точное время. Ну а следующей корректировки, думаю уже не будет (по крайней мере при моей жизни). Часы получились полностью автономными и не зависят от внешних источников синхронизации вообще.
Спасибо за мнение.
Не стану спорить, но подискутировать — с удовольствием.
Ладно еще, если окна на юг, да и то на подоконнике.
У меня окна не на юг. Часы в глубине комнаты примерно на метр от окна. Окно с внутренним напылением в стеклопакете. Современные приёмники весьма неплохо научились принимать GPS, поверьте. Ведь у каждого есть мобильник или планшет. И текущую позицию приложение с картами показывает, в общем и целом, в любой точке комнаты. А тут и триангуляция с нескольких спутников не нужна, достаточно только времени. Почему же вы считаете такую синхронизацию слабым местом? Время с GPS в общем случае точнее NTP, поскольку там ещё время жизни пакетов есть, на что многие забивают.
снова выставлю точное время.
Идея интересная. Но она явно требует присутствия человека. Поскольку для того, чтобы устройство стало точным, кто-то должен отслеживать точность и несколько раз корректировать ход. Понимаю, три-четыре раза засечь и откорреткировать — это не такой великий труд. Но я принципиально хотел создать устройство, совсем-совсем отвязанное от участия человека.
И, да, прихожу к мнению, что поменяю я EEPROM на RTC.
Возможно, мне просто не везет с помещениями. Есть и планшеты и смарты (в том числе Redmi 3S с неплохим приемником всех систем навигации). Но ни на работе (окна на восток, бетон/кирпич), ни дома (запад, 10 этаж кирпич) ничего не ловится, если отойти от окна. Вот если бы к GSM привязаться — другое дело, МТС, к примеру, неплохую точность дает.
Понимаю, три-четыре раза засечь и откорреткировать — это не такой великий труд.
На фоне количества труда по сборке, наладке часов это пренебрежительно малая величина, но сам факт — да, вручную время выставить придется 2-3 раза. Зато я всегда абсолютно уверен в показаниях часов, и все остальные часы в доме подвожу по ним, не сомневаясь совершенно. А для меня это очень важно.
Не «не ловится», а недостаточно количества видимых сигналов спутников и точности вычислений для определения координат.
Но точное время есть в каждом пакете, поэтому достаточно «видеть» один спутник, чтобы его получить.
Запустите любую программу, визуализирующую видимые спутники, и если будет хоть один, даже серым — время будет.
Вы не видели такого, что ни одного спутника не видно? Везет вам. Но не забывайте, что сигнал со спутника еще и здорово зависит от погоды. Ливень и снегопад могут вам здорово подгадить в самый неподходящий момент…
Вы путаете позиционирование с получением только времени, для первого нужен хороший сигнал, а второе по собственному опыту работает где угодно, чуть ли не под землёй)
Когда проектировались эти системы, что наша, что американская, специально выбирался диапазон, чтобы погода влияла минимально.
По своему опыту: под диким ливнем с грозой, когда небо почернело, дождь заливает стекла так что стеклоочистители не справляются (судовые стеклочистители, не автомобильные, другая тема), видимость метров 100, радиолокатор ослеп полностью (9,5 ГГц очень хорошо поглощаются водой) — ГЛОНАСС и GPS только немного теряют уровень приёма, координаты рисует уверенно и кораблик на электронной карте показывается где надо. DOP вырастает на десяток метров.
Для большинства мест нашей страны окна на юг не обязательны для работы ГПС в помещении. Наклон орбиты ГПС — 55°, следовательно до широты Москвы спутники видно и из северного окна. У ГЛОНАССа наклон 60°, и такая картина до широты Питера. Кроме того, приёмник принимает и отраженный сигнал, пусть там точность ниже, но как-никак что-то принимает.
Проверять прием телефоном не очень корректно, потому как в телефоне AGPS, альманах и эфемериды он грузит через интернет, кроме того, предварительно определяет место по сотовым станциям и wifi-точкам.
Кстати тоже возникали такие же вопросы. С точки зрения инженера со стажем работы схема, так скажем, не блещет изящностью. Во всяком случае изделие не для серийного производства это точно.
А в вашем проекте тоже есть вопросы. На кой черт заниматься коррекцией каждую секунду когда: 1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток. 2. У вас все равно под рукой модуль реального времени и вы упираетесь в его точность.
По мне дак при нормальном коде хватило бы синхронизации раз в минуту, можно даже реже.
А у автора идея хорошая, но реализация не понятная. Если есть GPS модуль, то нафига запоминать время. Разве нельзя просто получить время со спутника когда тебе угодно. Короче лишний огород. А так да, за основательный подход конечно плюс.
На кой черт заниматься коррекцией каждую секунду когда: 1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток.
Потому, что Ардуина МОЖЕТ раз в секунду делать весь пересчет, производительности хватает.
У вас все равно под рукой модуль реального времени и вы упираетесь в его точность.
Не упираюсь. Для моей концепции нужен не точный модуль, а СТАБИЛЬНО врущий. Поэтому я мог бы применить и супер неточный DS1307 с тем же результатом, если бы в нем была термостабилизация, как у DS3231.
Всё верно, я разделяю вашу концепцию. Для данного конкретного проекта она не применима, но принципиально — идея интересная. Последовательное приближение к идеальной точности. Расскажите о своей реализации данного алгоритма, думаю, многим будет интересно.
То есть вы по сути берете посредственные часы и осуществляете цифровую подстройку хода и периодически осуществляете ручную калибровку? Потому как в вашем предыдущем посте вообще непонятно чью погрешность вы вычисляете. Написали бы просто цифровая подстройка хода аналогично наручным часам электроника. Там как раз примерно то же самое было.
Написали бы просто цифровая подстройка хода аналогично наручным часам электроника
Именно! Гениальная идея для часов из Белоруссии, которые я и ношу всю жизнь и не променяю ни на какие другие. Почему эту идею не подхватили во всем мире для меня загадка. Я немного продвинул эту идею, увеличив точность хода и удобство настройки. Но далеко не все знают про эти часы, особенно молодое поколение.
Та же фигня. Так я до конца и не вывел в ноль погрешность. Гонялся за ней несколько месяцев, потом надоело. Сейчас вообще не сильно волнует. Часы должны быть от 0 до +5 минут от реального времени, точнее мне не надо.
Разве нельзя просто получить время со спутника когда тебе угодно.
Нет. Приёмник имеет горячий старт около одной минуты и холодный старт до 15 минут. Вот на этот период мы не можем получить время, и оно показывается из EEPROM. Но коллективное мнение присутствующих меня убедило, что лучше удорожить проект на полтора доллара и поменять EEPROM на RTC.
От GPS не откажусь принципиально в этом проекте. Потому что это неотъемлемое свойство данного проекта: точное время без любого, даже малейшего, вмешательства человека, в принципе.
А часов типа «RTC на 7 сегментов» — их пруд пруди… Не вижу смысла; их китайцы штампуют всяко дешевле меня, в любом виде, — хоть в конструкторе, хоть готовые, любых цветов, размеров и форм.
Теоретически да, но для этого надо забить карту привязок координат к часовым поясам и регулярно её обновлять (не только у нас чудесатое правительство которые ни как не может определиться кто, когда в каком часовм поясе живет и переодически что то правит). Поэтому имхо, для стационарных часов проще разок при переезде поменять часовой пояс, чем гемороиться с автоматическим определением.
Не так это просто.
Координаты GPS — это параметры физические. Их можно измерить, вычислить или определить. А часовая зона — это понятие политическое.
Условно говоря: есть государство и его политика говорит: «у нас на территории будет вот такая (или вот такие) часовые зоны». На одной и той же долготе могут быть разные государства с разной часовой политикой.
Вбить навороченную карту со всеми часовыми зонами и со всеми летними/змними политиками — это мозгов ардуины точно не хватит. И это всё ещё надо будет поддерживать в актуальном состоянии. В одной и той же точке поверхности планеты вполне может меняться часовая политика. Меняются государства, меняются премьер-министры… А на судах часовая зона вообще зависит исключительно от решения капитана :)
Можно добавить в схему какие-нибудь DIP-переключатели для ввода поправки, там надо то максимум ± 2 часа, наверняка есть свободные ноги (порты).
Если конструкционно применить переключалку со стрелочкой под отвёртку, как в некоторых блоках питания, и на корпусе написать "-2, -1, 0, +1, +2", то с местной подстройкой справится «любая домохозяйка».
Мне понравилась идея японцев которую увидел у тестя в авто (Honda Odyssey), но не понравилась реализация:
Как-то он обратился ко мне «настрой мне часы в машине», я облазил там все. ну нет кнопок настройки часов, а часы идут, но неправильно. есть одна кнопка меняющая «час вперед или назад», в итоге гугление привело к тому, что время в этой машине под нас не настроить, его вообще в принципе не настроить, т.к. оно берется по GPS. и там забиты (захардкожены) только 2 часовых пояса, помоему +2 и +3, а нам надо было +6. Выхода нет, даже попыток перепрошивки в нэте не нашел, так и ездит с часами которые показывают на 4 часа меньше текущего, потому понравилась идея а не реализация, могли бы сделать настройку (коррекцию времени) от -24 часов до +24 и все.
Ну вот вам и ответ. Надо просто понимать логику японцев. Они бы не стали делать коррекцию под все часовые зоны. Потому что это машина предназначена для внутреннего рынка. Они решительно не могут предполагать, что машина может использоваться где-либо ещё :)
Логику использования праворульных машин на леворуких дорогах они постичь не могут.
Это неправильно, и это даже оправданием назвать нельзя, но не догадываться об этом просто глупо, т.к. у них есть официальные фирмы, салоны и прочие аукционы которые продают авто (да да, праворульные) скажем в Россию или в ту же Европу.
Если что-либо делается в какой либо стране, абсолютно не означает что это будет использоваться только в этой стране. Вот казалось бы есть наше «Жигули», скажите мне в какой стране их нет?)
Я больше поверю что это намеренное сокращение функционала.
signed long nextD;
void setup()
{
// ....
// читаем часовой пояс из ЕЕПРОМ
const int TIMEZONE = EEPROM.read(5);
pinMode(HourPin, INPUT_PULLUP);
pinMode(MinutePin, INPUT_PULLUP);
// если при подаче питания нажаты обе кнопки, заходим в настройку часового пояса
if(!digitalRead(HourPin) && !digitalRead(MinutePin)) {
// здесь выводим на дисплей текущий часовой пояс
delay(2000);
while(digitalRead(HourPin) || digitalRead(MinutePin)) { // пока не нажаты обе кнопки
delay(5);
if(digitalRead(HourPin)) {TIMEZONE--;delay(200);}
if(digitalRead(MinutePin)) {TIMEZONE++;delay(200);}
if(TIMEZONE > 12) {TIMEZONE = -12;}
if(TIMEZONE < -12) {TIMEZONE = 12;}
if (((signed long)(millis() - nextD)) > 0) { // вывод на дисплей 5 раз в секунду
nextD = millis() + 200;
// здесь обновляем на дисплее текущий часовой пояс
}
}
EEPROM.write(5, TIMEZONE);
}
// ....
}
Предлагаю в проект вариант настройки часового пояса.
1. Нажимаем обе кнопки и подаем питание на часы
2. Часы заходят в режим настройки часового пояса
3. Настраиваем часовой пояс кнопками часов и минут
4. Сохраняем настроенный часовой пояс нажатием обеих кнопок одновременно.
Предлагаю в проект вариант настройки часового пояса.
Ну, можно и реализовать. Не думаю, что это самая необходимая функция, поскольку не ожидаю, что многие, повторившие этот проект, будут часто переезжать в разные часовые зоны. Но, затрат практически никаких, так что почему бы и нет. К следующей неделе напишу свой код под это дело и обновлю ссылки. Но за идею спасибо :)
Предлагаю в проект вариант настройки часового пояса.
1. Нажимаем обе кнопки и подаем питание на часы
2. Часы заходят в режим настройки часового пояса
3. Настраиваем часовой пояс кнопками часов и минут
Сергей, спасибо за идею!
Реализовал это в новой версии кода. Исходник обновил.
Тогда надо было и секундные индикаторы ставить, чтобы секундочки сверять. или сразу десятые секунд.
Ну и я не представляю зачем такая точность в быту. Если только ради того что «я могу».
Я рассматриваю проект с точки зрения возможности реализации на автономном питании (не на таких индикаторах конечно). А при моем подходе лучше обеспечить вменяемую точность и калиброваться раз в сутки, как собственно и делают обычно часы с синхронизацией. В таком случае можно вообще забить на наличие каких либо еепромов или ртсок. Даже если не получится обеспечить точность силами машинного времени, можно прикрутить внешний часовой кварц.
Эм. и что с того, что он имеет холодный старт 15 минут (у меня правда приемник менее чем за минуту стартует). Вы же все равно от розетки питаетесь. Вам не нужно экономить электиричество (это важно для работы от аккумулятора, когда каждый мкА*ч на счету). Не выключайте просто приемник и все. Пусть он постоянно держит спутники. И получайте сигнал каждую секунду. А в тех редких случаях когда пропадало питание, да придется подождать прежде чем часы покажут время. Но как часто у тебя дома выключается электричество?
1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток.
Задам вопрос по другому, а зачем вообще заниматься отсчитыванием времени средствами МК если в начале каждой секунды тебе говорят «сейчас 10:34:21» (причем перфекционисты могут радоваться, что тебе так же сообщают и о начале секунды с точностью измеряемой в долях микросекунды). Зачем что то самому отсчитывать?
Я себе домой тоже GPS часы собрал. И я не понимаю твоих претензий к GPS синхронизации. Почему окно обязательно должно выходить на юг? Почему часы обязательно должны стоять на подоконнике (антенну да, я на стекло приклеил, но сами то часы можно в удобном месте поставить). Причем это автор еще зачем то с EEPROM развлекался, я гораздо более тупо сделал, данные со спутника получил, на экран вывел. Следующий пакет данных получил, опять на экран вывел. Все. Единственное, что добавил, это еще опрос порта TIMEPULSE, по фронту с которого прибавляется одна секунда, что бы убрать задержку на передачу по протоколу. Но в целом я даже не пытаюсь сам отсчитывать время. Что получил то и отобразил. Проблемы возникают только при перетыкании питания и то это редкость и после них они опять приходят в норму. GPS ловится всегда. И сдается мне, что если завтра GPS сломается то правильность показания моих часов будет не самое большое что будет меня беспокоить.
В своем проекте я пошел другим путем. У меня используется DS3231, но ежесекундно в ардуине идет корректировка показаний из-за накапливаемой погрешности. Точная установка производится вручную по мере накопления ошибки, после этого автоматически расчитывается новый корректировочный коэффициент, в связи с чем точность хода увеличивается на порядок при каждой ручной установке времени. Так, весной я запустил часы и через месяц (они убежали примерно на 2 секунды) снова выставил точное время. На сегодня (15 декабря) разбежка 1 секунда. В следующем году, когда она достигнет 2-х секунд, снова выставлю точное время. Ну а следующей корректировки, думаю уже не будет (по крайней мере при моей жизни). Часы получились полностью автономными и не зависят от внешних источников синхронизации вообще.
Вот ты сейчас долго и скучно рассказывал каким образом ты крутил алгоритмами, что бы повысить точность хода. И скомпенсировать погрешности. И ты достиг каких то хороших вариантов по точности. Но какая бы хорошая точность у тебя не была, она у тебя копится. Пусть по секунде в месяц. Пусть по секунде в год, но все равно копится. Профит с GPS в том, что погрешность не накапливается. У тебя есть какая то фиксировання погрешность связанная с задержками на обработку сигнала, на обновление экрана и т д. Вот все она есть и она фиксированная и измеряется в тысячных долях секунды. Все. Что через минуту после включения, что через 5 лет.
Я вам тогда еще точнее и проще вариант дам. ESP8266 и сихронизация с NTP сервером, раз в 64 секунды. И у вас точность как такая, которая DS3221 и не снилась. И ни каких танцев с ручной регулировкой и подстройкой, гавное стабильная связь с роутером.
Ну а следующей корректировки, думаю уже не будет (по крайней мере при моей жизни). Часы получились полностью автономными и не зависят от внешних источников синхронизации вообще.
Нет никаких причин, чтобы ругаться. Это не законченное устройство, а электронный компонент, к тому же модуль не содержит элементов записи, фиксации и передачи, поскольку является радиоприёмником.
Эх!.. Прочитав название, в голову полезли мысли, что же там придумано: датчик рассветов-закатов на фоторезисторе и вычисление времени с учетом географического положения? а может фотографирование звездного неба и вычисление времени по положению звезд? А оказалось как обычно — время спрашиваем у прохожих))) По мне — так проще вайфай было заюзать, плюс модуль часов, но что ж и такая идея имеет право на существование. За реализацию плюс.
P.S. Хранение неточного времени в EEPROM — это жесть! Уж лучше не знать никакого времени вообще, чем ошибаться и опоздать на поезд.
Я принципиально хотел создать устройство, совсем-совсем отвязанное от участия человека. Подключать часы к wi-fi — это либо прописывать в коде ssid-пароль, либо делать меню с установками. Т.е. это уже зависимость от оператора.
Wi-fi может пропадать при сбоях роутера. Пароль может (и должен!) периодически меняться. Wi-fi может быть не оплачено в текущем месяце :)
Уж лучше не знать никакого времени вообще, чем ошибаться
Дискуссионно, но я принимаю вашу точку зрения. По мне — нет. И оно очень быстро само станет точным.
Дискуссионно, но я принимаю вашу точку зрения. По мне — нет. И оно очень быстро само станет точным.
Обычная ситуация с высокой вероятностью возникновения:
Человек покупает Ваши часы и ставит их в спальне на тумбочке в 2 метрах от окна. Поскольку погода солнечная, GPS-сигнал ловит даже на таком расстоянии от окна.
И вот однажды ночью случается ужасная гроза, молния попадает в трансформаторную будку, электричество на 2 часа пропадает, а поскольку GPS-сигнал в такую погоду становится значительно хуже, то часы уже не могут синхронизироваться.
Человек спокойно просыпается и неспеша собирается на работу, поглядывая на Ваши часы. Приехав на работу, он узнает, что пропустил чрезвычайно важную встречу, подписание контракта сорвано, его увольняют с работы.
Лишившись работы, начинает пить, жена выгоняет с дому, жизнь на помойке и суицид через полгода.
Его дети подают многомиллионный иск о возмещении морального ущерба к производителю часов.Производитель банкротится, начинает пить, жена выгоняет с дому, жизнь на помойке и суицид через полгода.
А что мешает часы на DS1307 или DS3231 поставить и их синхронизировать? У меня так сделано. Сразу после включения время показывают, синхронизируются раз в час, хотя это излишне, но почему бы нет))
У него есть чуть небольшой уклон к дну, но это даже лучше. Резиновых самоклеящихся ножек сейчас полно, можно любой наклон к горизонтали организовать, смотря где они стоять будут.
В Чипе-дипе сейчас коммунизм на них, даже в розницу дешевле, чем в Вольтмастере.
А перед индикаторами стекло темное — это вы сами делали? Я думал это корпус с полупрозрачной лицевой стенкой :)
Не подскажете где такое стекло можно взять? (может у китайцев где-то есть, сходу найти не смог). А то сейчас приходится колхозить с тонировочной пленкой :)
да пытаюсь, смотрю, но ничего не понимаю :) надо себя заставить подойти к этому плотнее, пока только пробовал в FLprog простую логику нарисовать и всё :)
Не совсем так. Во первых компилятор на WinXP выдаёт очень странные ошибки, а каждый раз запускать для программирования Win7, которая гудит всеми вентиляторами компьютера — не вариант… Но это ерунда. На самом деле беда в том, что компилятор у Arduino внешний, а среда разработки просто не способна дружелюбно показывать пользователю ошибки по типу того, как это сделано в Delphi 7.
не каждый может понимать код
еще мало кто может его писать даже при всем желании научиться
это как с музыкой или рисованием — надо иметь талант к этому
Да ладно вам :)
Вполне себе бытовая технология. Я, например, дома, время от времени паяю какую-то SMD-деталюшку и вручную, хотя и паста, и флюс, и фен есть — иногда ведь так проще.
Почему же китайцу на продажу нельзя? :)
Приятно читать статьи с вменяемыми рассуждениями и прослеживать ход мысли. Ссылки на мануалы и оперирование данными из них — весьма похвальны :) За это — спасибо!
Но кое-что я покритикую.
Вы неверно используете термин «скомпрометированные данные». Первоначальный смысл — данные, ставшие известными тем, кому не следует знать. В данном случае лучше подошел бы термин «невалидные», «устаревшие» и т.п.
GPS\Глонасс как источник точного времени неплох, но например в моем доме ни один из современных приемников не берет сигнал внутри помещения. ТОлько будучи вплотную прислоненным к окну. Универсальный и пригодный всегда — инет через W-Fi.
Вы неверно используете термин «скомпрометированные данные».
Нет, с лингвистической точки зрения я прав.
КОМПРОМЕТАЦИЯ (от французского compromettre — подрывать репутацию). Данные, как и человек, могут считаться скомпрометированными, если к ним (к нему) подорвано доверие или если они не вызывают доверия.
Это и есть первоначальное словарное значение этого слова
Первоначальный смысл — данные, ставшие известными тем, кому не следует знать
Немножечко не так. Это не первоначальный смысл. Это применимость данного термина к области информационной безопасности и криптографии. Вот, применительно к этой сфере, вы совершенно и бесспорно правы.
Универсальный и пригодный всегда — инет через W-Fi.
Да, понимаю такую точку зрения, её озвучили выше. Я ответил так :)
Честным ОК или ОС. Дело в том что пин, внутри МК, связан с диодами с землей и питанием. Это значит, как бы вы его(пин) не закрывали, на нем будет 5в, а на истоке 7.5. 7.5-5=2.5в
Gate Threshold Voltage= 2-4в, значит полевик имеет полное право не закрыться, вопреки вашему желанию.
Кроме того, эти 7.5в постараются бесперебойно :) запитать МК, если его его питание подкачает.
Я бы добавил npn.
Я тоже давно уже хочу сделать похожие часы. Но только с немного другой целью — чтоб можно было точно отслеживать начало каждого часа (посетители ЭТОГО сайта думаю понимают зачем это надо). Т.е. в идеале достаточно пип-пип-пип-пип-пип-пиииип как раньше было на радио-Маяк. Но для отладки цифровое табло тоже нужно (а также чтоб лучше изучить убогое программирование Arduiono). Поэтому, пока нет GPS модуля (получу его в лучшем случае весной-летом), потихоньку изобретаю индикатор.
Есть готовая плата со статической индикацией (т.е. не мерцает!), но там туча проводов (около 30), поэтому сначала хочу попробовать запустить (прошить загрузчик) в бесплатную (сдутую откуда-то) Atmega 128, так чтоб она работала без кварца, и уже по I2C или RS-232 слать в неё с Ардуины цифры…
1. Что думаете, вообще возможно запустить Atmega 128 без кварца?
2. Каких ожидать задержек из-за обработки времени с GPS модуля аж через два преобразования RS-232 (~18кБит/сек) или I2C портами (50кГц)?
3. Будет ли работать в квартире (у окна) самый дешёвый GPS модуль, который купил «GY-NEO6MV2» или нужно что-то получше?
Использовал такой GPS модуль для синхронизации часов, работает нормально, даже в пяти метрах от окна (именно выдача времени). Через программу настройки модуля можно поставить только 2-d fix, работать должно побыстрее, да и так в настройках можно покопаться, например оставив только одно сообщение со временем
Обрезки прозрачных пластиков можно поспрашивать в рекламных мастерских, которые лазерной резкой занимаются. Отдадут или даром или за минимальный бакшиш.
Моей реплике уже больше года. Я вам ответил заранее. Я тогда как раз стёклышко, в том числе и для этих часов, готовил. Ничего не изменилось в ситуации. Если есть что ответить — отвечайте сюда, я с благодарностью приму адреса и телефоны. Без шуток.
Вообще, покритиковать хочется с инженерной точки зрения.
1. Отображение неправильного времени совершенно недопустимо. Поэтому все заморочки с сохранением в EPROM не имеют смысла.
2. Я что-то не до конца врубился, у вас время в коде программы считается вроде? Представляется не самым красивым решением, даже самый примитивный RTC даст большую энергоэффективность и имеет резервное питание.
3. Стремление избежать динамической индикации абсолютно не понятно.
Неплохая конструкция, очень хорошая реализация, но от описанной выше они отличаются принципиально. Тут Wi-Fi (а, значит, зависимость от настроек человеком) и ШИМ-мерцание. Из функционала — нереализованная температура.
В смысле, я не критикую. Просто разные конструкции.
Gps мне не подошёл. Слишком толстый и большой модуль. Хотелось как сейчас модно в смартфонах бесконечный дисплей;) Мерцание 1.5 кГц. Сомнительно что кто то увидит.
Насчёт точек, у меня их три. Днём мигают две точки в центре, с 21.00 до 6.00 светится одна внизу. Чтобы не раздражало.
Вывод попеременно температуры и времени мне не понравился.
Хорошая тема. Автору респект.
Так же как и он, начиная с 80-х каких только часов не делал из «Радио». Ну и без «Старта» — тоже не обошлось. До сих пор работают. Даже цифры не выгорели. Наверное из-за того, что сразу сделал в них авто регулятор яркости.
Не так давно стояла примерно такая же задача — получить часы с функционалом «поставил и забыл». Пошел по другому пути — планшет с битым тачскрином. Тач выбросил — и вот тебе готовый конструктив для часов мечты: коррекцию времени можно также сделать по GPS, но поскольку они стоят дома, а ситуация с GPS не менее критическая чем у автора, сделал от сети WiFi. Иными словами от роутера, который в свою очередь ничего не сбрасывает и плюс еще синхронизируется от NTP. А на 7 дюймах отображаются цифры очень даже комфортного размера. Можно менять цвет и размер. Единственное, что пришлось колхозить — выкинуть аккумулятор и запитать планшет от адаптера и сделать автонажималку кнопки «вкл» самого планшета при подаче питания. Все остальное — программа с самими часами, планировщик ее включения (после запуска это необходимо) и прочие вкусности — на то он и Андроид. Все это есть в свободном доступе.
Правда, буду переделывать и вставлю планшет с целым тачем — буду еще выжимать функционал. Пробовал одну программу, которая в определенные рамки времени приглушает яркость — не понравилась. Не то… Поставлю фотодатчик на драйвер подсветки — это проверенный путь.
Вот они в корпусе от фоторамки
Я же написал — при появлении питания «нажимает» кнопку планшета схема на 4 элементах 2ИЛИ-НЕ. Планшет включается и полностью загружается. А дальше все делает шедулер — запускает само приложение «часы». Синхронизация прилетает по WiFi из роутера как и на любом планшете или телефоне. Примерно через 1-2 минуты часы работают и показывают правильное время.
yadi.sk/i/UXBMaSDD3HfCZC yadi.sk/i/Ew0egvWq3Hg48u yadi.sk/i/os1wRLuz3Hg493
База часов — sonoff (esp8266)
Комплектуха вся с али
Примерная стоимость одного комплекта <1000р (в нынешних ценах, даже с учетом корпусов)
Код тут. github.com/pilnikov/ESP8266WeatherStations
Код писАл я сам.
Синхронизация по ntp (нужен инет), хотя gps прикрутить я думаю несложно, для меня просто не актуально было по gps.
Часики (все трое) работают второй год с периодическими (несущественными) апгрейдами
alex_75 Уважаемый автор, расскажите пожалуйста подробнее о проекте часов по первой ссылке Вашего поста.
И особенно об этом — Матричный цветной дисплей 16х32 пикселей с интерфейсом HUB75 на отдельном контроллере MEGA2560.
На МЕГЕ собран драйвер матрицы 16х32. Матрица стандартная с разъемом HUB75, цветная с любым шагом. Болванка взята отсюда learn.adafruit.com/assets/2940. Данные (все то, что выводить на экран) в МЕГУ передаются от все той же ESP (которая собсно и является «мозгом») посредством сом порта. Все датчики и пищалка будильника подключаются к ESP. Хотя можно все подключить и к МЕГЕ, но мне хотелось сделать управление по WEB. Если делать вариант без прогноза погоды (просто локальная погодная станция с жесткими настройками, с управлением кнопками, с одной фиксированной конфигурацией, без синхронизации/автокоррекции по NTP) можно обойтись и одной МЕГОЙ.
Приветствую, спасибо что откликнулись, Ваша ссылка не рабочая, болванка- в смысле матрица?
Вот ссылка www.adafruit.com/product/420 это она?
Я так и не понял покупали где — на сайте adafruit или на ali? Если на ali дайте пожалуйста ссылку.
Почитал их статьи, посмотрел библиотеки/примеры кода, там все под матрицы 16х32 и 32х32 и у меня остался вопрос — а работа дух матриц 16х32 включенных друг за другом (чтобы получилась одна 16х64) возможна?
Сами случаем не пробовали?
И еще один вопрос, не совсем в тему-шрифт цифр для библиотеки adafruit сами написали или подкорректировали готовый?
Можете рассказать как это сделать, какие программы/редакторы нужны и т.д…
А никто не натыкался на проекционный модуль к ардуино. У меня сейчас трудятся дома дешевые китайские проекционные часы (с метеостанцией которые), но у них есть проблема — при отключении питания время сбрасывается. Хотелось бы переделать на подобные с синхронизацией, но при этом с проекцией времени на потолок!
Внутри проекционного модуля там был дисплей, светодиод и линза.
А никто не натыкался на проекционный модуль к ардуино
Так ведь там у вас довольно простой принцип. Жидкокристаллическая матрица и светодиод ей на просвет. Ломать ваши часы я не предлагаю, если они ещё рабочие. Чтобы не сбрасывались, просто оборудуйте их ионистором с диодной развязкой.
А вот когда сломаются, можно и с их модулем поковыряться под ардуину. Там из геморроя — только регенерацию организовать для жк-матрицы. Зато бонус — простая смена диода позволит менять свет и яркость проекции.
но в радиоэлектронике не разбираюсь от слова «совсем».
А если не в электроникке, то в работе по дереву — сможете?
В смысле, имея готовую электронику для часов — оформить это в нормальном ретро-корпусе сумеете?
И почему ИН-1, а не популярные ИН-14? Или ИН-1 у вас уже есть физически?
Анна, огромное спасибо за обзор, как всегда, получилось отлично! Увы, на красивые конструкции сейчас нет ни времени, ни сил. На рациональные пока хватает. Есть старый разбитый смартфон, который сейчас ничего не стоит? Ага, как же.
Приветствую!
Специально зарегистрировался на mysku, чтобы поблагодарить автора за такое замечательное подробное описание часов!
Уже пару лет как собираюсь сделать себе часы, продумываю детали, и тут вдруг натыкаюсь на практически свои часы! Которых пока еще нет, но как концепция и основные идеи практически полностью совпадают с идеями автора!
Есть небольшие различия: мои часы планируются более большими (1,2 дюйма для меня маловато, сейчас заказал платы и буду паять каждый 7-сегментник 5Х10см), плоскими, чтобы можно было их повесить на стену в рамочку. Не знаю, буду ли я включать туда градусник (и всякие датчики влажности, давления и т.п.), но все остальное — прямо мой проект один к одному как я его задумал!
Тот же самый neo6-m как GPS для синхронизации времени, та же адаптивная регулировка яркости, чтобы ночью часы светились еле-еле, а днем были яркими и тоже хорошо заметными, причем без всяких мерцающих ШИМ, та же самая ардуина про мини как самая дешевая для интеграции в готовое устройство.
Та же схема запитывания экрана от внешнего (ноутбучного) БП вольт на 19 с понижающим dc-dc для получения 5 вольт на ардуино и сколько надо вольт на светодиоды.
Экран хоть и самодельный, но на тех же сдвиговых 74HC595 и для управления более мощными светодиодами — ULN2003.
Вот модуль часов я себе заказал сразу DS3231, к чему в итоге пришел и автор.
Та же идея возможной экономии на модулях: если не вставить gps, то все будет работать, просто не будет синхронизации с ним, без градусника не будет температуры, благо предусмотреть это в коде несложно.
Про коррекцию часового пояса не думал, думал жестко забить +3, спасибо автору блога и комментаторам, за идею и реализованный код управления с кнопок, думаю теперь сделать так же.
Про токоограничительный блок для адаптивной подсветки — пока находился на стадии обдумывания (я вообще далек от радиотехники), а тут — готовое решение, возьму в свой проект в таком же виде.
Идея о скомпрометированном и корректном времени — тоже у меня созрела совершенно аналогично, правда когда время корректно — повторные синхронизации я планирую раз в несколько дней-недель-месяцев, а не минут. За идею выделения мигания двоеточия при скомпрометированном времени — тоже большое спасибо (хотя у меня двоеточия конструкцией пока и не предусмотрено).
Идея с прерывистым питанием для датчика температуры — шикарная, обязательно применю ее если не в часах, то в каком-нибудь другом проекте, где этот датчик задействую!
За идею про тонировочную пленку тоже спасибо! У меня завалялось несколько кусков цветного оргстекла, но как это будет выглядеть в готовом изделии — понятия не имею, очень может быть, что тонировочная пленка придется кстати.
Также спасибо за аккуратный, выверенный код с исправленными ошибками примеров из скетча! Я, имея отношение к it-сфере, представляю, сколько мелочей приходится выправлять в коде, чтобы все работало так, как надо. Ваш код, даже если и не брать целиком в свой проект (хотя почему бы и нет), то как минимум пригодится как хороший и рабочий пример для моего проекта.
Я не совсем понял, зачем нужен отдельный «дневной» режим, при котором блокируется резистор для адаптивной подсветки. Ведь в зависимости от освещенности помещения, яркость часов и так плавно регулируется. Или регулировка там не плавная, а либо ночь, либо день?
Спасибо за такую реплику. Неожиданно и очень приятно. :)
Сейчас меня попросили сделать аналог этих часов, только несколько крупнее. Поэтому эту версию часов делаю на ленте WS2812. Каждый сегмент цифры — это два светодиода от ленты. Ленту нарезал кусками, наклеил на базовую плоскость, соединил проводами, сверху маска для сегментов (от боковых засветок соседних светодиодов), сверху — тонированная плёнка. Наподобие вот такого, фото не моё, идея технологии взята вот отсюда. Но у меня масштабы чуть скромнее и исполнение немножечко другое…
Собственно, для такой реализации в скетче переписана только процедура Screen (поскольку вывод всего экрана осуществляется с одной ноги) и выкинут узел приглушения яркости — незачем это делать внешними ключами, я могу программно изменять яркость любого сегмента как угодно. Да и светодиоды на двоеточия не нужны — они тоже в составе той гирлянды из кусочков ленты.
Конструкция пока не готова, но базовые функции уже вполне работают. Домой бы такую конструкцию делать не стал (всё-таки лента ШИМит на неполной яркости), а вот для офиса — в самый раз. Никаких узоров делать не буду, ни к чему это для деловой атмосферы. Ну, разве что, время и температуру буду разными оттенками выводить.
Про тонированное оргстекло. Уже после публикации обзора наткнулся на вот такой лот. Покупал 2мм. Пришло, проблем нет. Нормальное тонированное оргстекло. Как и большинство листовых пластиков из Китая, пришло в защитной бумажной рубашке на обоих плоскостях. Так что кому надо — можно пользоваться.
Дневной и ночной режим — да, вы правы, они переключаются порогово (либо в комнате темно, либо светло). Там потому и стоит мосфет. Мне этого в функционале вполне достаточно. Т.е. питание на индикаторы подаётся либо через гасящий резистор (мосфет закрыт), либо мосфет открывается и, таким образом, блокирует сопротивление, т.е. питание подаётся полностью. Если хотите плавной регулировки, то это сделать совсем несложно — датчик освещённости брать с аналоговым выходом и подключать его не на пин 2, а на A1, скажем. И вместо ключа IRF9Z* ставить какой-то мощный p-n-p транзистор. Но сразу его оснащать радиатором, бо он будет греться как печка. И программно чуть подправить алгоритм, чтобы на пин 3 отравлять аналоговый сигнал, пропорциональный считанному от датчика освещённости.
Спасибо за такой душевный и подробный ответ!
Постепенно в голове начинают вырисовываться подробности моего будущего проекта.
Тот проект часов из светодиодных лент я смотрел пару лет назад, когда начинал обдумывать на чем делать часы. Решил, что табло выйдет все же слишком большим для меня, да и очень много возни с аккуратной нарезкой лент, приклеиванием их, прорезанием всяких трафаретов и т.п. Может быть потом к этому и приду, но пока у меня каждый сегмент — это 3 последовательно соединенных светодиода по 3мм. Пару лет назад осилил 3 7-сегментника по 2 светодиода в каждом сегменте, распаянные на макетке, это работало, пока припаянные мной провода не поотваливались. Зато хватило мощности обойтись без ULN2003…
Здорово, что у Вас проект получает дальнейшее развитие в виде новых заказов, это здорово!
Про плавную регулировку яркости — все-таки очень я далек от радиотехники, приходится второй день грызть гранит науки, Вы имеете в виду биполярный транзистор, включенный по схеме с общим коллектором для регулировки выходного тока? Какой-нибудь классический КТ815 должен подойти, если я уложусь суммарно в 1,5 ампера?
Либо там же пишут про КРЕН/LM317, что он еще лучше должен подойти?
Думал сделать именно так, а ток базы регулировать фоторезистором, даже без участия ардуины.
Но регулировка с аналогового пина ардуины будет еще лучше, например, захочется реализовать более «умное» снижение яркости за несколько минут, по мере того как глаза привыкают к темноте. Только же вроде, аналоговые выходы ардуины это ШИМ? Который спокойно «просочится» через любой транзистор, и на выходе получим изображение, которое будет «ШИМить»?
Кстати, вдогонку насчет температуры: оказывается, DS3231 сам по себе умеет измерять температуру. А значит, надо будет это дело как-то использовать в своих часах, не пропадать же такому полезному свойству датчика! А вот часовой пояс мне придется хранить где-нибудь в неиспользуемых ячейках памяти DS3231 и устанавливать каждый раз после замены батарейки, EEPROM-то у меня нет и не планируется…
Если ещё актуально. Хочу повторить этот проект. Есть пару вопросов: код в архиве соответствует финальному варианту с RTC? Не могли бы ВЫ подсказать соответствие выходов 74нс595 сегментам дисплея.
Отвечу по пунктам:
1. Код в архиве соответствует тексту обзора. Т.е. да, все изменения, включая время из RTC и подстройку под все часовые зоны он содержит. После публикации код чуть правился, но к тексту статьи это отношения не имеет: часы дооснащались передающим радиомодулем, чтобы вся домашняя автоматизация, какая есть в доме (я очень осторожно отношусь к популярному термину «умный дом» — поэтому называю это «автоматизация»), и которой это надо, периодически получала точное время и дату от описываемых часов, — уж они-то совершенно определённо знают точное время…
2.
Надеюсь, что не ошибся :)
Но если что — в скетче в шрифтах абсолютно безболезненно поправите, это минута работы :)
А вообще скорее всего придётся внедрить ручную либо автоматическую смену часового пояса. Поговаривают о возвращении перевода часов, причём в отличное от Европы время.
Часы легко переключается на любую зону, есть тут такая функция. Вход в режим установки часовой зоны — до подачи питания зажать одновременно кнопки перевода часов и минут и включить часы. После установки нужной зоны снова одновременно нажать обе кнопки или, если это удобнее, выключить питание. Часы включается с новой установленной зоной.
Автоматический перевод реализовать невозможно, я говорил об этом выше. Мало получать координаты местности. Надо ещё держать базу привязки этих координат ко всем странам на плагете и базу часовых политик каждой страны. И обе эти базы придётся поддерживать в актуальности, поскольку неизменными тут являются лишь географические координаты конкретной точки планеты, всё остальное имеет шансы изменяться. Поскольку координаты — переменная физическая, а часовая зона и политика перевода времени — переменная политическая.
Мойте от флюса. Плату ардуино, с обеих сторон, в т. ч. и, если запаяно, возле гребёнки. И пайку на кнопках, тоже. Ну, это подразумевается, что монтаж правильный и аккуратный, без соплёй и распушившихся проводов.
Режим установки зоны включается, когда оба пина притянуты к земле. Это могут делать только немытые контакты или неисправные кнопки. Ну, или, кнопки взяты нормально замкнутые, тоже быаает.
Грязи нет. Укорачивание проводов даёт эффект, но не 100%. Может в коде задержку небольшую поставить? И ещё нужна помощь: имею 3" индикаторы. Мощности выхода 595ой не хватает. Поставил ULN2003 и получил негатив. Что нужно изменить в коде?
, хотя это шаманство: процедура установки таймзоны вызывается строго когда оба входа притянуты к земле, ведь внутренние подтягивающие резисторы включены выше… Возможно, поможет…
2. Из негатива получить правильное свечение очень просто. Поправьте шрифт.
В таблице
byte font[23]
в каждом из двадцати трёх значений, перечисленных через запятую, вам надо поменять после 0b все нули на единицы и единицы на нули.
Например первое значение 0b11000000 поменяется на 0b00111111, второе вместо 0b11111001 заменится на 0b00000110 и так далее. Для контроля: после 0b в каждом числе должно быть всегда восемь цифр. Последнее 0xff заменится на 0x00, или, попросту, на ноль.
Писать долго, а поправить, на самом деле, весьма быстро.
Любую интересующую переменную можно отправлять в serial-port. И во время боевой работы ардуины смотреть, что она в этот порт выплёвывает.
В самом начале секции setup(), первой же строчкой, проинициализируйте сериал-порт.
Serial.begin(9600);
Собственно, 9600 — это так скорость, с которой потом будете читать из терминала.
В нужной точке кода нужную переменную отправляем в порт.
Serial.println(TempPresent);
Собственно, для начала, я бы эту строчку вписал в самый конец процедуры Screen(), сразу перед закрывающей фигурной скобкой этой процедуры. Т.е. следующей строчкой после NeedToShowScreen = false;
Заливаете скетч и запускаете в работу ардуину. И в своей IDE открываете «Инструменты/Монитор порта». И смотрите, что ардуина вам пишет. Циклически, с каждым вызовом процедуры Screen, в порт будет прилетать значение интересующей вас переменной.
В настройках монитора порта (в самом низу окна) скорость должна быть такой же, какую вы проинициализировали в начале скетча ардуины. В данном случае 9600.
1. Пины под кнопки не переназначали? Как и было изначально, 4-й и 8-й?
2. В скетче, в сетапе, INTUT_PULLUP не заменяли на INPUT?
Так почитайте из порта, что на тех пинах в реальности творится, я методику вам выше описал.
Можно даже специально новый простенький скетч написать и влить именно в эту ардуину, чтобы посмотреть. Какие состояния пинов в порту видете?
То ли у вас внутренние подтягивающие резисторы не работают, то ли по пути всё как-то садится на землю. Мультиметром потенциал на этих пинах мерили при нажатой и отпущенной кнопке? Каков результат?
Ищите проблему, фантастики быть не может, ни у кого из повторивших такой проблемы нет, да и неоткуда ей взяться, и ёмкость не при чём: там постоянный TTL уровень, пин либо подтянут резистором к плюсу, либо кнопкой прижат к земле.
Про показ температуры без датчика не сказали. Удалось исправить? Резистор между пином 6 и пином A0 не забыли поставить?
Часы меня заинтересовали, собрал, дисплей у меня собственный, шрифты пришлось инвертировать, как здесь описано. Почему-то термодатчик часто выдаёт 85 градусов. Перекинул его питание на +5, стало всегда правильно. Очень не хватает гашения нуля десятков часов. )
Такое впечатление, что ничего делать не надо, и так заработает.
Сейчас добыл neo-m8n, подключил к usb-ttl. В u-центре всё вижу, он точно так же работает на 9600. Ну, можно ему скорость выдачи поменять, с одного герца побыстрее, но не думаю, что для точного времени в часах это хоть сколько-нибудь важно.
Вечером подключу к ардуине и запущу пробный тест, тогда скажу наверняка. Но уже сейчас складывается впечатление, что ничего менять не надо, не вижу причин, чтобы оно не заработало «из коробки».
не вижу причин, чтобы оно не заработало «из коробки».
Нет, таки пришлось «допиливать» библиотеку. Она ничего не знала про идентификатор источника «ГЛОНАСС+GPS», поскольку не обновлялась уже 6 лет.
Поэтому, конечно, виснуть — не висла, но RMC-строки от NEO-8 отплёвывала, т.е. из потока данных от модуля полезного для себя не находила ничего.
Что надо сделать.
1. Зайти в папку с утановленной библиотекой TinyGPS
2. Открыть любым текстовым редактором файл «TinyGPS.cpp».
3. Найти строки (это в самом начале файла)
5. Всё. После этого библиотека будет внимать потоку с NEO-8, можно заливать скетч.
Я только что проверил со скетчем часов, время подхватывается безо всяких проблем.
Ну, или другой путь: Взять u-center и сконфигурировать модуль так, чтобы он был не ГЛОНАСС+GPS (то, что по умолчанию при покупке), а чисто GPS. Тогда библиотека его опознает без модификаций. Но, честно говоря, в таком пути логичности я не вижу: это отнять у модуля половину его функциональности. Но, если надо, можно и так. Уроков по работе с u-center в интернете полно.
была также проблема с кнопками, после подачи питания часы попадают в режим установки часового пояса, это решилось подтяжкой кнопок через 10K к +5V, возможно это проблема китайской ардуинки
Так я и говорил об этом. Тут совсем мало вариантов: либо внутренняя подтяжка не работает, либо по пути где-то на землю садится. Low на обоих пинах — факт. Возможно, действительно, китайцы, паяя ардуину, поставили Мегу с уже отгоровшими внутренними резисторами, бывает, чо…
Нет, не так. Если они не получают сигнал со спутника, то они идут автономно от DS3231.
А вот «странное» время они начинают показывать в зоне неуверенного приёма. Т.е. это не проблема часов, а проблема GPS-приёмника, который в зоне неуверенного приёма отдаёт странные значения для синхронизации. Программно это, конечно же отсекается, но крайне редко, всё-таки что-то пролетает. Меняйте положение антенны. И, да, делать с этим ничего не надо: если приёмник получит сигнал от спутника, то с первой же синхронизацией время станет правильным.
У меня такое было несколько раз с одними часами (эксплуатируются полтора года). Время сбивалось, но в течение получаса-часа всегда само собой вставало правильно. Вторые часы (эксплуатируются полгода) живут спокойно, ещё ни разу не сбились. Либо модуль с антенной попался другой, либо в этом месте сигнал получше).
В вашем случае могу посоветовать оценить качество приёма по встроенному в GPS-модуль светодиоду, причём именно в выбранном месте для часов. Если он мигает с секундным интервалом, то делать ничего не надо, приём всё-таки работает и часы синхронизуются. Если мигания нет, то надо думать об улучшении приёма. Либо менять место, либо антенну.
Если без переделки, то сейчас с этим на Али совсем туго. На Ебее нашёл вот такие, но они мельче по размеру. С Али можно взять две вот такие платы, установив между ними светодиоды, но это, опять-таки, полдюйма высота символа, — они маленькие.
Собственно, проще, (да и дешевле) сделать самому: возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета, какими захотите, — выше в комментариях есть повторившие. Вы даже не привязаны к общему аноду или катоду: про переделку шрифта в инверс выше уже тоже всё написано.
Ну, либо переделывать скетч под тот экран, какой захотите в принципе; в смысле, вообще любой. Собственно, надо будет переписать под свои нужды лишь процедуру Screen(). Я, например, повторял эту конструкцию под ws2812b, нарезанную сегментами и наклеенную на подложку, по типу вот такого, но ведь и это не предел, тут всё ограничено вашей фантазией.
Увы, теперь уже нет: часы отданы в эксплуатацию. Всё, что осталось — опубликовано в тексте обзора. Да там всё очевидно: индикаторы с общим анодом. На эти аноды подаётся своё питание, на 16-е ноги самих HC595 — своё, (т.е.пять вольт). Катоды индикаторов — на выходы сдвиговых регистров. Привязку сегментов к выходам я выше нарисовал. Для понимания, вот что я имею в виду. Тут немного про другое, но иллюстрирует наглядно: питание сегментов и сдвиговых регистров раздельное, я об этом в тексте и писал.
и общую плату со всеми подключенными модулями?
Ммм. А это-то вам зачем, если не секрет? Это просто листовая пластина, к которой прикручены четыре модуля-индикатора. Всё остальное просто размещено в корпусе: антенна GPS на верхней плоскости, фотосенсор и кнопки на боковой… Там секрета абсолютно нет никакого.
Вывод SСL чипа DS3231 — к пину A5 ардуины.
Вывод SDA чипа DS3231 — к пину A4 ардуины.
Выводы GND и VDD — соовтетсвенно к земле и питанию ардуины.
Если берёте не модуль DS3231, а голый чип, то ему обеспечиваете обвязку с батарейным питанием согласно аппноту. В китайском модуле всё уже сделано за вас, вышеуказанных четырёх линий достаточно.
Смотрите, ответ будет на две половины вопроса.
1. Для работы без датчика температуры ничего корректировать не надо. Если алгоритм этот датчик не увидит в исправном и работающем виде, то экран с температурой просто не будет никогда показываться. На работу алгоритма отсутсвие датчика никак не влияет, вполне штатный режим. Зато если когда-нибудь решитесь его подключить, то часы заработают сами по себе с полным функционалом.
2. Pro mini, согласен, программировать — это нужен переходник. А почему не хотите взять Arduino Nano V3, это полтора-два доллара, но программируются через обычные miniUSB (или microUSB, зависит от исполнения у продавца). Ничего в исходнике абсолютно переделывать не надо, все выводы, все сигналы совпадают абсолютно. Программируются в том же софте и на том же языке. Не пойдёт этот проект — используете ардуину под какой-то другой… Перепрошивать можно очень-очень много раз.
Именно так, как показано на схеме.
От подключения линий ввода: десятки часов, единицы часов, десятки минут, единицы минут (они самые дальние от ввода).
Вы писали мне:
Собственно, проще, (да и дешевле) сделать самому: возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета, какими захотите, — выше в комментариях есть повторившие. Вы даже не привязаны к общему аноду или катоду: про переделку шрифта в инверс выше уже тоже всё написано.
Так как правильно подключить четыре сдвиговых регистра 74HC595 со светодиодными сборками к вашему устройству?
Наверное это тоже, что представил на схемах olegmacovod, но он давно не отвечает.
Наверное это тоже, что представил на схемах olegmacovod
А чем вас не устраивают его схемы?
По-моему, всё вполне очевидно. Откройте в поисковике примеры включения 74HC595, думаю, именно к тому же самому вы и придёте. В той или иной вариации.
Различие в двух его схемах — только в наличие умощняющих ключей. Определять, какую из двух схем выбрать, нужно исключительно исходя из того, какие индикаторы у вас будут применяться. Если сегменты вашего индикатора светятся с достаточной интенсивностью от трёх вольт, то можно выбрать более простую схему с питанием сегментов непосредственно от ног микросхем. Если же падение на сегментах выше, то без применения ключей не обойтись.
но он давно не отвечает.
Вполне отвечает :)
Да, собственно, что тут отвечать. На мой взгляд, он всё достаточно полно осветил в этой ветке комментов…
Нет. Не видел необходимости. Но, главная причина — дизайнерско-визуальная. Я не могу придумать, как эффектно и красиво показать две температуры, имея лишь четыре семисегментника. Всё, что приходит на ум, будет выглядеть коряво или неудобно.
Ни с аппаратной, ни с программной точки зрения проблем нет. Алгоритм позволяет обрабатывать и показывать все темпервтуры, от –55°C до +125°C. Желающие без проблем доделают, при необходимости; ведь исхдник доступен…
Понижающий мини DC-DC преобразователь, который вы указывали в статье, очень сильно греется (используются микросхемы 74HC595 и дюймовые индикаторы), так и должно быть? Можно ли использовать зарядное устройство для сотового телефона на 5 вольт?
Мне попадались модули, которые греются очень сильно, попадались и те, которые в таких же условиях грелись терпимо. С чем связано — я не знаю.
Для питания пятивольтовой части схемы конечно же можно (а для случая, если в конструкции требуется только одно напряжение, то даже и логично) использовать пятивольтовую зарядку.
Э… м-м-м. Простите… Вы троллите или шутите? :)
1. Подключить к переходнику UART-TTL и почитать из Com-порта, что он возвращает.
2. Подключить к переходнику UART-TTL и запустить uCenter с чтением из этого порта
3. Подключить к ардуине, влить в неё пример из библиотеки TinyGPS и почитать в мониторе порта.
1. Отключаете модуль RTC.
2. Часы при подаче питания начинают время с 00:00. Двоеточие будет мигать неравномерно. Но часы будут идти.
3. Ждёте минут 15. Или меньше (если уверенный приём, то хватит и минуты). Если время само установилось и стало нормальным, то всё работает.
4. Возвращаете RTC.
Светодиод на самом модуле мигает с секундным интервалом, если модуль видит спутники.
Больше месяца работают часы, показания постоянно на 20 секунд опережают точное время (согласно сигналам точного времени). Это так и должно быть?
Можно вкратце написать, как происходит синхронизация времени и где находится это время, синхронизируются секунды или минуты?
показания постоянно на 20 секунд опережают точное время
Это опережение накапливается или оно фиксированное сразу после включения?
GPS модуль поймал спутники? Что сам GPS-модуль выдаёт в порт? Сможете прислать кусок сырого потока с модуля типа вот такого?
Это так и должно быть?
Нет, конечно, это ненормально. Время должно быть точным.
Можно вкратце написать, как происходит синхронизация времени и где находится это время, синхронизируются секунды или минуты?
Я отвечал на аналогичный вопрос ниже, посмотрите, пожалуйста. Боюсь, что полнее я уже не смогу ответить :)
Это опережение не накапливается, по всей видимости оно фиксированное.
Не могу сказать, поймал ли GPS модуль спутники, но светодиод на плате модуля мигает.
В какой порт GPS-модуль что-то выдаёт?
Что нужно сделать, чтобы получить кусок сырого потока с модуля типа того, что Вы представили?
Вам вот сюда. :)
Прямо от первого до последнего слова это относится к вам.
Правьте библиотеку, заливайте скетч заново, проверяйте.
Всё должно решиться.
У меня к Вам предложение по второму датчику температуры. Сделать датчик на другие контакты также с подачей питания только во время измерения. Его показания следуют на индикаторе за показаниями первого датчика, но при этом горит ещё нижний сегмент индикатора, который показывает градус, чтобы не путать их. Я в программировании ни бум-бум, поэтому это только необязательная просьба. И ещё, как увеличить время индикации температуры?
Время индикации температуры управляется переменной MaxScreenTimer. И это есть в комментариях в скетче. Это значение показывает, с какой полусекунды от начала минуты надо показывать температуру. При текущем значении температура показывается каждые три секунды ежеминутно. Если хотите, чтобы температура показывалась 10 секунд, установите значение 100. Хотите по половине минуты время и температуру — установите 60.
По второй половине вопроса я как-то уже отвечал… Скажу честно. Сейчас у меня нет необходимости и ресурсов заниматься вторым датчиком. Из ресурсов для этого надо иметь разобранные часы на столе, физически второй датчик и кучу свободного времени. Ну и «заочно» такие вещи, конечно, не пишутся; всё-таки надо иметь реальное железо на столе.
Но вместо рыбы могу дать удочку :) В принципе, ничего принципиально нового в скетче не допишется, да он усложниться в объёме, но не алгоритмически. Питайте второй датчик от той же шестой ноги, только не забудьте: со своим подтягивающим резистором. Заводите в свободный пин данные, допустим в A1. В кейсе порционного опроса допишите чтение второго скретчпада, расчёт второго CRC и вычисление второй температуры: время там для этого есть, там половину шагов оно спит. Чуть больше трудностей будет с выводом ещё одного экрана со второй температурой, но и это вполне посильно. Остаётся в шрифтах нарисовать ещё один символ и чуть усложнить механизм смены экранов. И задача решена.
Собственно, проще, (да и дешевле) сделать самому: возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета
За отсутствием в продаже крупных готовых модулей, мне предстоит именно такой путь.
Регистры на али в ассортименте, и крупные индикаторы тоже встречаются.
Но, судя по фоткам примененных в проекте модулей индикаторов, или вот этих, там в обвязках присутствуют резисторы и, вроде, конденсаторы.
Можно меня носом ткнуть в необходимую схему обвязки, или все же можно все напрямую соединять по указанной выше схеме?
Или есть еще вариант упростить изготовление обвязки: на модулях сдуть мелкие индикаторы и припаять отдельно купленные крупные индикаторы (1,8"). Вот только потянут ли модули в плане нагрузки?
Вторая схема — это как раз то, о чём вы говорите.
Уверен, что то, что вы привели по ссылке на маленькие модули с Али — это как раз вторая схема; там вариантов особенно быть не может. Ну отдельные резисторы только собраны в резисторные сборки.
Первая схема отличается от второй только наличием умощняющих ключей. Определять, какую из двух схем выбрать, нужно исключительно исходя из того, какие индикаторы у вас будут применяться. Если сегменты вашего индикатора светятся с достаточной интенсивностью от трёх вольт, то можно выбрать более простую схему с питанием сегментов непосредственно от ног микросхем. В этом случае прокатит и сдувание+замена.
Если же падение на сегментах выше, то без применения ключей не обойтись. Т.е. тут надо отталкиваться не столько от токов нагрузки на регистры, сколько от падения на сегментах конкретно вашего индикатора. Да и токи-то у конкретного индикатора и померить можно, невелика проблема.
Если с транзисторами нет желания возиться, а умощение всё-таки нужно, (наверное, самый правильный вариант), то я бы вторую схему чуть модифицировал, введя в неё ключи ULN2003A.
на +5V индикаторов, т.е. на общий анод, часы питаются целиком от пяти вольт, и USB порта компьютера вполне достаточно. Реально там конечно меньше пяти получится, +5 приходит на вход узла приглушения яркости
Доброго времени суток.
Очень хорошие часы.
Хотел сделать, но не очень силён в Arduino. IDE выдаёт ошибки «неверная библиотека» и «нет заголовочных файлов (.h)», хотя они все лежат в libraries.
Может быть не ту версию Arduino IDE выбрал, хотя пробовал несколько 1.6.5, 1.8.5, 1.8.9.
Если не секрет, подскажите Вы с какой версией IDE работаете?
Или я что то нето делаю?
Попытаться найти версию IDE и libraries выпуска того года, когда скетч писал автор.
Спасибо, Вам, за оперативный ответ.
Установил рекомендованную, Вами, версию 1.8.3:
— компилируется без ошибок;
— библиотеки <TimeLib.h> и <Bounce.h> в скетче подсвечены не ярко красным цветом,
а бледно-красным, думаю, что библиотеки установлены неверно т. к. при загрузке
библиотек была ошибка, попробую их переустановить;
— если я не прав, пожалуйста подскажите.
Спасибо.
Есои скомпилировалось без ошибок, то делать ничего не надо :-)
Я говорил про цвет не в окне скетча, а в окне компилятора, он ниже, там белым на чёрном фоне. Если там нет красного/оранжевого, то всё в порядке.
Извините, от радости, что скетч компилируется, написал нето, что просили.
При компиляции ошибок нет:
— белым шрифтом на чёрном фоне пишет о количестве занятой памяти.
При загрузке в плату появляются ошибки:
— «Проблема при загрузке в плату». это высвечивается красным цветом после
счёта от 1-го до 10-ти.
Бегущей дорожки из знаков # # # # # нет.
Да, всё именно так, как Вы говорите.
Буду всё перепроверять на работоспособность по отдельности:
— порт СОМ 3;
— преобразователь интерфейса СН 340;
— плату Arduino Pro Mini.
Попробую залить скетч без периферии. Если получится буду подключать GPS, время и т.д… Или нельзя бед периферии заливать, как Вы считаете?
Здравствуйте, Dimon_, результатом ошибки «Проблема при загрузке в плату»
был СОМ3. После переустановки конвертера СН340 в СОМ5 скетч стал заливаться за 13 секунд. Причину отказа СОМ3 не выяснил.
Для движения дальше нужна Ваша консультация.
LED индикаторы, рекомендованные автором, DC/DC преобразователи и фотосенсор пока не приобрёл.
В наличии есть 7- <-->сегментный четырёхразрядный последовательный дисплей СОМ-11442 с SPI последовательным входом (библиотеки «SPI» и «SoftwareSerial» в скетче имеются.
Подключаю Дисплей <--> Ардуино:
— SS <--> pin 10;
— SDI <--> pin 11;
— SCK <--> pin 13;
— SDO не подключен;
— VCC <--> VCC;
— GND <--> GND.
Индикации нет никакой.
Как Вы считаете: в СОМ-11442 необходимо отдельный скетч заливать или он должен работать от библиотек Ардуино?
Dimon_, с дисплеем СОМ-11442 я вышел за рамки проекта определённого автором идеи, поэтому если Вам мои отступления не интересны на мои сторонние вопросы можете не отвечать.
Заранее благодарен.
Как Вы считаете: в СОМ-11442 необходимо отдельный скетч заливать или он должен работать от библиотек Ардуино?
К сожалению, у меня нет физически этого индикатора. Поэтому я не могу с ним поэкспериментировать, чтобы понять, как им надо управлять. Но, собственно, вот с этого места у вас и начинается не «повторение чьего-то стороннего», а настоящий DIY, как оно есть :)
Берите скетч из обзора и модифицируйте его под свой индикатор.
Дорогу покажу.
В мета-смысле, вам надо изменять только процедуру Screen().
Эта процедура, несмотря на свою громоздкость, по сути делает одно: значения системных переменных hour() и minute() (а раз в минуту ещё и переменной CurrentTemp) переводит в сигналы визуализирующего устройства. И всё. Т.е. весь остальной скетч ничего не знает о том, какое у вас визуализирующее устройство; скетчу это по барабану.
Визуализирующим устройством может быть любой семисегментный дисплей (комментарии выше это показывают), куски светодиодной ленты метровой длины, наклеенные на лист картона, моторы с чернильной ручкой, клапаны водопроводной магистрали и всё, что угодно. Просто в процедуре Screen() опишите выходному экрану понятным ему протоколом, что ему надо делать.
Нет ничего удивительного, что даже правильно (в электрическом смысле) подключив своё устройство с интерфейсом SPI, вы ничего не увидели: процедура Screen() не знает, что именно надо пулять в порт SPI для вашего дисплея. Эта процедура посылает сигналы для другого типа дисплея. Просто исправьте её под своё устройство и дисплей заработает. Обычно для этого даются примеры, чтобы можно было подсмотреть, как и что требуется конкретному устройству.
Сожалею, но теоретически — это всё, чем я могу помочь. Большее сможет сделать только тот, у кого есть такая железка на столе…
PS: Вот уже год работает версия этого скетча, с модифицированной процедурой Screen() под дисплей из ленты ws2812b. За исключением содержимого этой процедуры ничего другого в скетче почти не поменялось. Ну, только от светодиодного двоеточия я отказался, да от модуля приглушения яркости: в самой светодиодной ленте всё это есть от рождения, бессмысленно это делать внешними радиодеталями…
Уважаемый, Dimon_, спасибо Вам за уделённое внимание к проблеме подключения цифрового индикатора СОМ-11442 к Arduino.
Пока я разбирался с подключением СОМ-11442 к плате по почте прислали, рекомендованные Вами, 2х разрядные семисегментные LED индикаторы с регистрами SN74HC595N, поэтому я переключился на «проторенную дорожку»
и в настоящий момент исследую собранную конструкцию.
Прошу, Вас, помочь мне в правильности определения возможностей данных часов.
1. Вы пишите, что синхронизация со спутником происходит в течении получаса-часа, но пытаясь это проверить выяснил, что часы идут очень точно (в течении 2-х недель) от выставленного времени кнопками, с заведомо неправильным временем (на 3-4 минуты вперёд или назад).
2. Может быть схема с программным обеспечением корректирует только секунды, которые я не отслеживаю, или минуты с часами, как задумано?
3. Зелёный светодиод на GPS модуле моргает: сам модуль проверял программой u-Center (модуль видит до 5-ти спутников).
4. Блок реального времени RTS так же проверил через COM- порт: выдаёт время и температуру.
5. Датчик температуры DS18B20 работает.
6. Пока не сделал регулировку яркости индикаторов.
7. Отключая поочереди блоки RTS и GPS, пытался выяснить кто приоритетней из них, так ничего и не понял как часы синхронизируются по спутнику.
8. Отключил RTS и GPS: часы всё равно идут и довольно точно!?
В значительной доле мой ответ будет созвучен с тем, что я давал чуть выше. К сожалению, такого конструктора у меня на руках нет, поэтому я не могу повозиться с ним, чтобы понять, как и что подавать на индикаторы.
Скажу лишь, что полностью и легко ваши часы под этот проект не переделать: MEGA48 в их составе не перешьётся в полноценную ардуину. Хотя в неё можно заливать код из-под ArduinoIDE внешним программатором. Но, даже при таком раскладе, весь приведённый в статье исходник придётся хорошенько перелопатить.
Если вы настроены на переделку, логичнее порезать дорожки возле 25, 26, 27 и 28 ноги процессора и использовать от этих часов только цепочки stp08dp05 и индикаторы, оставив всю остальную их электронику мёртвым грузом. Ну, ещё отрезать дорожку от ноги 1 и использовать светодиоды двоеточия и сигналы кнопок снимать с J5.
Но, опять же, я не могу, не имея этой платы вживую, заочно написать процедуру вывода на экран под эти светодиодные драйверы. Надо гуглить библиотеки или примеры работы с stp08dp05 и, по аналогии, переписывать процедуру Screen() именно под этот экран. А саму ардуину довешивать на проводах.
Ещё один путь: перепаять на ваших часах MEGA48 на MEGA168. Эту мегу уже можно будет прошить ардуиновским загрузчиком и тогда останется только в скетче из обзора переправить названия всех пинов на соответствующие по схеме платы и, теоретически, всё заработает. Т.е. внешне плата не изменится, просто проапгрейдится по железу, и, таким образом, станет способна быть ардуиной и воспринимать заливаемые скетчи. Но процедуру Screen() всё равно придётся сочинять и переписывать под драйверы stp08dp05.
Ну… Дорогу осилит идущий. Я бы, на вашем месте, всё-таки решился на погружение во всё это.
Главное, без паники поделить большую задачу на кучу мелких шагов и постепенно их решать.
Просто этот конструктор в текущем виде бесперспективен: там за время отвечает DS1307, а это тупиковый путь: такие часы никогда не будут ходить точно. Если, вдобавок, эта плата у вас ещё и оформлена в хорошем корпусе, то переделка точно стóит свеч.
Для начала я бы перепаял (или нашёл того, кто перепаяет) на этой плате ATMEGA48 на ATMEGA168 (по выводам они абсолютно совместимы) и программатором (самодельным или копеечным китайским) влил бы в неё ардуиновский загрузчик. Вы получили бы разведённую, готовую и и настроенную плату часов с ардуиной на борту. Что уже само по себе весьма неплохо.
12345678z08 августа 2019, 09:03
0
Уважаемый, Dimon_, спасибо Вам за уделённое внимание к проблеме подключения цифрового индикатора СОМ-11442 к Arduino.
Пока я разбирался с подключением СОМ-11442 к плате по почте прислали, рекомендованные Вами, 2х разрядные семисегментные LED индикаторы с регистрами SN74HC595N, поэтому я переключился на «проторенную дорожку»
и в настоящий момент исследую собранную конструкцию.
Прошу, Вас, помочь мне в правильности определения возможностей данных часов.
1. Вы пишите, что синхронизация со спутником происходит в течении получаса-часа, но пытаясь это проверить выяснил, что часы идут очень точно (в течении 2-х недель) от выставленного времени кнопками, с заведомо неправильным временем (на 3-4 минуты вперёд или назад).
2. Может быть схема с программным обеспечением корректирует только секунды, которые я не отслеживаю, или минуты с часами, как задумано?
3. Зелёный светодиод на GPS модуле моргает: сам модуль проверял программой u-Center (модуль видит до 5-ти спутников).
4. Блок реального времени RTS так же проверил через COM- порт: выдаёт время и температуру.
5. Датчик температуры DS18B20 работает.
6. Пока не сделал регулировку яркости индикаторов.
7. Отключая поочереди блоки RTS и GPS, пытался выяснить кто приоритетней из них, так ничего и не понял как часы синхронизируются по спутнику.
8. Отключил RTS и GPS: часы всё равно идут и довольно точно!?
Прошу прощения, но я не очень понял вопрос.
Алгоритмы синхронизации прослеживаются из кода, но кратко могу и тут описать:
Со спутников время синхронизируется согласно переменной MaxTimeToSync. Например, если значение этой переменной равно 500 секунд, то время синхронизируется каждые восемь с чем-то минут, это если часы понимают, что они показывают достоверное время. Если часы понимают, что достоверность времени под вопросом (например, после сразу включения, после неудачной попытки синхронизации, при молчании GPS-модуля) попытки синхронизации предпринимаются чаще. Каждые 10 секунд. Это что касается синхронизации с GPS.
Но неудачная синхронизация с GPS — ещё не значит, что надо сбрасывать время. Часы продолжают идти. Отсчсёт осуществляется программно внутри чипа ардуины, у неё есть тактовый кварц. Дайте часам один раз синхронизоваться с GPS и, не отключая питания, заблокируйте GPS-модуль — они вполне успешно будут работать месяцами, хотя и постоянно предпринимая попытки синхронизироваться с GPS. И при первой же предоставленной возможности синхронизируются.
Системное время (вне зависимости, синхронизировалось оно со спутников или нет), синхронизируется с RTC. Если со спутников удалось получить время, часы его считают самым точным и его же вносят в RTC. Если со спутников время получить не удалось, то часы идут с тем временем, которое уже хранится в RTC.
Итого.
а) Даже если у часов нет ничего, они будут идти исключительно на программных средствах системного времени ардуины довольно точно (с точностью кварца в ардуине), просто при включении они будут начинать время с 00:00.
б) Если им дать только RTC, то они будут при включении сразу продолжать показывать то время, которое течёт в RTC.
в) Если им дать только GPS, при включении они будут начинать время с 00:00, но постоянно предпринимать поиск времени со спутников и при первой же возможности начнут показывать точное время.
г) Если им дать и GPS и RTC, то они будут получить точное время со спутников и заботиться о том, чтобы и в RTC всегда было точное время. При включении они продолжат с того времени, которое течёт в RTC и при первой же возможности обновят его с GPS.
е) Пропадание GPS или RTC в процессе работы (т.е. без потери питания) считается временным неудобством и в этот момент время отсчитывается программным системным временем ардуины, определяемым точностью её кварца.
Слои приоритета точности: если при включении часы не обнаруживают RTC, то время начинается с 00:00 и такое время считается самым недостоверным. Если установить время с кнопок, оно считается более достоверным, но всё ещё недостаточно точным. Ещё более достоверное — то время, которое получено с RTC, Время со спутника считается максимально точным.
Более точное время имеет приоритет над менее точным: более точное принимается во внимание, менее точное отбрасывается.
Вы русским языком, очень понятно, нарисовали логическую блок-схему работы программы.
К сожалению собранное мной аппаратное обеспечение с Вашим программным обеспечением работает не так как Вы описываете (в кодах я не силён, если с ним разбираться то на это полгода уйдёт).
Буду искать неисправность в «железе».
Отправная точка поиска:
1. Прошло 30 минут после подачи питания:
а) часы показывают 0:30 минут;
б) двоеточие промаргивает через 1 секунду;
в) зелёный светодиод на GPS моргает;
г) температуру показывают 21 гр.;
д) отдельно каждой кнопкой часы и минуты переводятся;
е) выставленное, до отключения питания, время не восстановилось не по RTS ни по GPS.
2. После нажатия на обе кнопки:
а) двоеточие заработало нормально мигая 1 раз в секунду;
б) зелёный светодиод на GPS моргает;
в) на RTS горит светодиод «Питание подано»;
г) часы показывают 2:17;
д) синхронизации не от RTS ни от GPS не происходит.
О результатах поиска неисправностей, в блоках или в межблочных соединениях,
Вам напишу или буду вновь у Вас просить консультации.
Dimon_, здравствуйте.
Устранил плохой контакт в разъёме RTS (облудил побольше ножки разъёма).
От RTS часы стали работать так как Вы пишите: помнят текущее время после снятия питания.
Осталось исследовать GPS.
Из описанных Вами приоритетов синхронизации (вероятно без детального исследования ПО, а я в этом не силён) всё равно не понятно, что должен синхронизировать блок GPS: часы, минуты или секунды, если да, то в каких пределах ведётся захват неточности хода и приведение его к полученной информации от GPS.
Отображение несинхронизированного неточного времени на дисплее визуально отличается от точного синхронизированного времени, если такая ситуация возникнет.
Когда у вашей конструкции не было ни RTC из-за плохого контакта, ни GPS, они визуально показывали, что время явно неточное. Это я про описываемое вами странное поведение двоеточия. Первое же нажатие на кнопку считалось фактом ручной установки времени. Поскольку сравнить его не с чем, часы принимали его как условно точное. И двоеточие начинало мигать в правильном режиме.
Теперь у ваших часов есть RTC. И они уже с момента включения должны мигать правильно.
Но у них нет GPS. Могу предположить две версии. Первая и самая очевидная: перепутаны линии Rx и Tx, идущие к GPS-модулю. Поменяйте местами провода, идущие к пинам 7 и 9. И подождите несколько минут, при условии, что на GPS мигает светодиод.
Если это не помогло, то есть другая версия. Для её проверки пришлите сюда, пожалуста, пару десятков строк сырого потока с модуля. Вы же подключали его к uCenter, там есть для этого окно.
Dimon_, здравствуйте.
При изменении линий Rx и Tx, идущие к GPS-модулю, при условии, что на GPS мигает светодиод: положительных результатов не получил.
Единственное, что изменилось это осциллограммы:
— при штатном включении на Тх импульсы с частотой 1 Гц и высокочастотным
заполнением амплитудой 3 В (частоту замерить не смог: меняется);
— на Rx = 4,3 В.
До Arduino эти сигналы доходят.
При замене линий Rx и Tx:
— Тх = 4,3 В и заполнено ВЧ с амплитудой 0,3 В (т.е на уровне пульсаций питающего
напряжения).
— Rx= 3,5 В (упало на 1 В) без частоты.
С роликом в u-Center что то не заладилось поэтому высылаю скриншоты двух програм u-Center и Terminal COM порта.
И скриншоты не могу прикрепить: ошибка #1003.
Может быть почту свою дадите и на неё вышлю.
Не надо роликов и скриншотов. Просто пришлите сюда, прямо скопипастив текстом, немного строк (десятка полтора-два) из текстовой консоли uCenter. Типа вот такого. Интересен тот промежуток, когда на модуле уверенно мигает светодиод. Надо понять, что модуль выдаёт в RMC-последовательностях.
У-у-уу… :)
Всё у вас было правильно распаяно по контактам 9 и 7. Возвращайте правильное подключение, если меняли пины местами.
Что ж вы сразу-то не сказали, что у вас модуль не чисто GPS, а GPS+ГЛОНАСС? :) Ну да ладно, точнее будет итог. Выше я уже рассказывал, как решить эту ситуацию. Вот прямо от первого до последнего слова это относится к вам. Правьте библиотеку, заливайте скетч заново, проверяйте. Всё должно решиться.
Всё синхронизируется.
Причём синхронизация происходит нас только быстро, что я не успеваю отследить
характерное промаргивание двоеточия.
Попробую отследить синхронизацию с маленькой антенной, может быть так успею
отследить, а если нет то и не надо лишь бы часики шли верно.
Спасибо.
Буду доделывать регулировку яркости и не до конца доделал LED индикацию с высотой знака 1,8 ".
Если опять забуксую Буду Вам писать.
Здравствуйте, Dimon_.
Часы прекрасно работали с большими индикаторами.
Устранил инверсию цифр и доработал библиотеку TegGPS.cpp согласно Ваших рекомендаций.
Точно не помню: 2 — 2,5 месяца назад часы перестали синхронизироваться по GPS?
После замены блоков Arduino и GPS на новые синхронизация не восстановилась.
Доработанную библиотеку TegGPS.cpp вернул наместо то есть ГЛОНАС + GPS и опять всё заработало!?
Что могло это быть я не понял, может быть Вы объясните.
Заранее благодарен.
Что могло это быть я не понял, может быть Вы объяснит
Ничего не понял из реплкики. Особенно с обилием вопросительных знаков.
Что я должен объяснить?
Честно говоря, совершенно нет времени всем этим заниматься…
Модуль GPS отвечает? Что видите в сыром потоке?
Вот вам отправлная точка: вместо скетча часов временно влейте из стандарных примеров к библиотеке TinyGPS простенький скетчик, который читает в softwareserial данные из модуля GPS и отправляет в serial, посмотрите, от модуля в пины 7 и 9 вообще поток идёт и что конкретно в этом потоке.
пришли индикаторы, начал с «мозгов» проекта, а тут, бац, при компиляции выдаются ошибки: d:\temp\arduino_modified_sketch_318618\sketch_jan08a.ino: In function 'void Synctime()':
sketch_jan08a:266: error: 'gps' was not declared in this scope
gps.f_get_position(&flat, &flon, &GPSage);
d:\temp\arduino_modified_sketch_318618\sketch_jan08a.ino: In function 'void loop()':
sketch_jan08a:357: error: 'gps' was not declared in this scope
if (gps.encode(GPSchar)) newData = true;}
sketch_jan08a:360: error: 'gps' was not declared in this scope
gps.f_get_position(&flat, &flon, &GPSage);
перепробовал иде 1.8.2, 1.8.3, 1.8.10
платформио тоже ругается в этих же № строк на идентификатор 'gps'
народ, код точно рабочий? или что-то поправить надо?
победил таки.
далее для тех чайников, кто столкнется с этой же проблемой:
скетч из скачанного архива компилируется без ошибок. я же копировал код с этой страницы — при компиляции выдаются ошибки. не знаю в чем причина — или код немного разный, или при копи-пасте где-то теряется форматирование. имейте ввиду
Ds3231 подключен. Выяснилось, что проблема в какой то китайской Ардуине. Построенной на китайском чипе. Когда прошил Ардуино pro mini, где стоит Атмел микросхема все стало работать отлично!
И ещё вопрос. При проверке на стойкость к отключениям обнаружилось, что при выключении питания и последующем включении через 5 минут, часы не стартуют. На индикаторе светятся 8- Ки. Нажатие на кнопку сброс на Ардуино даёт старт. Что можно сделать, что бы автоматически включались часы?
Здравствуйте!
Примененные Вами индикаторы с общим анодом или с общим катодом?
Как происходит управление разрядами индикаторов? Можете разрисовать эту часть схемы более подробно?
Информация необходима для повторения конструкции на самодельных семисегментных индикаторах большого размера…
Здравствуйте.
По пунктам.
1. Как я уже писал выше, часы давно сданы в эксплуатацию, доступа к ним я уже не имею, но работают они у владельцев до сих пор. Поэтому вскрыть и разрисовать схему конкретно тех модулей я не смогу при всём желании. Всё что повторялось, как мной (я повторял эту конструкцию на лентах), так и многочисленными пользователями, делалось на самодельных индикаторах.Уверен, что и у вас всё получится.
2. Для данных часов абсолютно непринципиально, общий катод или анод будет у индикаторов. Первоначально в проекте применялся общий анод, именно под это текущий исходник. Если же ваша конструкция будет с общим катодом, всего-навсего в исходнике проинвертируйте шрифт собственными силами, это несложно, я выше рассказывал (п.2).
2. Управление разрядами очевидно из логики работы сдвиговых регистров. Возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета, какими захотите.
Допустим, у вас индикаторы с общим анодом. На эти аноды подаётся своё положительное питание (если будете менять ночную яркость), на 16-е ноги самих HC595 — своё, (т.е.стабильные пять вольт). Катоды индикаторов — на выходы сдвиговых регистров, напрямую или через ключи. Привязку сегментов к выходам я приводил.
3. Выше пользователь olegmacovodпривёл две схемы, отличающиеся тем, что первая с умощнением транзисторами для сегментов на 6 вольт, а вторая — для сегментов на 3 вольта. Помимо наличия ключей, схемы ничем не отличаются. Чуть ниже он привёл фотку готовых часов по этой схеме. У него, как видно из схемы, тоже был общий анод.
Подключен по RJ45 к роутеру, грузится сразу в стендбай, яркость единожды отрегулирована на комфортную из меню.
Дисплей приятного зелёного цвета размером 65 х 40мм, день недели и дата в комплекте, шрифты и языки тоже легко меняются на нужные.
Из недостатков — долгое время загрузки линукса при пропадании электричества.
:)
Я не критикую. Но для себя бы делал без записи в постоянную память. Ведь если питание пропадёт на пару часов, то и время будет соответствующее. Да, я понимаю, что только лишь до следующей синхронизации. Но меня бы просто съедала постоянная мысль о том, что часы в данный момент могут лгать и надо их проверить.
Уж лучше бы они показывали просто нули до следующей синхронизации.
И снова, понимаю, Вы ответите, что это легко настраивается в коде. Не навязываю. Просто высказал свое мнение.
Не стал усложнять конструкцию, — это единственный повод. И RTC надо покупать, а EEPROM уже дана бесплатно. Жизнь батарейки при поданном напряжении неважна (только саморазряд), часы идут от Vcc, батарейка же расходуется только при отсутствии основного питания. Поэтому одной хватит на годы и годы.
Процедура синхронизация от источника образцового времени (у меня от GPS) после сбоя (т.е. когда часы конкретно знают, что время они показывают неточное) у меня долбится каждые 10 секунд. И горячий старт приёмника при хороших условиях — это минута, а то и меньше. Так что лгать они будут очень недолго.
Но чтобы избежать и этого периода, вполне возможно чуть доработать описанную выше конструкцию. (Вот! Об этом я и писал, начались идеи и творчество! Это и есть цель обзора!) Пины A4 и A5 свободны, подключаем DS1307 и в скетче чтение/сохранение в EEPROM заменяем на чтение/сохранение в часы реального времени. Библиотека DS1307RTC доступна, модули на Али в изобилии, чуть больше доллара с доставкой. :)
«Среднесуточная точность хода: +- 15 минут»
© прапорщик Гриша
:).
А для редкой синхронизации свою старую поделку (лет 8 валялась) ethernet-модуль на PIC18F258 использовал. Раз в месяц на сервере скрипт срабатывает и посылает UDP пакет с текущим временем часам.
1 герц, конечно, не нужно (оно и так 1 герц), но попробую реализовать в скважности мигания двоеточия, по характеру мигания пользователю будет понятно.
третий модуль семисегментника ставится вверх ногами. двоеточие готово без вставки дополнительных элементов ;)
Мне визуально не нравится.
Потому что такое «псевдо-двоеточие» будет очень длинным — точки будут на верхней и нижней границе высоты символов, это некрасиво. А то и ещё шире: выше и ниже границ символов, такое бывает.
В реальном же знаке двоеточия точки должны быть ближе к горизонтальной центральной оси табло.
И индикаторы тогда придётся ставить вплотную, и даже в этом случае точки этого «двоеточия» не встанут на одну линию. А красиво — это чтобы группы часов и минут были раздвинуты для знака двоеточия.
Я не поленился и нарисовал в векторе. Сравните, какой вариант зрительно красивее:
А вот еще мне режет глаз 62 минуты на картинке. )))
за труды в рисовании и обзор большое спасибо :)
Скетч и схемку сохранил, подвернутся хорошие индикаторы — займусь.
имелось ввиду, что все отображаемые символы (4 цифры и 2 точки) мигают как обычно мигает разделитель.
так в свое время делали многие устройства, включая «Электронику».
но там это нужно было в том числе для привлечения внимания пользователя с целью установки верного времени.
От «высокого» питания делаем резистивный делитель на пин с АЦП. (Выставляем максимальное для АЦП значение). И при снижении напряжения на этом «контролирующем» пине на 20% — резко сохраняем все в eeprom (поскольку это падение говорит о том, что напряжение на входе снижается, т.е. пропадает). А в остальное время — не трогаем ту eeprom-ку.
Смотрите. Время записи в EEPROM — 5-9 ms.
Время процесса разряда сглаживающих конденсаторов источника питания, конечно, невозможно сказать точно (зависит от ёмкости и потребляемого девайсом тока), но очевидно, что это лавинообразный экспоненциальный процесс. Не думаю, что сильно ошибусь, если назову период в 20-400 ms. В любом случае, снижение напряжения на 20% — это уже почти завершённый процесс, процентов 70-80 уже закончено, остаток напряжения свалится довольно быстро. В таких условиях время записи может ещё увеличиться, если оно вообще на таком запасе энергии способно успешно закончиться. А микроконтроллер ещё должен успеть понять, что напряжение падает и успеть принять решение к записи.
Так что, боюсь, не для этого случая. А вот в батарейном питании — да.
Это, разумеется, чисто теоретическое измышление, в данном случае переделывать не предлагаю и сам смысла не вижу. Ну и раз уж оставил коммент, то спасибо за обзор, всегда интересно почитать про самоделки. Результат понравился. Я вот свои часы, чтобы с синхронизацией, так и не собрался сделать, после прочтения опять задумался, что все-таки надо бы сделать :)
зачем ограничивать себя двумя?
mySKU.me/blog/china-stores/31213.html
В общем и целом, да, отдаст.
Нагревается, но всё в пределах ожидаемого.
Лет 6 назад собрал на Атмеге 8 часики, с нормальным кварцем за месяц убегают секунд на 30. Куча режимов и видов индикации, два термодатчика d18b20 улица-дом, наборное поле из 3мм светодиодов (225 штук). 155 на индикации-пятница, 15 число. Очень доволен часами. Тоже подумываю собрать с GPS на кухню, там от окошка не далеко. Спасибо за интересную схему.
По цене около 90 центов за штуку.
Там же есть и большего размера.
Руки из нужного места — это плюс! Но минусов в этой идее и реализации столько, что доверять показаниям таких часов я бы не рискнул. Весьма слабое место — метод синхронизации. Ладно еще, если окна на юг, да и то на подоконнике. А периодические запись и восстановление времени из EEPROM при пропадании питания — это, извините, уж вообще ни в какие ворота!
EEPROM штука с ограниченным ресурсом и при частой перезаписи долго не протянет. А при редкой записи смысл ТОЧНОЕ ВРЕМЯ при сбое питания вообще теряется. Вы хотя бы добавьте светодиод, который горит/тухнет, если очередной сеанс синхронизации был успешным/неуспешным (и/или был сбой питания). Но, думаю, всю концепцию надо пересмотреть и все-таки DS3231 использовать.
В своем проекте я пошел другим путем. У меня используется DS3231, но ежесекундно в ардуине идет корректировка показаний из-за накапливаемой погрешности. Точная установка производится вручную по мере накопления ошибки, после этого автоматически расчитывается новый корректировочный коэффициент, в связи с чем точность хода увеличивается на порядок при каждой ручной установке времени. Так, весной я запустил часы и через месяц (они убежали примерно на 2 секунды) снова выставил точное время. На сегодня (15 декабря) разбежка 1 секунда. В следующем году, когда она достигнет 2-х секунд, снова выставлю точное время. Ну а следующей корректировки, думаю уже не будет (по крайней мере при моей жизни). Часы получились полностью автономными и не зависят от внешних источников синхронизации вообще.
Не стану спорить, но подискутировать — с удовольствием.
У меня окна не на юг. Часы в глубине комнаты примерно на метр от окна. Окно с внутренним напылением в стеклопакете. Современные приёмники весьма неплохо научились принимать GPS, поверьте. Ведь у каждого есть мобильник или планшет. И текущую позицию приложение с картами показывает, в общем и целом, в любой точке комнаты. А тут и триангуляция с нескольких спутников не нужна, достаточно только времени. Почему же вы считаете такую синхронизацию слабым местом? Время с GPS в общем случае точнее NTP, поскольку там ещё время жизни пакетов есть, на что многие забивают.
Идея интересная. Но она явно требует присутствия человека. Поскольку для того, чтобы устройство стало точным, кто-то должен отслеживать точность и несколько раз корректировать ход. Понимаю, три-четыре раза засечь и откорреткировать — это не такой великий труд. Но я принципиально хотел создать устройство, совсем-совсем отвязанное от участия человека.
И, да, прихожу к мнению, что поменяю я EEPROM на RTC.
На фоне количества труда по сборке, наладке часов это пренебрежительно малая величина, но сам факт — да, вручную время выставить придется 2-3 раза. Зато я всегда абсолютно уверен в показаниях часов, и все остальные часы в доме подвожу по ним, не сомневаясь совершенно. А для меня это очень важно.
Но точное время есть в каждом пакете, поэтому достаточно «видеть» один спутник, чтобы его получить.
Запустите любую программу, визуализирующую видимые спутники, и если будет хоть один, даже серым — время будет.
Так, что у всех условия разные.
По своему опыту: под диким ливнем с грозой, когда небо почернело, дождь заливает стекла так что стеклоочистители не справляются (судовые стеклочистители, не автомобильные, другая тема), видимость метров 100, радиолокатор ослеп полностью (9,5 ГГц очень хорошо поглощаются водой) — ГЛОНАСС и GPS только немного теряют уровень приёма, координаты рисует уверенно и кораблик на электронной карте показывается где надо. DOP вырастает на десяток метров.
Проверять прием телефоном не очень корректно, потому как в телефоне AGPS, альманах и эфемериды он грузит через интернет, кроме того, предварительно определяет место по сотовым станциям и wifi-точкам.
А в вашем проекте тоже есть вопросы. На кой черт заниматься коррекцией каждую секунду когда: 1. В атмеле есть таймеры с прерываниями и при вменяемом кварце с разовой или очень редкой калибровкой можно обеспечить более или менее точное измерение времени в течение часа, а может и суток. 2. У вас все равно под рукой модуль реального времени и вы упираетесь в его точность.
По мне дак при нормальном коде хватило бы синхронизации раз в минуту, можно даже реже.
А у автора идея хорошая, но реализация не понятная. Если есть GPS модуль, то нафига запоминать время. Разве нельзя просто получить время со спутника когда тебе угодно. Короче лишний огород. А так да, за основательный подход конечно плюс.
Не упираюсь. Для моей концепции нужен не точный модуль, а СТАБИЛЬНО врущий. Поэтому я мог бы применить и супер неточный DS1307 с тем же результатом, если бы в нем была термостабилизация, как у DS3231.
А часов типа «RTC на 7 сегментов» — их пруд пруди… Не вижу смысла; их китайцы штампуют всяко дешевле меня, в любом виде, — хоть в конструкторе, хоть готовые, любых цветов, размеров и форм.
Координаты GPS — это параметры физические. Их можно измерить, вычислить или определить. А часовая зона — это понятие политическое.
Условно говоря: есть государство и его политика говорит: «у нас на территории будет вот такая (или вот такие) часовые зоны». На одной и той же долготе могут быть разные государства с разной часовой политикой.
Вбить навороченную карту со всеми часовыми зонами и со всеми летними/змними политиками — это мозгов ардуины точно не хватит. И это всё ещё надо будет поддерживать в актуальном состоянии. В одной и той же точке поверхности планеты вполне может меняться часовая политика. Меняются государства, меняются премьер-министры… А на судах часовая зона вообще зависит исключительно от решения капитана :)
Если конструкционно применить переключалку со стрелочкой под отвёртку, как в некоторых блоках питания, и на корпусе написать "-2, -1, 0, +1, +2", то с местной подстройкой справится «любая домохозяйка».
Как-то он обратился ко мне «настрой мне часы в машине», я облазил там все. ну нет кнопок настройки часов, а часы идут, но неправильно. есть одна кнопка меняющая «час вперед или назад», в итоге гугление привело к тому, что время в этой машине под нас не настроить, его вообще в принципе не настроить, т.к. оно берется по GPS. и там забиты (захардкожены) только 2 часовых пояса, помоему +2 и +3, а нам надо было +6. Выхода нет, даже попыток перепрошивки в нэте не нашел, так и ездит с часами которые показывают на 4 часа меньше текущего, потому понравилась идея а не реализация, могли бы сделать настройку (коррекцию времени) от -24 часов до +24 и все.
Логику использования праворульных машин на леворуких дорогах они постичь не могут.
Если что-либо делается в какой либо стране, абсолютно не означает что это будет использоваться только в этой стране. Вот казалось бы есть наше «Жигули», скажите мне в какой стране их нет?)
Я больше поверю что это намеренное сокращение функционала.
Предлагаю в проект вариант настройки часового пояса.
1. Нажимаем обе кнопки и подаем питание на часы
2. Часы заходят в режим настройки часового пояса
3. Настраиваем часовой пояс кнопками часов и минут
4. Сохраняем настроенный часовой пояс нажатием обеих кнопок одновременно.
Реализовал это в новой версии кода. Исходник обновил.
Ну и я не представляю зачем такая точность в быту. Если только ради того что «я могу».
Вот ты сейчас долго и скучно рассказывал каким образом ты крутил алгоритмами, что бы повысить точность хода. И скомпенсировать погрешности. И ты достиг каких то хороших вариантов по точности. Но какая бы хорошая точность у тебя не была, она у тебя копится. Пусть по секунде в месяц. Пусть по секунде в год, но все равно копится. Профит с GPS в том, что погрешность не накапливается. У тебя есть какая то фиксировання погрешность связанная с задержками на обработку сигнала, на обновление экрана и т д. Вот все она есть и она фиксированная и измеряется в тысячных долях секунды. Все. Что через минуту после включения, что через 5 лет.
Хочется цветом ещё показывать, всё уже плохо или ещё более-менее.
А на RGB — это можно матричную панель взять. Но это уже совсем другая реализация будет.
P.S. Хранение неточного времени в EEPROM — это жесть! Уж лучше не знать никакого времени вообще, чем ошибаться и опоздать на поезд.
Wi-fi может пропадать при сбоях роутера. Пароль может (и должен!) периодически меняться. Wi-fi может быть не оплачено в текущем месяце :)
Дискуссионно, но я принимаю вашу точку зрения. По мне — нет. И оно очень быстро само станет точным.
Человек покупает Ваши часы и ставит их в спальне на тумбочке в 2 метрах от окна. Поскольку погода солнечная, GPS-сигнал ловит даже на таком расстоянии от окна.
И вот однажды ночью случается ужасная гроза, молния попадает в трансформаторную будку, электричество на 2 часа пропадает, а поскольку GPS-сигнал в такую погоду становится значительно хуже, то часы уже не могут синхронизироваться.
Человек спокойно просыпается и неспеша собирается на работу, поглядывая на Ваши часы. Приехав на работу, он узнает, что пропустил чрезвычайно важную встречу, подписание контракта сорвано, его увольняют с работы.
Лишившись работы, начинает пить, жена выгоняет с дому, жизнь на помойке и суицид через полгода.
Его дети подают многомиллионный иск о возмещении морального ущерба к производителю часов.Производитель банкротится, начинает пить, жена выгоняет с дому, жизнь на помойке и суицид через полгода.
Не такой уж этот вопрос и дискуссионный)))
Но в общем да, теоретически может случиться и типа такого. Такова плата за зависимость.
:)
Но я доделал проект.
Теперь, поглядывая на часы, наш многострадальный герой сумеет отличить, правильное ли они время показывают.
Поставить часы на DS3231 и синхронизировать их от GPS раз в 15-30 дней.
А также добавить 2 LED-модуля для отображения секунд.
www.gainta.com/g1034b.html
У него есть чуть небольшой уклон к дну, но это даже лучше. Резиновых самоклеящихся ножек сейчас полно, можно любой наклон к горизонтали организовать, смотря где они стоять будут.
В Чипе-дипе сейчас коммунизм на них, даже в розницу дешевле, чем в Вольтмастере.
Не подскажете где такое стекло можно взять? (может у китайцев где-то есть, сходу найти не смог). А то сейчас приходится колхозить с тонировочной пленкой :)
Всё так. Потому и сомневался, нужно ли писать эту статью. По мне, так DIY — благо, под любым способом.
Поверьте, это совсем не сложный язык. Примеров, справочников и уроков — море.
«Не надо звать, не надо ждать, а можно взять и почитать» © В.Берестов.
еще мало кто может его писать даже при всем желании научиться
это как с музыкой или рисованием — надо иметь талант к этому
Вполне себе бытовая технология. Я, например, дома, время от времени паяю какую-то SMD-деталюшку и вручную, хотя и паста, и флюс, и фен есть — иногда ведь так проще.
Почему же китайцу на продажу нельзя? :)
Приятно читать статьи с вменяемыми рассуждениями и прослеживать ход мысли. Ссылки на мануалы и оперирование данными из них — весьма похвальны :) За это — спасибо!
Но кое-что я покритикую.
Вы неверно используете термин «скомпрометированные данные». Первоначальный смысл — данные, ставшие известными тем, кому не следует знать. В данном случае лучше подошел бы термин «невалидные», «устаревшие» и т.п.
GPS\Глонасс как источник точного времени неплох, но например в моем доме ни один из современных приемников не берет сигнал внутри помещения. ТОлько будучи вплотную прислоненным к окну. Универсальный и пригодный всегда — инет через W-Fi.
КОМПРОМЕТАЦИЯ (от французского compromettre — подрывать репутацию). Данные, как и человек, могут считаться скомпрометированными, если к ним (к нему) подорвано доверие или если они не вызывают доверия.
Это и есть первоначальное словарное значение этого слова
Немножечко не так. Это не первоначальный смысл. Это применимость данного термина к области информационной безопасности и криптографии. Вот, применительно к этой сфере, вы совершенно и бесспорно правы.
Да, понимаю такую точку зрения, её озвучили выше. Я ответил так :)
Gate Threshold Voltage= 2-4в, значит полевик имеет полное право не закрыться, вопреки вашему желанию.
Кроме того, эти 7.5в постараются бесперебойно :) запитать МК, если его его питание подкачает.
Я бы добавил npn.
Есть готовая плата со статической индикацией (т.е. не мерцает!), но там туча проводов (около 30), поэтому сначала хочу попробовать запустить (прошить загрузчик) в бесплатную (сдутую откуда-то) Atmega 128, так чтоб она работала без кварца, и уже по I2C или RS-232 слать в неё с Ардуины цифры…
1. Что думаете, вообще возможно запустить Atmega 128 без кварца?
2. Каких ожидать задержек из-за обработки времени с GPS модуля аж через два преобразования RS-232 (~18кБит/сек) или I2C портами (50кГц)?
3. Будет ли работать в квартире (у окна) самый дешёвый GPS модуль, который купил «GY-NEO6MV2» или нужно что-то получше?
1. Отображение неправильного времени совершенно недопустимо. Поэтому все заморочки с сохранением в EPROM не имеют смысла.
2. Я что-то не до конца врубился, у вас время в коде программы считается вроде? Представляется не самым красивым решением, даже самый примитивный RTC даст большую энергоэффективность и имеет резервное питание.
3. Стремление избежать динамической индикации абсолютно не понятно.
geektimes.ru/post/289389/
В смысле, я не критикую. Просто разные конструкции.
Насчёт точек, у меня их три. Днём мигают две точки в центре, с 21.00 до 6.00 светится одна внизу. Чтобы не раздражало.
Вывод попеременно температуры и времени мне не понравился.
Так же как и он, начиная с 80-х каких только часов не делал из «Радио». Ну и без «Старта» — тоже не обошлось. До сих пор работают. Даже цифры не выгорели. Наверное из-за того, что сразу сделал в них авто регулятор яркости.
Не так давно стояла примерно такая же задача — получить часы с функционалом «поставил и забыл». Пошел по другому пути — планшет с битым тачскрином. Тач выбросил — и вот тебе готовый конструктив для часов мечты: коррекцию времени можно также сделать по GPS, но поскольку они стоят дома, а ситуация с GPS не менее критическая чем у автора, сделал от сети WiFi. Иными словами от роутера, который в свою очередь ничего не сбрасывает и плюс еще синхронизируется от NTP. А на 7 дюймах отображаются цифры очень даже комфортного размера. Можно менять цвет и размер. Единственное, что пришлось колхозить — выкинуть аккумулятор и запитать планшет от адаптера и сделать автонажималку кнопки «вкл» самого планшета при подаче питания. Все остальное — программа с самими часами, планировщик ее включения (после запуска это необходимо) и прочие вкусности — на то он и Андроид. Все это есть в свободном доступе.
Правда, буду переделывать и вставлю планшет с целым тачем — буду еще выжимать функционал. Пробовал одну программу, которая в определенные рамки времени приглушает яркость — не понравилась. Не то… Поставлю фотодатчик на драйвер подсветки — это проверенный путь.
Вот они в корпусе от фоторамки
yadi.sk/i/Ew0egvWq3Hg48u
yadi.sk/i/os1wRLuz3Hg493
База часов — sonoff (esp8266)
Комплектуха вся с али
Примерная стоимость одного комплекта <1000р (в нынешних ценах, даже с учетом корпусов)
Код тут.
github.com/pilnikov/ESP8266WeatherStations
Код писАл я сам.
Синхронизация по ntp (нужен инет), хотя gps прикрутить я думаю несложно, для меня просто не актуально было по gps.
Часики (все трое) работают второй год с периодическими (несущественными) апгрейдами
И особенно об этом — Матричный цветной дисплей 16х32 пикселей с интерфейсом HUB75 на отдельном контроллере MEGA2560.
Вот ссылка www.adafruit.com/product/420 это она?
Я так и не понял покупали где — на сайте adafruit или на ali? Если на ali дайте пожалуйста ссылку.
Почитал их статьи, посмотрел библиотеки/примеры кода, там все под матрицы 16х32 и 32х32 и у меня остался вопрос — а работа дух матриц 16х32 включенных друг за другом (чтобы получилась одна 16х64) возможна?
Сами случаем не пробовали?
И еще один вопрос, не совсем в тему-шрифт цифр для библиотеки adafruit сами написали или подкорректировали готовый?
Можете рассказать как это сделать, какие программы/редакторы нужны и т.д…
Внутри проекционного модуля там был дисплей, светодиод и линза.
В итоге я заменил диод на зеленый
А вот когда сломаются, можно и с их модулем поковыряться под ардуину. Там из геморроя — только регенерацию организовать для жк-матрицы. Зато бонус — простая смена диода позволит менять свет и яркость проекции.
видео не моё
А то я давно хочу часы на ИН-1 с синхронизацией по GPS, но в радиоэлектронике не разбираюсь от слова «совсем».
В смысле, имея готовую электронику для часов — оформить это в нормальном ретро-корпусе сумеете?
И почему ИН-1, а не популярные ИН-14? Или ИН-1 у вас уже есть физически?
Специально зарегистрировался на mysku, чтобы поблагодарить автора за такое замечательное подробное описание часов!
Уже пару лет как собираюсь сделать себе часы, продумываю детали, и тут вдруг натыкаюсь на практически свои часы! Которых пока еще нет, но как концепция и основные идеи практически полностью совпадают с идеями автора!
Есть небольшие различия: мои часы планируются более большими (1,2 дюйма для меня маловато, сейчас заказал платы и буду паять каждый 7-сегментник 5Х10см), плоскими, чтобы можно было их повесить на стену в рамочку. Не знаю, буду ли я включать туда градусник (и всякие датчики влажности, давления и т.п.), но все остальное — прямо мой проект один к одному как я его задумал!
Тот же самый neo6-m как GPS для синхронизации времени, та же адаптивная регулировка яркости, чтобы ночью часы светились еле-еле, а днем были яркими и тоже хорошо заметными, причем без всяких мерцающих ШИМ, та же самая ардуина про мини как самая дешевая для интеграции в готовое устройство.
Та же схема запитывания экрана от внешнего (ноутбучного) БП вольт на 19 с понижающим dc-dc для получения 5 вольт на ардуино и сколько надо вольт на светодиоды.
Экран хоть и самодельный, но на тех же сдвиговых 74HC595 и для управления более мощными светодиодами — ULN2003.
Вот модуль часов я себе заказал сразу DS3231, к чему в итоге пришел и автор.
Та же идея возможной экономии на модулях: если не вставить gps, то все будет работать, просто не будет синхронизации с ним, без градусника не будет температуры, благо предусмотреть это в коде несложно.
Про коррекцию часового пояса не думал, думал жестко забить +3, спасибо автору блога и комментаторам, за идею и реализованный код управления с кнопок, думаю теперь сделать так же.
Про токоограничительный блок для адаптивной подсветки — пока находился на стадии обдумывания (я вообще далек от радиотехники), а тут — готовое решение, возьму в свой проект в таком же виде.
Идея о скомпрометированном и корректном времени — тоже у меня созрела совершенно аналогично, правда когда время корректно — повторные синхронизации я планирую раз в несколько дней-недель-месяцев, а не минут. За идею выделения мигания двоеточия при скомпрометированном времени — тоже большое спасибо (хотя у меня двоеточия конструкцией пока и не предусмотрено).
Идея с прерывистым питанием для датчика температуры — шикарная, обязательно применю ее если не в часах, то в каком-нибудь другом проекте, где этот датчик задействую!
За идею про тонировочную пленку тоже спасибо! У меня завалялось несколько кусков цветного оргстекла, но как это будет выглядеть в готовом изделии — понятия не имею, очень может быть, что тонировочная пленка придется кстати.
Также спасибо за аккуратный, выверенный код с исправленными ошибками примеров из скетча! Я, имея отношение к it-сфере, представляю, сколько мелочей приходится выправлять в коде, чтобы все работало так, как надо. Ваш код, даже если и не брать целиком в свой проект (хотя почему бы и нет), то как минимум пригодится как хороший и рабочий пример для моего проекта.
Я не совсем понял, зачем нужен отдельный «дневной» режим, при котором блокируется резистор для адаптивной подсветки. Ведь в зависимости от освещенности помещения, яркость часов и так плавно регулируется. Или регулировка там не плавная, а либо ночь, либо день?
Сейчас меня попросили сделать аналог этих часов, только несколько крупнее. Поэтому эту версию часов делаю на ленте WS2812. Каждый сегмент цифры — это два светодиода от ленты. Ленту нарезал кусками, наклеил на базовую плоскость, соединил проводами, сверху маска для сегментов (от боковых засветок соседних светодиодов), сверху — тонированная плёнка. Наподобие вот такого, фото не моё, идея технологии взята вот отсюда. Но у меня масштабы чуть скромнее и исполнение немножечко другое…
Собственно, для такой реализации в скетче переписана только процедура Screen (поскольку вывод всего экрана осуществляется с одной ноги) и выкинут узел приглушения яркости — незачем это делать внешними ключами, я могу программно изменять яркость любого сегмента как угодно. Да и светодиоды на двоеточия не нужны — они тоже в составе той гирлянды из кусочков ленты.
Конструкция пока не готова, но базовые функции уже вполне работают. Домой бы такую конструкцию делать не стал (всё-таки лента ШИМит на неполной яркости), а вот для офиса — в самый раз. Никаких узоров делать не буду, ни к чему это для деловой атмосферы. Ну, разве что, время и температуру буду разными оттенками выводить.
Про тонированное оргстекло. Уже после публикации обзора наткнулся на вот такой лот. Покупал 2мм. Пришло, проблем нет. Нормальное тонированное оргстекло. Как и большинство листовых пластиков из Китая, пришло в защитной бумажной рубашке на обоих плоскостях. Так что кому надо — можно пользоваться.
Дневной и ночной режим — да, вы правы, они переключаются порогово (либо в комнате темно, либо светло). Там потому и стоит мосфет. Мне этого в функционале вполне достаточно. Т.е. питание на индикаторы подаётся либо через гасящий резистор (мосфет закрыт), либо мосфет открывается и, таким образом, блокирует сопротивление, т.е. питание подаётся полностью. Если хотите плавной регулировки, то это сделать совсем несложно — датчик освещённости брать с аналоговым выходом и подключать его не на пин 2, а на A1, скажем. И вместо ключа IRF9Z* ставить какой-то мощный p-n-p транзистор. Но сразу его оснащать радиатором, бо он будет греться как печка. И программно чуть подправить алгоритм, чтобы на пин 3 отравлять аналоговый сигнал, пропорциональный считанному от датчика освещённости.
Постепенно в голове начинают вырисовываться подробности моего будущего проекта.
Тот проект часов из светодиодных лент я смотрел пару лет назад, когда начинал обдумывать на чем делать часы. Решил, что табло выйдет все же слишком большим для меня, да и очень много возни с аккуратной нарезкой лент, приклеиванием их, прорезанием всяких трафаретов и т.п. Может быть потом к этому и приду, но пока у меня каждый сегмент — это 3 последовательно соединенных светодиода по 3мм. Пару лет назад осилил 3 7-сегментника по 2 светодиода в каждом сегменте, распаянные на макетке, это работало, пока припаянные мной провода не поотваливались. Зато хватило мощности обойтись без ULN2003…
Здорово, что у Вас проект получает дальнейшее развитие в виде новых заказов, это здорово!
Про плавную регулировку яркости — все-таки очень я далек от радиотехники, приходится второй день грызть гранит науки, Вы имеете в виду биполярный транзистор, включенный по схеме с общим коллектором для регулировки выходного тока? Какой-нибудь классический КТ815 должен подойти, если я уложусь суммарно в 1,5 ампера?
Либо там же пишут про КРЕН/LM317, что он еще лучше должен подойти?
Думал сделать именно так, а ток базы регулировать фоторезистором, даже без участия ардуины.
Но регулировка с аналогового пина ардуины будет еще лучше, например, захочется реализовать более «умное» снижение яркости за несколько минут, по мере того как глаза привыкают к темноте. Только же вроде, аналоговые выходы ардуины это ШИМ? Который спокойно «просочится» через любой транзистор, и на выходе получим изображение, которое будет «ШИМить»?
Кстати, вдогонку насчет температуры: оказывается, DS3231 сам по себе умеет измерять температуру. А значит, надо будет это дело как-то использовать в своих часах, не пропадать же такому полезному свойству датчика! А вот часовой пояс мне придется хранить где-нибудь в неиспользуемых ячейках памяти DS3231 и устанавливать каждый раз после замены батарейки, EEPROM-то у меня нет и не планируется…
1. Код в архиве соответствует тексту обзора. Т.е. да, все изменения, включая время из RTC и подстройку под все часовые зоны он содержит. После публикации код чуть правился, но к тексту статьи это отношения не имеет: часы дооснащались передающим радиомодулем, чтобы вся домашняя автоматизация, какая есть в доме (я очень осторожно отношусь к популярному термину «умный дом» — поэтому называю это «автоматизация»), и которой это надо, периодически получала точное время и дату от описываемых часов, — уж они-то совершенно определённо знают точное время…
2.
Надеюсь, что не ошибся :)
Но если что — в скетче в шрифтах абсолютно безболезненно поправите, это минута работы :)
D (SDA) -> пин A4
C (SCL) -> пин A5
Автоматический перевод реализовать невозможно, я говорил об этом выше. Мало получать координаты местности. Надо ещё держать базу привязки этих координат ко всем странам на плагете и базу часовых политик каждой страны. И обе эти базы придётся поддерживать в актуальности, поскольку неизменными тут являются лишь географические координаты конкретной точки планеты, всё остальное имеет шансы изменяться. Поскольку координаты — переменная физическая, а часовая зона и политика перевода времени — переменная политическая.
Режим установки зоны включается, когда оба пина притянуты к земле. Это могут делать только немытые контакты или неисправные кнопки. Ну, или, кнопки взяты нормально замкнутые, тоже быаает.
2. Из негатива получить правильное свечение очень просто. Поправьте шрифт.
В таблице в каждом из двадцати трёх значений, перечисленных через запятую, вам надо поменять после 0b все нули на единицы и единицы на нули.
Например первое значение 0b11000000 поменяется на 0b00111111, второе вместо 0b11111001 заменится на 0b00000110 и так далее. Для контроля: после 0b в каждом числе должно быть всегда восемь цифр. Последнее 0xff заменится на 0x00, или, попросту, на ноль.
Писать долго, а поправить, на самом деле, весьма быстро.
У меня не отображается, да и не должно :)
Проверьте, чему у вас равна переменная TempPresent без датчика… Она должна быть равна 0 (False).
Это должно происходить из того, что при разборе скретчпада DSstatus (как результат ds.reset) получается нулевым…
В самом начале секции setup(), первой же строчкой, проинициализируйте сериал-порт.
Собственно, 9600 — это так скорость, с которой потом будете читать из терминала.
В нужной точке кода нужную переменную отправляем в порт.
Собственно, для начала, я бы эту строчку вписал в самый конец процедуры Screen(), сразу перед закрывающей фигурной скобкой этой процедуры. Т.е. следующей строчкой после NeedToShowScreen = false;
Заливаете скетч и запускаете в работу ардуину. И в своей IDE открываете «Инструменты/Монитор порта». И смотрите, что ардуина вам пишет. Циклически, с каждым вызовом процедуры Screen, в порт будет прилетать значение интересующей вас переменной.
В настройках монитора порта (в самом низу окна) скорость должна быть такой же, какую вы проинициализировали в начале скетча ардуины. В данном случае 9600.
2. В скетче, в сетапе, INTUT_PULLUP не заменяли на INPUT?
Так почитайте из порта, что на тех пинах в реальности творится, я методику вам выше описал.
Можно даже специально новый простенький скетч написать и влить именно в эту ардуину, чтобы посмотреть. Какие состояния пинов в порту видете?
То ли у вас внутренние подтягивающие резисторы не работают, то ли по пути всё как-то садится на землю. Мультиметром потенциал на этих пинах мерили при нажатой и отпущенной кнопке? Каков результат?
Ищите проблему, фантастики быть не может, ни у кого из повторивших такой проблемы нет, да и неоткуда ей взяться, и ёмкость не при чём: там постоянный TTL уровень, пин либо подтянут резистором к плюсу, либо кнопкой прижат к земле.
Про показ температуры без датчика не сказали. Удалось исправить? Резистор между пином 6 и пином A0 не забыли поставить?
Всего-то и надо. В процедуре Screen найдите строку
и после неё вставьте вот такую строчку строчку:
У меня есть модуль GN-801 (NEO-8M), что с ним сделать, чтобы часы могли с ним работать?
Сейчас добыл neo-m8n, подключил к usb-ttl. В u-центре всё вижу, он точно так же работает на 9600. Ну, можно ему скорость выдачи поменять, с одного герца побыстрее, но не думаю, что для точного времени в часах это хоть сколько-нибудь важно.
Вечером подключу к ардуине и запущу пробный тест, тогда скажу наверняка. Но уже сейчас складывается впечатление, что ничего менять не надо, не вижу причин, чтобы оно не заработало «из коробки».
Поэтому, конечно, виснуть — не висла, но RMC-строки от NEO-8 отплёвывала, т.е. из потока данных от модуля полезного для себя не находила ничего.
Что надо сделать.
1. Зайти в папку с утановленной библиотекой TinyGPS
2. Открыть любым текстовым редактором файл «TinyGPS.cpp».
3. Найти строки (это в самом начале файла)
и в значениях вместо «GPRMC» и «GPGGA» написать «GNRMC» и «GNGGA» соответственно.
Т.е. получим такую картину:
4. Сохранить изменения.
5. Всё. После этого библиотека будет внимать потоку с NEO-8, можно заливать скетч.
Я только что проверил со скетчем часов, время подхватывается безо всяких проблем.
Ну, или другой путь: Взять u-center и сконфигурировать модуль так, чтобы он был не ГЛОНАСС+GPS (то, что по умолчанию при покупке), а чисто GPS. Тогда библиотека его опознает без модификаций. Но, честно говоря, в таком пути логичности я не вижу: это отнять у модуля половину его функциональности. Но, если надо, можно и так. Уроков по работе с u-center в интернете полно.
Да, нашёл, эти строки.
NEO-6 после такой правки перестанет работать?
в общем сейчас часы работают отлично :)
готовы :) только синий на фото не выходит, в реальности он красивый
Приятно по ходу ветки наблюдать, как разработка превращается в готовое изделие…
Молодца!
PS: Да, синий не удаётся сфоткать адекватно, у меня в обзоре та же проблема: синий на фотках выглядит не так красиво, как в реальности.
А вот «странное» время они начинают показывать в зоне неуверенного приёма. Т.е. это не проблема часов, а проблема GPS-приёмника, который в зоне неуверенного приёма отдаёт странные значения для синхронизации. Программно это, конечно же отсекается, но крайне редко, всё-таки что-то пролетает. Меняйте положение антенны. И, да, делать с этим ничего не надо: если приёмник получит сигнал от спутника, то с первой же синхронизацией время станет правильным.
У меня такое было несколько раз с одними часами (эксплуатируются полтора года). Время сбивалось, но в течение получаса-часа всегда само собой вставало правильно. Вторые часы (эксплуатируются полгода) живут спокойно, ещё ни разу не сбились. Либо модуль с антенной попался другой, либо в этом месте сигнал получше).
В вашем случае могу посоветовать оценить качество приёма по встроенному в GPS-модуль светодиоду, причём именно в выбранном месте для часов. Если он мигает с секундным интервалом, то делать ничего не надо, приём всё-таки работает и часы синхронизуются. Если мигания нет, то надо думать об улучшении приёма. Либо менять место, либо антенну.
Собственно, проще, (да и дешевле) сделать самому: возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета, какими захотите, — выше в комментариях есть повторившие. Вы даже не привязаны к общему аноду или катоду: про переделку шрифта в инверс выше уже тоже всё написано.
Ну, либо переделывать скетч под тот экран, какой захотите в принципе; в смысле, вообще любой. Собственно, надо будет переписать под свои нужды лишь процедуру Screen(). Я, например, повторял эту конструкцию под ws2812b, нарезанную сегментами и наклеенную на подложку, по типу вот такого, но ведь и это не предел, тут всё ограничено вашей фантазией.
Ммм. А это-то вам зачем, если не секрет? Это просто листовая пластина, к которой прикручены четыре модуля-индикатора. Всё остальное просто размещено в корпусе: антенна GPS на верхней плоскости, фотосенсор и кнопки на боковой… Там секрета абсолютно нет никакого.
// Подключение часов реального времени
// DS3231 -> Arduino
// D (SDA) -> A4
// C (SCL) -> A5
Часы, действительно, включил в конструкцию по результатам обсуждения здесь, в исходной версии обзора их не было.
Вывод SСL чипа DS3231 — к пину A5 ардуины.
Вывод SDA чипа DS3231 — к пину A4 ардуины.
Выводы GND и VDD — соовтетсвенно к земле и питанию ардуины.
Если берёте не модуль DS3231, а голый чип, то ему обеспечиваете обвязку с батарейным питанием согласно аппноту. В китайском модуле всё уже сделано за вас, вышеуказанных четырёх линий достаточно.
Вы на заказ делаете?
Да сделайте сами, если хоть немного радиолюбительских знаний есть, там нет ничего сложного. :)
1. Для работы без датчика температуры ничего корректировать не надо. Если алгоритм этот датчик не увидит в исправном и работающем виде, то экран с температурой просто не будет никогда показываться. На работу алгоритма отсутсвие датчика никак не влияет, вполне штатный режим. Зато если когда-нибудь решитесь его подключить, то часы заработают сами по себе с полным функционалом.
2. Pro mini, согласен, программировать — это нужен переходник. А почему не хотите взять Arduino Nano V3, это полтора-два доллара, но программируются через обычные miniUSB (или microUSB, зависит от исполнения у продавца). Ничего в исходнике абсолютно переделывать не надо, все выводы, все сигналы совпадают абсолютно. Программируются в том же софте и на том же языке. Не пойдёт этот проект — используете ардуину под какой-то другой… Перепрошивать можно очень-очень много раз.
Индикаторы на схеме располагаются от единиц минут до десятков часов?
От подключения линий ввода: десятки часов, единицы часов, десятки минут, единицы минут (они самые дальние от ввода).
Собственно, проще, (да и дешевле) сделать самому: возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета, какими захотите, — выше в комментариях есть повторившие. Вы даже не привязаны к общему аноду или катоду: про переделку шрифта в инверс выше уже тоже всё написано.
Так как правильно подключить четыре сдвиговых регистра 74HC595 со светодиодными сборками к вашему устройству?
Наверное это тоже, что представил на схемах olegmacovod, но он давно не отвечает.
По-моему, всё вполне очевидно. Откройте в поисковике примеры включения 74HC595, думаю, именно к тому же самому вы и придёте. В той или иной вариации.
Различие в двух его схемах — только в наличие умощняющих ключей. Определять, какую из двух схем выбрать, нужно исключительно исходя из того, какие индикаторы у вас будут применяться. Если сегменты вашего индикатора светятся с достаточной интенсивностью от трёх вольт, то можно выбрать более простую схему с питанием сегментов непосредственно от ног микросхем. Если же падение на сегментах выше, то без применения ключей не обойтись.
Вполне отвечает :)
Да, собственно, что тут отвечать. На мой взгляд, он всё достаточно полно осветил в этой ветке комментов…
Мне было удобнее крепить металлическим кожухом в небо. Всё ловится…
Ни с аппаратной, ни с программной точки зрения проблем нет. Алгоритм позволяет обрабатывать и показывать все темпервтуры, от –55°C до +125°C. Желающие без проблем доделают, при необходимости; ведь исхдник доступен…
Для питания пятивольтовой части схемы конечно же можно (а для случая, если в конструкции требуется только одно напряжение, то даже и логично) использовать пятивольтовую зарядку.
1. Подключить к переходнику UART-TTL и почитать из Com-порта, что он возвращает.
2. Подключить к переходнику UART-TTL и запустить uCenter с чтением из этого порта
3. Подключить к ардуине, влить в неё пример из библиотеки TinyGPS и почитать в мониторе порта.
Но, очевиднее всего будет так:
1. Отключаете модуль RTC.
2. Часы при подаче питания начинают время с 00:00. Двоеточие будет мигать неравномерно. Но часы будут идти.
3. Ждёте минут 15. Или меньше (если уверенный приём, то хватит и минуты). Если время само установилось и стало нормальным, то всё работает.
4. Возвращаете RTC.
Светодиод на самом модуле мигает с секундным интервалом, если модуль видит спутники.
Кстати, моё первое знакомство с Arduino.
СПАСИБО Dimon_ !!!
Дорогу осилит идущий :)
Можно вкратце написать, как происходит синхронизация времени и где находится это время, синхронизируются секунды или минуты?
GPS модуль поймал спутники? Что сам GPS-модуль выдаёт в порт? Сможете прислать кусок сырого потока с модуля типа вот такого?
Нет, конечно, это ненормально. Время должно быть точным.
Я отвечал на аналогичный вопрос ниже, посмотрите, пожалуйста. Боюсь, что полнее я уже не смогу ответить :)
Не могу сказать, поймал ли GPS модуль спутники, но светодиод на плате модуля мигает.
В какой порт GPS-модуль что-то выдаёт?
Что нужно сделать, чтобы получить кусок сырого потока с модуля типа того, что Вы представили?
Ничего в схеме не меняйте. Оставьте всё, как есть.
Убедитесь, что на GPS-модуле мигает лампочка.
Временно вместо скетча часов влейте в ардуину такой скетч:
Открываете в IDE монитор порта (только внизу его окна в настройках убедитесь, что он на 9600). Смотрите, что прилетело в порт.
Копипастите сюда.
Прямо от первого до последнего слова это относится к вам.
Правьте библиотеку, заливайте скетч заново, проверяйте.
Всё должно решиться.
По второй половине вопроса я как-то уже отвечал… Скажу честно. Сейчас у меня нет необходимости и ресурсов заниматься вторым датчиком. Из ресурсов для этого надо иметь разобранные часы на столе, физически второй датчик и кучу свободного времени. Ну и «заочно» такие вещи, конечно, не пишутся; всё-таки надо иметь реальное железо на столе.
Но вместо рыбы могу дать удочку :) В принципе, ничего принципиально нового в скетче не допишется, да он усложниться в объёме, но не алгоритмически. Питайте второй датчик от той же шестой ноги, только не забудьте: со своим подтягивающим резистором. Заводите в свободный пин данные, допустим в A1. В кейсе порционного опроса допишите чтение второго скретчпада, расчёт второго CRC и вычисление второй температуры: время там для этого есть, там половину шагов оно спит. Чуть больше трудностей будет с выводом ещё одного экрана со второй температурой, но и это вполне посильно. Остаётся в шрифтах нарисовать ещё один символ и чуть усложнить механизм смены экранов. И задача решена.
Регистры на али в ассортименте, и крупные индикаторы тоже встречаются.
Но, судя по фоткам примененных в проекте модулей индикаторов, или вот этих, там в обвязках присутствуют резисторы и, вроде, конденсаторы.
Можно меня носом ткнуть в необходимую схему обвязки, или все же можно все напрямую соединять по указанной выше схеме?
Или есть еще вариант упростить изготовление обвязки: на модулях сдуть мелкие индикаторы и припаять отдельно купленные крупные индикаторы (1,8"). Вот только потянут ли модули в плане нагрузки?
Вторая схема — это как раз то, о чём вы говорите.
Уверен, что то, что вы привели по ссылке на маленькие модули с Али — это как раз вторая схема; там вариантов особенно быть не может. Ну отдельные резисторы только собраны в резисторные сборки.
Первая схема отличается от второй только наличием умощняющих ключей. Определять, какую из двух схем выбрать, нужно исключительно исходя из того, какие индикаторы у вас будут применяться. Если сегменты вашего индикатора светятся с достаточной интенсивностью от трёх вольт, то можно выбрать более простую схему с питанием сегментов непосредственно от ног микросхем. В этом случае прокатит и сдувание+замена.
Если же падение на сегментах выше, то без применения ключей не обойтись. Т.е. тут надо отталкиваться не столько от токов нагрузки на регистры, сколько от падения на сегментах конкретно вашего индикатора. Да и токи-то у конкретного индикатора и померить можно, невелика проблема.
Если с транзисторами нет желания возиться, а умощение всё-таки нужно, (наверное, самый правильный вариант), то я бы вторую схему чуть модифицировал, введя в неё ключи ULN2003A.
Очень хорошие часы.
Хотел сделать, но не очень силён в Arduino. IDE выдаёт ошибки «неверная библиотека» и «нет заголовочных файлов (.h)», хотя они все лежат в libraries.
Может быть не ту версию Arduino IDE выбрал, хотя пробовал несколько 1.6.5, 1.8.5, 1.8.9.
Если не секрет, подскажите Вы с какой версией IDE работаете?
Или я что то нето делаю?
Попытаться найти версию IDE и libraries выпуска того года, когда скетч писал автор.
Заранее благодарен.
sch04s04v
А на какую библиотеку ругается-то? Что видите оранжевым текстом на чёрном фоне в окне IDE?
Установил рекомендованную, Вами, версию 1.8.3:
— компилируется без ошибок;
— библиотеки <TimeLib.h> и <Bounce.h> в скетче подсвечены не ярко красным цветом,
а бледно-красным, думаю, что библиотеки установлены неверно т. к. при загрузке
библиотек была ошибка, попробую их переустановить;
— если я не прав, пожалуйста подскажите.
Спасибо.
Я говорил про цвет не в окне скетча, а в окне компилятора, он ниже, там белым на чёрном фоне. Если там нет красного/оранжевого, то всё в порядке.
При компиляции ошибок нет:
— белым шрифтом на чёрном фоне пишет о количестве занятой памяти.
При загрузке в плату появляются ошибки:
— «Проблема при загрузке в плату». это высвечивается красным цветом после
счёта от 1-го до 10-ти.
Бегущей дорожки из знаков # # # # # нет.
Буду всё перепроверять на работоспособность по отдельности:
— порт СОМ 3;
— преобразователь интерфейса СН 340;
— плату Arduino Pro Mini.
Попробую залить скетч без периферии. Если получится буду подключать GPS, время и т.д… Или нельзя бед периферии заливать, как Вы считаете?
Если, Вы, разрешите, похвастаюсь результатом, а может быть, хвастать нечем будет.
Рассказывайте о результатах.
был СОМ3. После переустановки конвертера СН340 в СОМ5 скетч стал заливаться за 13 секунд. Причину отказа СОМ3 не выяснил.
Для движения дальше нужна Ваша консультация.
LED индикаторы, рекомендованные автором, DC/DC преобразователи и фотосенсор пока не приобрёл.
В наличии есть 7- <-->сегментный четырёхразрядный последовательный дисплей СОМ-11442 с SPI последовательным входом (библиотеки «SPI» и «SoftwareSerial» в скетче имеются.
Подключаю Дисплей <--> Ардуино:
— SS <--> pin 10;
— SDI <--> pin 11;
— SCK <--> pin 13;
— SDO не подключен;
— VCC <--> VCC;
— GND <--> GND.
Индикации нет никакой.
Как Вы считаете: в СОМ-11442 необходимо отдельный скетч заливать или он должен работать от библиотек Ардуино?
Dimon_, с дисплеем СОМ-11442 я вышел за рамки проекта определённого автором идеи, поэтому если Вам мои отступления не интересны на мои сторонние вопросы можете не отвечать.
Заранее благодарен.
Берите скетч из обзора и модифицируйте его под свой индикатор.
Дорогу покажу.
В мета-смысле, вам надо изменять только процедуру Screen().
Эта процедура, несмотря на свою громоздкость, по сути делает одно: значения системных переменных hour() и minute() (а раз в минуту ещё и переменной CurrentTemp) переводит в сигналы визуализирующего устройства. И всё. Т.е. весь остальной скетч ничего не знает о том, какое у вас визуализирующее устройство; скетчу это по барабану.
Визуализирующим устройством может быть любой семисегментный дисплей (комментарии выше это показывают), куски светодиодной ленты метровой длины, наклеенные на лист картона, моторы с чернильной ручкой, клапаны водопроводной магистрали и всё, что угодно. Просто в процедуре Screen() опишите выходному экрану понятным ему протоколом, что ему надо делать.
Нет ничего удивительного, что даже правильно (в электрическом смысле) подключив своё устройство с интерфейсом SPI, вы ничего не увидели: процедура Screen() не знает, что именно надо пулять в порт SPI для вашего дисплея. Эта процедура посылает сигналы для другого типа дисплея. Просто исправьте её под своё устройство и дисплей заработает. Обычно для этого даются примеры, чтобы можно было подсмотреть, как и что требуется конкретному устройству.
Сожалею, но теоретически — это всё, чем я могу помочь. Большее сможет сделать только тот, у кого есть такая железка на столе…
PS: Вот уже год работает версия этого скетча, с модифицированной процедурой Screen() под дисплей из ленты ws2812b. За исключением содержимого этой процедуры ничего другого в скетче почти не поменялось. Ну, только от светодиодного двоеточия я отказался, да от модуля приглушения яркости: в самой светодиодной ленте всё это есть от рождения, бессмысленно это делать внешними радиодеталями…
Пока я разбирался с подключением СОМ-11442 к плате по почте прислали, рекомендованные Вами, 2х разрядные семисегментные LED индикаторы с регистрами SN74HC595N, поэтому я переключился на «проторенную дорожку»
и в настоящий момент исследую собранную конструкцию.
Прошу, Вас, помочь мне в правильности определения возможностей данных часов.
1. Вы пишите, что синхронизация со спутником происходит в течении получаса-часа, но пытаясь это проверить выяснил, что часы идут очень точно (в течении 2-х недель) от выставленного времени кнопками, с заведомо неправильным временем (на 3-4 минуты вперёд или назад).
2. Может быть схема с программным обеспечением корректирует только секунды, которые я не отслеживаю, или минуты с часами, как задумано?
3. Зелёный светодиод на GPS модуле моргает: сам модуль проверял программой u-Center (модуль видит до 5-ти спутников).
4. Блок реального времени RTS так же проверил через COM- порт: выдаёт время и температуру.
5. Датчик температуры DS18B20 работает.
6. Пока не сделал регулировку яркости индикаторов.
7. Отключая поочереди блоки RTS и GPS, пытался выяснить кто приоритетней из них, так ничего и не понял как часы синхронизируются по спутнику.
8. Отключил RTS и GPS: часы всё равно идут и довольно точно!?
Заранее благодарен.
Скажу лишь, что полностью и легко ваши часы под этот проект не переделать: MEGA48 в их составе не перешьётся в полноценную ардуину. Хотя в неё можно заливать код из-под ArduinoIDE внешним программатором. Но, даже при таком раскладе, весь приведённый в статье исходник придётся хорошенько перелопатить.
Если вы настроены на переделку, логичнее порезать дорожки возле 25, 26, 27 и 28 ноги процессора и использовать от этих часов только цепочки stp08dp05 и индикаторы, оставив всю остальную их электронику мёртвым грузом. Ну, ещё отрезать дорожку от ноги 1 и использовать светодиоды двоеточия и сигналы кнопок снимать с J5.
Но, опять же, я не могу, не имея этой платы вживую, заочно написать процедуру вывода на экран под эти светодиодные драйверы. Надо гуглить библиотеки или примеры работы с stp08dp05 и, по аналогии, переписывать процедуру Screen() именно под этот экран. А саму ардуину довешивать на проводах.
Ещё один путь: перепаять на ваших часах MEGA48 на MEGA168. Эту мегу уже можно будет прошить ардуиновским загрузчиком и тогда останется только в скетче из обзора переправить названия всех пинов на соответствующие по схеме платы и, теоретически, всё заработает. Т.е. внешне плата не изменится, просто проапгрейдится по железу, и, таким образом, станет способна быть ардуиной и воспринимать заливаемые скетчи. Но процедуру Screen() всё равно придётся сочинять и переписывать под драйверы stp08dp05.
Главное, без паники поделить большую задачу на кучу мелких шагов и постепенно их решать.
Просто этот конструктор в текущем виде бесперспективен: там за время отвечает DS1307, а это тупиковый путь: такие часы никогда не будут ходить точно. Если, вдобавок, эта плата у вас ещё и оформлена в хорошем корпусе, то переделка точно стóит свеч.
Для начала я бы перепаял (или нашёл того, кто перепаяет) на этой плате ATMEGA48 на ATMEGA168 (по выводам они абсолютно совместимы) и программатором (самодельным или копеечным китайским) влил бы в неё ардуиновский загрузчик. Вы получили бы разведённую, готовую и и настроенную плату часов с ардуиной на борту. Что уже само по себе весьма неплохо.
0
Уважаемый, Dimon_, спасибо Вам за уделённое внимание к проблеме подключения цифрового индикатора СОМ-11442 к Arduino.
Пока я разбирался с подключением СОМ-11442 к плате по почте прислали, рекомендованные Вами, 2х разрядные семисегментные LED индикаторы с регистрами SN74HC595N, поэтому я переключился на «проторенную дорожку»
и в настоящий момент исследую собранную конструкцию.
Прошу, Вас, помочь мне в правильности определения возможностей данных часов.
1. Вы пишите, что синхронизация со спутником происходит в течении получаса-часа, но пытаясь это проверить выяснил, что часы идут очень точно (в течении 2-х недель) от выставленного времени кнопками, с заведомо неправильным временем (на 3-4 минуты вперёд или назад).
2. Может быть схема с программным обеспечением корректирует только секунды, которые я не отслеживаю, или минуты с часами, как задумано?
3. Зелёный светодиод на GPS модуле моргает: сам модуль проверял программой u-Center (модуль видит до 5-ти спутников).
4. Блок реального времени RTS так же проверил через COM- порт: выдаёт время и температуру.
5. Датчик температуры DS18B20 работает.
6. Пока не сделал регулировку яркости индикаторов.
7. Отключая поочереди блоки RTS и GPS, пытался выяснить кто приоритетней из них, так ничего и не понял как часы синхронизируются по спутнику.
8. Отключил RTS и GPS: часы всё равно идут и довольно точно!?
Заранее благодарен.
Алгоритмы синхронизации прослеживаются из кода, но кратко могу и тут описать:
Со спутников время синхронизируется согласно переменной MaxTimeToSync. Например, если значение этой переменной равно 500 секунд, то время синхронизируется каждые восемь с чем-то минут, это если часы понимают, что они показывают достоверное время. Если часы понимают, что достоверность времени под вопросом (например, после сразу включения, после неудачной попытки синхронизации, при молчании GPS-модуля) попытки синхронизации предпринимаются чаще. Каждые 10 секунд. Это что касается синхронизации с GPS.
Но неудачная синхронизация с GPS — ещё не значит, что надо сбрасывать время. Часы продолжают идти. Отсчсёт осуществляется программно внутри чипа ардуины, у неё есть тактовый кварц. Дайте часам один раз синхронизоваться с GPS и, не отключая питания, заблокируйте GPS-модуль — они вполне успешно будут работать месяцами, хотя и постоянно предпринимая попытки синхронизироваться с GPS. И при первой же предоставленной возможности синхронизируются.
Системное время (вне зависимости, синхронизировалось оно со спутников или нет), синхронизируется с RTC. Если со спутников удалось получить время, часы его считают самым точным и его же вносят в RTC. Если со спутников время получить не удалось, то часы идут с тем временем, которое уже хранится в RTC.
Итого.
а) Даже если у часов нет ничего, они будут идти исключительно на программных средствах системного времени ардуины довольно точно (с точностью кварца в ардуине), просто при включении они будут начинать время с 00:00.
б) Если им дать только RTC, то они будут при включении сразу продолжать показывать то время, которое течёт в RTC.
в) Если им дать только GPS, при включении они будут начинать время с 00:00, но постоянно предпринимать поиск времени со спутников и при первой же возможности начнут показывать точное время.
г) Если им дать и GPS и RTC, то они будут получить точное время со спутников и заботиться о том, чтобы и в RTC всегда было точное время. При включении они продолжат с того времени, которое течёт в RTC и при первой же возможности обновят его с GPS.
е) Пропадание GPS или RTC в процессе работы (т.е. без потери питания) считается временным неудобством и в этот момент время отсчитывается программным системным временем ардуины, определяемым точностью её кварца.
Слои приоритета точности: если при включении часы не обнаруживают RTC, то время начинается с 00:00 и такое время считается самым недостоверным. Если установить время с кнопок, оно считается более достоверным, но всё ещё недостаточно точным. Ещё более достоверное — то время, которое получено с RTC, Время со спутника считается максимально точным.
Более точное время имеет приоритет над менее точным: более точное принимается во внимание, менее точное отбрасывается.
Вы русским языком, очень понятно, нарисовали логическую блок-схему работы программы.
К сожалению собранное мной аппаратное обеспечение с Вашим программным обеспечением работает не так как Вы описываете (в кодах я не силён, если с ним разбираться то на это полгода уйдёт).
Буду искать неисправность в «железе».
Отправная точка поиска:
1. Прошло 30 минут после подачи питания:
а) часы показывают 0:30 минут;
б) двоеточие промаргивает через 1 секунду;
в) зелёный светодиод на GPS моргает;
г) температуру показывают 21 гр.;
д) отдельно каждой кнопкой часы и минуты переводятся;
е) выставленное, до отключения питания, время не восстановилось не по RTS ни по GPS.
2. После нажатия на обе кнопки:
а) двоеточие заработало нормально мигая 1 раз в секунду;
б) зелёный светодиод на GPS моргает;
в) на RTS горит светодиод «Питание подано»;
г) часы показывают 2:17;
д) синхронизации не от RTS ни от GPS не происходит.
О результатах поиска неисправностей, в блоках или в межблочных соединениях,
Вам напишу или буду вновь у Вас просить консультации.
Устранил плохой контакт в разъёме RTS (облудил побольше ножки разъёма).
От RTS часы стали работать так как Вы пишите: помнят текущее время после снятия питания.
Осталось исследовать GPS.
Из описанных Вами приоритетов синхронизации (вероятно без детального исследования ПО, а я в этом не силён) всё равно не понятно, что должен синхронизировать блок GPS: часы, минуты или секунды, если да, то в каких пределах ведётся захват неточности хода и приведение его к полученной информации от GPS.
Спасибо.
Когда у вашей конструкции не было ни RTC из-за плохого контакта, ни GPS, они визуально показывали, что время явно неточное. Это я про описываемое вами странное поведение двоеточия. Первое же нажатие на кнопку считалось фактом ручной установки времени. Поскольку сравнить его не с чем, часы принимали его как условно точное. И двоеточие начинало мигать в правильном режиме.
Теперь у ваших часов есть RTC. И они уже с момента включения должны мигать правильно.
Но у них нет GPS. Могу предположить две версии. Первая и самая очевидная: перепутаны линии Rx и Tx, идущие к GPS-модулю. Поменяйте местами провода, идущие к пинам 7 и 9. И подождите несколько минут, при условии, что на GPS мигает светодиод.
Если это не помогло, то есть другая версия. Для её проверки пришлите сюда, пожалуста, пару десятков строк сырого потока с модуля. Вы же подключали его к uCenter, там есть для этого окно.
При изменении линий Rx и Tx, идущие к GPS-модулю, при условии, что на GPS мигает светодиод: положительных результатов не получил.
Единственное, что изменилось это осциллограммы:
— при штатном включении на Тх импульсы с частотой 1 Гц и высокочастотным
заполнением амплитудой 3 В (частоту замерить не смог: меняется);
— на Rx = 4,3 В.
До Arduino эти сигналы доходят.
При замене линий Rx и Tx:
— Тх = 4,3 В и заполнено ВЧ с амплитудой 0,3 В (т.е на уровне пульсаций питающего
напряжения).
— Rx= 3,5 В (упало на 1 В) без частоты.
С роликом в u-Center что то не заладилось поэтому высылаю скриншоты двух програм u-Center и Terminal COM порта.
И скриншоты не могу прикрепить: ошибка #1003.
Может быть почту свою дадите и на неё вышлю.
Спасибо.
15:26:20 $GPGSV,4,2,14,12,10,009,,14,45,068,21,17,23,297,26,18,27,180,10*73
15:26:20 $GPGSV,4,3,14,19,22,313,15,22,81,207,27,23,30,234,27,25,13,049,*75
15:26:20 $GPGSV,4,4,14,31,47,099,17,32,21,065,*7A
15:26:20 $BDGSV,1,1,02,19,11,273,34,20,62,269,39*62
15:26:20 $GNRMC,152620.000,A,5702.2585,N,04057.4177,E,0.00,0.00,200819,,,A*79
15:26:20 $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
15:26:20 $GNZDA,152620.000,20,08,2019,00,00*4A
15:26:20 $GPTXT,01,01,01,ANTENNA OK*35
15:26:21 $GNGGA,152621.000,5702.2586,N,04057.4177,E,1,09,3.1,162.1,M,0.0,M,,*74
15:26:21 $GNGLL,5702.2586,N,04057.4177,E,152621.000,A,A*4E
15:26:21 $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,4.0,3.1,2.6*3D
15:26:21 $BDGSA,A,3,20,19,,,,,,,,,,,4.0,3.1,2.6*2B
15:26:21 $GPGSV,4,1,14,01,49,200,34,03,65,278,36,06,05,325,,11,22,207,28*70
15:26:21 $GPGSV,4,2,14,12,10,009,,14,45,068,21,17,23,297,26,18,27,180,10*73
15:26:21 $GPGSV,4,3,14,19,22,313,15,22,81,207,27,23,30,234,27,25,13,049,*75
15:26:21 $GPGSV,4,4,14,31,47,099,17,32,21,065,*7A
15:26:21 $BDGSV,1,1,02,19,11,273,34,20,62,269,39*62
15:26:21 $GNRMC,152621.000,A,5702.2586,N,04057.4177,E,0.00,0.00,200819,,,A*7B
15:26:21 $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
15:26:21 $GNZDA,152621.000,20,08,2019,00,00*4B
15:26:21 $GPTXT,01,01,01,ANTENNA OK*35
15:26:22 $GNGGA,152622.000,5702.2586,N,04057.4177,E,1,09,3.1,162.1,M,0.0,M,,*77
15:26:22 $GNGLL,5702.2586,N,04057.4177,E,152622.000,A,A*4D
15:26:22 $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,4.0,3.1,2.6*3D
15:26:22 $BDGSA,A,3,20,19,,,,,,,,,,,4.0,3.1,2.6*2B
15:26:22 $GPGSV,4,1,14,01,49,200,34,03,65,278,36,06,05,325,,11,22,207,28*70
15:26:22 $GPGSV,4,2,14,12,10,009,,14,45,068,21,17,23,297,26,18,27,180,10*73
15:26:22 $GPGSV,4,3,14,19,22,313,17,22,81,207,27,23,30,234,27,25,13,049,*77
15:26:22 $GPGSV,4,4,14,31,47,099,17,32,21,065,*7A
15:26:22 $BDGSV,1,1,02,19,11,273,34,20,62,269,39*62
15:26:22 $GNRMC,152622.000,A,5702.2586,N,04057.4177,E,0.00,0.00,200819,,,A*78
15:26:22 $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
15:26:22 $GNZDA,152622.000,20,08,2019,00,00*48
15:26:22 $GPTXT,01,01,01,ANTENNA OK*35
15:26:23 $GNGGA,152623.000,5702.2586,N,04057.4176,E,1,09,3.1,162.1,M,0.0,M,,*77
15:26:23 $GNGLL,5702.2586,N,04057.4176,E,152623.000,A,A*4D
15:26:23 $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,4.0,3.1,2.6*3D
15:26:23 $BDGSA,A,3,20,19,,,,,,,,,,,4.0,3.1,2.6*2B
15:26:23 $GPGSV,4,1,14,01,49,200,34,03,65,278,36,06,05,325,,11,22,207,28*70
15:26:23 $GPGSV,4,2,14,12,10,009,,14,45,068,21,17,23,297,26,18,27,180,10*73
15:26:23 $GPGSV,4,3,14,19,22,313,17,22,81,207,27,23,30,234,27,25,13,049,*77
15:26:23 $GPGSV,4,4,14,31,47,099,17,32,21,065,*7A
15:26:23 $BDGSV,1,1,02,19,11,273,34,20,62,269,39*62
15:26:23 $GNRMC,152623.000,A,5702.2586,N,04057.4176,E,0.00,0.00,200819,,,A*78
15:26:23 $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
15:26:23 $GNZDA,152623.000,20,08,2019,00,00*49
15:26:23 $GPTXT,01,01,01,ANTENNA OK*35
15:26:24 $GNGGA,152624.000,5702.2586,N,04057.4176,E,1,09,3.1,162.0,M,0.0,M,,*71
15:26:24 $GNGLL,5702.2586,N,04057.4176,E,152624.000,A,A*4A
15:26:24 $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,4.0,3.1,2.6*3D
15:26:24 $BDGSA,A,3,20,19,,,,,,,,,,,4.0,3.1,2.6*2B
15:26:24 $GPGSV,4,1,14,01,49,200,34,03,65,278,36,06,05,325,,11,22,207,28*70
15:26:24 $GPGSV,4,2,14,12,10,009,,14,45,068,19,17,23,297,26,18,27,180,10*78
15:26:24 $GPGSV,4,3,14,19,22,313,17,22,81,207,27,23,30,234,28,25,13,049,*78
15:26:24 $GPGSV,4,4,14,31,47,099,17,32,21,065,*7A
15:26:24 $BDGSV,1,1,02,19,11,273,34,20,62,269,39*62
Может быть вот эта информация пригодится из Terminal v 1.9b, хотя это по моему одно и тоже, только в разных программах.
18:30:10.081> $BDGSV,1,1,02,19,12,274,27,20,63,270,36*62
18:30:10.206> $GNRMC,153012.000,A,5702.2585,N,04057.4174,E,0.00,0.00,200819,,,A*7C
18:30:10.275> $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
18:30:10.275> $GNZDA,153012.000,20,08,2019,00,00*4C
18:30:10.330> $GPTXT,01,01,01,ANTENNA OK*35
18:30:10.710> $GNGGA,153013.000,5702.2585,N,04057.4174,E,1,09,3.0,159.9,M,0.0,M,,*73
18:30:10.710> $GNGLL,5702.2585,N,04057.4174,E,153013.000,A,A*48
18:30:10.830> $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,3.9,3.0,2.5*31
18:30:10.830> $BDGSA,A,3,20,19,,,,,,,,,,,3.9,3.0,2.5*27
18:30:10.892> $GPGSV,4,1,14,01,47,198,33,03,67,277,35,06,06,325,,11,21,206,28*74
18:30:11.016> $GPGSV,4,2,14,12,10,008,,14,43,068,13,17,23,295,23,18,25,180,13*73
18:30:11.078> $GPGSV,4,3,14,19,22,312,24,22,81,196,23,23,32,234,31,25,14,047,*75
18:30:11.078> $GPGSV,4,4,14,31,47,097,21,32,20,065,*70
18:30:11.147> $BDGSV,1,1,02,19,12,274,27,20,63,270,36*62
18:30:11.265> $GNRMC,153013.000,A,5702.2585,N,04057.4174,E,0.00,0.00,200819,,,A*7D
18:30:11.265> $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
18:30:11.327> $GNZDA,153013.000,20,08,2019,00,00*4D
18:30:11.327> $GPTXT,01,01,01,ANTENNA OK*35
18:30:11.704> $GNGGA,153014.000,5702.2585,N,04057.4174,E,1,09,3.0,159.9,M,0.0,M,,*74
18:30:11.704> $GNGLL,5702.2585,N,04057.4174,E,153014.000,A,A*4F
18:30:11.828> $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,3.9,3.0,2.5*31
18:30:11.828> $BDGSA,A,3,20,19,,,,,,,,,,,3.9,3.0,2.5*27
18:30:11.890> $GPGSV,4,1,14,01,47,198,33,03,67,277,35,06,06,325,,11,21,206,28*74
18:30:12.022> $GPGSV,4,2,14,12,10,008,,14,43,068,13,17,23,295,23,18,25,180,13*73
18:30:12.076> $GPGSV,4,3,14,19,22,312,24,22,81,196,23,23,32,234,31,25,14,047,*75
18:30:12.076> $GPGSV,4,4,14,31,47,097,21,32,20,065,*70
18:30:12.141> $BDGSV,1,1,02,19,12,274,27,20,63,270,36*62
18:30:12.203> $GNRMC,153014.000,A,5702.2585,N,04057.4174,E,0.00,0.00,200819,,,A*7A
18:30:12.264> $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
18:30:12.326> $GNZDA,153014.000,20,08,2019,00,00*4A
18:30:12.326> $GPTXT,01,01,01,ANTENNA OK*35
18:30:12.701> $GNGGA,153015.000,5702.2585,N,04057.4173,E,1,09,3.0,159.9,M,0.0,M,,*72
18:30:12.701> $GNGLL,5702.2585,N,04057.4173,E,153015.000,A,A*49
18:30:12.763> $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,3.9,3.0,2.5*31
18:30:12.827> $BDGSA,A,3,20,19,,,,,,,,,,,3.9,3.0,2.5*27
18:30:12.897> $GPGSV,4,1,14,01,47,198,32,03,67,277,35,06,06,325,,11,21,206,28*75
18:30:13.014> $GPGSV,4,2,14,12,10,008,,14,43,068,13,17,23,295,23,18,25,180,13*73
18:30:13.076> $GPGSV,4,3,14,19,22,312,24,22,81,196,23,23,32,234,30,25,14,047,*74
18:30:13.076> $GPGSV,4,4,14,31,47,097,21,32,20,065,*70
18:30:13.138> $BDGSV,1,1,02,19,12,274,27,20,63,270,36*62
18:30:13.200> $GNRMC,153015.000,A,5702.2585,N,04057.4173,E,0.00,0.00,200819,,,A*7C
18:30:13.262> $GNVTG,0.00,T,,M,0.00,N,0.00,K,A*23
18:30:13.262> $GNZDA,153015.000,20,08,2019,00,00*4B
18:30:13.332> $GPTXT,01,01,01,ANTENNA OK*35
18:30:13.698> $GNGGA,153016.000,5702.2585,N,04057.4173,E,1,09,3.0,159.9,M,0.0,M,,*71
18:30:13.771> $GNGLL,5702.2585,N,04057.4173,E,153016.000,A,A*4A
18:30:13.825> $GPGSA,A,3,03,23,01,17,22,19,11,,,,,,3.9,3.0,2.5*31
18:30:13.825> $BDGSA,A,3,20,19,,,,,,,,,,,3.9,3.0,2.5*27
18:30:13.886> $GPGSV,4,1,14,01,47,198,32,03,67,277,35,06,06,325,,11,21,206,28*75
18:30:14.011> $GPGSV,4,2,14,12,10,008,,14,43,068,13,17,23,295,23,18,25,180,14*74
18:30:14.073> $GPGSV,4,3,14,19,22,312,23,22,81,196,23,23,32,234,30,25,14,047,*73
$GPGSV,4,4,14,31,47,097,2
Всё у вас было правильно распаяно по контактам 9 и 7. Возвращайте правильное подключение, если меняли пины местами.
Что ж вы сразу-то не сказали, что у вас модуль не чисто GPS, а GPS+ГЛОНАСС? :) Ну да ладно, точнее будет итог.
Выше я уже рассказывал, как решить эту ситуацию. Вот прямо от первого до последнего слова это относится к вам. Правьте библиотеку, заливайте скетч заново, проверяйте. Всё должно решиться.
PS: Кстати, привет в Иваново :) В гости ждёте?
за такие консультации «стопку чая» наливать надо…
Буду воплощать в жизнь Ваши рекомендации.
По результатам нововведений в библиотеку «Tiny GPS.cpp» извещу Вас обязательно.
Всё синхронизируется.
Причём синхронизация происходит нас только быстро, что я не успеваю отследить
характерное промаргивание двоеточия.
Попробую отследить синхронизацию с маленькой антенной, может быть так успею
отследить, а если нет то и не надо лишь бы часики шли верно.
Спасибо.
Буду доделывать регулировку яркости и не до конца доделал LED индикацию с высотой знака 1,8 ".
Если опять забуксую Буду Вам писать.
Часы прекрасно работали с большими индикаторами.
Устранил инверсию цифр и доработал библиотеку TegGPS.cpp согласно Ваших рекомендаций.
Точно не помню: 2 — 2,5 месяца назад часы перестали синхронизироваться по GPS?
После замены блоков Arduino и GPS на новые синхронизация не восстановилась.
Доработанную библиотеку TegGPS.cpp вернул наместо то есть ГЛОНАС + GPS и опять всё заработало!?
Что могло это быть я не понял, может быть Вы объясните.
Заранее благодарен.
Что я должен объяснить?
Честно говоря, совершенно нет времени всем этим заниматься…
Модуль GPS отвечает? Что видите в сыром потоке?
Вот вам отправлная точка: вместо скетча часов временно влейте из стандарных примеров к библиотеке TinyGPS простенький скетчик, который читает в softwareserial данные из модуля GPS и отправляет в serial, посмотрите, от модуля в пины 7 и 9 вообще поток идёт и что конкретно в этом потоке.
d:\temp\arduino_modified_sketch_318618\sketch_jan08a.ino: In function 'void Synctime()':
sketch_jan08a:266: error: 'gps' was not declared in this scope
gps.f_get_position(&flat, &flon, &GPSage);
d:\temp\arduino_modified_sketch_318618\sketch_jan08a.ino: In function 'void loop()':
sketch_jan08a:357: error: 'gps' was not declared in this scope
if (gps.encode(GPSchar)) newData = true;}
sketch_jan08a:360: error: 'gps' was not declared in this scope
gps.f_get_position(&flat, &flon, &GPSage);
перепробовал иде 1.8.2, 1.8.3, 1.8.10
платформио тоже ругается в этих же № строк на идентификатор 'gps'
народ, код точно рабочий? или что-то поправить надо?
далее для тех чайников, кто столкнется с этой же проблемой:
скетч из скачанного архива компилируется без ошибок. я же копировал код с этой страницы — при компиляции выдаются ошибки. не знаю в чем причина — или код немного разный, или при копи-пасте где-то теряется форматирование. имейте ввиду
Такого быть не должно, всё должно стартовать при подаче питания.
Спасибо.
и поставить один единственный восклицательный знак:
Примененные Вами индикаторы с общим анодом или с общим катодом?
Как происходит управление разрядами индикаторов? Можете разрисовать эту часть схемы более подробно?
Информация необходима для повторения конструкции на самодельных семисегментных индикаторах большого размера…
По пунктам.
1. Как я уже писал выше, часы давно сданы в эксплуатацию, доступа к ним я уже не имею, но работают они у владельцев до сих пор. Поэтому вскрыть и разрисовать схему конкретно тех модулей я не смогу при всём желании. Всё что повторялось, как мной (я повторял эту конструкцию на лентах), так и многочисленными пользователями, делалось на самодельных индикаторах.Уверен, что и у вас всё получится.
2. Для данных часов абсолютно непринципиально, общий катод или анод будет у индикаторов. Первоначально в проекте применялся общий анод, именно под это текущий исходник. Если же ваша конструкция будет с общим катодом, всего-навсего в исходнике проинвертируйте шрифт собственными силами, это несложно, я выше рассказывал (п.2).
2. Управление разрядами очевидно из логики работы сдвиговых регистров. Возьмите четыре сдвиговых регистра 74HC595 и нагрузите их светодиодными семисегментными сборками любого размера и цвета, какими захотите.
Допустим, у вас индикаторы с общим анодом. На эти аноды подаётся своё положительное питание (если будете менять ночную яркость), на 16-е ноги самих HC595 — своё, (т.е.стабильные пять вольт). Катоды индикаторов — на выходы сдвиговых регистров, напрямую или через ключи. Привязку сегментов к выходам я приводил.
3. Выше пользователь olegmacovod привёл две схемы, отличающиеся тем, что первая с умощнением транзисторами для сегментов на 6 вольт, а вторая — для сегментов на 3 вольта. Помимо наличия ключей, схемы ничем не отличаются. Чуть ниже он привёл фотку готовых часов по этой схеме. У него, как видно из схемы, тоже был общий анод.