Файл: Лабораторная работа 1 (Получение информации с датчиков).pdf

Добавлен: 15.11.2018

Просмотров: 1454

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Ст. преп. каф. ИТАС Фёдоров Андрей Борисович 

 

версия документа 2017-10-09 

 

 

Подключив  кнопку  согласно  данной  схеме,  можно  посмотреть  результат.  И  он 

окажется таким же, как и в первом случае, т.е. получить стабильно работающую кнопку 
не получится. 

Для  того  чтобы  кнопка  работала  правильно,  нужно  подключить  «подтягивающий 

резистор»  к  порту  ввода.  Подтягивающий  резистор  может  подключаться  как  к  питанию 
5V

  (наиболее  распространённый  вариант),  так  и  к  «земле»  GND  (рисунок  5).  Номинал 

подтягивающего резистора обычно выбирается из диапазона от 10 до 100 кОм. 

 

 

а) при нажатии на кнопку фиксируется 

лог. 1; 

б) при нажатии на кнопку фиксируется 

лог. 0. 

Рисунок 5 – Схема подключения кнопки к Arduino (микроконтроллеру) с внешним 

подтягивающим резистором 

Собрать такую схему можно на макетной плате, как показано на рисунке 6. 

 

Рисунок 6

 

– Собранная схема подключения кнопки с токоограничивающим и 

внешним подтягивающим резистором на макетной плате 


background image

Ст. преп. каф. ИТАС Фёдоров Андрей Борисович 

 

версия документа 2017-10-09 

 

 

Теперь  кнопка  заработала  правильно.  Аналогичным  образом  подключается  и 

геркон. Но нужно иметь в виду, что существует такое явление как «дребезг контактов», с 
которым борются программными или аппаратными методами. 

Следует  заметить,  что  можно  обойтись  и  без  подключения  внешнего 

подтягивающего резистора, т.к. его можно подключить программно. Тогда подключение 
кнопки  выполняется  согласно  схеме,  представленной  на  рисунке  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. 


background image

Ст. преп. каф. ИТАС Фёдоров Андрей Борисович 

 

версия документа 2017-10-09 

 

 

 

 

а) электрическая принципиальная схема 

платы с кнопкой или концевым 

контактом; 

б) электрическая принципиальная схема 

платы с герконом. 

Рисунок 8 – Электрические принципиальные схемы для печатных плат с кнопкой, 

концевым контактом и герконом 

Подключение  подобных  печатных  плат  с  устройствами  коммутации  к  Arduino  не 

составляет  никакого  труда.  Программу  для  опроса  состояния  датчиков  можно 
использовать из листинга 1. 

Подключение энкодера к дискретным портам ввода 

Энкодер  является  механическим  датчиком  угла  поворота,  и  преобразует  угол 

поворота вращающегося объекта (например, вала) в электрические сигналы, сдвинутые по 
фазе  на  90°  относительно  друг  друга.  На  рисунке  9  показан  внешний  вид  энкодера  на 
печатной плате с токоограничивающими резисторами. 

 

Рисунок 9

 

– Внешний вид печатной платы с энкодером и токоограничивающими 

резисторами 

Данный модуль имеет пять выводов: три сигнальных – CLKDTSW, и два питания 

–  питание  «+»  и  «земля»  GND.  С  энкодера  считываются  два  сигнала  (А  и  В),  которые 
противоположны  по  фазе,  с  линий  CLK  и  DT.  Данный  энкодер  имеет  20  положений  на 
один  оборот  (каждое  положение  18°).  На  рисунке  10  показано,  как  зависят  выходы  А 
(CLK)  и  В  (DT)  друг  от  друга  при  вращении  энкодера  по  часовой  или  против  часовой 
стрелки. 


background image

Ст. преп. каф. ИТАС Фёдоров Андрей Борисович 

 

версия документа 2017-10-09 

 

 

 

Рисунок 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) 


background image

Ст. преп. каф. ИТАС Фёдоров Андрей Борисович 

 

версия документа 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.