• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

С чего начать создание спортивного секундомера (1 сенсор запускает секундомер, 2 останавливает)

pvvx

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

Предположим, что имеется сто-пятьсот устройств. Событие необходимое к передаче на них возникает практически одновременно – старт сто-пятьсот участников. Все сто-пятьсот устройств заорут одновременно :)

Аналогично nikolz строит и схему передачи UDP c deep-sleep :) Устройство просыпается и не глядя на эфир передает его любимый пакет, убивая в этот момент всю синхронизацию окружающих сетей. Потом пользователи орут не хватает полосы – нужен 5 ГГц чтобы смотреть смарт-TV :) Побольше ESP8266 с Arduino в сеть и скорость такой сети будет как у древнего модема… Но наш гуру nikolz предлагает глушаки ещё покруче :)

Наличие нормальной AP в сети позволяет принимать от неё beacon всем кто её видит и без соединения, что не ограничивает кол-во устройств.
 

pvvx

Активный участник сообщества
У смартфона температура ходит ходуном от нагрузки на АКБ и CPU. У простого нормального кварца точность хода обычно принимается до 6 дес. знаков. При этом считают, что температура стабильна. Остальное надо смотреть в PDF и проверять на каждый случай.
Для привязки к абсолютному времени и домашних/спортивных задач достаточен простейший модуль GPS с аппаратным выходом секундного строба...
 

pvvx

Активный участник сообщества
На C++ и Arduino сложно “узаконить” джиттер срабатывания прерывания от внешнего сигнала, связанный с запретом прерываний где не попадя в системе. К примеру, на всё время поиска и выделения свободного куска памяти прерывания запрещены... По эму время отработки запроса памяти, вставляемое транслятором C++ неопределенно где (для новичков) и создает большие неконтролируемые задержки на отработку внешних прерываний… С режимом AP в Arduino ещё хуже. Т.к. исполняется пользовательский код, а время на работу драйвера WiFi отдается как попало, то ESP8266 не в состоянии выдавать beacon в необходимое окно с необходимой точностью… Хотя передаваемый счетчик TSF корректируется при формировании пакета на такие задержки, но если система использует множественные прерывания, то процесс между формированием пакета и его реальной передачей может быть разорван на неопределенный срок. Такое устройство никогда не пройдет сертификации WiFi, что и показывают многие годы отсутствия таких сертификатов на ESP8266. Только специальная закрытая тестовая версия ПО от производителя на ESP32 кое как это проходит... Ждем от nikolz таковую или как это исправить :)
Короче всё это и составляет большую ошибку чем +-5 us.
 

Сергей_Ф

Moderator
Команда форума
Наличие нормальной AP в сети позволяет принимать от неё beacon всем кто её видит и без соединения, что не ограничивает кол-во устройств.
А что будет при наличии нескольких AP в сети? Это не помешает работе?
Ещё раз прошу не переходить на личности. Форум существует не для этого.
 

pvvx

Активный участник сообщества
А что будет при наличии нескольких AP в сети? Это не помешает работе?
По практике это зависит от производителя и исполнения (есть ли производитель в списке "держателей" стандарта WiFi (в коалиции WiFi и у разработчика была доступна вся инфа) ).
Обычно две AP синхронизируются и выдают свои маяки последовательно друг за другом, чтобы оставить большее окно для передач у устройств. Это если пользователь не накрутит свой шаг beacon и прочее. Но и так глупо ставить AP рядом и на один и тот-же канал.
Я не разработчик WiFi и не подписывал NDA для получения полной документации... Где-то мелькала инфа, что AP должна учитывать и BT...
 

pvvx

Активный участник сообщества
Как пример работы двух AP рядышком и простое детектирование их "беконов" на СВЧ диоде на щуп осла + внешний синхро с приемника по типу TSF или DDS генератора на 0.1024 сек (точно уже не помню):
 

pvvx

Активный участник сообщества
А так "гуляет" время вывода beaconа у ESP8266:
Иногда он убегает достаточно далеко от внешнего синхро и налезает на beacon соседних AP...
При работе ES8266 в режиме AP+STA, beacon AP ESP8266 четко синхронизирован с внешней AP, куда подключена STA ESP8266. Написать по другому ПО (асинхронно) очень сложно :)
Но и в мануале написано - ESP8266 имеет недо-soft-AP.
 

pvvx

Активный участник сообщества
То, что время вывода beacon колбасит - это не самое главное, т.к. счетчик TSF в нем указывает правильное время, скорректированное на запаздывание. Разрешено только запаздывание выдачи beacon - иначе спящие устройства потеряют синхро. А при запаздывании - подождут, пожрут батарейку и синхронизируются. Запаздывание выдачи beacon предусмотрено стандартом и возникает из-за нерадивых устройств в сети, типа ESP8266 :)
 

nikolz

Well-known member
Олично. Я понимаю, что TSF - это счётчик AP. Таким образом вместо задачи по синхронизации кучи esp на произвольном отрезки времени, мы пришли к довольно простой задаче запоминания последнего счётчика TSF от единственной AP на произвольном числе esp + времени после него до события по внешнему сигналу. Задача приема TSF фактически решена предложенным вами патчем и осуществляется каждые 0.1024 сек. За время 0.1024 сек рассинхронизация внутренних часов разных esp не превысит +-5мкс.
Вопрос: в качестве эталонной AP может выступать, допустим смартфон в режиме точки доступа? Или не стоит надеяться на точность его кварца?
Все о чем так негодующе кричит pvvx не решает вопрос измерения.
Это решения вопроса синхронизации - одновременности.
Я Вам написал простейшую задачу которая наглядно это показывает.
Повторю еще раз.
С какой погрешностью можно измерить интервал времени в 1000 секунд на AP?
Если бы погрешность была как кричит pvvx 5 мкс, то не надо было никаких серверов времени.
----------------
Суть в том что в сети вам нужна синхронизация устройств для их последовательной работы и не важно равномерность этой синхронизации В сети не измеряется точно время а синхронизируются устройства.
-----------------
Но в системе спортивных хронометров надо измерять точно время.
 

