Файл: Лабораторная работа 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 Оформить отчет.

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 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;         // переменная состояния светодиода 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