Кто что считает: приложение ученика, телефон, модуль
Документ для методической команды. Отвечает на вопрос со встречи 16.08: «проезды всё думает телефон… или это всё думают микроконтроллеры?» (R-52). Ответ зафиксирован решением D-094 и не обсуждается заново — он определён уже принятым моторным протоколом (D-079), проверенным на работающем роботе.
Короткий ответ
Поворот на угол доводит модуль. Смысл программы делает телефон. Уроки и проверку делает приложение ученика на ноутбуке.
Три уровня — кто за что отвечает
1. Модуль робота
Модуль — «мозжечок»: быстрые рефлексы, никакого понимания программы.
- Поворот на угол: команда «мотор A, поверни на 720°» доводится и останавливается самим модулем (замкнутый контур на модуле, протокол 05 §2). Телефон в этот момент может вообще замолчать — движение завершится. Непрерывное движение задаётся процентом мощности без обратной связи: скорость модуль не удерживает.
- Энкодеры — модуль непрерывно считает реальные обороты каждого мотора.
- Защита. Своего сторожа у модуля нет (D-080). Команду непрерывного движения модуль выполняет, пока не придёт другая. Защиту держит приложение робота: если программа замолчала дольше 800 мс, оно останавливает моторы (протокол 05 §5). Если перестал работать сам телефон (разрядился, приложение упало, выдернули кабель), поворот на угол доедет и остановится, а непрерывное движение продолжится.
- Застревание модуль сам не распознаёт. Если колесо не сдвинулось совсем, через 2 с приложение робота останавливает мотор, и программа получает ошибку «мотор не сдвинулся». Если колесо остановили посреди шага, приложение считает шаг законченным и останавливает мотор; в шаге на двух колёсах оно мягко предупреждает («Внимание: колесо D провернулось меньше, чем второе, — не держит ли его что-то?»), ошибки нет.
Следствие для уроков: точность проезда на роботе ещё измеряется; обещать её детям пока нельзя.
2. Телефон (приложение робота)
Телефон — «мозг»: исполняет программу ребёнка.
- Получает Python-программу с ноутбука по Bluetooth или по сети класса и исполняет её строка за строкой (настоящий Python, библиотека
rubrick). - Пересчитывает человеческие единицы в моторные: «проехать 40 см» → «столько-то оборотов каждого ходового мотора». Для пересчёта нужны параметры сборки — диаметр колеса, ширина между колёсами, какие моторы ходовые.
- Эти параметры задаёт блок инициализации движения (решение D-094 по R-47/R-48): без него блоки «проехать/повернуть» не компилируются — они подсвечены серым с подсказкой «добавь блок инициализации». Пресет «стандартная сборка Рубрика» заполняет параметры одним кликом.
- Показывает лицо робота, отдаёт телеметрию (заряд, энкодеры, статусы) наверх.
Следствие для уроков: «проехать N см» точен настолько, насколько честно заполнен блок инициализации. Робот, собранный не по инструкции, с правильными параметрами едет правильно; с чужими параметрами — нет. Это не баг, это физика — и это учебный материал: ребёнок видит связь «параметры робота → поведение».
3. Приложение ученика (ноутбук)
Приложение ученика — «учитель за плечом»: понимает урок, но не управляет моторами напрямую.
- Редактор блоков и Python; перевод блоков в Python (односторонний — обратно из Python в блоки не переводим, это принятое решение R-21).
- Проверка программы — кнопка «Проверить»: компиляция + диагностика (ошибки: «не запустится»; предупреждения: «запустится, но вот этот блок лежит в стороне и не выполнится»). Дальше «Запустить» и «На робота». В курсе Python и в консоли используется слово «компиляция» — там аудитория старше и программистский словарь уместен.
- Цели урока и автопроверка: сверяет программу и события робота с целями миссии («использован цикл», «мотор A вращался»).
- Отображение телеметрии, уроки, проекты, карточки учеников.
Практические следствия для методики
| Вопрос | Ответ |
|---|---|
| Можно обещать точность «40 см = 40 см»? | Нет. Точность проезда на роботе ещё измеряется; обещать её детям пока нельзя |
| Что если ребёнок держит колесо? | Колесо не сдвинулось совсем: через 2 с приложение робота останавливает мотор, программа получает ошибку «мотор не сдвинулся». Колесо остановили посреди шага: приложение считает шаг законченным и останавливает мотор; в шаге на двух колёсах оно мягко предупреждает («Внимание: колесо D провернулось меньше, чем второе, — не держит ли его что-то?»), ошибки нет |
| Что если телефон завис во время движения? | Зависла программа — приложение робота остановит моторы через 800 мс. Завис или выключился телефон — шаг на угол доедет и остановится, непрерывное движение продолжится (D-080) |
| Минимальная скорость мотора? | Блоки дают задать 10–100 % (D-095); в Python можно задать меньше. Какая мощность реально сдвигает мотор на роботе, ещё не измерено: на стенде 30.10.2026 один мотор при мощности 20 не сдвинулся, при 50 — сдвинулся (D-170) |
| Скорость в минусовых процентах? | Решено (D-095): ребёнок видит мощность 10–100% и направление стрелкой; минус существует только в протоколе, его подставляет генератор |
| Python → блоки? | Не будет никогда (принято 16.08). Код виден всегда; правка кода — осознанный односторонний переход с предупреждением, обе версии сохраняются |
| Русские имена переменных в Python («шаги = 0»)? | Это корректный Python 3 — не баг генератора. Оставляем имена, которые дал ребёнок |
Вопросы по документу: команда приложения ученика. Изменения — только через решение продукта (журнал решений: .assistant/decisions.md, D-094).