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

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

 

Структура программы и базовые функции setup() и loop()

Любая программа, написанная Вами, должна включать в себя две функции и иметь следующий вид:

void setup()

{

//код программы, выполняемый один раз при включении

}

void loop()

{

//код, выполняемый постоянно, представляющий собой основную часть

}

В функции setup() обычно определяются режим работы портов и установка соединения по последовательному порту. В loop() записываются все операции чтения и записи данных с портов, математические и логические операции, вызовы других функций и прочие операции работы микроконтроллера, необходимые для выполнения поставленной задачи.

Фигурные скобки {} определяют начало и конец тела функции или блока выражений. На каждую открывающую фигурную скобку в программе должна быть закрывающая скобка.

 

Создание новых переменных и их типы

Переменные предназначены для хранения значений различных типов и их использования в ходе работы программы. Их типы, способы определения и границы видимости в целом аналогичны изученным на дисциплине “Основы программирования и алгоритмизации”. Стоит отметить, что номера контактов контроллера в больших программах обычно определяются глобальными переменными перед функцией setup(). В таком случае упрощается их перенастройка при замене одних контактов на другие. Пример создания и присваивания переменных:

int outPin; // объявление переменной целочисленного типа

outPin = 10; // и присваивание ей значения

float pi = 3.14; // объявление и присваивание – с плавающей точкой

В конце каждого выражения и для разделения элементов программ применяется точка с запятой – “;”. Однострочные комментарии начинаются с //.

 

Определение используемых входов и выходов микроконтроллера

Для того чтобы записать или считать информацию с какого-либо контакта микроконтроллера, необходимо предварительно его определить в функции setup():

void setup()

{

pinMode(12, INPUT); // 12 контакт определяется как дискретный вход

pinMode(outPin, OUTPUT); // 10 контакт определяется как выход

}

 

Цифровое чтение и цифровая запись сигналов

Функция digitalRead(inputPin); позволяет считать дискретный сигнал с контакта inputPin и получить значение HIGH или LOW (высокий или низкий логический уровень соответственно). Функция digitalWrite(outPin, HIGH); записывает на дискретный выход outPin логический сигнал, который может задаваться из переменной или константой. Используя эти команды можно получать состояния дискретных датчиков (например, кнопок), производить их программный анализ и выводить некоторую информацию на выходы контроллера, к которым подключены дискретные устройства (светодиоды, реле).

 

Аналоговое чтение и аналоговая запись сигналов

Считывание сигналов с аналоговых входов производится с помощью команды analogRead(A0). В качестве входа могут быть указаны контакты микроконтроллера с A0 до A5, причём считанный сигнал будет с 10-битовым разрешением (в соответствии с разрядностью аналого-цифрового преобразователя) и будет находиться в диапазоне от 0 до 1023.

При помощи широтно-импульсной модуляции реализуется аналоговый вывод с разрядностью в 8 бит (от 0 до 255). Контакты, которые им оборудованы, обозначены на плате символом “~”. Пример чтения сигнала с A3, его масштабирования и вывода на контакт с ШИМ:

int a = analogRead(A3) / 4;

analogWrite(9, a);

 

Функция задержки

Функция delay(1000); приостанавливает выполнение программы на заданное в миллисекундах время – в данном случае на одну секунду.

 

Конструкция if, if-else

Данные конструкции предназначены для выполнения некоторого выражения, заключённого в фигурные скобки, в том случае, если соблюдается проверяемое условие. Например:

if (a != b) // если а не равно b

{

a = b; // присвоить а значение b

}

else // иначе

{

a = 0; // присвоить а

b = 0; // и b нулю

}

Вторая часть конструкции else, выполняемая в случае не соблюдения условия в скобках после if, может быть пропущена, если нет необходимости в альтернативном действии.

В скобках после if могут быть использованы следующие операторы сравнения:

x == y // x равно y

x != y // x не равно y

x < y // x меньше y

x > y // x больше y

x <= y // x меньше или равно y

x >= y // x больше или равно y

Для записи нескольких условий, которые должны проверяться одновременно, могут быть использованы логические операторы:

&& – логическое “И” – истинно только в том случае, если оба условия выполняются, например:

if (x>0 && x<5) // если х больше нуля и меньше пяти

|| – логическое “ИЛИ” – истинно в случае, когда выполняется хотя бы одно из условий:

if (x > 0 || x < 0) // истинно, если x не равен нулю

 

Подключение библиотек и работа с ними

Существует множество готовых решений, реализованных как отдельные файлы, содержащие определение внутренних переменных и функций а также внешних функций, через которые осуществляется работа с ними. Их применение значительно упрощает написание программ и работу с отдельным оборудованием, сводя его к двум-трём строчкам кода. В ходе выполнения лабораторных работ вы познакомитесь с несколькими стандартными библиотеками. Подключение библиотек осуществляется при помощи записи вне функций программы следующей конструкции:

