Arduino:Примеры/Гайд по использованию уклономера с Arduino
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
![]() |
Черновик |
Содержание
Гайд по использованию уклономера с Arduino[1]
Эта статья рассказывает, как использовать уклономер (датчик, измеряющий угол наклона) вместе с платой Arduino. Этот датчик также называют уклонометром или инклинометром.
Описание
То, как выглядит уклономер, можно посмотреть на картинке ниже:
Этот датчик умеет определять свое положение в пространстве. То есть, если он расположен прямо, то сообщит одно значение, а если будет в наклоненном состоянии, то другое. Благодаря этому он часто используется в игрушках, роботах и других продуктах, где функциональность зависит от измерения наклона.
Как это работает
Уклономер имеет цилиндрическую форму. Внутри у него находится шарик из проводникового материала, а снизу подсоединено два провода, тоже из проводникового материала.
- Когда датчик расположен прямо, шарик скатывается в нижнюю часть и замыкает провода, позволяя току проходить через них.
- Когда датчик наклонен, шарик не касается проводов, поэтому ток через них не проходит.
Таким образом, датчик работает как переключатель, который включается/выключается в зависимости от того, наклонен он или нет. Следовательно, на Arduino будет передаваться либо сигнал HIGH, либо сигнал LOW.
Где купить
Уклономер – это очень простой и дешевый датчик. Его можно купить на eBay по цене менее 2 долларов.
Подключение контактов
В подключении уклономера к Arduino нет ничего сложного. Вам всего лишь нужно подключить один контакт датчика к цифровому контакту Arduino, а второй (GND) – к GND.
Кроме того, вам нужно будет активировать встроенный подтягивающий резистор на цифровом контакте Arduino, к которому подключен датчик. В противном случае к цепи нужно будет подключить подтягивающий резистор на 10 кОм.
Скетч: Светодиод, реагирующий на наклон датчика
В этом скетче-примере используется светодиод, который будет индикатором того, наклонен датчик или нет. То есть, если датчик будет стоять прямо, светодиод будет в выключенном состоянии, но если датчик наклонить, то светодиод загорится.
Необходимое оборудование
Для этого проекта понадобятся следующие компоненты:
- Одна плата Arduino Uno (см. на eBay)
- Одна макетная плата (см. на eBay)
- Один датчик наклона (см. на eBay)
- Один светодиод
- Один резистор на 220 Ом
- Провода-перемычки
Схема
Для этого примера вам нужно лишь добавить один светодиод к схеме, показанной выше, в разделе «Подключение контактов».
Код
Чтобы завершить проект, загрузите код, показанный ниже, на плату Arduino.
1 /*
2 * Автор – Руи Сантос (Rui Santos)
3 * Более подробно о проекте на: http://randomnerdtutorials.com
4 */
5
6 int ledPin = 12;
7 int sensorPin = 4;
8 int sensorValue;
9 int lastTiltState = HIGH; // значение, которое было считано
10 // с датчика наклона в прошлый раз
11
12 // переменная ниже имеет тип данных «long», потому что в ней
13 // будут храниться данные о времени (в миллисекундах), и это
14 // значение может стать настолько большим, что просто не уместится
15 // в типе данных «int»:
16 toggled
17 long debounceDelay = 50; // задержка для дребезга контактов;
18 // если дребезг по-прежнему есть,
19 // увеличьте эту переменную
20
21 void setup(){
22 pinMode(sensorPin, INPUT);
23 digitalWrite(sensorPin, HIGH);
24 pinMode(ledPin, OUTPUT);
25 Serial.begin(9600);
26 }
27
28 void loop(){
29 sensorValue = digitalRead(sensorPin);
30 // если состояние контакта поменялось,
31 // будь его причиной шум или реальное срабатывание...
32 if (sensorValue == lastTiltState) {
33 // ...сбрасываем таймер для устранения дребезга:
34 lastDebounceTime = millis();
35 }
36 if ((millis() - lastDebounceTime) > debounceDelay) {
37 // каким бы ни было считанное значение, оно осталось
38 // даже после задержки для дребезга; следовательно,
39 // принимаем его за реальное значение:
40 lastTiltState = sensorValue;
41 }
42 digitalWrite(ledPin, lastTiltState);
43
44 Serial.println(sensorValue);
45 delay(500);
46 }
Демонстрация
В конце концов у вас должно получиться следующее:
См.также
Внешние ссылки