Файл: Лабораторная работа 1 По дисциплине Основы электротехники в робототехнике Выполнила Марченко А. В. Группа мит23.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 37
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Сибирский государственный университет телекоммуникаций и информатики»
(СибГУТИ)
Лабораторная работа №1
По дисциплине: Основы электротехники в робототехнике
Выполнила: Марченко А.В.
Группа: МИТ-23
Вариант: 3
Проверил: Шыырап
Юрий Монгушевич
Барнаул, 2023 г.
Тема: АРДУИНО : подключение светодиода, кнопки, пьезоизлучателя (пищалки)
Цель: Знакомство с платформой Arduino. Освоение элементов программирования платы Arduino.
Задание
1 Выполнить сборку схемы на печатной плате Arduino по описанию из п.2.1.
2 Загрузить программный код в программу Arduino IDE (п.2.1).
3 Изменяя подключения на печатной плате Arduino и программы, выполнить задания пунктов 2.2-2.5.
4 Оформить отчет.
2.1 Как подключить светодиод к Arduino
Для занятия нам понадобятся следующие детали:
-
плата Arduino Uno / Arduino Nano / Arduino Mega;
-
макетная плата;
-
2 светодиода и 2 резистора 220 Ом;
-
провода «папа-папа».
Собираем схему подключения светодиода к Arduino, как на фото из методических указаний:
Вводим код:
Запускаем симуляцию и получаем:
https://disk.yandex.ru/i/RYVNv2uPixGJtw
2.2 Подключение кнопки
Для сборки модели нам потребуется:
-
плата Arduino
-
Breadboard
-
5 проводов и/или перемычек «папа-папа» -
Светодиод
-
Кнопка
-
резисторы на 10 кОм и 220 Ом.
Собираем схему подключения модели Arduino с кнопкой и светодиодом:
Вводим код:
Запускаем симуляцию и получаем:
https://disk.yandex.ru/i/Z92xzCqEeqpfoQ
2.3 Меняем цвет по нажатию кнопки
Собираем схему подключения модели Arduino с кнопкой и светодиодом:
Используем RGB светодиод, 3 резистора на 220 Ом, кнопку. Подключаем модуль с полноцветным RGB светодиодом к следующим пинам: Минус — GND, B — Pin11, G — Pin12, R — Pin13.
Вводим код:
Запускаем симуляцию и получаем:
https://disk.yandex.ru/i/rU_a1gYV5sOLSw
2.4 Простая пищалка с кнопкой
Собираем схему подключения модели Arduino с кнопкой и пищалкой:
Используем кнопку и пьезозвонок. Начинаем работать с кодом и вставляем код, представленный в методических указаниях. Программа выдает ошибку, в интернете находим другой код и видоизменяем имеющийся. Получаем код:
const int BUTTON_PIN = 3; // Arduino pin connected to button's pin
const int BUZZER_PIN = 13; // Arduino pin connected to Buzzer's 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);//прекращаем генерацию;
}
}
Запускаем симуляцию и получаем:
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; // переменная состояния светодиода 2
Button 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