Arduino:Примеры/Гайд по использованию уклономера с Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Гайд по использованию уклономера с Arduino[1]

Эта статья рассказывает, как использовать уклономер (датчик, измеряющий угол наклона) вместе с платой Arduino. Этот датчик также называют уклонометром или инклинометром.

Описание

То, как выглядит уклономер, можно посмотреть на картинке ниже:

Этот датчик умеет определять свое положение в пространстве. То есть, если он расположен прямо, то сообщит одно значение, а если будет в наклоненном состоянии, то другое. Благодаря этому он часто используется в игрушках, роботах и других продуктах, где функциональность зависит от измерения наклона.

Как это работает

Уклономер имеет цилиндрическую форму. Внутри у него находится шарик из проводникового материала, а снизу подсоединено два провода, тоже из проводникового материала.

  • Когда датчик расположен прямо, шарик скатывается в нижнюю часть и замыкает провода, позволяя току проходить через них.
  • Когда датчик наклонен, шарик не касается проводов, поэтому ток через них не проходит.

Таким образом, датчик работает как переключатель, который включается/выключается в зависимости от того, наклонен он или нет. Следовательно, на Arduino будет передаваться либо сигнал HIGH, либо сигнал LOW.

Где купить

Уклономер – это очень простой и дешевый датчик. Его можно купить на eBay по цене менее 2 долларов.

Подключение контактов

В подключении уклономера к Arduino нет ничего сложного. Вам всего лишь нужно подключить один контакт датчика к цифровому контакту Arduino, а второй (GND) – к GND.

Кроме того, вам нужно будет активировать встроенный подтягивающий резистор на цифровом контакте Arduino, к которому подключен датчик. В противном случае к цепи нужно будет подключить подтягивающий резистор на 10 кОм.

Скетч: Светодиод, реагирующий на наклон датчика

В этом скетче-примере используется светодиод, который будет индикатором того, наклонен датчик или нет. То есть, если датчик будет стоять прямо, светодиод будет в выключенном состоянии, но если датчик наклонить, то светодиод загорится.

Необходимое оборудование

Для этого проекта понадобятся следующие компоненты:

  • Одна плата Arduino Uno (см. на eBay)
  • Одна макетная плата (см. на eBay)
  • Один датчик наклона (см. на eBay)
  • Один светодиод
  • Один резистор на 220 Ом
  • Провода-перемычки

Схема

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

Код

Чтобы завершить проект, загрузите код, показанный ниже, на плату Arduino.

/*
 * Автор – Руи Сантос (Rui Santos)
 * Более подробно о проекте на: http://randomnerdtutorials.com
 */
  
int ledPin = 12;         
int sensorPin = 4;
int sensorValue;
int lastTiltState = HIGH;  // значение, которое было считано 
                           // с датчика наклона в прошлый раз 
    
// переменная ниже имеет тип данных «long», потому что в ней 
// будут храниться данные о времени (в миллисекундах), и это 
// значение может стать настолько большим, что просто не уместится
// в типе данных «int»:
toggled
long debounceDelay = 50;    // задержка для дребезга контактов;
                            // если дребезг по-прежнему есть,
                            // увеличьте эту переменную
 
void setup(){
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
 
void loop(){
  sensorValue = digitalRead(sensorPin);
  // если состояние контакта поменялось, 
  // будь его причиной шум или реальное срабатывание...
  if (sensorValue == lastTiltState) {
    // ...сбрасываем таймер для устранения дребезга:
    lastDebounceTime = millis();
  } 
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // каким бы ни было считанное значение, оно осталось
    // даже после задержки для дребезга; следовательно,
    // принимаем его за реальное значение:
    lastTiltState = sensorValue;
  }
  digitalWrite(ledPin, lastTiltState);

  Serial.println(sensorValue);
  delay(500);
}

Демонстрация

В конце концов у вас должно получиться следующее:

См.также

Внешние ссылки