Файл: Лабораторная работа 1 По дисциплине Основы электротехники в робототехнике Выполнила Марченко А. В. Группа мит23.docx

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

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

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

Добавлен: 07.11.2023

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

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

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

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Сибирский государственный университет телекоммуникаций и информатики»

(СибГУТИ)

Лабораторная работа №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