Как придумать задание

Инструкция для преподавателя: из чего состоит задание для лаборатории, готовый пример, промпты для нейросети и что означают отказы проверки.

Как придумать задание

Задание для лаборатории может сделать любой преподаватель — сам или с помощью нейросети. Это не программирование: вы описываете схему с неисправностью, а ученик её чинит. Сайт проверит задание за вас и не даст отправить сломанное.

Как это работает

  1. Вы описываете задание — это один объект JSON.
  2. Нажимаете «Проверить». Прямо в браузере собирается схема, запускается эталонный скетч и проверяется, что задача вообще решается, а спрятанные дефекты и правда ломают её и находятся приборами.
  3. Отправляете. Задание сразу работает у ваших классов — занятие можно вести уже сегодня.
  4. Владелец сайта смотрит его и либо публикует в общий каталог, либо возвращает с замечанием. Вернули — поправьте и отправьте снова.

Присылают только ОПИСАНИЕ задачи. Никакого кода сайт от вас не принимает и не исполняет: поэтому песочница открыта всем преподавателям, а не избранным.

Из чего состоит задание

ПолеЧто это
idкороткое имя латиницей, для себя
titleназвание, которое увидит ученик
partsдетали схемы: резисторы, светодиоды, кнопки, земля
wiresпровода: какой вывод с каким соединён
sketchИСПРАВНЫЙ скетч — эталон, по которому видно, что задача решается
channelsчто проверяем: вывод платы и светодиод, который он зажигает
faultsчто сломано в схеме, которую увидит ученик

Две вещи, на которых спотыкаются чаще всего:

Плату в parts не перечисляют. Она добавляется сама и называется arduino. В проводах её выводы пишут именами, как на самой плате: arduino:D13, arduino:A0, arduino:GND, arduino:5V.

Скетч в задании — исправный. Это не ошибка: по нему движок проверяет, что задача в принципе решается. Ломает схему поле faults, и ученик получит уже сломанную.

Готовый пример

Светофор из трёх светодиодов, у одного оборван резистор. Скопируйте, вставьте в форму и нажмите «Проверить» — это задание проходит все проверки.

{
  "id": "traffic-demo",
  "title": "Светофор не переключается",
  "parts": [
    { "id": "r1", "type": "resistor", "params": { "ohms": 220 } },
    { "id": "led1", "type": "led" },
    { "id": "r2", "type": "resistor", "params": { "ohms": 220 } },
    { "id": "led2", "type": "led" },
    { "id": "r3", "type": "resistor", "params": { "ohms": 220 } },
    { "id": "led3", "type": "led" },
    { "id": "g", "type": "gnd" }
  ],
  "wires": [
    { "a": "arduino:D13", "b": "r1:0" }, { "a": "r1:1", "b": "led1:0" }, { "a": "led1:1", "b": "g:0" },
    { "a": "arduino:D12", "b": "r2:0" }, { "a": "r2:1", "b": "led2:0" }, { "a": "led2:1", "b": "g:0" },
    { "a": "arduino:D11", "b": "r3:0" }, { "a": "r3:1", "b": "led3:0" }, { "a": "led3:1", "b": "g:0" }
  ],
  "sketch": "int red = 13;\nint yellow = 12;\nint green = 11;\n\nvoid setup() {\n  pinMode(red, OUTPUT);\n  pinMode(yellow, OUTPUT);\n  pinMode(green, OUTPUT);\n}\n\nvoid loop() {\n  digitalWrite(red, HIGH); digitalWrite(yellow, LOW); digitalWrite(green, LOW);\n  delay(100);\n  digitalWrite(red, LOW); digitalWrite(yellow, HIGH); digitalWrite(green, LOW);\n  delay(100);\n  digitalWrite(red, LOW); digitalWrite(yellow, LOW); digitalWrite(green, HIGH);\n  delay(100);\n}\n",
  "channels": [
    { "pin": 13, "ledId": "led1", "name": "D13 · красный", "color": "#e0563b" },
    { "pin": 12, "ledId": "led2", "name": "D12 · жёлтый", "color": "#ffd866" },
    { "pin": 11, "ledId": "led3", "name": "D11 · зелёный", "color": "#4a9d5f" }
  ],
  "faults": [ { "target": "r2", "kind": "open" } ]
}

