Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Датчик встречается в виде модуля KY-031. Датчик чувствует удары по корпусу объекта в котором он смонтирован. Устанавливается в охранные системы автомобилей, применяется в охранной сигнализации дверей и ворот.
Модуль датчика наиболее чувствителен к ударам направленным поперёк плоскости платы. Воздействие воспринимает чувствительный элемент, представляющий собой пружину, конец которой окружён контактами. При ударе пружина изгибается, конец пружины касается контактов и цепь датчика замыкается. Между входом питания и выходом датчика находится резистор 10 кОм. При срабатывании датчика замыкается контакт, который может быть соединён с входом прибора.
У модуля три вывода: земля, питание, цифровой вывод.
KY-031 | Arduino
----------------
- | GND
+ | 5V
S | D
Скетч для датчика. Навеяно фильмом "Матрица".
//KY-031 Knock Sensor
int knockPin = 4;
int knockValue = HIGH; // this is where we record our shock measurement
boolean bAlarm = false;
unsigned long lastKnockTime; // record the time that we measured a shock
int knockAlarmTime = 500; // number of milliseconds to keep the knock alarm high
void setup ()
{
Serial.begin(9600);
pinMode (knockPin, INPUT);
}
void loop ()
{
knockValue = digitalRead (knockPin); // read value
if (knockValue == LOW) // If we see a knock
{
lastKnockTime = millis(); // record the time of the shock
if (!bAlarm) {
Serial.println("Knock Knock, Neo");
bAlarm = true;
}
}
else
{
if ( (millis() - lastKnockTime) > knockAlarmTime && bAlarm) {
Serial.println("no knocks");
bAlarm = false;
}
}
}