Задача: применить на практике коллекторный мотор
Применим коллекторный мотор в качестве вентилятора. С помощью кнопок будем управлять его скоростью.
Для этого нам понадобится все, что необходимо для работы коллекторного двигателя, 2 кнопки, а также пропеллер от вентиллятора (так как наш мотор имеет небольшой размер, возьмем пропеллер от USB-вентилятора).
Итак, соберем схему для коллекторного мотора. Далее прикрепим к нему пропеллер.
Напишем код.
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; //Вернуть значение
}
Для проверки корректности изменения скорости, повесим полоску бумаги и будем направлять на нее вентилятор.
Вот что получилось в итоге:
Из видео видно, что все работает корректно, а именно: при увеличении скорости бумага все сильнее отклоняется и наоборот.
Лабораторные работы Технологии+Бизнес