nikolz

Well-known member
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, как можно реализовать такую задачу:
1. На старте человек стоит ногой на первом сенсоре, после того, как нога сойдет с сенсора запустить секундомер.
2. На финише человек дотрагивается рукой до второго сенсора и секундомер отключается.
Всё это нужно сделать на беспроводной сети. И желательно чтоб можно было данные с секундомера записывать в файл на компьютере.
--------------------
Начните с реализации секундомера на ESP
Прикручиваете кнопку к ESP
По нажатию кнопки первый раз запоминаете системное время
при нажатии второй раз вычитаете из системного времени первое значение.
Результат пересылаете на комп
----------------------
После того как реализуете эту задачу, можно определить следующую.
В процессе решения этой задачи разберетесь с сенсорами.
 

nikolz

Well-known member
относительно использования BLE, то можно как и в WiFi поставить маяк около компа, который будет синхронизировать часы других модулей.
При этом потребление, нагрев и вес секундомеров будет в десятки раз меньше.
 

Сергей_Ф

Moderator
Команда форума
С какой погрешностью можно измерить интервал времени в 1000 секунд на AP?
Вроде был ответ
У простого нормального кварца точность хода обычно принимается до 6 дес. знаков. При этом считают, что температура стабильна. Остальное надо смотреть в PDF и проверять на каждый случай.
Для привязки к абсолютному времени и домашних/спортивных задач достаточен простейший модуль GPS с аппаратным выходом секундного строба...
Лучше спросить у ТС, какая точность необходима для соревнования по скалолазанью. @nikilex ?
Ну и логика подсказывает, что измерять время разных участников лучше по одному источнику отсчётов в рамках одного этапа соревнований. В данном случае TSF AP. Иначе бы всех спортсменов оснащали бы собственным секундомером на соревнованиях, а такого не происходит.
 

nikolz

Well-known member
Вроде был ответ

Лучше спросить у ТС, какая точность необходима для соревнования по скалолазанью. @nikilex ?
Ну и логика подсказывает, что измерять время разных участников лучше по одному источнику отсчётов в рамках одного этапа соревнований. В данном случае TSF AP. Иначе бы всех спортсменов оснащали бы собственным секундомером на соревнованиях, а такого не происходит.
рассуждение о мгновенной стабильности частоты кварца не является ответом на конкретный вопрос о погрешности измерения интервала в 1000 секунд.
Вот вариант возможного ответа:
У кварца для генераторов без термокомпенсации и подстройки частоты (именно такой в ESP) нестабильность составляет порядка 30 ppm это 3*10^-5.
Если кварц 1 Мггц т е импульс 1 мкс, то длительность каждого последующего импульса случайным образом будет отличаться от длительности предыдущего на величину 3*10^-5.
Для измерения интервала в 1000 секунд надо счетчиком подсчитать 1000/(10^-6) = 10^9 импульсов.
при этом максимальная ошибка измерения интервала может составить (3*10^-5)*(10^9) = 30 ms.
 

nikolz

Well-known member
если AP будет реализован на одном из ESP то ошибки измерения времени составят мс а не мкс.
если сделать синхронизацию с NTP то надо компенсировать запаздывание и реализовывать подстройку времени на AP и еще следить чтобы не забили эфир
В результате сильно сомневаюсь, что погрешность будет измеряться в единицах мкс.
с другой стороны при соревнованиях не требуется такой точности измерения
судя по продаваемому оборудованию погрешность в 0.1 0.01 секунды вполне хватает.
Так зачем что-то городить если такую погрешность можно достигнуть за 2-5 долларов на ардуине без особых заморочек
 

nikolz

Well-known member
такой вариант вроде и не рассматривался
ну пока вообще никаких вариантов, кроме тех что написал я, не рассматривались.
pvvx рассказал про работу маяков в WiFi и сделал патч для того что бы прочитать полученное значение.
но это лишь использование синхронизации устройств WIFI
т е часы ESP заменяются значениями счетчика AP с дискретом 100 мс.
а внутри 100 мс считается импульсами ESP.
джиттеры эфира и коллизии не учитываются.
я не против такой синхронизации, но что это решает в данном вопросе?
-----------------
можно сделать с вытаскиванием этого счетчика,
а можно (это я и показал экспериментально)
просто на пин завести сенсор
при срабатывании сенсора отослать сигнал другому ESP
тот запомнит системное время и при срабатывании сенсора у него вычтет запомненное время из системного.
Все!!!
-------------------
если полученная точность будет недостаточна, то потом можно вместо системного
делать патч библиотеки аля pvvx вытаскивать счетчик и кывыряться с ним до как бы мкс точности.
 

Сергей_Ф

Moderator
Команда форума
если AP будет реализован на одном из ESP
такой вариант вроде и не рассматривался
@nikolz вопрос в вашей схеме, только в том какой джиттер будет при передачи срабатывания по ESPnow в условиях реального эфира. Ну и точность внутренних часов мастер-esp может вызывать сомнение.
То что Виктор не предложил решения задачи - не соглашусь.
 
Сверху Снизу