Файл: Методические указания к выполнению лабораторных работ по дисциплине Основы электротехники в робототехнике.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.11.2023
Просмотров: 167
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1 Перечень необходимых средств для выполнения лабораторных работ
2.1 Как подключить светодиод к Arduino
2.3 Меняем цвет по нажатию кнопки
2.5 Классы в программах Ардуино. Кнопка как объект.
3.1 Подключение семисегментного индикатора
3.2 Подключение LED индикатора с TM1637
3.3 Подключение LCD 1602 (HD44780) к Arduino
3.4 Подключение LCD1602 по I2C к Ардуино
4.1 Подключение матричной клавиатуры к Arduino
4.2 Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino
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. В любом случае, при загрузке скетча, сначала происходит проверка и компиляция программы. При компиляции происходит перевод программы в двоичный код, понятный микроконтроллеру.
Перед загрузкой программы в микроконтроллер, потребуется сохранить скетч на компьютере. Нажмите «Сохранить» в появившемся окне и начнется загрузка.
Перед загрузкой программы, потребуется сохранить скетч.
Пояснения к коду:
-
Процедура setup выполняется при запуске микроконтроллера один раз. Используется для конфигурации портов микроконтроллера и других настроек; -
После выполнения setup запускается процедура loop, которая выполняется в бесконечном цикле. Это мы используем, чтобы светодиод мигал постоянно; -
Процедуры 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 кГц, и хотя схема будет работать с практически любой
заданной частотой в пределах звукового диапазона, но наиболее разборчивый звук вы получите именно при таких частотах (они соответствуют второй-третьей октавам музыкального ряда).
Можно получить отличный звуковой сигнализатор. Он будет гораздо лучше слышен, если звук будет не постоянный, а прерывистый. Для получения прерывистого звука измените текст программы в основном цикле на следующий: