Arduino. Датчик вибраций SW-420. MH-Series

  1. Плата Arduino. x1
    arduino uno
  2. Компьютер(для написания и загрузке кода, а так же мы будем брать с него электричество и общаться с ним). x1
  3. Провод для соединения компьютера и платы. x1
    USBwire
  4. Датчик вибраций SW-420.
    SW-420
  5. Провода. x3
    wire
  6. Есть схемы с внешним источником питания, но можно взять питание и с платы.

Схема:

ArduinoSW-420_1_bb ArduinoSW-420_1_схемаArduinoSW-420_1_Foto

ArduinoSW_420-2_bb ArduinoSW_420-2_схема

Скетч:

C сенсором вибраций SW-420 не всё так однозначно, как предыдущими сенсорами, так как он показывает не наличие самой вибрации.. а непосредственно наличие одного толчка. То есть во время вибрации он будет постоянно менять своё значение с LOW  на HIGH и обратно. При этом при отсутствии вибрации он с большой долей вероятности будет находиться в состоянии LOW, но так же может и спокойно встать в состояние HIGH.

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

Файл -> Примеры ->02.Digital->Button;

Этот скетч мы подробно рассмотрели в статье Arduino. Подключение тактовой кнопки. Посмотрим видео процесса:

На следующем видео видно, что когда колебаний нет, то сенсор не меняет своего значения либо с LOW либо с HIGH:

Немного не тот результат я ожидал. Мне хотелось бы, что бы светодиод горел во время наличия вибрации. И гас, когда вибрации нет.

Для этого напишим-поправим скетч:

Сэнсор у нас поп режнему на 2 порту, а LED на 13.

Дальше я задаю константу, сколько циклов должно пройти не изменив состояние, прежде чем светодиод погаснет:

выставил 500 циклов, при каждой задержки я делаю паузу в 1 милисекунду. И того получается, что прежде, чем светодиод потухнет не должно менятся состояния сенсора в течении примерно пол секунды.

 

Дальше задаём переменные:

keyState — текущее состояние сенсора.

oldstat — предыдущее состояние сенсор.

count — в этой переменной будет хранится кол-во циклов без изменения состояния.

Далее устанавливаем состояния штырька с LED на выход, для штырька с сеносором на получение входящих данных.

Основной цикл:

Сначала берём значение с сенсора:

Далее сравниваем его с предыдущим состоянием сенсора:

если состояния не равны, то есть оно изменилось, тогда

сбрасываем состояние счётчика, и устанавливаем новое значение:

Далее устанавливаем состояние лампочки:

если счётчик так и не превысил максимального значения, которое мы задали в константах. Значит недавно был толчок и лампочку зажигаем, ну или она продолжит гореть. Если же счётчик превысил значение значит толчков не было давно, и мы выключаем лампочку, или продолжаем её держать выключенной.

Далее счётчик, здесь условие, что бы небыло переполнения переменной я ограничил максимальное число count, до maxcount+1 так как всё равно лампочку надо выключить, и мне не интересно сколько уже небыло толчка. А если просто поставить ++count, то переменная очень быстро переполнится и «сбросится» и того у нас получится мигающая лампочка.

и осталось сделать задержку в 1 милисикунду и всё:

Можно смотреть, что получилось:

как видно лампочка теперь не моргает при колебаниях, а постоянно горит пока не закончатся колебания.

Другие статьи по программированию плат Arduino можно посмотреть здесь.

Комментарии:

Комментарии 9

  • Отличная реализация, красавец. Задолбался искать по инету годный код. А он тут)

    • Рад, что понравилось.
      Сам разбираюсь по тихоньку с этим делом. 🙂 правда я собрал 3д принтер и теперь я больше 3д моделер :)))

  • Будь добр, подскажи насколько он чувствителен? Будет ли считывать показания при ударе мяча об стену при креплении с обратной стороны той же стены?

    • Вот если взглянуть на датчик… там такая синенькая колбочка. В ней ездит шарик… судя по ощущениям в середине контак. когда шарик проезжает через контакт идёт срабатывание. Поэтому чувствительность очень зависит от установки. Для мячика и стенки я бы наверно прифигачил это всё на пружинку 🙂 хотя вопрос будет ли пружинка колебаться 🙂 если стенка фонерка … то думаю можно установить так, что бы и без пружинки срабатывало..

  • Здравствуйте, спасибо за код, он очень помог, но не могли бы подсказать как эте раализовать в FLprog

    • Посмотрел на FLprog что то оно страшно выглядит. 🙂 может чего нить более няшное? например Ardublock?
      а так, я не люблю визуальное программирование. Мне кажется оно травмирует неокрепшую детскую психику. 🙂 как можно променять буквочки на кубики? 🙂

  • Я конечно понимаю что код более приятный чем визуальное программирование, но я делаю очень большой проект и мне его надо закончить побыстрее. Поэтому если не сложно подскажите пожалуйста как это сделать в flprog. Спасибо за понимание.?

  • Я тоже не очень люблю визуальное программирование, но я делаю очень большой проект, а сам не профи в программирование. Мне надо закончить побыстрей , поэтому если не сложно помогите всё это сделать в flprog , так как у меня уже половина готова в этой программе. Спасибо!!?

  • может быть кто-то знает, где можно найти хорошую информацию о этом датчике (типа доклада-реферата)?заранее благодарю за помощь!

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

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