• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

nikilex

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

CodeNameHawk

Moderator
Команда форума
Все просто
1. Взять три есп, синхронизировать на всех "время", первая есп передат время старта, вторая время финиша, третья все принимает, считает разницу и передает на комп, но для этого нужно.
2. Научиться программировать.
3. Написать три скетча.
 

nikilex

New member
Все просто
1. Взять три есп, синхронизировать на всех "время", первая есп передат время старта, вторая время финиша, третья все принимает, считает разницу и передает на комп, но для этого нужно.
2. Научиться программировать.
3. Написать три скетча.
Вот спасибо тебе, пойду покупать всё для этого, мне главное было узнать возможно ли синхронизировать 3 есп межу собой и передать это на комп
 

nikolz

Well-known member
Вот спасибо тебе, пойду покупать всё для этого, мне главное было узнать возможно ли синхронизировать 3 есп межу собой и передать это на комп
еще осталось определиться с датчиком
вдруг ногой мимо наступит на финише?
а если участников десять?
 

nikilex

New member
еще осталось определиться с датчиком
вдруг ногой мимо наступит на финише?
а если участников десять?
Участника будет 2, я думаю 5 есп взять, 2 на старте, 2 на финише и 1 записывает в комп, на финише нужно рукой дотронуться, а ногой нужно уйти с датчика (на размыкание так сказать=))
 

nikolz

Well-known member
Участника будет 2, я думаю 5 есп взять, 2 на старте, 2 на финише и 1 записывает в комп, на финише нужно рукой дотронуться, а ногой нужно уйти с датчика (на размыкание так сказать=))
а почему бы луч лазера не использовать?
 

pvvx

Активный участник сообщества
С чего начать создание спортивного секундомера?
1. С расчета необходимой точности и дискретности замера.
2. Выбора соответствующего метода и оборудования для достижения необходимой точности и дискретности замера.
3. Выбора необходимой среды разработки ПО для реализации алгоритма.

https://esp8266.ru/forum/threads/sinxronizacija-chasov.1951/page-12#post-28692
 

nikolz

Well-known member
Лазеры вроде сильно зависимы от света и возможно менее подойдут, чем сенсорный датчик.
возможно, но посмотрите на лазерные дальномеры и прицелы которые работают до 100 и 1000 метров и свет не мешает
простая лазерная указка легко дает пятно 5 мм на расстоянии 10 метров.
--------------
в любом случае выбор датчиков надо делать изначально.
что же касается ESP то их можно просто использовать как линии связи и режим ESP-NOW который обеспечит устойчивую работу без каких-либо подключений и точек доступа
но можно взять и BLE
--------------
возможно проще и точнее будет две ESP. Одна на дорожке другая у компа.
А датчик можно и проводом пробросить либо инфракрасным лучом.
 

pvvx

Активный участник сообщества
@nikilex
Реализация и алгоритм решения вашей задача выглядит так:

Т.к. не знаю, ввели или нет в Arduino функцию чтения счетчика TSF, то:

1. Берете последний SDK для ESP8266. Готовите необходимый патч для дров WiFi, реализующий функцию чтения TSF.

Далее пишите программу, состоящую из трех задач:

1. Считывания TSF в прерывании по изменению уровня на пине и передающей это значение в таск (основной задаче).
2. Основная задача передает полученное значение TSF (и уровень с пина – on/off) на роутер.
3. Система настройки с основной функцией - подключение к роутеру.

С ESP8266 это всё.

На устройстве (пусть смартфоне) или роутере, выступающем в качестве AP для нескольких подключенных ESP8266, принимаете значение TSF от источников (ESP8266) и вычисляете разницу между этими значениями. Т.к. эти значения в микросекундах и они синхронизованы и заданы от AP, то получаете период между событиями любой ESP8266 в микросекундах.

Всё. Далее “выкрасить и выбросить” или продать, или застолбить методу своим (c) :)
 

nikolz

Well-known member
@nikilex
Реализация и алгоритм решения вашей задача выглядит так:

Т.к. не знаю, ввели или нет в Arduino функцию чтения счетчика TSF, то:

1. Берете последний SDK для ESP8266. Готовите необходимый патч для дров WiFi, реализующий функцию чтения TSF.

Далее пишите программу, состоящую из трех задач:

1. Считывания TSF в прерывании по изменению уровня на пине и передающей это значение в таск (основной задаче).
2. Основная задача передает полученное значение TSF (и уровень с пина – on/off) на роутер.
3. Система настройки с основной функцией - подключение к роутеру.

С ESP8266 это всё.

На устройстве (пусть смартфоне) или роутере, выступающем в качестве AP для нескольких подключенных ESP8266, принимаете значение TSF от источников (ESP8266) и вычисляете разницу между этими значениями. Т.к. эти значения в микросекундах и они синхронизованы и заданы от AP, то получаете период между событиями любой ESP8266 в микросекундах.

Всё. Далее “выкрасить и выбросить” или продать, или застолбить методу своим (c) :)
еще можно сделать так
По кнопке "старт" центральное ESP отсылает по протоколу ESP-NOW сигнал для ESP на дорожке
они запоминают собственное время
при срабатывании датчика старта
первая ESP определяет запаздывание относительно старта
при срабатывании датчика стопа вторая запоминает запаздывание относительно старта
потом эти ESP отдают значения запаздывания первой и та рассчитывает время бега.
--------------
Отличие от предыдущего - нет надобности в роутерах и в маяках все работает в прямой видимости.
и не требует никаких костылей к стандартной SDK
 

pvvx

Активный участник сообщества
Да, TSF - это Timing synchronization function - Wikipedia
В предельном случае, когда всё описано на СИ, правильно обработана атомарность связки чтения TSF и изменения на пине, используя ESP8266, получите точность к +-5 us от хода кварца в AP.
По методу, описанному Nicolz с ESP-NOW и несколькими ESP - предельная точность составит до +- пары сек в рабочей обстановке и возможны потери событий...
 

nikolz

Well-known member
предлагаю такой вариант (кто проще?)
1) срабатывает датчик старта ESP1 посылает по ESP-NOW сигнал на ESP3 та запоминает свое системное время
2) срабатывает датчик финиш ESP2 посылает по ESP-NOW сигнал на ESP3 та вычисляет разность системного и запомненного
Нет никакой проблемы с синхронизацией часов на ESP
программа у ESP1 и ESP2 элементарная - пришло прерывание - послали короткую посылку
и усе
 
Сверху Снизу