Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование микроконтроллера Arduino в информационно-управляющих системах. Учебное пособие
.pdf
void setup() {
Serial.begin(9600); //Задает скорость передачи данных в бодах
a = 103,45;
b = 122,3;
c = a * b + (b-a);
c = pow(c,2);
Serial.print("Result: ");
Serial.println(c);
}
void loop() {
while(true); //В данном примере блок loop не используется.
}
Результат работы скетча: в командную строку монитора порта один раз
выводится результат вычисления примера: (103,45 х 122,3 + (122,3 – 103,45))^2.
5.6.3 Практическое задание
Соберите электрическую схему с датчиком и напишите скетч для Arduino.
Вариант 1: Схема с потенциометром. В монитор последовательного порта
выводится значение (в вольтах), соответствующее напряжению на аналоговом
входе. Изменение напряжения путем поворота ручки потенциометра отображается
на экране.
Вариант 2: Схема с фоторезистором. В монитор последовательного порта
выводится число от 0 до 1023, соответствующее уровню освещенности светодиода.
Вариант 3: Схема с термистором (датчиком тепла). На экран выводится
комнатная температура в данный момент времени. Используйте делитель
напряжения для подключения термистора.
71

5.7 Лабораторная работа №7 «Управление сервоприводом»
Цель работы: научиться работать с сервоприводами: правильно подключать к
плате Arduino, управлять углом поворота, предотвращать возможные повреждения
механизма. Изучить библиотеку «Servo».
5.7.1 Краткие теоретические сведения
Сервопривод – электромотор с «передачей», который можно программно
заставить повернуться в заданный угол и удерживать это положение. Сервопривод
имеет в своем составе датчик положения и блок управления приводом,
автоматически поддерживающий необходимые параметры на устройстве согласно
заданному значению. «Передача» сервопривода называется редуктором. Это
механизм из шестерней, передающий и преобразующий крутящий момент, прямо
как коробка передач в автомобиле или система скоростей спортивного велосипеда,
однако у сервопривода есть только одна передача.
В комплект «Матрешка Z» входят наиболее распространенная модель
сервопривода, которая удерживает заданный угол, а также поддерживает
постоянную скорость вращения.
Сервопривод имеет 3 контакта: питание +, питание – и контакт для
управления углом поворота. Сервоприводы SG90, входящие в комплект «Матрешка
Z», могут питаться от самой платы Arduino, через пины 5V и GND. Однако более
мощные сервоприводы подключаются к внешним источникам питания. Третий
контакт – управляющий, подключается к одному из цифровых пинов платы, пример
представлен на рисунке 38.
Нельзя путать сервопривод с обычным электромотором: сервопривод имеет
ограниченный угол поворота вала. В подавляющем большинстве этот угол
составляет 180 градусов (Pi радиан), т.е. вращение вала сервопривода ограничено
полуокружностью.
72

Для управления углом поворота сервопривода используется PDM-сигнал
(модуляция длительности импульса), который часто путают с PWM (широтно-
импульсной модуляцией). Однако, в отличие от ШИМ, нет необходимости задавать
его «вручную», как это было необходимо в предыдущих лабораторных работах с
помощью функции «analogWrite». Для удобной работы с сервоприводами
существует библиотека «Servo», содержащая специальные функции. Кроме того,
сервопривод может управляться с любого цифрового пина, а не только с 3,5,6,9,10
или 11, как в случае с ШИМ.
Для подключения библиотеки следует использовать «include», при чем
размещать оператор следует в самом начале программы, за пределами функций
«Setup» и «Loop»:
#include <Servo.h>
Для начала работы с сервоприводом с помощью библиотеки Servo необходимо
создать объект одноименного класса:
Servo motor1;
Данное действие напоминает создание переменной, например « int A; »,
однако, в случае с сервоприводом, «motor1» (вы можете использовать любое другое
название для своего объекта) - это объект класса «Servo», для работы с котором
существуют определенные методы. Таким образом, после создания объекта
необходимо указать с помощью метода «attach» к какому пину подключен
управляющий контакт. Данная операция выполняется в блоке Setup. При этом сам
метод вызывается через экземпляр класса – «motor1»:
motor1.attach(10);
Теперь можно управлять сервоприводом с помощью метода «write»:
motor1.write(X);
где motor1 – имя созданного вами объекта класса Servo, а X – угол поворота в
градусах.
Известно, что угол поворота измеряется в радианах. Однако для
удобства работы с сервоприводами разработчики библиотеки Servo приняли
решение использовать именно градусы, как входной параметр для метода write.
73

