Схема измерения пьезовибраций Arduino

Я ищу очень простую измерительную схему для измерения вибраций с помощью пьезоэлемента и устройства Arduino. Я хочу читать положительные и отрицательные значения.

У меня есть этот датчик: http://www.seeedstudio.com/wiki/Grove_-_Piezo_Vibration_Sensor

Я знаю, что этот сенсорный модуль дает мне только цифровой выход. Но я хочу измерить амплитуды вибрации и частоту. Поэтому я бы использовал только пьезоэлемент.

Я нашел много примеров, от очень простых до очень точных. Но большинство из них отсекают отрицательные значения. Например, http://www.learningaboutelectronics.com/Articles/Piezo-knock-sensor-circuit.php

А в примере выше защиты ардуино нет. Я также нашел заявления о том, что Arduino не нуждается в защите, считывающей пьезодатчик на аналоговом выводе, из-за низкого тока. Аналоговые контакты защищены от более высоких напряжений.

Я хочу, чтобы простая схема считывала отрицательные и положительные значения с этого пьезоэлемента. Мое устройство Arduino использует входное напряжение 3,3 В. Пьезодатчик может иметь в крайнем случае до 70-90В.

Какова минимальная конфигурация для создания такой схемы измерения? Мне не нужна высочайшая точность. Это должно быть как можно проще. Это только для тестовых целей. Я думаю, что мне нужно использовать делитель напряжения с двумя одинаковыми высокими сопротивлениями, чтобы установить смещение постоянного тока для измерения отрицательных значений. Но что еще мне нужно для минимального рабочего примера?

Измерение отрицательной части сигнала увеличит сложность схемы. Как вы думаете, почему в отрицательной части сигнала есть полезная информация, которой нет и в положительной части? Кажется, вы планируете сэмплировать сигнал с помощью аналого-цифрового преобразователя (АЦП) Arduino. Какую частоту вы ожидаете от сигнала? Насколько я знаю, пьезодатчик может генерировать сигнал, который слишком быстр для АЦП Arduino, поэтому образцы могут быть псевдонимами и, следовательно, слишком неточными, чтобы многое вам сказать. Причина, по которой пьезодатчики могут сниматься в цифровом виде, заключается в том, что выборку можно производить намного быстрее.
@gbulmer Я хочу просто увидеть вибрации машины, такой как стиральная машина или двигатель. Как бы вы сэмплировали цифровой выход? Но тогда мне нужно знать амплитуду заранее, чтобы настроить чувствительность с помощью потенциометра, верно? Если чувствительность слишком высока, а вибрация слишком сильная, я бы все время получал двоичную 1 в качестве значения измерения. И если чувствительность слишком низкая, а вибрация слишком слабая, я бы не узнал вибрацию, верно?
«Но тогда мне нужно знать амплитуду заранее, чтобы настроить чувствительность с помощью потенциометра, верно?» Нет, сигнал пересекает ноль в каждом цикле. Таким образом, информация о частоте по-прежнему доступна в цифровом потоке. Амплитуда теряется. «Если чувствительность слишком высока, а вибрация слишком сильная, я бы все время получал двоичную 1 в качестве значения измерения». Нет, неверное предположение; пересечения нуля дают частоту цифровому сигналу. «А если чувствительность слишком низкая, а вибрация слишком слабая, я бы не узнал вибрацию, верно?». Да. Однако с пьезодатчиком это маловероятно.
@gbulmer А, хорошо, верно. Большое спасибо! Датчик подключен к устройству arduino. Устройство отправляет измеренные данные на raspberry pi, на котором работает Windows iot. Вы бы запустили БПФ (чтобы получить частоту) непосредственно на Arduino или на Raspberry Pi? Есть ли проблема, когда я сначала передаю данные на Pi?
Для этого было бы лучше задать второй вопрос и сосредоточить этот вопрос на его текущем объеме. В этом новом вопросе объясните, для чего вы собираетесь использовать измерения. Я видел опубликованный код для выполнения БПФ на пару кГц на Arduino, но я никогда не пытался его использовать. В общем, гораздо проще заставить систему работать, используя слишком много вычислительной мощности, а затем оптимизировать ее, чем заставить систему работать, используя едва недостающую вычислительную мощность. Так что я бы использовал R-Pi, чтобы заставить его работать.

Ответы (1)

Используя почти любую статью, размещенную в Интернете, о измерении пьезодатчика в цифровом виде, можно получить частоту вибрации. Это имеет огромное преимущество, заключающееся в том, что цифровой вывод может быть обнаружен примерно в 1000 раз быстрее, чем АЦП.

Проблема с использованием АЦП для выборки фактического сигнала заключается в том, что АЦП Arduino настолько медленный, что выборки могут иметь наложение (выборка сигнала ниже критерия Найквиста- Шеннона ) и дают очень ненадежную информацию.

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

Защитите выводы MCU с помощью резистора и диода, подключив сигнал к выводу через резистор к выводу MCU и к земле через диод. Я бы, вероятно, использовал диод Шоттки, чтобы остановить сигнал, проходящий намного ниже земли.

Кроме того, защитите вход от потенциально очень высокого напряжения с помощью стабилитрона (3,3 В для микроконтроллера 3,3 В, 5 В/5,1 В для микроконтроллера 5 В), также подключенного к земле, чтобы сигнал не мог подняться выше контакта Arduino. рабочий диапазон.

Хотя можно полагаться на диоды для защиты от электростатического разряда, использование диода для защиты от электростатического разряда выходит за рамки технических характеристик устройства. Кроме того, я знаю парня, который повредил несколько контактов ардуино с помощью пьезодатчика. Не стоит экономить несколько пенсов.

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

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

Не совсем ясно, какие именно двигатели вы хотите измерить. Для чего-то вроде стиральной машины при отжиме, скажем, 1200 об/мин это 20 Гц. Таким образом, фильтра нижних частот на частоте 100 Гц+ и дискретизации на частоте 1 кГц+ должно быть достаточно. Это должно быть в пределах возможностей Arduino.