Лабораторная работа №4 Взаимодействие технических систем с ЭВМ по последовательному интерфейсу

Цель работы

Изучение особенностей работы периферийного оборудования микропроцессорных систем и способов управления ими с помощью ЭВМ верхнего уровня

Программа работы

1. Ознакомиться с принципом работы и особенностями подключения к устройствам платформы Arduino сервоприводов и трехцветных светодиодов.

2. Подключить к МПС Arduino UNO R3 сервопривод и разработать скетч, выполняющий циклическое перемещение вала привода на 30 и 60 градусов.

3. Разработать скетч, а также приложение на языке C#, выполняющие поворот вала сервопривода на произвольный угол на основе элемента управления Windows.Forms.TrackBar.

4. Выполнить подключение к МПС Arduino UNO R3 двух трехцветных светодиодов, разработать скетч, выполняющий циклическую смену цвета указанных светодиодов.

5. Разработать скетч, а также приложение на языке C#, осуществляющие смену цвета двух светодиодов по нажатию кнопки (Windows.Forms.Button).

6. Усовершенствовать разработанные в предыдущем пункте программы таким образом, чтобы цвет каждого из светодиодов выбирался на ЭВМ верхнего уровня.

7. Сделать выводы по работе.

Методические указания

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

Используемый в работе сервопривод FS90 позволяет установить и удерживать угол поворота колеса. Привод обладает углом поворота 180°, т.е. может быть установлен в любое положение в пределах полуокружности.

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

- красный — питание;

- коричневый — земля;

- жёлтый — сигнал; подключается к цифровому выходу микроконтроллера.

Для управления сервоприводами в Arduino IDE имеется библиотека Servo. В данной библиотеке описан одноименный класс, методы которого реализуют все необходимые функции управления приводом. В работе будут использованы 2 метода:

- attach(int pinNumber) – инициализация сервопривода на указанном выводе.

- write(int angle) – перемещение вала двигателя на угол angle (задается в градусах от 0 до 180).

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

#include <Servo.h>

Servo sm;

int pos=0;

void setup() {

???? //подключение сервопривода к выводу 6

???? //перемещение вала привода в положение 0º

}

void loop() {

???? //перемещение вала привода в положение 30º

delay(500);

???? //перемещение вала привода в положение 60º

delay(500)

}

К п.3 Взаимодействие с последовательным интерфейсом в Arduino IDE осуществляется через встроенный класс Serial, который служит для связи устройства Ардуино с компьютером или другими устройствами, поддерживающими последовательный интерфейс обмена данными. Все платы Arduino имеют хотя бы один последовательный порт (UART, иногда называют USART). Для обмена данными Serial используют цифровые порты ввод/вывода 0 (RX) и 1 (TX), а также USB порт. В работе используются следующие методы класса Serial:

- begin() – Инициирует последовательное соединение и задает скорость передачи данных в бит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.

- read() – Cчитывает очередной доступный байт из буфера последовательного соединения.

- println() – Передает данные через последовательное соединение как ASCII текст с следующим за ним символом переноса строки (ASCII символ 13 или '\r') и символом новой строки (ASCII 10 или '\n').

Необходимый скетч может быть реализован по следующему шаблону:

#include <Servo.h>

String inputString = "";

boolean stringComplete = false;

Servo sm;

int pos=0;

void setup() {