Файл: Лабораторная работа 1 По дисциплине Основы электротехники в робототехнике Выполнила Марченко А. В. Группа мит23.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 141
Скачиваний: 9
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Федеральное государственное бюджетное образовательное учреждение высшего образования«Сибирский государственный университет телекоммуникаций и информатики»(СибГУТИ)Лабораторная работа №1По дисциплине: Основы электротехники в робототехникеВыполнила: Марченко А.В.Группа: МИТ-23Вариант: 3Проверил: Шыырап Юрий МонгушевичБарнаул, 2023 г.Тема: АРДУИНО : подключение светодиода, кнопки, пьезоизлучателя (пищалки)Цель: Знакомство с платформой Arduino. Освоение элементов программирования платы Arduino.Задание1 Выполнить сборку схемы на печатной плате Arduino по описанию из п.2.1.2 Загрузить программный код в программу Arduino IDE (п.2.1).3 Изменяя подключения на печатной плате Arduino и программы, выполнить задания пунктов 2.2-2.5.4 Оформить отчет.
}Запускаем симуляцию и получаем:https://disk.yandex.ru/i/E6kCIBPoL-gcmwИзменяем код для получения прерывистого звука: Запускаем симуляцию и получаем:https://disk.yandex.ru/i/7G4fyyzKcnkGoQ
* Подключены две кнопки и светодиод
* Каждое нажатие кнопки 1 инвертирует состояние светодиода на плате Ардуино
* Каждое нажатие кнопки 2 инвертирует состояние светодиода на макетной плате */#define LED_1_PIN 13 // номер вывода светодиода 1 равен 13
#define BUTTON_1_PIN 12 // номер вывода кнопки 1 равен 12
#define BUTTON_2_PIN 11 // номер вывода кнопки 2 равен 11
#define LED_2_PIN 10 // номер вывода светодиода 2 равен 10// Описание класса обработки сигналов кнопок
class Button {
public:
Button(byte pin, byte timeButton); // описание конструктора
boolean flagPress; // признак кнопка сейчас нажата
boolean flagClick; // признак кнопка была нажата (клик)
void scanState(); // метод проверки состояние сигнала
void setPinTime(byte pin, byte timeButton); // метод установки номера вывода и времени (числа) подтверждения
private:
byte _buttonCount; // счетчик подтверждений стабильного состояния
byte _timeButton; // время подтверждения состояния кнопки
byte _pin; // номер вывода
};boolean ledState1; // переменная состояния светодиода 1
boolean ledState2; // переменная состояния светодиода 2Button button1(BUTTON_1_PIN, 15); // создание объекта для кнопки 1
Button button2(BUTTON_2_PIN, 15); // создание объекта для кнопки 2
void setup() {
pinMode(LED_1_PIN, OUTPUT); // определяем вывод светодиода 1 как выход
pinMode(LED_2_PIN, OUTPUT); // определяем вывод светодиода 2 как выход
}// бесконечный цикл с периодом 2 мс
void loop() { button1.scanState(); // вызов метода сканирования сигнала кнопки 1
button2.scanState(); // вызов метода сканирования сигнала кнопки 2
// блок управления светодиодом 1
if ( button1.flagClick == true ) {
// было нажатие кнопки
button1.flagClick= false; // сброс признака клика
ledState1= ! ledState1; // инверсия состояния светодиода 1
digitalWrite(LED_1_PIN, ledState1); // вывод состояния светодиода 1
}
// блок управления светодиодом 2
if ( button2.flagClick == true ) {
// было нажатие кнопки
button2.flagClick= false; // сброс признака клика
ledState2= ! ledState2; // инверсия состояние светодиода 2
digitalWrite(LED_2_PIN, ledState2); // вывод состояния светодиода 2
} delay(2); // задержка на 2 мс
}// метод проверки состояния кнопки
// flagPress= true - нажата
// flagPress= false - отжата
// flagClick= true - была нажата (клик)
void Button::scanState() { if ( flagPress == (! digitalRead(_pin)) ) {
// состояние сигнала осталось прежним
_buttonCount= 0; // сброс счетчика состояния сигнала
}
else {
// состояние сигнала изменилось
_buttonCount++; // +1 к счетчику состояния сигнала if ( _buttonCount >= _timeButton ) {
// состояние сигнала не менялось заданное время
// состояние сигнала стало устойчивым
flagPress= ! flagPress; // инверсия признака состояния
_buttonCount= 0; // сброс счетчика состояния сигнала if ( flagPress == true ) flagClick= true; // признак клика на нажатие
}
}
}// метод установки номера вывода и времени подтверждения
void Button::setPinTime(byte pin, byte timeButton) { _pin= pin;
_timeButton= timeButton;
pinMode(_pin, INPUT_PULLUP); // определяем вывод как вход
}// описание конструктора класса Button
Button::Button(byte pin, byte timeButton) { _pin= pin;
_timeButton= timeButton;
pinMode(_pin, INPUT_PULLUP); // определяем вывод как вход
}Собираем для него макет:Вставляем код и запускаем симуляцию. Получаем:https://disk.yandex.ru/i/ODGbKzKQEF2G0Q
2.1 Как подключить светодиод к Arduino
Для занятия нам понадобятся следующие детали:-
плата Arduino Uno / Arduino Nano / Arduino Mega;
-
макетная плата;
-
2 светодиода и 2 резистора 220 Ом;
-
провода «папа-папа».
2.2 Подключение кнопки
Для сборки модели нам потребуется:-
плата Arduino
-
Breadboard
-
5 проводов и/или перемычек «папа-папа» -
Светодиод
-
Кнопка
-
резисторы на 10 кОм и 220 Ом.
2.3 Меняем цвет по нажатию кнопки
Собираем схему подключения модели Arduino с кнопкой и светодиодом:Используем RGB светодиод, 3 резистора на 220 Ом, кнопку. Подключаем модуль с полноцветным RGB светодиодом к следующим пинам: Минус — GND, B — Pin11, G — Pin12, R — Pin13. Вводим код:Запускаем симуляцию и получаем:https://disk.yandex.ru/i/rU_a1gYV5sOLSw2.4 Простая пищалка с кнопкой
Собираем схему подключения модели Arduino с кнопкой и пищалкой:Используем кнопку и пьезозвонок. Начинаем работать с кодом и вставляем код, представленный в методических указаниях. Программа выдает ошибку, в интернете находим другой код и видоизменяем имеющийся. Получаем код:const int BUTTON_PIN = 3; // Arduino pin connected to button's pinconst int BUZZER_PIN = 13; // Arduino pin connected to Buzzer's pinvoid 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);//прекращаем генерацию;}}Запускаем симуляцию и получаем:https://disk.yandex.ru/i/E6kCIBPoL-gcmwИзменяем код для получения прерывистого звука: Запускаем симуляцию и получаем:https://disk.yandex.ru/i/7G4fyyzKcnkGoQ
2.5 Классы в программах Ардуино. Кнопка как объект.
Мы имеем код программы:/* Программа sketch_7_2 урока 7* Подключены две кнопки и светодиод
* Каждое нажатие кнопки 1 инвертирует состояние светодиода на плате Ардуино
* Каждое нажатие кнопки 2 инвертирует состояние светодиода на макетной плате */#define LED_1_PIN 13 // номер вывода светодиода 1 равен 13
#define BUTTON_1_PIN 12 // номер вывода кнопки 1 равен 12
#define BUTTON_2_PIN 11 // номер вывода кнопки 2 равен 11
#define LED_2_PIN 10 // номер вывода светодиода 2 равен 10// Описание класса обработки сигналов кнопок
class Button {
public:
Button(byte pin, byte timeButton); // описание конструктора
boolean flagPress; // признак кнопка сейчас нажата
boolean flagClick; // признак кнопка была нажата (клик)
void scanState(); // метод проверки состояние сигнала
void setPinTime(byte pin, byte timeButton); // метод установки номера вывода и времени (числа) подтверждения
private:
byte _buttonCount; // счетчик подтверждений стабильного состояния
byte _timeButton; // время подтверждения состояния кнопки
byte _pin; // номер вывода
};boolean ledState1; // переменная состояния светодиода 1
boolean ledState2; // переменная состояния светодиода 2Button button1(BUTTON_1_PIN, 15); // создание объекта для кнопки 1
Button button2(BUTTON_2_PIN, 15); // создание объекта для кнопки 2
void setup() {
pinMode(LED_1_PIN, OUTPUT); // определяем вывод светодиода 1 как выход
pinMode(LED_2_PIN, OUTPUT); // определяем вывод светодиода 2 как выход
}// бесконечный цикл с периодом 2 мс
void loop() { button1.scanState(); // вызов метода сканирования сигнала кнопки 1
button2.scanState(); // вызов метода сканирования сигнала кнопки 2
// блок управления светодиодом 1
if ( button1.flagClick == true ) {
// было нажатие кнопки
button1.flagClick= false; // сброс признака клика
ledState1= ! ledState1; // инверсия состояния светодиода 1
digitalWrite(LED_1_PIN, ledState1); // вывод состояния светодиода 1
}
// блок управления светодиодом 2
if ( button2.flagClick == true ) {
// было нажатие кнопки
button2.flagClick= false; // сброс признака клика
ledState2= ! ledState2; // инверсия состояние светодиода 2
digitalWrite(LED_2_PIN, ledState2); // вывод состояния светодиода 2
} delay(2); // задержка на 2 мс
}// метод проверки состояния кнопки
// flagPress= true - нажата
// flagPress= false - отжата
// flagClick= true - была нажата (клик)
void Button::scanState() { if ( flagPress == (! digitalRead(_pin)) ) {
// состояние сигнала осталось прежним
_buttonCount= 0; // сброс счетчика состояния сигнала
}
else {
// состояние сигнала изменилось
_buttonCount++; // +1 к счетчику состояния сигнала if ( _buttonCount >= _timeButton ) {
// состояние сигнала не менялось заданное время
// состояние сигнала стало устойчивым
flagPress= ! flagPress; // инверсия признака состояния
_buttonCount= 0; // сброс счетчика состояния сигнала if ( flagPress == true ) flagClick= true; // признак клика на нажатие
}
}
}// метод установки номера вывода и времени подтверждения
void Button::setPinTime(byte pin, byte timeButton) { _pin= pin;
_timeButton= timeButton;
pinMode(_pin, INPUT_PULLUP); // определяем вывод как вход
}// описание конструктора класса Button
Button::Button(byte pin, byte timeButton) { _pin= pin;
_timeButton= timeButton;
pinMode(_pin, INPUT_PULLUP); // определяем вывод как вход
}Собираем для него макет:Вставляем код и запускаем симуляцию. Получаем:https://disk.yandex.ru/i/ODGbKzKQEF2G0Q