Лабораторные работы  Технологии+Бизнес


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

Задача: применить на практике коллекторный мотор

Применим коллекторный мотор в качестве вентилятора. С помощью кнопок будем управлять его скоростью.  

Для этого нам понадобится все, что необходимо для работы коллекторного двигателя, 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; //Вернуть значение 
} 
 

Для проверки корректности изменения скорости, повесим полоску бумаги и будем направлять на нее вентилятор. 

Вот что получилось в итоге:


Из видео видно, что все работает корректно, а именно: при увеличении скорости бумага все сильнее отклоняется и наоборот.

Лабораторные работы  Технологии+Бизнес