Содержание
- Обзор
- Технические характеристики
- Подключение к Arudino
- Пример использования
- FAQ
Обзор
Резистивный датчик давления представляет из себя переменный резистор, сопротивление которого зависит от силы, приложенной к чувствительному элементу. Таким образом можно косвенно оценить силу нажатия или вес воздействующего на датчик объекта. Благодаря своей простоте, стойкости к износу и невысокой стоимости, резистивные датчики широко используются в различных проектах совместно с платформами Arduino. На сегодняшний день выпускается множество модификаций датчиков, работающих на подобном принципе. Они могут отличаться размером, формой, иметь разный диапазон и кривую изменения сопротивления, но алгоритм работы у всех одинаковый. На рисунке №1 показан один из наиболее распространённых видов датчиков, выпускаемых фирмой Sparkfun.
Рисунок №1 - Резистивный датчик давления для Arduino от Sparkfun
В данном исполнении радиус чувствительного элемента составляет 15мм, а плоская эластичная форма даёт возможность фиксировать сенсор практически на любой поверхности, например: на стенах; под различными механизмами в квест-комнатах; внутри мягких игрушек и ковриков; под одеждой и т.п.
Конструктивно датчик состоит из двух слоёв, разделённых между собой изоляционной прокладкой специальной формы. Верхний слой представляет из себя плёнку со встречно напечатанными проводниками. Это и есть тот самый чувствительный элемент, на который необходимо воздействовать путём нажатия. Нижний слой выполнен в виде подложки с печатным полупроводником. Следовательно, чем больше будет оказываться давление на чувствительный элемент, тем больший процент печатных проводников начнёт взаимодействовать с полупроводниковой подложкой. Всё это приведёт к последовательному уменьшению сопротивления резистивного датчика. На рисунке №2 показана структура сенсора с разделением на слои.
Рисунок №2 – Структурная схема с разделением на слои
Основным недостатком резистивных датчиков давления является их невысокая точность и нелинейность смены сопротивления. Это говорит о том, что применять подобные устройства для измерения точных величин не имеет никакого смысла. Однако, оценить сам факт нажатия или степень давления на сенсор вполне возможно. На рисунке №3 приведён график, взятый из технической документации. Он наглядно позволяет оценить нелинейную зависимость изменения сопротивления от силы нажатия на чувствительный элемент датчика.
Рисунок №3 – график зависимости сопротивления от силы нажатия
Как следует из графика, с увеличением давления, сопротивление начинает резко уменьшаться, но это процесс в каждой фазе происходит по-разному.
Технические характеристики
- Диапазон фиксирования веса: 100г…10кг;
- Длинна: 61мм;
- Диаметр подложки с чувствительным элементом: 18мм;
- Толщина: 0,2мм;
- Вес: 20 грамм;
- Гарантированное сопротивление без оказания давления: >1 Мом;
- Диапазон сопротивлений: ∞…200 Ом;
- Износостойкость: до 10 миллионов нажатий;
- Диапазон рабочих температур: -30°С…+70°С;
- Максимальная скорость срабатывания: 1-2 мСек;
- Максимальный ток: Ima / cm2 приложенной силы;
- Расстояние между контактами: 2.54мм;
Подключение к Arduino
Как упоминалось ранее, резистивный датчик давления – это своего рода переменный резистор, средний вывод которого открыт для физического воздействия. На практике это утверждение можно проверить с помощью обычного мультиметра, выставленного в режим измерения сопротивления. При надавливании на чувствительный элемент показания прибора должны изменяться в меньшую сторону. Наглядно этот процесс демонстрирует рисунок №4.
Рисунок №4 – проверка работоспособности датчика
Исходя из вышеизложенного можно сделать вывод, что для подключения данного сенсора к плате Arduino, будет разумно воспользоваться схемой, построенной по принципу резистивного делителя напряжения. Её суть сводиться к тому, что между плюсом и минусом питания включаются два последовательно соединённых резистора, а сигнал снимается со средней точки. При этом один резистор имеет постоянное сопротивление, а второй – может его изменять (как наш исследуемый датчик). Подобрав нужные параметры на выходе средней точки можно получить диапазон напряжений от 0В до напряжения питания. Остаётся только измерить это напряжение, например с помощью аналогового входа платы Arduino, и путём анализа данных сделать выводы о степени нажатия. На рисунке №5 показана схема делителя напряжения с формулой и примером расчёта выходного напряжения исходя из данных мультиметра.
Рисунок №5 – схема делителя напряжения
Как видно из схемы, сенсор давления включен в нижнее плечо делителя и обозначен как R2, в то время как R1 – это обычный постоянный резистор. Разрешение АЦП микроконтроллеров AVR, входящих в стандартную линейку плат Arduino, составляет 10 бит. Это значит, что в диапазоне от 0В до 5В мы сможем получить 210 или 1023 дискретных уровня. Т.е. Arduino способна фиксировать изменения напряжения на каждые 5/1023=0,0049В или 4,9мВ. Это вполне приемлемо для использования данной концепции.
На рисунке №6 показан пример подключения резистивного датчика давления к плате ArduinoNano по схеме делителя напряжения.
Рисунок №6 – схема подключения датчика к плате ArduinoNano
Ниже приведен код программы, позволяющий выводить значения АЦП и напряжения средней точки резистивного делителя в окно терминала. Эти цифры будут уменьшаться с ростом давления на датчик и увеличиваться по мере сбавления натиска.
void setup() { // Инициализируем серийный порт для вывода информации в терминал Serial.begin(9600); // Источник опорного напряжения для АЦП равен напряжению питания или 5В analogReference(DEFAULT); } void loop() { // Считываем показания АЦП в переменную uint16_t adc = analogRead(7); // Вычисляем напряжение на средней точке резистивного делителя float Uout = float(adc) * 5.0 / 1023.0; // Выводим информацию в терминал Serial.print("ADC="); Serial.print(adc); Serial.print(" Uout="); Serial.print(Uout, 4); Serial.println("V"); delay(1000); }
На рисунке №7 показан результат работы программы.
Рисунок №7 - Результат опроса резистивного датчика давления
Вышеприведенный рисунок иллюстрирует поведение датчика при плавном нажатии на его чувствительный элемент и последующем плавном отпускании. Как видно из полученных значений, охватывается весь диапазон от 0В до 5В.
Пример использования
Сфера применения резистивных датчиков давления довольно широка. Они могут использоваться в качестве концевиков в различных механизмах; как подобие сенсорных кнопок; как регистратор присутствия груза на конвейере или в лифте, как датчики удара и т.п.
Чтобы закрепить материал статьи, создадим небольшой проект музыкального прибора под названием “терменвокс”. Суть этого устройства заключается в изменении тона звука от силы воздействия на чувствительный элемент. И если в классическом терменвоксе чувствительным элементом является антенна, то в нашем случае эту роль выполнит датчик давления. Для усиления эффекта добавим светодиод, который будет менять свою яркость пропорционально частоте сигнала. В качестве излучателя звука будет использован буззер без встроенного генератора. Схема проекта показана на рисунке №8.
Рисунок №8 - схема проекта “Терменвокс”
Ниже приведен код проекта с подробными комментариями:
void setup() { // Источник опорного напряжения для АЦП равен напряжению питания или 5В analogReference(DEFAULT); // Настройка на выход пина для излучателя звука pinMode(3, OUTPUT); // Настройка на выход пина для светодиода pinMode(9, OUTPUT); } void loop() { // Считываем показания АЦП в переменную uint16_t adc = analogRead(7); // Конвертируем полученное значение АЦП в звуковую сатоту путём масштабирования uint16_t t = map(adc, 0, 1023, 3000, 0); // Конвертируем полученное значение АЦП в ШИМ для светодиода путём масштабирования uint8_t p = map(adc, 0, 1023, 255, 0); if(t > 50) { // Если зафиксировано нажатие (значение 50 установлено для фильтрации наводок) tone(3, t); // Проигрываем звук с частотой, пропорциональной силе нажатия analogWrite(9, p); // Зажигаем светодиод с яркостью, пропорциональной силе нажатия } else { // Иначе (если нажатие на датчик не зафиксировано) noTone(3); // Выключаем звуковой излучатель analogWrite(9, 0); // Гасим светодиод } }
Прототип готового устройства показан на рисунке №9 Рисунок №9 - проект “Терменвокс”
FAQ. Часто задаваемые вопросы
Вопрос:Возможно ли подключение данного датчика к цифровому пину Arduino вместо аналогового?
Ответ:Такое подключение вполне приемлемо. В этом случае требуется подобрать резистор в верхнем плече делителя напряжения таким образом, чтобы получить напряжение логического нуля при комфортной для вас степени нажатия на датчик.
Вопрос:Какой разброс показаний может быть у двух одинаковых датчиков?
Ответ:Разброс точности составляет около 10%.
Вопрос:Следует ли соблюдать полярность подключения датчика давления и как её определить?
Ответ:Датчик давления по своей структуре является обычным резистором, а это значит, что полярность подключения не имеет никакого значения.
Вопрос:Где можно взять техническую документацию да данный сенсор?
Ответ:Документацию можно скачать по этой ссылке.