#include <название_библиотеки.h>

Конструкции для работы с конкретными библиотеками сугубо индивидуальны и должны изучаться отдельно при ознакомлении с её примерами или справочными файлами.

Соберите приведённые ниже схемы, напишите программы и проверьте их работоспособность. В качестве подсказок используйте Справочные материалы, находящиеся в конце этого пособия.

 

Электрическая схема с кнопкой и диодом

Рисунок 1 – Схема с одной кнопкой и одним диодом

 

Мигание диодом по нажатию кнопки. Текст программы:

void setup() {

pinMode(3, OUTPUT); // Третий контакт контроллера – выход (диод)

pinMode(4, INPUT); // Четвёртый контакт контроллера – вход (кнопка)

}

 

void loop() {

int a = digitalRead(4); // Чтение сигнала с кнопки в переменную

digitalWrite(3,a); // Подача значения переменной на диод

}

 

Два диода и две кнопки. Попробуйте сами собрать электрическую схему:

void setup() {

pinMode(3, OUTPUT); // Третий контакт контроллера – выход (диод 1)

pinMode(5, OUTPUT); // Пятый контакт контроллера – выход (диод 2)

pinMode(4, INPUT); // Четвёртый контакт контроллера – вход (кнопка 1)

pinMode(6, INPUT); // Шестой контакт контроллера – вход (кнопка 2)

}

 

void loop() {

int a = digitalRead(4); // Чтение сигнала с кнопки 1 в переменную a

digitalWrite(3,a); // Подача значения переменной на диод 1

int b = digitalRead(6); // Чтение сигнала с кнопки 2 в переменную b

digitalWrite(5,b); // Подача значения переменной на диод 2

}

 

Электрическая схема с фоторезистором и диодом

Рисунок 2 – Схема с фоторезистором и одним диодом

 

Включение диода в темноте и выключение на свету. Текст программы

void setup() {

pinMode(13, OUTPUT); // тринадцатый контакт – выход (диод)

}

 

void loop() {

//Если степень освещённости низкая (чтение аналогового порта А0 и

//сравнение с константой),

if (analogRead(A0) < 250)

digitalWrite(13, HIGH); //то включается светодиод

 

//Иначе

else

digitalWrite(13, LOW); //выключается светодиод

}

 

Потенциометр (переменный резистор) и диод. Электрическая схема

Рисунок 3 – Схема потенциометром и одним диодом

 

Управление яркостью светодиода от потенциометра. Программа

void setup() {

pinMode(9, OUTPUT); // девятый контакт – выход (диод)

}

 

void loop() {

//Чтение напряжения с потенциометра на порте А0 и переход от

//10-битного значения АЦП (от 0 до 1023) к 8-битному ЦАП

//(ШИМ от 0 до 255)

int x = analogRead(A0) / 4;

analogWrite(9, x); //Запись значения переменной на выход

delay(50); //Задержка в 50 миллисекунд между выполнениями loop()

}

 

Схема подключения сервопривода к микроконтроллеру

Рисунок 4 – Схема подключения сервопривода

 

Поворот сервопривода на угол 0 градусов и 180 градусов через каждые 2 секунды

#include <Servo.h> //Подключение библиотеки сервоприводов

Servo ServoA; //Создание объекта – сервопривода

 

void setup()

{

ServoA.attach(10); //Определение контакта подключения сервопривода

}

 

void loop()

{

ServoA.write(0); //Поворот сервопривода на нулевой угол

delay(2000); //Двухсекундная пауза

ServoA.write(180); //Поворот сервопривода на 180 градусов

delay(2000); //Двухсекундная пауза

}

 

Выполните задания и сохраните необходимые материалы для отчёта по лабораторным работам – названия схем, которые надо добавить в отчёт, написаны в Справочных материалах в конце этого пособия:

1) соберите электрическую схему и напишите программу управления светодиодом по нажатию кнопки;

2) соберите схему управления с двумя кнопками и двумя светодиодами;

3) соберите схему с фоторезистором и светодиодом – светодиод должен загораться в том случае, если фоторезистор регистрирует низкий уровень освещения;

4) соберите схему с потенциометром и светодиодом – управляйте яркостью свечения светодиода, в зависимости от угла поворота потенциометра;

5) подключите к микроконтроллеру сервопривод и напишите программу, изменяющую его угол поворота от 0 градусов до 180 и обратно каждые две секунды;

6) соберите схему мехатронного устройства с фоторезистором сервоприводом и светодиодом. Если фоторезистор регистрирует низкий уровень освещения, то должен загораться светодиод, в противном случае светодиод должен выключаться, а сервопривод – приходить в движение. Объясните, какие части полученной модели соответствуют компонентам мехатронного устройства.

 








Дата добавления: 2018-09-24; просмотров: 568;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.028 сек.