Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Датчики наклона

Простейший датчик наклона
Модуль датчика наклона KY-020
Модуль датчика наклона KY-017
Модуль датчика наклона KY-027

Простейший датчик наклона

Датчик наклона - это капсула с двумя металлическими шариками внутри. Шарики перекатывается в капсуле и замыкают или размыкают цепь. Таким образом, датчик выдаёт простой цифровой сигнал: логический ноль или единицу в зависимости от того, в какую сторону наклонена капсула. Датчик наклона можно использовать в качестве простого переключателя при наклоне.

Самая распространённая модель - это SW-200D. У датчика один вывод серебристый, а второй - золотистый.

Tilt

Технические характеристики

  • Время отклика: 2 мс
  • Сопротивление при замкнутом: до 10 Ом
  • Сопротивление при разомкнутом: свыше 10 мОм
  • Рабочее напряжение: до 12 В
  • Потребляемый ток: до 20 мА
  • Допустимая температура: от -40 до +80°C
  • Допустимая влажность: 95% RH (40°C до 96 часов)
  • Усилие отрыва: 500 гс на 1 мин
  • Время жизни: 100000 циклов
  • Размер: 12 x 3,6 мм
  • Вес: менее 1 г

Соединим по следующей схеме. Один вывод датчика наклона соединим с аналоговым выводом A5, также к этому выводу добавим резистор 220Ом и притянем его к GND. Второй вывод датчика соединим с 5V. Для наглядности добавим в схему светодиод к контакту 8.

Tilt

При наклоне в одну сторону светодиод будет светиться, в остальных случаях светодиод остаётся выключенным.


const int ledPin = 8;

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int val; // data from an analog pin

  val = analogRead(A5); // read the voltage value of analog pin 5
  Serial.println(val);

  if (val > 512) // if larger  2.5V
  {
    digitalWrite(ledPin, HIGH); // turn on LED
  }
  else // otherwise
  {
    digitalWrite(ledPin, LOW); // turn off LED
  }
}

При просмотре показаний я увидел, что в обычном состоянии значение равно 0, при попытке чуть-чуть наклонить датчик в одну сторону показания резко увеличиваются до 900 с лишним единиц. Промежуточных результатов практически нет.

Модуль датчика наклона KY-020

Предыдущий датчик также можно встретить в виде модуля KY-020.

KY-020

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

У модуля три вывода: земля, питание, цифровой вывод.


KY-020 | Arduino 
-------------
     - | GND 
     + | 5V 
     S | D

Модуль датчика наклона KY-017

Модуль датчика наклона KY-017 содержит встроенный светодиодный индикатор. Когда датчик срабатывает, светодиод загорается. Непосредственно сам датчик представляет собой маленькую стеклянную колбу с двумя контактами. Внутри колбы находится ртутный шарик. При наклоне в сторону электродов шарик скатывается и замыкает их. При наклоне в противоположную сторону шарик перемещается на противоположный конец колбы, освобождая и размыкая электроды. У модуля три вывода: земля, питание, цифровой вывод.

KY-017


KY-017 | Arduino 
-------------
     - | GND 
     + | 5V 
     S | D

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


int ledPin = 13;
int tiltPin = 3;
int val;

void setup()
{
	pinMode(ledPin, OUTPUT);
	pinMode(tiltPin, INPUT);
}

void loop()
{
	val = digitalRead(tiltPin);
	if(val == HIGH)
	{
		digitalWrite(ledPin, HIGH);
	}
	else
	{
		digitalWrite(ledPin, LOW);
	}
}

Модуль датчика наклона KY-027

Модуль датчика наклона KY-027 состоит из светодиода с резистором на 10кОм и колбы с шариком ртути. При наклоне в сторону электродов шарик скатывается и замыкает их. При наклоне в противоположную сторону шарик перемещается на противоположный конец колбы, освобождая и размыкая электроды. У модуля четыре вывода: земля, питание, вывод для светодиода, вывод для ртутного шарика. Также на плате имеется дополнительный стандартный светодиод. Если сравнивать с моделью KY-017, то можно увидеть разное количество выводов (3 и 4) и разные типы светодиодов (встроенный и внешний).

Часто модуль поставляется парами, чтобы отслеживать наклоны в двух плоскостях.

KY-027

Подключим два датчика по следующей схеме. При наклонах светодиоды должны плавно менять свою яркость.


KY-027 (A) | Arduino 
-----------------
         G | GND 
         + | 5V 
         S | 8
         L | 9 

KY-027 (B) | Arduino 
-----------------
         G | GND 
         + | 5V 
         S | 7
         L | 6

KY-027


int ledPinA = 9;
int switchPinA = 8;
int switchStateA = 0;
int ledPinB = 6;
int switchPinB = 7;
int switchStateB = 0;
int brightness   = 0;

void setup()
{
  pinMode(ledPinA, OUTPUT);
  pinMode(ledPinB, OUTPUT);
  pinMode(switchPinA, INPUT);
  pinMode(switchPinB, INPUT);
}

void loop()
{
  switchStateA = digitalRead(switchPinA);
  if (switchStateA == HIGH && brightness != 255)
  {
    brightness ++;
  }
  switchStateB = digitalRead(switchPinB);
  if (switchStateB == HIGH && brightness != 0)
  {
    brightness --;
  }
  analogWrite(ledPinA, brightness);  //  A slow fade out
  analogWrite(ledPinB, 255 - brightness);  // B slow bright up
  delay(20);
}

Дополнительные материалы

Компонент KY-027 для Fritzing

KY-027

Реклама