Файл: Методические указания к выполнению лабораторных работ по дисциплине Основы электротехники в робототехнике.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

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

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

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

void setup() // процедура setup

{

pinMode(13, OUTPUT); // объявляем пин 13 как выход

}
void loop() // процедура loop

{

digitalWrite(13, HIGH); // зажигаем светодиод

delay(1000); // ждем 1 секунду

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

delay(1000); // ждем 1 секунду

}
Скопируйте код и вставьте свой первый скетч в программу

Скопируйте код и вставьте скетч в программу Arduino IDE.

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

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


Перед загрузкой программы, потребуется сохранить скетч.

Пояснения к коду:

  1. Процедура setup выполняется при запуске микроконтроллера один раз. Используется для конфигурации портов микроконтроллера и других настроек;

  2. После выполнения setup запускается процедура loop, которая выполняется в бесконечном цикле. Это мы используем, чтобы светодиод мигал постоянно;

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



2.2 Подключение кнопки


Для сборки модели нам потребуется:

  • плата Arduino

  • Breadboard

  • 5 проводов и/или перемычек «папа-папа»

  • светодиод

  • кнопка

  • резисторы на 10 кОм и 220 Ом.



Что понадобится для подключения кнопки на Arduino?

Схема подключения модели Arduino с кнопкой и светодиодом:



Рис. - Схема подключения кнопки и светодиода на Arduino

Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):


