Датчик наклона SW-520D и ky-20

Датчики наклона KY-020 и SW-520D для Arduino

Иногда в проекте возникает необходимость отслеживать наклон, смещение, поворот или вибрацию. Методов сделать это – очень много, от сложных, используя акселерометр, до самых простых датчиков. Совсем недавно у меня появилась задача зафиксировать изменение положение объекта в пространстве, и для теста я заказал два простых датчика, о которых почему-то почти нет информации. Первым оказался датчик наклона KY-020 (имеет и другие разновидности в индексе)

В качестве второго датчика выбор пал на SW-520D, он меня привлёк обвязкой в виде микросхемы, и регулировкой, хотя до теста разницы я не понимал

У второго варианта всё ясно с распиновкой, контакты строго подписаны D0 – сигнал, GND и VCC – соответственно питание. У первого же не всё так понятно, но можно догадаться, что S – сигнал, “-” – земля, а оставшийся центральный пин – VCC.

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

Смотрите также:  Разбираем шаговый двигатель

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

Так что, можно, не включать программную подтяжку и работать так. Попробуем посмотреть, как вообще ведёт себя сигнальная линия, перед тем как писать код. Я сначала переворачивал датчик медленно туда-сюда, а потом потряс его быстро. Вот что получилось

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

В принципе этот минус легко побороть программно, особенно если нам нужно зафиксировать просто факт наклона. А вот у второго датчика, благодаря дополнительной обработке этого недостатка нет. Посмотрим общие состояния

Всё тоже самое – медленно переворачивал, а затем потряс датчик. Посмотрим в увеличенном виде процесс перехода из одного состояния в другое

Смотрите также:  Как сделать робота за 2 недели к Fifa

Выглядит намного лучше, чем в первом случае. Должно быть понятно – что мы работаем с этими датчиками, как с обычными кнопками, поэтому код “как зажечь светодиод” таким датчиком мусолить не будем. У меня появилась задача по интереснее. Нужно запустить действие, при неоднократном срабатывании такого датчика – т.е. нужно его активно потрясти, чтобы произошло срабатывание. Выберем любой пин, куда мы подключим датчик

#define vibration 19

Также нам понадобится переменная текущего состояния датчика и переменная накопления количества трясок.

uint8_t readSensor = 0;
uint8_t valCrash = 0;

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

  if (digitalRead(vibration) == readSensor)          // Если состояние датчика равно переменной состояния
  {
    readSensor = !readSensor;                        // Меняем переменную состояния на противоположное значение
    valCrash++;                                      // Инкрементируем счётчик трясок
    if (valCrash > 20)                               // Если количество трясок более 20, то делаем действие
    {
      // Любое действие
      valCrash = 0;                                  // Обнуляем счётчик трясок 
    }
  }

Также можно вставить небольшую задержку, чтобы исключить дребезг (микроконтроллер может считывать состояние датчика слишком быстро), но у меня и так всё отлично заработало. Также спустя, например 10 секунд, счётчик трясок можно обнулять, но как это сделать без delay, мы уже рассматривали в статье, так-что без труда и сами допишете такой код. В следующей статье мы будем использовать этот датчик, чтобы сделать электронный кубик, который будет активироваться именно таким способом.

Смотрите также:  Как сделать корпус робота. Новый компьютер

Оставьте комментарий

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