Калибровка кнопки с библиотеки capsense
- Войдите на сайт для отправки комментариев
Всем Доброго времени суток, на днях назрел вопрос как сделать автоматическую калибровку при использовании библиотеки Capsense. Суть такова есть значения получаемые с сенсора
Днем значения в покое ~50 при касании кнопке ~67
Вечером значения в покое ~ 70 при нажатой кнопке ~87
соответственно вечером при чувствительности 67 уже идут ложные срабатывания если значения ставить выше 70 то в утром будет недабор значений так как потолок при касании - 69.
Как сделать чтобы значения в покое калибровались автоматически и к примеру отсчет был с 0 не понятно.
ниже привел свой скетч, в качестве стабилизации которой смог придумать на кнопку это счетчик. так же хотел пробовать играть со значениями
set_CS_Timeout_Millis(unsigned long timeout_millis); reset_CS_AutoCal(); set_CS_AutocaL_Millis(unsigned long autoCal_millis); не понял что каждое из них дает результата не заметил.
в скетче использую Capacitive.sensorRAW - только так смог добиться более менее стабильных показаний и видеть реальную картину происходящего. в самой схеме применяю резистор на 100К и конденсатор на 20пикофарад. Играться с номиналом резисторов пробовал меняются только значения в высшую сторону разница не меняется, использую Arduino Nano.
#include <CapacitiveSensor.h> int led = 13; CapacitiveSensor k1 = CapacitiveSensor(4,2); int cout1; int out1; long cap1; boolean key1() { cap1 = k1.capacitiveSensorRaw(30); cout1 = constrain (out1,0,80); if (cap1 >=69 && out1 <= 20) out1++; if (cap1 >=69 && out1 >= 20) out1=80; if (cap1 < 69 && out1 >= 0) out1--; if (cap1 < 69 && out1 == 20) out1=0; if (cout1 >= 20) return 1; else return 0; } void setup(){ Serial.begin(9600); pinMode(led,OUTPUT); } void loop(){ digitalWrite(led,key1()); Serial.println(cap1); }
Брать среднее значение за последние 1,3,5 минут. Можно при этом отбрасывать, все что скажем "значения которые больше текущего среднего на 10". В итоге это "средние" будет у вас нижней границей (если только никто, специально не будет держать руку на пластине по несколько минут). Ну а дальше - ловить сработку не по "абсолютному значению", а по отличию его от "текущего среднего".
Спасибо Leshak/ Пошел вашим путем создал переменную float (так как надо вычислять не целые числа), делаю измерения каждые 5 секунд на протяжении последних 15 минут итого 180 измерений вроде полет нормальный, в теории может быть отказ работы кнопки в случае если кто нибудь по 10 минут будет держать нажатой кнопку. на этот случай можно мерить послений час.
ниже фрагмент кода
в теории может быть отказ работы кнопки в случае если кто нибудь по 10 минут будет держать нажатой кнопку. на этот случай можно мерить послений час.
Значит нужно "защиту от дурака". Понятно что если дурак с ломом - ничего не поможет, но если без лома... ;)
Вы же ловите "кнопка нажата"? Ну значит пока ее не отпустят - обновлять среднее не нужно.
Понятно что если дурак с ломом - ничего не поможет,
Хотя... если сочинить "детектор лома" :) Железка как никак. Теоретически возможно ;)
Leshak спасибо что подсказал на на счет обновлений во время нажатий опять же Вам +1 ))
Leshak спасибо что подсказал на на счет обновлений во время нажатий опять же Вам +1 ))
Да не за что :)
Возможно вам еще нужно продумать, что-бы на старте, Взять какое-то значение и "объявить его средним". Что-бы он 15-ть минут не "разогревался". Или... первые 180-замеров сделать с намного меньшим интервалом.
это я сразу в сетапе описал
А еще я сегодня код уже оттестировал работает на ура 4 сенсорные клавиши.
это я сразу в сетапе описал
А еще я сегодня код уже оттестировал работает на ура 4 сенсорные клавиши.
"Поделись улыбкою своей,И она к тебе не раз ещё вернётся." (C)
Вот поделились бы кодом целиком, то небыло бы лишних уточнений :)
Если там "много всего другого" - можно сделать упрощенную версию. Без экраном и проч. Оставить только работу с кнопками и какой-нибудь Serial.println сообщающий какая кнопка нажата.
Авось залетит сюда редкая ископаемая птица "новичок пользующийся поиском". Уталит жажду вашим кодом ;)
А вот и код
появился один вопрос как эти кнопки будут вести себя при статическом электричестве? если я к примеру случайным образом разряжусь через эту кнопку после того как сниму синтетическую футболку.
Очень хороший вопрос я им задавался только когда начал изучать тач сенсоры, в данном случае они не увеличивают среднее знаечение болше чем на 1% а соответственно все будет работать, и сейчас сам специально нашел свитер снимал одевал снимал одевал его и "разрядился в кнопку" монитор порта даже не увидел этого "щелчка"