Detect a Knock — определяем удар с помощью пьезодатчика
Учимся использовать пьезоэлектрический датчик для обнаружения вибрации и ударов по поверхности с помощью Arduino.
В этом уроке разберёмся, как использовать Piezo element для обнаружения вибрации — например, стука в дверь, удара по столу или другой твёрдой поверхности.
Пьезоэлемент — это электронное устройство, которое генерирует напряжение при механической деформации: вибрации, звуковой волне или физическом давлении. Работает и в обратную сторону: если подать на пьезо напряжение, оно начнёт вибрировать и издавать звук. Именно поэтому пьезоэлементы применяют и как излучатели звука, и как датчики.
Скетч считывает сигнал с пьезодатчика с помощью команды analogRead(), которая преобразует напряжение в диапазоне от 0 до 5 В в числовое значение от 0 до 1023. Этот процесс называется аналого-цифровым преобразованием, или ADC.
Если сигнал датчика превысит заданный порог, плата отправит строку "Knock!" на компьютер через последовательный порт. Откройте Serial Monitor, чтобы увидеть эти сообщения.
Необходимые компоненты
- Arduino Board
- Пьезоэлектрический диск
- Резистор 1 МОм
- Твёрдая поверхность для постукивания
Схема подключения
Пьезоэлементы полярны: ток через них проходит строго в одном направлении. Подключите чёрный провод (минус) к GND, а красный провод (плюс) — к аналоговому пину A0. Параллельно пьезоэлементу обязательно подключите резистор 1 МОм — он ограничивает напряжение и ток, которые генерирует датчик, и защищает аналоговый вход платы.
Пьезоэлементы бывают как в пластиковом корпусе (с проводами), так и без него — в виде голого металлического диска. Последние удобнее использовать как датчики: их легче приклеить или прижать к поверхности. Кстати, пьезодатчик работает значительно лучше, если плотно прижать или приклеить его к исследуемой поверхности.

Схема подключения пьезодатчика к Arduino UNO на макетной плате
Принципиальная схема
Пьезоэлемент подключён к аналоговому пину A0, а между его выводами включён резистор 1 МОм. Этот резистор выполняет важную защитную функцию: без него аналоговый вход может быть не в состоянии корректно считать сигнал с пьезо, а сам датчик рискует получить повреждение от избыточного тока.

Принципиальная схема подключения пьезодатчика и резистора 1 МОм к Arduino UNO
Код
В скетче ниже входящий сигнал с пьезодатчика сравнивается с пороговым значением (threshold), которое задаёт пользователь. Если сигнал превышает порог — в Serial Monitor появляется сообщение "Knock!". Попробуйте увеличить или уменьшить это значение, чтобы настроить чувствительность датчика под конкретную поверхность.
Как это работает
При ударе по поверхности пьезоэлемент деформируется и кратковременно генерирует импульс напряжения. analogRead() считывает это напряжение и возвращает число от 0 до 1023. Скетч проверяет: если значение больше threshold, значит, зафиксирован удар — и плата сигнализирует об этом через Serial.
Типичные ошибки
- Нет реакции на удары — проверьте полярность пьезоэлемента и наличие резистора 1 МОм. Без резистора сигнал может быть слишком слабым или нестабильным.
- Слишком много ложных срабатываний — увеличьте значение
thresholdв коде. - Датчик не реагирует на слабые удары — уменьшите
thresholdили плотнее прижмите/приклейте пьезо к поверхности. - Сигнал есть, но «Knock!» не появляется — откройте Serial Monitor и убедитесь, что скорость порта совпадает с той, что задана в
Serial.begin().
Как проверить результат
- Загрузите скетч на плату.
- Откройте Serial Monitor (Ctrl+Shift+M или через меню Tools → Serial Monitor).
- Слегка постучите по поверхности, к которой прикреплён пьезоэлемент.
- В мониторе должна появиться строка
Knock!.
Если реакции нет — попробуйте постучать сильнее или уменьшить threshold. Если сообщения появляются без ударов — немного увеличьте порог.
Где пригодится
Такой датчик удара можно использовать в самых разных проектах: охранная сигнализация, интерактивные музыкальные инструменты, игровые контроллеры или умный дверной звонок, реагирующий на стук.
Дополнительные материалы
Больше базовых уроков можно найти в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.