Датчик стука

Zets
Offline
Зарегистрирован: 20.04.2014

Привет ребята!

Помогите разобраться. Стоит задача сделать датчик стука. Всюду предлагается использовать пьезоэлемент. Но у меня ничего не получается. Я пробовал: 1. обычный пьезо, 2. пьезо с транзистором и 3. минидинамик 8 Ом. 

Я использовал примитивный код чтобы попытаться определить порог чувствительность

int sensor = A0;
void setup() {
Serial.begin(9600);
}
 
void loop() {
Serial.println(analogRead(sensor));
delay(100);
}

Но в 1 и 3 случае в мониторе я получаю одни нули. Лишь хлопнув их со всей дури изредко в 1 случае подскакивает до 6, в 3 случае до 40. Во 2 случае все еще сложнее, значение пляшет между от 590 до 630 и рандомно иногда зашкаливает до максимума.

То есть как датчик такое естественно работать не может. Пробовал на nano, uno, mega - результать один.

Еще момент, если оставить A0 висеть в воздухе, то с него читаются рандомные значения в районе 300.

Стоит Win7, Arduino IDE 1.6.8.

Что я делаю не так, ведь судя по статьям у других это работает?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Zets пишет:

int sensor = A0;
void setup() {
Serial.begin(9600);
}
 
void loop() {
Serial.println(analogRead(sensor));
delay(100);
}

Но в 1 и 3 случае в мониторе я получаю одни нули. Лишь хлопнув их со всей дури изредко в 1 случае подскакивает до 6, в 3 случае до 40.

Это - хорошие результаты.

Время измерения - 0.1 мс, время интервала между измерениями (т.е. время, когда никто ничего не меряет) - 100 мс.

То, что у Вас что-то получается чаще, чем 1 раз на 1000 - это просто большая удача!

Цитата:

То есть как датчик такое естественно работать не может.

Если Вы имеете в виду скетч, то - да, безусловно.

Цитата:

Пробовал на nano, uno, mega - результать один.

Вы считаете, что один и тот же скетч должен на почти одинаковых контроллерах работать как-то по-разному?

Цитата:

Что я делаю не так, ведь судя по статьям у других это работает?

Попытайтесь как-то улучшить соотношение времен, когда датчик что-то меряет, и когда датчик находится в простое.

Araris
Offline
Зарегистрирован: 09.11.2012
int sensor = A0;
int cur_level;
int max_level = 10; // Подбираем значение экспериментально.

void setup() {
Serial.begin(9600);
}
 
void loop() {
cur_level = analogRead(sensor);
if (cur_level > max_level) 
 {
 Serial.println(cur_level);
 }
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Araris пишет:

int sensor = A0;
int cur_level;
int max_level = 10; // Подбираем значение экспериментально.

void setup() {
Serial.begin(9600);
}
 
void loop() {
cur_level = analogRead(sensor);
if (cur_level > max_level) 
 {
 Serial.println(cur_level);
 }
}

 

а RC на вход , если известна некоторая постоянная периодичности стука

 

Zets
Offline
Зарегистрирован: 20.04.2014

andriano пишет:

Попытайтесь как-то улучшить соотношение времен, когда датчик что-то меряет, и когда датчик находится в простое.

Суть понял, спасибо! Буду пробовать. Смутило то что во всех найденных примерах стоит задержка именно 100 мс.

 

Araris пишет:

int sensor = A0;
int cur_level;
int max_level = 10; // Подбираем значение экспериментально.

void setup() {
Serial.begin(9600);
}
 
void loop() {
cur_level = analogRead(sensor);
if (cur_level > max_level) 
 {
 Serial.println(cur_level);
 }
}

 

Спасибо, я попробую!

 

ua6em пишет:

а RC на вход , если известна некоторая постоянная периодичности стука

Не совсем понял, можно подробнее? Резистор порядка 1 Мом я ставил параллельно пьезоэлементу, если об этом.

Zets
Offline
Зарегистрирован: 20.04.2014

В общем спасибо ребята!

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