Рисунок 38 – Подключение сервопривода к плате Arduino UNO
В связи с этим, существует ряд особенностей работы с сервоприводами, на
которые очень важно обратить внимание, так как их игнорирование может вывести
сервопривод из строя:
1. Угол поворота, обычно, измеряется в радианах. 1 радиан равен, примерно,
57,2958 градусов. В связи с этим, некоторые положения сервопривода не
соответствуют «градусному» эквиваленту, в результате чего сервопривод
«дергается» между двумя значениями, так как управляющий блок не может
установить целое значение угла в градусах.
2. Из-за погрешностей в производстве в крайних положениях (0 и 180
градусов) сервопривод также может «дергаться». Чтобы этого избежать,
необходимо «отступить» на пару градусов от крайнего значения. Например,
используйте в качестве крайних положений 5 и 175 градусов, а не 0 и 180 градусов.
74

3. Сервопривод не может выполнить действие моментально. Для поворота
ему необходимо некоторое время. Поэтому, после каждого метода «write»
используйте функцию «delay», чтобы микроконтроллер подождал, пока сервопривод
повернется до заданного вами угла. Обычно поворот из положения 0 в положение
180 градусов на моделях SG90 занимает около 350-400 милисекунд.
5.7.2 Пример
Сервопривод подключен к Arduino через пины 5V, GND и 12, как
представлено на рисунке 39.
Рисунок 39 – Подключение сервопривода к плате Arduino UNO в рамках
лабораторной работы №6
Код скетча:
#include <Servo.h>
Servo motor1;
int a = 350;
void setup() {
motor1.attach(12);
75

}
void loop() {
motor1.write(0);
delay(a);
motor1.write(180);
delay(a);
}
Результат работы скетча: сервопривод поочередно принимает крайнее левое и
крайнее правое положение. На полный поворот в пределах полуокружности
отводится 350 милисекунд.
5.7.3 Практическое задание
Соберите электрическую схему с сервоприводом и напишите скетч для
Arduino.
Вариант 1: Схема с потенциометром. Угол поворота сервопривода
управляется с помощью потенциометра.
Вариант 2: Схема с фоторезистором. Угол поворота сервопривода
управляется с помощью уровня освещенности фоторезистора.
Вариант 3: Схема из сервопривода и двух тактовых кнопок. Нажатие одной
кнопки приводит к повороту сервопривода в крайнее левое положение. Нажатие
второй – в крайнее правое. Повторное нажатие одной и той же кнопки не должно
вызывать команду на поворот сервопривода за пределы его крайнего положения –
это может привести к повреждению механизма. Используйте делители напряжения
для подключения тактовых кнопок.
76

5.8 Лабораторная работа №8 «Работа с пьезо-динамиком»
Цель работы: научиться работать с пьезо-динамиком, изучить
соответствующие функции.
5.8.1 Краткие теоретические сведения
Пьезо-динамик переводит переменный ток в колебания мембраны, которая, в
свою очередь, создает звуковую волну. По сути, внутри пьезо-динамика находятся
мембрана и конденсатор. При зарядке и разрядке конденсатора мембрана издает
звук.
Пьезо-динамик очень просто подключать и использовать. Для подключения к
Arduino используются всего лишь два контакта – любой из цифровых пинов платы и
пинGND. Для регулировки громкости можно подключить пьезо-динамик через
потенциометр. Добавление сопротивления в цепь с помощью поворота ручки будет
уменьшать громкость издаваемого динамиком звука.
Для того, чтобы пьезо-динамик издавал звук нужной частоты, используется
функция «tone» (прежде чем использовать эту функцию, необходимо перевести
цифровой пин в режим «выхода» с помощью уже известной вам функции
«pinMode»). Синтаксис функции «tone» таков: tone(пин, герц), где пин – номер
цифрового пина платы Arduino, к которому подключен динамик, а герц – частота
звукового сигнала в герцах.
Также возможно использование третьего параметра – длительность звучания
сигнала в милисекундах: tone(пин, герц, сек), однако третий параметр
поддерживается не всеми компиляторами ArduinoIDE. Если плата Arduino не
реагирует на третий параметр и не ограничивает длительность сигнала,
целесообразно использовать функцию «noTone»: noTone(пин), где пин – номер пина,
к которому подключен пьезо-динамик. Данная функция отключит пьезо-динамик.
Таким образом, можно использовать связку из функций «tone», «delay» и «noTone».
Например, вот так будет выглядеть фрагмент кода скетча, заставляющий пьезо-
77

