25 апреля 2013-го

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Вертушка с моторчиком

25 апреля 2013, 0:02

В этом проекте Arduino будет управлять вращающейся с помощью моторчика вертушки.

Управлять моторами с помощью Arduino намного сложнее чем управлять светодиодами. Во-первых, моторы требуют больше тока чем может дать Arduino. Во-вторых, моторы могут сами генерировать электрический ток за счет являния, называемого индукцией, и этот ток может повредить элементы схемы. Однако, моторы приводят в движение разные вещи, и от этого проекты становяться интереснее. В общем оно того стоит.

Для того, чтобы что-то двигать, требуется много энергии.  Кроме того, что моторы требуют больше тока, чем дает Arduino (только 40мА на цифровом выходе), некоторым так же нужно более высокое напряжение. В момент начала движения  или при высоких нагрузках, потребление тока также может значительно возрастать.

С помощью транзисторов, подсоединенных к Arduino можно решить эту проблему. Транзисторы позволяют управлять большим током и источниками питания с высоким напряжением с помощью небольшого управляющего тока, который уже может идти от Arduino. Существует можество разновидностей транзисторов, но принцип действия у всех одинаковый. В нашем примере транзистор лучше представить как цифровой выключатель. Есть подать напряжение на один из выходов транзистора (затвор), то он замыкает два других выхода (сток и исток). Таким образом можно включать и выключать высоковольтные и высокоамперные моторы при помощи Arduino.

Электромотор — это индуктивное устройство. Индукция — это являние возникновения изменяющегося магнитного поля вокруг провода, по которому протекает изменяющийся электрический ток. Внутри электромотора есть катушка с плотно намотанным на нее медным проводом. Когда на мотор подается электрический ток, внутри этой катушки возникает магнитное поле. Это магнитное поле заставляет вал двигателя вращаться.

В обратную сторону индукция тоже работает: мотор может вырабатывать электричество, если вращать его вал. Если подключить к выходам мотора светодиод и начать вращать вал двигателя, то диод будет светиться. Так можно превратить мотор в маленький электрогенератор.

Если прекратить подавать электричество, то он по инерции продолжает какое-то время вращаться. Пока он вращается, он вырабатывает электрический ток, противоположный по направлению тому, который его вращал. Этот ток называют «обратным током», он может вывести из строя транзистор. Чтобы избежать этого, параллельно с мотором надо подключить диод и обратный ток будет проходить через диод.

С учетом всего вышесказанного схема для управления мотором получается такая:

Поскольку для мотора требуется много энергии, он питается от дополнительного источника — 9-ти вольтовой батерейки. И так получается, что управление транзистором производится с помощью Arduino, а сам мотор запитан от дополнительного мощного источника электроэнергии. Обязательное правило, которое следует соблюдать если в схеме используется несколько источников энергии — минусы всех источников должны быть соединены вместе.

Теперь, когда макет готов, осталось написать программу:

int motor=9; //пин управления мотором
int switchButn=2; //кнопка включения мотора
int switchButnVal=0;//значение считанное с кнопки включения мотора

void setup(){
  Serial.begin(9600);
  pinMode (switchButn,INPUT);
  pinMode(motor,OUTPUT);
}

void loop(){
  switchButnVal=digitalRead(switchButn);//считываем состояние кнопки
  Serial.println(switchButnVal);
  if(switchButnVal==HIGH){
    digitalWrite(motor,HIGH);//если кнопка нажата включаем мотор
  }
  else{
    digitalWrite(motor,LOW);//если не нажата — выключаем
  }
}

Работает вот так:

Чтобы за вращением наблюдать было интереснее, мы сделали деревянный диск, наклеили на него разноцветный рисунок, и подсоединили к мотору.

Если скорость вращения мотора уменьшить, то на диске с рисунком,  который крутиться, можно увидеть интересный оптический эффект. Для управления скоростью вращения в схему добавили потенциометр, и на затвор транзистора подаем напряжение от 0 до 5В, в зависимости от положения потенциометра. Программа чуть-чуть увеличилась.

int motor=9; //пин управления мотором
int switchButn=2; //кнопка включения мотора
int switchButnVal=0;//значение считанное с кнопки включения мотора
int pot=A0; // пин с потенциометром
int potVal=0;//значение считанное с потенциометра
int Val=0;//значение выдаваемое на пин управления мотором

void setup(){
  Serial.begin(9600);
  pinMode (switchButn,INPUT);
  pinMode(motor,OUTPUT);
}

void loop(){
  potVal=analogRead(pot);//читаем значение с потенциометра
  Val=map(potVal,0,1023,0,254); // в значение для вывода
  switchButnVal=digitalRead(switchButn);//считываем состояние кнопки
  Serial.println(switchButnVal);
  if(switchButnVal==HIGH){
    analogWrite(motor,Val);//если кнопка нажата включаем мотор
  }
  else{
    digitalWrite(motor,LOW);//если не нажата — выключаем
  }
}
11 апреля 2013   · · ·
Ctrl
· · ·   5 мая 2013