Что проверяет движок

Четыре вещи, и все — прогоном настоящей схемы, а не по формальным признакам:

  • скетч работает — компилируется и не виснет;
  • задача решается — исправная схема с этим скетчем зажигает и гасит каждый канал;
  • дефект что-то ломает — с ним хотя бы один канал перестаёт работать;
  • дефект видно приборами — мультиметр в какой-то точке показывает не то, что на исправной схеме. Иначе ребёнок не сможет его найти.

Отказ приходит человеческим текстом: «дефект не обнаружить приборами», «исправная схема со своим же скетчем не заработала». Это и есть подсказка, что чинить.

Промпт для нейросети

Вставьте это в любую нейросеть, поменяв две последние строки под свою тему.

Придумай учебное задание на поиск неисправности для симулятора Arduino UNO.
Ответь ОДНИМ объектом JSON, без пояснений и без markdown вокруг него.

Формат:
{
  "id": "короткое-имя-латиницей",
  "title": "Название для ученика",
  "parts":    [ { "id": "r1", "type": "resistor", "params": { "ohms": 220 } }, ... ],
  "wires":    [ { "a": "arduino:D13", "b": "r1:0" }, ... ],
  "sketch":   "исправный скетч Arduino целиком, одной строкой с \n",
  "channels": [ { "pin": 13, "ledId": "led1", "name": "D13 · красный", "color": "#e0563b" }, ... ],
  "faults":   [ { "target": "r1", "kind": "open" } ]
}

Правила, которые нельзя нарушать:
1. Плату в parts НЕ перечисляй: она добавляется сама и называется "arduino".
   Её выводы в проводах пиши именами: arduino:D13, arduino:A0, arduino:GND, arduino:5V.
2. Выводы остальных деталей нумеруются с нуля: "r1:0", "led1:1".
3. Каждый светодиод подключай к выводу платы ЧЕРЕЗ резистор 150–470 Ом,
   вторым концом — на землю (деталь типа "gnd").
4. Каналов от 2 до 4. Канал — это пара «вывод платы + светодиод, который он зажигает».
5. Скетч обязан в цикле и ЗАЖИГАТЬ, и ГАСИТЬ каждый канал: только digitalWrite,
   pinMode и delay, задержки 50–200 мс, без Serial и без бесконечных ожиданий.
6. faults — от 1 до 3 штук. kind: "open" (обрыв), "short" (замыкание),
   "reversed" (деталь наоборот), "dead-pin" (мёртвый вывод).
   Дефект должен ЛОМАТЬ хотя бы один канал и быть заметен мультиметром.
7. Дефект НЕ ставь на плату (arduino): такой не найти приборами.

Тема задания: СВЕТОФОР НА ТРЁХ СВЕТОДИОДАХ.
Сложность: средняя.

Ответ целиком вставьте в поле «Описание задачи» и нажмите «Проверить».

Если проверка не прошла

Не переписывайте руками — покажите нейросети причину отказа. Обычно хватает одного круга.

Это описание задания не прошло проверку симулятора.

Причина отказа:
<<вставьте сюда текст, который показала кнопка «Проверить»>>

Исправь JSON так, чтобы причина ушла, и верни ЕГО ЦЕЛИКОМ — одним объектом
JSON, без пояснений. Ничего лишнего не добавляй и правила из прошлого
сообщения не нарушай.

Текущий JSON:
<<вставьте сюда своё описание задания>>

Сколько звёзд поставить

Сложность — вещь сравнительная, поэтому смотрите не на себя, а на детей.

ЗвёздыКому
★первое занятие: один канал, один явный обрыв
★★два-три канала, дефект находится прозвонкой
★★★нужно рассуждать, где мерить; дефект один, но неочевидный
★★★★несколько дефектов или дефект, который виден только под нагрузкой
★★★★★для тех, кто прошёл курс: сочетание дефектов, ложные следы

Владелец сайта может звёзды поправить, когда будет публиковать: он видит весь каталог и ровняет сложность по нему.

Что дальше

← Ко всем урокам