• Система автоматизации с открытым исходным кодом на базе 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 может вызывать сомнение.
То что Виктор не предложил решения задачи - не соглашусь.
 
Сверху Снизу