Перейти к содержимому

xSTEM Scope — осциллограф из датчика НАУРА

«Датчик напряжения осциллографический» НАУРА — двухканальный цифровой осциллограф до 100 кГц с пределами от ±2 до ±90 В. Без родной программы он лежал без дела. xSTEM Scope возвращает его в работу на Linux:

  • Открыть xSTEM Scope в Chromium или Firefox: подключите датчик к USB, нажмите «Подключить датчик» — и на экране осциллограмма, ничего не устанавливая;
  • или программа xstem-scope.py на компьютере — для работы без интернета и в любом браузере.

Здесь же генератор эталонных сигналов на ESP32 для проверки датчика, рассказ о том, как был разгадан протокол, установка на весь класс по SSH, опыты для уроков труда (батарейка под нагрузкой, мотор-генератор, дребезг кнопки, ШИМ, заряд конденсатора, трансформатор и выпрямитель, UART и I2C, «Прибор врёт» — звуковая карта ноутбука как генератор) и для уроков физики (индукция, маятник, камертон). Медленные процессы видно вживую в режиме самописца.

Датчики робота — дальномер, энкодер, сервопривод, датчик линии, ИК-пульт и другие — на экране осциллографа: Что говорит датчик.

xSTEM Scope — осциллограф из школьного датчика НАУРА

«Датчик напряжения осциллографический» фирмы НАУРА (на этикетке логотип НаР) поставлялся в школы с программой для Windows. На компьютерах под Linux он лежит без дела: родная программа запускается только через Wine, а драйвер FTDI под Wine не работает. На самом деле Linux видит датчик сразу, без драйверов, как /dev/ttyUSB0.

xSTEM Scope — страница-осциллограф, которая работает с этим датчиком напрямую.

Два способа запуска

С сайтаПрограмма на компьютере
Как открытьedu.xstem.ru/scopeярлык «xSTEM Scope» или python3 xstem-scope.py
БраузерChromium, Chrome, Edge, Firefox (проверен 158)любой
Интернетнужен, чтобы открыть страницуне нужен
Установкане нужна*не нужна*, на весь класс — по SSH, GUIDE.md
Обновлениесамо, вместе с сайтомgit pull и повторная раздача

* Один раз нужен доступ к порту датчика для обычного пользователя — правило udev из deploy/install.sh или группа dialout (WIRING.md).

С сайта

  1. Подключите датчик к USB.
  2. Откройте в Chromium https://edu.xstem.ru/scope/.
  3. Нажмите «Подключить датчик» и выберите в окне браузера FT232R USB UART. В следующий раз страница подключится сама.

Браузер получает доступ только к тому устройству, которое выбрал человек, и только для этого сайта. Отозвать доступ — значок слева от адреса → «Сбросить разрешения».

Программа на компьютере

Нужен только Python 3 — он есть на любом школьном Linux.

  1. Скачайте в одну папку пять файлов: xstem-scope.py, index.html, xstem-scope.js, b202.json, experiments.json.
  2. Подключите датчик к USB и выполните в этой папке:
    python3 xstem-scope.py
  3. Браузер откроет http://localhost:8765 сам. Остановить программу — Ctrl+C.

Если датчик не находится, программа скажет почему. Частые случаи разобраны в WIRING.md.

Что умеет

Каналы2, каждый со своим пределом: ±2 В, ±5 В, ±25 В, ±90 В
Оцифровкаот 200 Гц до 100 кГц (точка через 5 мс … 10 мкс)
Кадр3072 точки на канал: от 31 мс до 15 с записи
Самописецлента 10, 30 или 60 с вживую, при точке через 0,5 мс и реже; разрывы 2–19 % времени
Синхронизацияпо К1 или К2, по фронту или спаду, уровень в вольтах
Входпостоянный (=) или переменный (~) ток
Замерымаксимум, минимум, размах, среднее, действующее, частота, период; если частота найдена, среднее и действующее — по целому числу периодов
Растяжка×1…×20; «Сдвиг окна» под графиком ведёт растянутое окно по всему кадру
Курсорыдва курсора: время, напряжения, Δt и 1/Δt; держатся за время сигнала, а не за место на экране
ЭкспортCSV для LibreOffice Calc / Excel
Опытыготовые настройки для труда и физики, см. Lesson.md; новый опыт — строка в experiments.json
Датчик выдернулиизмерение останавливается; вставьте датчик и нажмите «Пуск» — программу перезапускать не нужно
ESP32с прошивкой генератора из src/ — синусоида, треугольник, пила, ШИМ со страницы; со скетчем урока 9 — поле «Слово по UART»: ученик вписывает слово и читает его с провода. Что прошито, страница узнаёт сама

