Файл: Лабораторная работа 1 (Получение информации с датчиков).pdf
ВУЗ: Пермский национальный исследовательский политехнический университет
Категория: Методичка
Дисциплина: Системы реального времени
Добавлен: 15.11.2018
Просмотров: 1454
Скачиваний: 25
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
6
Подключив кнопку согласно данной схеме, можно посмотреть результат. И он
окажется таким же, как и в первом случае, т.е. получить стабильно работающую кнопку
не получится.
Для того чтобы кнопка работала правильно, нужно подключить «подтягивающий
резистор» к порту ввода. Подтягивающий резистор может подключаться как к питанию
5V
(наиболее распространённый вариант), так и к «земле» GND (рисунок 5). Номинал
подтягивающего резистора обычно выбирается из диапазона от 10 до 100 кОм.
а) при нажатии на кнопку фиксируется
лог. 1;
б) при нажатии на кнопку фиксируется
лог. 0.
Рисунок 5 – Схема подключения кнопки к Arduino (микроконтроллеру) с внешним
подтягивающим резистором
Собрать такую схему можно на макетной плате, как показано на рисунке 6.
Рисунок 6
– Собранная схема подключения кнопки с токоограничивающим и
внешним подтягивающим резистором на макетной плате
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
7
Теперь кнопка заработала правильно. Аналогичным образом подключается и
геркон. Но нужно иметь в виду, что существует такое явление как «дребезг контактов», с
которым борются программными или аппаратными методами.
Следует заметить, что можно обойтись и без подключения внешнего
подтягивающего резистора, т.к. его можно подключить программно. Тогда подключение
кнопки выполняется согласно схеме, представленной на рисунке 4, а в программу из
листинга 1 добавляется одна строка. Программа опроса кнопки представлена в листинге 2.
Листинг 2 – Программа считывания состояния кнопки с подключением
внутреннего подтягивающего резистора
#define BTN_PIN 2
//Номер порта для подключения кнопки
bool btnState;
//Состояние кнопки (не нажата/нажата)
void setup()
{
// put your setup code here, to run once:
pinMode(BTN_PIN, INPUT);
//Настроить порт на ввод
digitalWrite(BTN_PIN, HIGH);
//Подключить внутренний подтягивающий резистор
Serial.begin(9600);
//Активировать последовательный порт
}
void loop()
{
// put your main code here, to run repeatedly:
btnState = digitalRead(BTN_PIN);
//Считать состояние кнопки в переменную
Serial.println(btnState);
//Передать значение переменной
delay(50);
//Задержка программы 50 мс
}
Подключение кнопки с внешним питанием через дискретный интерфейс
Иногда может возникать необходимость (например, для отладки) подключения
кнопок, концевых контактов или герконов (рисунок 7), смонтированных на печатной
плате, где уже установлены подтягивающие и токоограничивающие резисторы. Помимо
простых кнопок встречаются
а) при нажатии на кнопку
фиксируется лог. 1;
б) при замыкании концевого
контакта фиксируется лог. 1;
в) при срабатывании геркона
фиксируется лог. 0.
Рисунок 7 – Варианты исполнения печатных плат с устройствами коммутации и
установленными подтягивающими и токоограничивающими резисторами
Электрические принципиальные схемы, представленных печатных плат с
устройствами коммутации, приведены на рисунке 8.
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
8
а) электрическая принципиальная схема
платы с кнопкой или концевым
контактом;
б) электрическая принципиальная схема
платы с герконом.
Рисунок 8 – Электрические принципиальные схемы для печатных плат с кнопкой,
концевым контактом и герконом
Подключение подобных печатных плат с устройствами коммутации к Arduino не
составляет никакого труда. Программу для опроса состояния датчиков можно
использовать из листинга 1.
Подключение энкодера к дискретным портам ввода
Энкодер является механическим датчиком угла поворота, и преобразует угол
поворота вращающегося объекта (например, вала) в электрические сигналы, сдвинутые по
фазе на 90° относительно друг друга. На рисунке 9 показан внешний вид энкодера на
печатной плате с токоограничивающими резисторами.
Рисунок 9
– Внешний вид печатной платы с энкодером и токоограничивающими
резисторами
Данный модуль имеет пять выводов: три сигнальных – CLK, DT, SW, и два питания
– питание «+» и «земля» GND. С энкодера считываются два сигнала (А и В), которые
противоположны по фазе, с линий CLK и DT. Данный энкодер имеет 20 положений на
один оборот (каждое положение 18°). На рисунке 10 показано, как зависят выходы А
(CLK) и В (DT) друг от друга при вращении энкодера по часовой или против часовой
стрелки.
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
9
Рисунок 10
– Зависимость выходов А (CLK) и В (DT) друг от друга при вращении
энкодера по часовой или против часовой стрелки
Вывод энкодера SW используется для получения состояния центральной оси
энкодера, которая работает как кнопка.
Энкодер подключается к Arduino по схеме, представленной на рисунке 11.
Программа представлена в листинге 3.
Рисунок 11
– Подключение энкодера на печатной плате к Arduino Uno
Листинг 3 – Программа считывания состояния энкодера
#define SW_PIN 7
//Кнопка SW
#define CLK_A_PIN 2
//Сигнал CLK (A)
#define DAT_B_PIN 4
//Сигнал DT (B)
int swState = 0;
int encPos = 0;
bool clkAPre = HIGH;
bool clkACur = LOW;
void setup()
{
// put your setup code here, to run once:
pinMode(SW_PIN, INPUT);
digitalWrite(SW_PIN, HIGH);
pinMode(CLK_A_PIN, INPUT);
pinMode(DAT_B_PIN, INPUT);
Serial.begin(9600);
}
void loop()
{
// put your main code here, to run repeatedly:
if (digitalRead(SW_PIN) == LOW)
{
while (digitalRead(SW_PIN) == LOW)
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
10
{
//Ждём отпускания кнопки
}
swState++;
Serial.print("BtnClick = ");
Serial.println(swState);
}
clkACur = digitalRead(CLK_A_PIN);
if ((clkAPre == LOW) && (clkACur == HIGH))
{
if (digitalRead(DAT_B_PIN) == LOW)
{
encPos++;
} else
{
encPos--;
}
Serial.print("EncoderPos = ");
Serial.println(encPos);
}
clkAPre = clkACur;
}
Подключение кнопок через аналоговый интерфейс
Здесь вскоре может появиться текст.
Подключение джойстика через аналоговый интерфейс
Для плат Arduino существуют модули аналоговых джойстиков. Джойстик, как
правило, имеет две оси – X и Y, а также кнопку. Кнопка подключается к дискретному
интерфейсу ввода. Джойстик позволяет плавно отслеживать степень отклонения от
нулевой точки. По направлениям отклонения VRX (X) и VRY (Y), на плате джойстика
установлены два потенциометра. Через аналоговый интерфейс ввода A0 и A1 Arduino
получает сигналы, находящиеся в диапазоне от 0 до 1023 (10-битный АЦП), тем самым
отслеживая отклонения джойстика влево, вправо, вверх и вниз. Внешний вид джойстика
на печатной плате представлен на рисунке 12.