Лабораторная работа №11


Цель работы: обучение Arduino

Задача: научиться управлять коллекторным мотором

 

Сборка лабораторной установки


Для достижения поставленной задачи, подготовим все необходимые нам детали.

Компоненты лабораторной установки:

1. Контроллер
2. Макетная плата
3. Резисторы 10 кОм 
4. Кнопки
5. Полевой транзистор
6. Диод выпрямительный
7. Коллекторный мотор
8. Провода

 

Схема лабораторной установки: 




 

Алгоритм выполения работы:

1. Подключаем Коллекторный мотор выпрямительный диод и полеой транзистор
2. Подключаем пин от коллекторного мотора ( пин 3) 
3. Подключаем 2 кнопки и подсоединяем к ним резисторы и провода для напряжения
4. Подключаем пины для 1 и 2 кнопки ( пин 4 и 5 соотвественно) 
5. Выводим заземление и напряжение на микроконтроллер.


 

Подробное описание можно посмотреть в следующем видео:



Работа в среде программирования Arduino IDE

Код программы:

const int motor = 3; //Объявление пина 3 для мотора
const int button1 = 4; //Пин 4 для кнопки 1 (уменьшение скорости)
const int button2 = 5; //Пин 5 для кнопки 2 (увеличение скорости)
boolean lastButton1 = LOW; //Флаг для запоминания последнего значения кнопки 1
boolean lastButton2 = LOW; //Флаг для запоминания последнего значения кнопки 2
int speedMotor = 0; //Хранение скорости мотора

void setup()
{
 pinMode(motor, OUTPUT); //Мотор на выход
 pinMode(button1, INPUT); //Кнопка 1 на вход
 pinMode(button2, INPUT); //Кнопка 2 на вход
}

void loop()
{        
 //Стабилизированное значение кнопки 1 (избавленное от дребезга
 //программным способом, в функции stable() )
 boolean stableButton1 = stable(lastButton1, button1); 
 //Стабилизированное значение кнопки 2
 boolean stableButton2 = stable(lastButton2, button2);
 //Кнопка 1 включена
 if (stableButton1 == HIGH && lastButton1 == LOW)
 {
  speedMotor = speedMotor – 65; //Уменьшить скорость    
 }
 //Кнопка 2 включена
 if (stableButton2 == HIGH && lastButton2 == LOW) 
 {
  speedMotor = speedMotor + 65; //Увеличить скорость    
 }
 //Ограничить скорость в пределах от 0 до 255
 if (speedMotor < 0 ) speedMotor = 0;
 else if (speedMotor > 255) speedMotor = 255;
 //Записать значение скорости на мотор
 analogWrite(motor, speedMotor);
 //Установить значения флагов кнопок
 lastButton1 = stableButton1;
 lastButton2 = stableButton2;
}

//Функция стабилизации кнопки (программное удаление «дребезга»)
boolean stable(boolean valueIn, int button) //Функция имеет два параметра

 boolean valueButton = digitalRead(button); //Прочитать значение кнопки
 //Если то, что пришло в функцию, отличается от того, что прочитали 
 if (valueIn != valueButton)
 {  
  delay(5); //Задержим на 5 миллисекунд
  valueButton = digitalRead(button);  //Заново прочитать значение 
 }
 return valueButton; //Вернуть значение
}

Подробное описание кода смотрите в этом видео:

 

Вопросы:

1. Сколько скоростей имеет коллекторный мотор при данной реализации?

 

2. Каким образом устраняется "дребезг" кнопки?