динамик, подключенный к пину 2, звучать на частоте ноты «До» первой октавы в
Нота
1 октава (частота,
Гц)
2 октава (частота,
Гц)
3 октава (частота,
Гц)
До
261
523
1046
До-диез
277
554
1109
Ре
294
587
1175
Ре-диез
311
622
1245
Ми
330
659
1319
Фа
349
698
1397
Фа-диез
370
740
1480
Соль
392
784
1568
Соль-диез
415
831
1661
Ля
440
880
1760
Ля-диез
466
932
1865
Си
494
988
1976
течении двух секунд:
tone(2, 261); //ноте «До» первой октавы соответствует частота 261 герц
delay(2000);
noTone(2);
В таблице 1 приведены частоты, соответствующие нотам первой, второй и
третей октав. Так как функции «tone» на вход можно подавать только
целочисленные значения номера пина и герц, частоты в таблице для удобства
округлены до ближайших целых чисел. Вы можете пользоваться ей для выполнения
заданий лабораторной работы.
Таблица 18 – Частоты, соответствующие нотам 1, и 2 и 3 октав. [2]
5.8.2 Пример
Пьезо-динамик подключен к цифровомупину 2 платы Arduino, как
представлено на рисунке 40. Для подключения не используется макетная плата и
токоограничивающий резистор.
78

Рисунок 40 – Подключение пьезо-динамика в плате Arduino
Кодскетча:
void setup() {
pinMode(2, OUTPUT);
}
void loop() {
tone(2, 700, 300);
delay(600);
tone(2, 700, 300);
delay(600);
tone(2, 780, 150);
delay(300);
tone(2, 700, 150);
delay(300);
delay(300);
tone(2, 520, 150);
delay(300);
tone(2, 460, 450);
delay(600);
tone(2, 350, 450);
delay(600);
delay(600);
tone(2, 350, 450);
delay(600);
tone(2, 460, 450);
delay(600);
tone(2, 520, 150);
tone(2, 625, 450);
delay(600);
tone(2, 590, 150);
delay(300);
tone(2, 590, 150);
delay(300);
79

tone(2, 625, 450);
tone(2, 460, 450);
delay(600);
tone(2, 590, 150);
delay(300);
tone(2, 520, 150);
delay(300);
tone(2, 700, 1350);
delay(1800);
tone(2, 700, 300);
delay(600);
tone(2, 700, 300);
delay(600);
tone(2, 780, 150);
delay(300);
delay(600);
tone(2, 350, 450);
delay(600);
delay(600);
tone(2, 350, 450);
delay(600);
tone(2, 625, 450);
delay(600);
tone(2, 590, 150);
delay(300);
tone(2, 520, 150);
delay(300);
tone(2, 700, 450);
tone(2, 700, 150);
delay(300);
tone(2, 625, 450);
delay(600);
tone(2, 590, 150);
delay(300);
tone(2, 520, 150);
delay(300);
Результат работы скетча: данная компоновка составляет мелодию «Нас утро
встречает прохладой».
delay(600);
tone(2, 590, 150);
delay(300);
tone(2, 520, 150);
delay(300);
tone(2, 460, 1350);
delay(5000);
}
8.3 Практическое задание
Соберите электрическую схему с пьезо-динамиком и напишите скетч для
Arduino.
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
