Резистивный датчик давления и Arduino: схема и примеры

Как устроен плёночный резистивный датчик давления, как подключить его к Arduino через делитель напряжения и где он пригодится.
Принцип действия
Резистивный датчик давления ведёт себя как переменный резистор: чем сильнее нажатие на чувствительную площадку, тем меньше его сопротивление. По этой величине косвенно оценивают силу нажатия или вес предмета. Датчики такого типа просты, износостойки и выпускаются во множестве вариантов, которые различаются размерами, формой, диапазоном и характером изменения сопротивления. Принцип работы у них общий. Один из самых распространённых выпускает фирма Sparkfun.

Датчик плоский и гибкий, поэтому его легко закрепить на стене, под механизмом в квест-комнате, внутри мягкой игрушки или коврика, под одеждой. Он состоит из двух слоёв, разделённых изолирующей прокладкой. Верхний слой представляет собой плёнку со встречно напечатанными проводниками, на неё и нажимают. Нижний слой является подложкой с печатным полупроводником. С ростом давления всё большая часть проводников соприкасается с подложкой, и сопротивление падает.

Главный недостаток заключается в невысокой точности и нелинейной зависимости сопротивления от силы. Для точных измерений такой сенсор не годится, зато хорошо определяет сам факт нажатия и его примерную степень. Разброс показаний между двумя одинаковыми экземплярами достигает около 10%.
Технические характеристики
| Диапазон фиксируемого веса | 100 г – 10 кг |
| Длина | 61 мм |
| Диаметр подложки с чувствительным элементом | 18 мм |
| Толщина | 0,2 мм |
| Сопротивление без нажатия | более 1 МОм |
| Диапазон сопротивлений | от бесконечности до 200 Ом |
| Износостойкость | до 10 миллионов нажатий |
| Рабочая температура | от -30 до +70 °С |
| Скорость срабатывания | 1–2 мс |
| Расстояние между контактами | 2,54 мм |
Проверка и схема включения
Работоспособность проверяют мультиметром в режиме измерения сопротивления: при нажатии на площадку показания должны уменьшаться. Полярность значения не имеет, так как по сути это обычный резистор.

К Arduino датчик подключают по схеме делителя напряжения. Между плюсом и минусом питания последовательно включают постоянный резистор R1 и датчик, а сигнал снимают со средней точки. В приведённой схеме сенсор стоит в нижнем плече и обозначен как R2. При правильно подобранном резисторе напряжение в средней точке меняется от 0 В до напряжения питания.

Напряжение измеряется аналоговым входом. АЦП микроконтроллеров AVR на стандартных платах Arduino имеет разрядность 10 бит, поэтому при опорном напряжении 5 В шаг измерения составляет около 4,9 мВ. Такого разрешения для задачи достаточно.
Чтение показаний
В примере с Arduino Nano средняя точка делителя подключена к аналоговому входу 7. Скетч задаёт опорное напряжение, равное напряжению питания (analogReference(DEFAULT)), раз в секунду читает АЦП через analogRead(7), пересчитывает результат в вольты умножением на 5.0 и делением на 1023.0 и выводит оба значения в терминал на скорости 9600. При усилении нажатия числа уменьшаются, при ослаблении растут. При плавном нажатии и отпускании показания проходят весь диапазон от 0 до 5 В.
Допустимо подключение и к цифровому входу. В этом случае резистор верхнего плеча подбирают так, чтобы при нужной силе нажатия напряжение в средней точке опускалось до уровня логического нуля.
Применение и проект «Терменвокс»
Резистивные датчики давления используют как концевые выключатели в механизмах, как подобие сенсорных кнопок, для регистрации груза на конвейере или в лифте, как датчики удара.
Наглядный пример представляет собой упрощённый терменвокс, в котором высота тона зависит от силы нажатия на датчик. Звук воспроизводит буззер без встроенного генератора на выводе 3, а светодиод на выводе 9 меняет яркость вместе с частотой. Программа читает АЦП со входа 7 и функцией map переводит диапазон 0–1023 в частоту от 3000 до 0 и в значение ШИМ от 255 до 0. Если полученная частота больше 50 (этот порог отсекает наводки), вызывается tone(3, t) и светодиод зажигается с соответствующей яркостью. В противном случае звук отключается через noTone(3), а светодиод гаснет.