Стук (датчик стука)

Автор: | 28.10.2023
Тук-тук!

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

Пьезоэлемент,— электронное устройство, которое генерирует напряжение, когда оно физически искажено вибрацией, звуковой волной или механическим напряжением. Когда вы пропускаете напряжение через пьезоэлемент, он начинает вибрировать и издает звук. Пьезоэлементы могут использоваться и чтобы издавать звуки (пьезодинамик) и чтобы обнаружить их (пьезоэлектрический микрофон).

Скетч читает выход пьезоэлемента, используя команду 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);  // задержка     
  }
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *