уровень 7.1 · практика
Зажигание
Arduino становится блоком управления зажиганием. Двигатель двухтактный карбюраторный: топливо готовит карбюратор, а от вашей программы нужен ТОЛЬКО момент искры — но именно он решает, будет двигатель работать или заглохнет через пять секунд.
Что читаете
| Вывод | Что приходит |
|---|---|
| D2 | ДПКВ, датчик коленвала. Фронт LOW→HIGH приходит за 60° до ВМТ, дальше сигнал держится полоборота (шторка на маховике). Период между фронтами — это время оборота. |
| D4 | Ключ зажигания: HIGH — включено. |
| A0 | Ручка газа: 0…1023. Её крутит человек; на момент искры она не влияет, но влияет на обороты. |
Чем управляете
| Вывод | Что делает |
|---|---|
| D9 | Катушка зажигания. HIGH — накопление энергии, СПАД HIGH→LOW даёт искру. Накопить нужно не меньше 20 мс, а держать дольше 1 секунды — нельзя: катушка сгорит. |
| D13 | Лампа «Check» — диагностическая, зажигайте своей ошибкой. |
Стенд крутится в замедлении ×10: на приборах настоящие обороты, а физически оборот идёт вдесятеро дольше. Иначе за валом не успеть —
loop()исполняется около 35 раз в секунду, и прерываний в этом симуляторе нет. Углы от замедления не зависят, поэтому алгоритм у вас настоящий.
Алгоритм
- Поймать фронт на D2 и запомнить время: это 60° до ВМТ.
- Период между фронтами — время оборота
T. - Включить катушку (начать накопление).
- Через
T × (60 − 15) / 360выключить её — искра придёт за 15° до ВМТ. - Ключ выключен — катушку обесточить и искр не давать.
Заводится двигатель рывком шнура — кнопка на сцене. Рывок раскручивает вал, а дальше он живёт только вспышками: без искры обороты падают до нуля за пять секунд.