Пружинный вибродатчик
2019-02-10, Ar Ar
Когда я перевёл статью о псевдодеревянных светодиодных часах, некоторые читатели подумали: можно ли в них датчик вибрации, необходимый для переключения режимов часов, термометра и гигрометра по кольцу, заменить на самодельный? Конечно, можно, и автор Instructables под ником ArifSae рассказывает, как.
В качестве подвижного элемента датчика мастер использует пружину из обмоточного провода. Помимо медной, можно использовать и стальную пружину, например, от авторучки с кнопкой, но она более жёсткая, что повлияет на параметры датчика.
Поскольку обмоточный провод покрыт лаком, его нужно зачистить. Для этого ArifSae применяет наждачку:
Наматывает зачищенный провод (кстати, взятый из двигателя сломанного компьютерного вентилятора) на гвоздь:
И собирает из пружины и 220-омного резистора на макетной плате типа perfboard такую штуку:
Если пружина медная, располагать такой вибродатчик следует строго вертикально, иначе пружина наклонится и коснётся вывода резистора и при отсутствии вибрации. Со стальной пружиной можно добиться работы датчика в любом положении.
Подавлять дребезг контактов датчика можно как программно, так и аппаратно. Второе позволяет упростить программу, при этом электрическая схема усложняется незначительно. Одна из схем для аппаратного подавления дребезга показана на рисунке:
Такая схема также удлиняет импульс при очень коротком соприкосновении пружины с выводом резистора. Это помогает программе обнаружить срабатывание, даже если она написана с использованием тяжёлых библиотек и «тормозит». В прошивку вышеупомянутых псевдодеревянных часов лазить не придётся, с самодельным датчиком режимы будут переключаться по кольцу точно так же, как с готовым.
У разработчика вибродатчик подключён к аналоговому входу Arduino, что позволяет считывать его состояние как командой digitalRead, так и командой analogRead. Во втором случае можно отключить конденсатор, тогда аппаратного подавления дребезга не будет, и программа сможет оценивать интенсивность вибрации. Ниже приведены два скетча-примера использования соответствующих команд. Первый:
int sensor = A5; // sensor pin
int led = 13; // default led on arduino
void setup() {
pinMode (sensor, INPUT);
pinMode (led, OUTPUT);
Serial.begin(9600);
}
void loop() {
int voltage = digitalRead(sensor); // read sensor here
Serial.println (voltage); // print voltage to serial monitor on pc
delay (1000);
if (voltage >= 1) { // if spring contacts on shaking
digitalWrite (led, HIGH); // turn on led to show that vibration is sensed
delay (2000);
digitalWrite (led, LOW); // turn off led now
} // end if voltage
} // end loop
И второй:
int sensor = A5;
int led = A0;
void loop() {
int sensorValue = analogRead(sensor);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.println (voltage); delay (200);
if (voltage >= 0.5) { // set sensitivity here, increase voltage 0.5 for less sensitive , decrease for more sensitive
digitalWrite (led, HIGH);
delay (2000);
digitalWrite (led, LOW); }
}
Преимущество вибрационного датчика перед сенсорным состоит в возможности переключать режимы не прикосновением к определённой точке корпуса, а постукиванием по нему в любом месте. При втором способе считывания можно добиться различной реакции в зависимости от интенсивности постукивания. Например, сделать переключение режимов по кольцу реверсивным: при слабом постукивании в одну сторону, при сильном - в другую.
Источник
Этот пост может содержать партнерские ссылки. Это означает, что я зарабатываю небольшую комиссию за ссылки, используемые без каких-либо дополнительных затрат для вас. Дополнительную информацию смотрите в моей политике конфиденциальности.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.