Датчик вибрации подключение к Ардуино

Подключение датчика вибрации к Ардуино

Датчик вибрации Arduino используется для определения наличия внешних вибрационных воздействий на модуль и применяется при создании домашней сигнализации. Рассмотрим несколько примеров использования датчика, представим на этом занятии несколько схем подключения сенсора вибрации к плате Ардуино и продемонстрируем простой скетч с использованием цикла while() в языке C++.

Принцип работы датчика вибрации

Данный сенсор может выпускаться в виде модуля, например, SW-420, logo sensors v1.5 или сенсора вибрации 140с001 для Ардуино. Основа датчика SW-420 – металлическая пружина внутри пластиковой трубки, которая начинает колебаться при вибрации. На модуле имеется усилитель сигнала, подстроечный резистор, для регулировки чувствительности датчика и три вывода для подключения к микроконтроллеру.

Распиновка сенсоров вибрации
Распиновка Logo sensors v1.5 и 801S Vibration Sensor Module

Внутри сенсора 801S находится металлический шарик на пружинке, который реагирует на малейшие колебания. Принцип работы данных датчиков можно сравнить с тактовой кнопкой — если контакты на кнопке замыкаются, когда мы на нее нажимаем, то контакты в рассматриваемом нами датчике замыкаются при возникновении вибрации. Рассмотрим далее, как подключить датчик вибрации к плате Arduino UNO.

Logo sensors v1.5 имеет три выхода — GND и VCC для питания и вывод аналогового сигнала A0, который подключается к любому аналоговому входу. Модуль вибрации 140C001 801S имеет дополнительно цифровой порт, при достижении определенной величины вибрации (устанавливается подстроечным резистором) на порт выдается логический ноль — поэтому его можно использовать автономно, без контроллера.

Подключение к Ардуино датчика вибрации

Чтобы использовать модуль или датчик HDX в качестве сенсора колебаний следует использовать различные схемы подключения. Модуль SW-420 или датчик вибрации 140с001 801s следует подключать напрямую к Arduino, согласно распиновке (см. схему выше). Датчик HDX в виде одного элемента необходимо подключать через резистор к цифровому или аналоговому входу на микроконтроллере, как на схеме.

Для занятия нам понадобятся следующие детали:

  • Плата Arduino Uno;
  • Макетная плата;
  • USB-кабель;
  • Датчик вибрации;
  • 1 светодиод;
  • 2 резистора 220 Ом;
  • 1 тактовая кнопка;
  • Провода «папка-папка» и «папка-мамка».
Как подключить датчик вибрации к Ардуино УНО
Как подключить датчик вибрации к Ардуино УНО

После подключения датчика к Ардуино, загрузите (скачать) скетч:

#define SENSOR A0 // Присваиваем имя аналоговому порту A0
#define LED 13    // Присваиваем имя 13 порту со светодиодом

int sens = 0;     // Освобождаем память для значений с порта A0
 
void setup()
{
  pinMode(LED, OUTPUT);   // Пин 13 будет выходом (англ. «output»)
  pinMode(SENSOR, INPUT); // Пин A0 будет входом (англ. «input»)
  Serial.begin(9600);     // подключаем монитор порта
}
 
void loop()
{
  sens = analogRead(SENSOR); // Считываем значение с датчика вибрации
  Serial.println(sens);      // Выводим значение с датчика на монитор порта

  // Если значение sens больше 500, включаем светодиод
  if (sens>500) digitalWrite(LED, HIGH); // У вас значения могут быть другие

  // Если значение sens меньше 500, выключаем светодиод 
  if (sens<500) digitalWrite(LED, LOW); // У вас значения могут быть другие
}

Пояснения к коду:

  1. В первой строчке программы, для удобства, мы присвоили имя SENSOR для аналогового входа A0 с помощью функции #define;
  2. В вашем случае значения sens могут быть абсолютно другие — все зависит от настройки чувствительности датчика;
  3. Условный оператор if позволяет определить действие при истинном условии.

Задание для самостоятельного выполнения:

  1. Подключите светодиод к Pin 12. Перепишите скетч так, чтобы при срабатывании сенсора светодиод автоматически включался.

В предложенном скетче светодиод будет включаться только при наличии вибрации и выключаться при ее отсутствии, что не совсем подходит для устройства сигнализации. Для правильной работы следует доработать скетч и подключить тактовую кнопку. Светодиод не должен выключаться при окончании вибрации (иначе мы не заметим, что датчик сработал), а возвращаться в режим ожидания только при нажатии на кнопку.

Скетч для датчика вибрации и кнопки

Добавьте в схему тактовую кнопку и загрузите новый скетч (скачать):

#define SENSOR A0 // Присваиваем имя аналоговому порту A0
#define LED 13    // Присваиваем имя 13 порту со светодиодом
#define KNOPKA 2 // Присваиваем имя 2 порту с кнопкой

int sens = 0;     // Освобождаем память для значений с порта A0
byte w = 0;       // Освобождаем память для переменной "w"
 
void setup()
{
  pinMode(LED, OUTPUT);   // Пин 13 будет выходом (англ. «output»)
  pinMode(SENSOR, INPUT); // Пин A0 будет входом (англ. «input»)
  pinMode(KNOPKA, INPUT); // Пин 2 будет входом (англ. «input»)
  Serial.begin(9600);     // подключаем монитор порта
}
 
void loop()
{
  sens = analogRead(SENSOR); // Считываем значение с датчика вибрации
  Serial.println(sens);      // Выводим значение с датчика на монитор порта

  //  Если sens больше 500, включаем светодиод и задаем w значение равное "1"
  if (sens>500) { digitalWrite(LED, HIGH); w = 1; }

  // Если значение sens меньше 500, выключаем светодиод
  if (sens<500) digitalWrite(LED, LOW);

  // Запускаем цикл while при срабатывании датчика
while (w = 1) {
  digitalWrite(LED, HIGH);  // Включаем светодиод
  Serial.println("DANGER"); // Выводим надпись "DANGER" на монитор порта

  // При нажатии на кнопку - выходим из цикла с помощью команды break;
  if (digitalRead(2)==HIGH) { w = 0; break; }
}

}

Пояснения к коду:

  1. Переменная w, равная «0» — строчка в программе byte w = 0; нужна, чтобы при запуске программы не выполнялся цикл while();
  2. При срабатывании сенсора мы меняем значение переменной w = 1; — это нужно для того, чтобы начал выполняться цикл while() в программе;
  3. Цикл while в нашей программе будет выполняться бесконечно, до тех пор, пока не станет ложным условие while (w = 1). Условие становится ложным при нажатии на кнопку — мы меняем значение переменной на «0» и выходим из цикла.

Задание для самостоятельного выполнения:

  1. Добавьте в скетч код, чтобы перед выходом из цикла while() на несколько секунд включался светодиод, подключенный к Pin 12.

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 5,00 out of 5)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *