Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Простейший датчик наклона
Модуль датчика наклона KY-020
Модуль датчика наклона KY-017
Модуль датчика наклона KY-027
Датчик наклона - это капсула с двумя металлическими шариками внутри. Шарики перекатывается в капсуле и замыкают или размыкают цепь. Таким образом, датчик выдаёт простой цифровой сигнал: логический ноль или единицу в зависимости от того, в какую сторону наклонена капсула. Датчик наклона можно использовать в качестве простого переключателя при наклоне.
Самая распространённая модель - это SW-200D. У датчика один вывод серебристый, а второй - золотистый.
Соединим по следующей схеме. Один вывод датчика наклона соединим с аналоговым выводом A5, также к этому выводу добавим резистор 220Ом и притянем его к GND. Второй вывод датчика соединим с 5V. Для наглядности добавим в схему светодиод к контакту 8.
При наклоне в одну сторону светодиод будет светиться, в остальных случаях светодиод остаётся выключенным.
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 | Arduino
----------------
- | GND
+ | 5V
S | D
Входит в состав набора Набор из 37 датчиков
Модуль датчика наклона 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);
}
}
Входит в состав набора Набор из 37 датчиков
Модуль датчика наклона KY-027 состоит из светодиода с резистором на 10кОм и колбы с шариком ртути. При наклоне в сторону электродов шарик скатывается и замыкает их. При наклоне в противоположную сторону шарик перемещается на противоположный конец колбы, освобождая и размыкая электроды. У модуля четыре вывода: земля, питание, вывод для светодиода, вывод для ртутного шарика. Также на плате имеется дополнительный стандартный светодиод. Если сравнивать с моделью KY-017, то можно увидеть разное количество выводов (3 и 4) и разные типы светодиодов (встроенный и внешний).
Часто модуль поставляется парами, чтобы отслеживать наклоны в двух плоскостях.
Подключим два датчика по следующей схеме. При наклонах светодиоды должны плавно менять свою яркость.
KY-027 (A) | Arduino
-----------------
G | GND
+ | 5V
S | D
L | D
KY-027 (B) | Arduino
-----------------
G | GND
+ | 5V
S | D
L | D
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);
}
Входит в состав набора Набор из 37 датчиков