Датчик наклона представляет собой электронное устройство, способное определять ориентацию объекта и обеспечивать на своем выходе, соответственно, высокий или низкий уровень напряжения. В своем составе датчик наклона имеет ртутный шарик, который может двигаться и замыкать цепь. Таким образом, электрическая цепь датчика наклона может замыкаться и размыкаться в зависимости от его ориентации.
В этой статье мы рассмотрим подключение датчика наклона на основе ртутного выключателя к плате Arduino Uno. В зависимости от положения датчика наклона мы будем включать и выключать светодиод и зуммер в нашем проекте.
Также на нашем сайте вы можете прочитать статью про подключение датчика наклона к микроконтроллеру AVR.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Датчик наклона на основе ртутного выключателя (Mercury Switch/ Tilt Sensor).
- Зуммер (Buzzer) (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Резистор 220 Ом (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Работа схемы
Схема подключения датчика наклона к плате Arduino Uno представлена на следующем рисунке.
Для работы датчику наклона необходимо напряжение постоянного тока номиналом 5 В – в нашем случае мы его получаем с контакта 5 В платы Arduino. Выходной контакт датчика наклона подключен к контакту PIN 4 платы Arduino. Светодиод при помощи резистора, ограничивающего максимальный ток через него (чтобы светодиод не сгорел), подключен к контакту PIN 2 платы Arduino. Зуммер подключен к контакту PIN 3 платы Arduino.
Датчик наклона
Используемый нами датчик наклона представляет собой ртутный выключатель, который обеспечивает на своем выходном контакте высокий уровень напряжения когда наклонен. Запитывается от напряжения постоянного тока номиналом 5 В. Имеет 3 контакта: вход (питающего напряжения), землю и выход. Содержит в своем составе металлическую трубку с двумя электродами и жидкий ртутный шарик, который замыкает и размыкает цепь когда его наклоняют в определенном направлении. Внутренняя схема соединений датчика наклона представлена на следующем рисунке:
Принцип работы датчика наклона
Случай 1: датчик не наклонен
Если датчик не наклонен, то, как показано на рисунке ниже, на его выходном контакте будет напряжение низкого уровня (LOW) поскольку ртутный шарик замыкает цепь двух электродов. В этом состоянии датчика его внутренний светодиод находится во включенном состоянии.
Случай 2: датчик наклонен
Когда датчик наклонен в определенном направлении или на определенный угол ртутный шарик размыкает контакт между двумя электродами и цепь становится разомкнутой. В этом случае на выходном контакте датчика формируется напряжение высокого уровня (HIGH), а внутренний светодиод выключается.
Исходный код программы для Arduino
Полный код программы приведен в конце статьи, здесь же сначала рассмотрим его некоторые фрагменты.
Сначала в программе нам необходимо задать режимы работы используемых контактов. Pin 2 и Pin 3 конфигурируются в режим вывода данных – к ним подключены светодиод и зуммер, а Pin 4 конфигурируется в режим ввода данных – он считывает данные от датчика наклона.
1 2 3 4 5 |
void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, INPUT); } |
Теперь, всегда когда датчик наклонен свыше определенного угла на его выходе появляется напряжение высокого уровня (HIGH), которое считывается с помощью Pin 4 платы Arduino. То есть когда на Pin 4 будет напряжение высокого уровня, нам необходимо включать светодиод и зуммер.
1 2 3 4 5 6 7 8 9 10 11 |
void loop() { if (digitalRead(4) == 1) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); delay(300); digitalWrite(2, LOW); digitalWrite(3, LOW); delay(300); } } |
Решения этого проекта можно применить, к примеру, в противоугонной сигнализации или коробке для особо важных (секретных) документов.
Далее приведен полный текст программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, INPUT); } void loop() { if (digitalRead(4) == 1) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); delay(300); digitalWrite(2, LOW); digitalWrite(3, LOW); delay(300); } } |