Эта обучающая программа показывает Вам, как использовать пьезоэлемент, чтобы обнаружить вибрацию — например стук в дверь, по столу или другой твердой поверхности.
Пьезоэлемент,— электронное устройство, которое генерирует напряжение, когда оно физически искажено вибрацией, звуковой волной или механическим напряжением. Когда вы пропускаете напряжение через пьезоэлемент, он начинает вибрировать и издает звук. Пьезоэлементы могут использоваться и чтобы издавать звуки (пьезодинамик) и чтобы обнаружить их (пьезоэлектрический микрофон).
Скетч читает выход пьезоэлемента, используя команду analogRead(), приводя диапазон его выходного напряжения от 0 до 5 Вольт к числовому диапазону от 0 до 1023. Это называется аналого-цифровое преобразование или АЦП.
Если выход с датчика сильнее, чем установленный порог, то ваш Arduino пошлет последовательность «Knock!» компьютеру по последовательному порту.
Откройте монитор последовательного порта, чтобы увидеть этот текст.
Необходимые аппаратные средства:
- Плата Arduino (например UNO, Nano или Pro Mini) – 1 шт
- Пьезоэлектрический диск – 1 шт.
- Резистор МОм – 1 шт
Схема:
Пьезоэлементы поляризованы, что означает что напряжение проходит через них (или из них) в определенном направлении. Подключите черный провод (более низкое напряжение) к земле, а красный провод (более высокое напряжение) к аналоговому пину 0. Дополнительно, соедините резистор на 1 МОм параллельно с пьезоэлементом, чтобы ограничить напряжение и ток, произведенный им и защитить аналоговый вход.
Возможно приобрести пьезоэлементы без пластмассовой упаковки. Они будут выглядеть как металлический диск и легче использоваться в качестве входных датчиков.
Код
const int ledPin = 13; // встроенный светодиод на пине 13
const int knockSensor = A0; // пьезоэлемент, подключен к пину А0
const int threshold = 100; // пороговое значение
int sensorReading = 0; // переменная для хранения значения с датчика
bool ledState = false; // переменная для хранения состояния светодиода
void setup() {
pinMode(ledPin, OUTPUT); // объявляем ledPin как выход
Serial.begin(9600); // подключение последовательного порта
}
void loop() {
sensorReading = analogRead(knockSensor); //читаем напряжение с датчика
if (sensorReading >= threshold) { //если оно выше порогового значения
ledState = !ledState; //инвертируем состояние светодиода
digitalWrite(ledPin, ledState);
Serial.println("Knock!"); //посылаем в монитор порта слово "Knock!"
delay(100); // задержка
}
}