int button = 2;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop(){
if (digitalRead(button) == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}



Так выглядит собранная модель Arduino кнопки со светодиодом:



Рис - Готовая модель с кнопкой и светодиодом на Arduino

2.3 Меняем цвет по нажатию кнопки






Не отключая светодиода, подключим к плате замыкающую кнопку
с подключенными к ней гибкими выводами. Один вывод кнопки
подключим к выводу 3 платы, другой — к любому из выводов GND
(один из которых находится рядом с выводом 13, см. рисунок внизу). Сохраним скетч под новым именем (например, migalka_bitton)
и немного изменим его структуру. В самом начале (до функции
setup), в секции определений, которая у нас пока пустовала, добавим строки:
#define BUTTON_PIN 3 // вывод подключения кнопки
#define LED_RED_PIN 13 // вывод управления красным светодиодом
#define LED_GREEN_PIN 12 // вывод управления зеленым светодиодом
Таким способом безликим номерам выводов присваиваются читаемые


имена: когда далее в программе вы встречаете обращение к выводу
BUTTON_PIN, понятно, что это вывод, к которому подключена кнопка.

Другое удобство такого способа заключается в снижении количества трудно отслеживаемых ошибок при подключении кнопки или светодиода к другому выводу: в программе теперь будет достаточно заменить номера в этих строках, оставив все остальное без изменений. Кстати, все символьные константы, которые мы уже встречали (HIGH, LOW, OUTPUT и т.д.), вводятся именно таким способом: где-то в недрах библиотек Arduino стоит выражение #define HIGH и далее численное значение, которым никто никогда не интересовался.

Следует привыкнуть применять такой способ во всех своих программах. Во время преобразования текста в исполняемый код программа компилятор просто подставляет вместо символьного имени число, указанное в директиве #define. Потому при ее применении надо быть предельно внимательным: двойное именование одного и того же числа разными именами ошибкой не считается и при компиляции не отслеживается. Например, если вы в обоих строках для LED_RED_PIN и LED_GREEN_PIN по рассеянности поставите число 13, то программа работать не будет, и вы долго будете разбираться, где тут собака порыта. Мало того, такое двойное именование является легитимным программистским приемом и нередко используется, когда, например, один и тот же вывод в разных частях программы используется в разных целях. Советуем в своих программах избегать подобных двойных именований во избежание путаницы при отладке — лучше уж тогда оставить выводу цифровое обозначение.

Функция setup теперь будет выглядеть таким образом:

void setup() {
pinMode(LED_RED_PIN, OUTPUT); // вывод красного – на выход
pinMode(LED_GREEN_PIN, OUTPUT); // вывод зеленым – на выход
pinMode(BUTTON_PIN, INPUT_PULLUP); // вывод кнопки на вход
//с подтягивающим резистором
}


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

(INPUT), что изначально можно было бы вообще не указывать —
в исходном состоянии все выводы контроллера подключены именно для
работы на вход. Однако мы не должны оставлять «висящим в воздухе»
вывод кнопки, ни к чему не подключенный в разомкнутом состоянии.
Вывод контроллера при работе на вход имеет огромное сопротивление,
измеряемое гигаомами, потому он будет непрерывно срабатывать
от наводок. Разомкнутый контакт кнопки обязательно подключают
к какому-нибудь потенциалу с помощью резистора.
Для удобства такие резисторы величиной в пределах 20–50 кОм,
«подтягивающие» вывод к напряжению питания (pullup-резисторы),
встроены прямо в контроллер. Константа INPUT_PULLUP и указывает
функции pinMode на такое подключение1. После выполнения такой команды в разомкнутом состоянии кнопки на выводе BUTTON_PIN все время будет «висеть» логическая единица. Так что наша программа обязана отслеживать момент, когда на нем окажется логический ноль — это и будет означать, что кнопка нажата.

Это делает следующая последовательность команд, которую мы размещаем в главном цикле скетча:


void loop() {
if (digitalRead(BUTTON_PIN) == HIGH) { //кнопка не нажата

// включаем зеленый светодиод
digitalWrite(LED_GREEN_PIN, HIGH);
digitalWrite(LED_RED_PIN, LOW);
}
else { //кнопка нажата
// включаем красный светодиод
digitalWrite(LED_GREEN_PIN, LOW);
digitalWrite(LED_RED_PIN, HIGH);
}
}

По этой программе в течение времени нажатия кнопки цвет свечения
светодиода меняется с зеленого на красный (и, кстати, параллельно
зажигается желтый светодиод L на плате Arduino). При отпускании он
меняется обратно на зеленый (а светодиод L гаснет)

2.4 Простая пищалка с кнопкой




Из схемы мигалки с кнопкой, что осталась от предыдущего примера,

удалим внешний светодиод и вместо него к выводу 13 подключим пье-

зоизлучатель звука (пьезозвонок). Второй вывод звонка подключим к

свободному выводу «земли» GND, на противоположной стороне платы

Uno (см. рисунок вверху).

Теперь загрузим Arduino IDE и создадим новый проект (Файл | Новый).

Сохраним его под названием, например, pischalka. В начале программы

определим два вывода:

#define BUZZER_PIN 13 // вывод для пищалки (англ. «buzzer»)

#define BUTTON_PIN 3 //вывод подключения кнопки

В функции setup определяем назначение этих выводов: BUZZER_

PIN – на выход, BUTTON_PIN, как и ранее, на вход с подтягивающим

резистором:

void setup() {

pinMode(BUZZER_PIN, OUTPUT); //на выход

pinMode(BUTTON_PIN, INPUT_PULLUP); //вывод кнопки на вход

}

И, наконец, в основном цикле отслеживаем состояние кнопки и

в зависимости от этого включаем или останавливаем звук:

void loop() {

if (digitalRead(BUTTON_PIN) == LOW) { //кнопка нажата

tone(BUZZER_PIN, 1000); //частота 1000 Гц на пищалку

}

else { //кнопка отпущена

noTone(BUZZER_PIN);//прекращаем генерацию;

}

}

Загрузите программу в контроллер и проверьте ее работу. Простейшие
пьезоизлучатели, вроде пьезозвонка, который мы здесь используем, формально говоря, имеют довольно узкий диапазон рабочих частот -
от 1 до 3–4 кГц, и хотя схема будет работать с практически любой
заданной частотой в пределах звукового диапазона, но наиболее разборчивый звук вы получите именно при таких частотах (они соответствуют второй-третьей октавам музыкального ряда).


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