Arduone kit
Урок №12 Крутись Мотор
Теперь мы познакомимся с электродвигателем.
Помните, ранее вы изучили серводвигатель? Теперь мы познакомимся с электродвигателем. Для это потребуется транзистор, который может коммутировать (переключать) больший ток, чем может себе позволить Arduino. Используя транзистор, нужно убедиться, что его параметры, подходят для выбранного оборудования. Транзистор который мы используем для этой схемы, рассчитан на максимальное напряжение 40 Вольт и 200 миллиампер, идеально подходит для нашего игрушечного двигателя!
Схема подключения
Скетч
// Будем управлять двигателем используя цифровой порт 9 (pin 9).
// Это должен быть любой ШИМ порт Arduino

const int motorPin = 9;


void setup()
{
  // Установим порт мотора как выходной:

  pinMode(motorPin, OUTPUT);

  // Активируем "Монитор порта":

  Serial.begin(9600);
}


void loop()
{
  // Здесь мы использовали комментарии для отключения некоторых
  // примеров. Чтобы испробовать другой пример, раскомментируйте
  // одну из следующих строк и закомментируйте другие. См функции,
  // для того чтобы узнать что они делают и как работают.

  // motorOnThenOff();
  // motorOnThenOffWithSpeed();
  // motorAcceleration();
     serialSpeed();
}

// Попробуйте разные значения.

void motorOnThenOff()
{
  int onTime = 3000;  // миллисекунд для вращения мотора
  int offTime = 3000; // миллисекунд для простаивания мотора
  
  digitalWrite(motorPin, HIGH); // включить мотор - максимальная скорость
  delay(onTime);                // задержка, для продолжения вращения
  digitalWrite(motorPin, LOW);  // выключить мотор
  delay(offTime);               // задержка, для простаивания мотора
}

// Функция "motorOnThenOffWithSpeed" переключает работу мотора между
// двумя скоростями. Пробуйте разные значения, если интересно.

void motorOnThenOffWithSpeed()
{
  int Speed1 = 200;  // скорость "Speed1" 0 (остановка), 255 (полный ход)
  int Time1 = 3000;  // время "Time1" в миллисекундах
  
  int Speed2 = 50;   // скорость "Speed2" 0 (остановка), 255 (полный ход)
  int Time2 = 3000;  // время "Time2" в миллисекундах
  
  analogWrite(motorPin, Speed1);  // включаем мотор на скорости "Speed1" 
  delay(Time1);                   // продолжаем вращение заданное время
  analogWrite(motorPin, Speed2);  // включаем мотор на скорость "Speed2"
  delay(Time2);                   // продолжаем, заданное время "Time2"
}


// Функция "motorAcceleration" раскручивает двигатель от нуля до
// максимума, и обратно до полной остановки.

void motorAcceleration()
{
  int speed;
  int delayTime = 20; // пауза в миллисекундах
  
  // будем раскручивать мотор, увеличивая скорости от 0 до 255 с паузой в
  // 20 миллисекунд меду каждым шагом (1, пауза, 2, пауза, 3, пауза и.т.д)

  for(speed = 0; speed <= 255; speed++) // шаг, увеличение на единицу
  {
    analogWrite(motorPin,speed);	// установка новой скорости
    delay(delayTime);           	// пауза "delayTime", т.е 20 миллисекунд
  }
  
  // будем останавливать мотор, уменьшая скорость от 255 до 0 с паузой в
  // 20 миллисекунд меду каждым шагом (255, пауза, 254, пауза, 253, пауза ...)

  for(speed = 255; speed >= 0; speed--)
  {
    analogWrite(motorPin,speed);	// установка новой скорости
    delay(delayTime);           	// пауза "delayTime", т.е 20 миллисекунд
  }
}


// Следующая функция позволит вам изменять скорость прямо в окне
// "Монитора порта". Для этого откройте Монитор порта, используя
// значок увеличительного стекла в Arduino IDE, в правом верхнем
// углу окна. Затем введите желаемую скорость в специальном месте
// для ввода текста "Type a speed (0-255) into the box above,", в
// верхней части окна, и нажмите кнопку "Send" (отправить) или 
// "return" (возврат). Двигатель будет работать на заданной вами
// скорости. Допустимый диапазон от 0 до 255.

void serialSpeed()
{
  int speed;
  
  Serial.println("Type a speed (0-255) into the box above,");
  // Т.к. с русским языком в "мониторе порта" существуют некоторые
  // сложности, надписи будут на английском.
  Serial.println("then click [send] or press [return]");
  Serial.println();  // Распечатать пустую строку

  // In order to type out the above message only once,
  // we'll run the rest of this function in an infinite loop:
  // Для того, чтобы вывести сообщение (выше) лишь один раз,
  // Мы будем запускать остальную часть этой функции в
  // бесконечном цикле:
  // Вывод запроса данных осуществляется лишь раз, после этого
  // Функция будет проверять правильность ввода данных по кругу, пока
  // данные не изменятся.

  while(true)
  {
    // Сначала мы проверяем, доступны ли входные данные:
  
    while (Serial.available() > 0)
    {
	  // Если данные есть, выполняем parseInt() для считывания цифр:
      
      speed = Serial.parseInt();
  
      // Поскольку analogWrite() работает с числами от 0 до 255,
      // мы обязательно должны быть уверенны, что число входит в
	  // заданный диапазон. Для этого воспользуемся функцией "constrain".
      // об этой функции мы говорили в опыте №6 "Arduino и Фоторезистор":
  
      speed = constrain(speed, 0, 255);
      
      // Напечатать сообщение для того, чтобы вы знали что число
      // было получено:
      
      Serial.print("Setting speed to ");
      Serial.println(speed);
  
      // И в конце зададим скорость двигателя
      
      analogWrite(motorPin, speed);
    }
  }
}
Что вы должны увидеть:
Двигатель постоянного тока должен вращаться, если все компоненты цепи собраны правильно. Если этого не происходит, проверьте загружен ли код в Arduino, а также ознакомьтесь с разделом поиска и устранения неисправностей ниже.
Возможные трудности:
Мотор не вращается
Если вы использовали свой транзистор, отличный от 2N2222, но подходящий по параметрам, проверьте соответствие его ножек по документации (возможен обратный порядок).
Все еще не повезло
Проверьте работает ли двигатель от 5 Вольт, и хватает ли для него мощности источника.
Все еще не работает
Иногда Arduino может отключаться от компьютера. Попробуйте отсоединить от нее USB разъем и затем снова подсоединить
Применение в жизни:
Дистанционно управляемые автомобили используют двигатели постоянного тока, для поворота колес и для движения вперед, назад