Привет! Сегодня сделаем обзор на датчик наклона KY-027. И соберем простую схему для реализации сообщающихся сосудов для света. Звучит интригующе не так ли? На самом деле, все очень просто и для такой схемы в Ардуино есть специальные датчики.
Содержание
На самом дела все просто. Датчик наклона KY-027 это сразу два модуля состоящих из светодиода и ртутного ключа. И, если светодиод горит, то на контакт вывода будет отправлен сигнал. Второй светодиод, соответственно будет выключен этим управляющим сигналом.
Для выполнения этого урока нам понадобятся
- Ардуино UNO
- Макетная плата
- Перемычки
- Модуль KY-027
- Кабель USB
Датчик наклона KY-027
В основе модуля KY-027 лежит колба с двумя электродами и капелькой ртути, при наклоне капелька ртути либо замыкает электроды, либо размыкает.
Так же модуль имеет светодиод с отдельным пином для управления.
В программе будем проверять состояние контакта вывода состояния с первого датчика. И, если он равен 1, то будем увеличивать яркость светодиода. То же самое проделаем для второго датчика. Если колбы с ртутью будут установлены параллельно столу или земле, то датчики должны работать синхронно.
Сначала заведем все необходимые переменные для программы.
int ledPinA = 9;
int switchPinA = 8;
int switchStateA = 0;
int ledPinB = 6;
int switchPinB = 7;
int switchStateB = 0;
int brightness = 0;
В функции setup() настроим пины на вход и выход.
void setup(){
pinMode(ledPinA, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(switchPinA, INPUT);
pinMode(switchPinB, INPUT);
}
А в цикле loop() считываем значение с контакта датчика и, если контакт первого датчика замкнут, увеличиваем яркость. А если контакт второго замкнут, уменьшаем.
После этого записываем яркость на первый и второй светодиоды. Но на второй запишем значение максимальной яркости — текущая яркость.
void loop(){
switchStateA = digitalRead(switchPinA);
if (switchStateA == HIGH && brightness != 255)
{
brightness ++;
}
switchStateB = digitalRead(switchPinB);
if (switchStateB == HIGH && brightness != 0)
{
brightness --;
}
analogWrite(ledPinA, brightness);
analogWrite(ledPinB, 255 - brightness);
delay(20);
}
Полный текст программы
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);
analogWrite(ledPinB, 255 - brightness);
delay(20);
}
Заключение
Мы рассмотрели датчик наклона KY-027 и его подключение к Ардуино. Такой датчик может служить для индикации наклона на дронах или других устройствах. Для большей наглядности, мы можем подключить серводвигатель к контактам датчика и наклонять поверхность автоматически. Тогда при максимальной яркости на первом датчике, серводвигатель будет наклонять поверхность ко второму датчику и наоборот. Попробуем использовать его в наших проектах в будущем.