Лабораторная работа №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. Каким образом устраняется "дребезг" кнопки?