Файлы

ФайлЧто это
app/index.htmlэкран осциллографа: он же страница на сайте
app/xstem-scope.jsпротокол датчика; связь через Web Serial или через программу
app/xstem-scope.pyпрограмма: открывает порт и отдаёт страницу, только стандартная библиотека Python
app/b202.jsonвсё, что известно о датчике: скорости, периоды, пределы и калибровка каждого экземпляра по серийному номеру; читают и страница, и программа
app/experiments.jsonопыты в списке «Опыт»: настройки и подсказка, по группам «Труд», «Физика», «Прибор»
tests/проверка протокола без железа: одни и те же примеры через JS и Python, запускается в CI
deploy/установка на один ПК и на весь класс по SSH, см. GUIDE.md
src/main.cppпрошивка ESP32: генератор эталонных сигналов для проверки и калибровки
examples/lesson9/скетч урока «UART и I2C»: UART и медленный I2C в одной программе; команды char, text, baud, addr — в мониторе порта или со страницы; pio run -e lesson9 -t upload
THEORY.mdкак устроен датчик и как мы разгадали его протокол
WIRING.mdподключение, безопасность, калибровка
Lesson.mdопыты для уроков труда и физики
GUIDE.mdразвёртывание в классе и памятка группе
ROADMAP.mdосциллограф в программе 5–9 классов и в проектах; датчик НАУРА и Rigol

Ограничения

  • Датчик отдаёт кадр целиком, только когда запишет все 3072 точки. На медленной развёртке (кадр 3–15 с) график появляется с задержкой, пока идёт запись, внизу экрана бежит полоска. Чтобы видеть вживую — режим «Самописец»: датчику ставится короткий кадр (0,5 с), страница склеивает их в ленту. Пока датчик передаёт кусок, он не пишет: около 0,12 мс на каждую точку куска, то есть 2 % времени при точке через 5 мс и 19 % при 0,5 мс. Эти места на графике — разрывы, в CSV — пустые ячейки.
  • Общая калибровка снята с одного экземпляра датчика по питанию ESP32 3,3 В, точность около 3 %. Датчику можно записать свою калибровку по серийному номеру (WIRING.md); в заголовке страницы видно, какая сейчас действует.
  • Проверено на модели B202 с прошивкой 3.02 (2011 год). Модель и прошивку страница пишет в заголовке.

Что датчик успевает увидеть

Самая частая точка — через 10 мкс (100 кГц). Правило: на самую короткую деталь сигнала нужно хотя бы 5 точек, иначе фронты превращаются в «пилу», а частые импульсы — в сплошную стену со стробоскопическими узорами. Всё, что быстрее, — для Rigol.

СигналСамая короткая детальТочек при 10 мксВидно?
UART 9600бит 104 мкс10да, байт читается (проверено)
UART 19200бит 52 мкс5на пределе: биты различимы, фронты грубые (расчёт)
UART 38400бит 26 мкс2–3соседние биты сливаются (расчёт)
UART 115200бит 8,7 мксменьше 1нет
I2C 100 кГцтакт 10 мкс1нет — поэтому в уроке шина замедлена до 1 кГц
ШИМ 1 кГц, 25 %импульс 250 мкс25 (при 20 мкс — 12)да (проверено); при точке 100 мкс — «стена» и 26,5 % вместо 25 %
WS2812, SPI, фронты логикидесятки–сотни нс—нет, только Rigol

Ещё три особенности, найденные на железе:

  • Кадр с синхронизацией начинается примерно через 15 мкс после фронта: первый импульс на экране короче настоящего. Длительность меряйте между фронтами внутри сигнала.
  • В кадре 3072 точки: при 10 мкс это 30,7 мс — примерно 28 байт UART 9600 подряд, если их слать без пауз.
  • Первые 3–4 с после подключения к USB датчик мерит со своими настройками; программа эти секунды выжидает сама (THEORY.md).