Как контролировать скорость двухпроводного вентилятора с помощью Arduino и только потенциометра?

Я пытаюсь изменить скорость двухпроводного вентилятора, используя Arduino Uno и только потенциометр.

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

Во втором коде вентилятор тоже не включался. Я не уверен, что это была моя проводка. У меня есть блок питания, подключенный к макетной плате для питания вентилятора.

Кроме того, потребуется ли мне MOSFET или транзистор, несмотря на использование потенциометра? Это также могло быть проблемой во время моей второй попытки.

Первая попытка кода:

int potPin=A2;
int gPin=9;
int potVal;
float LEDVal;
int dt=250;
void setup() {
  // поместите сюда код установки для однократного запуска:
pinMode(potPin, INPUT);
pinMode(gPin, OUTPUT);
Serial.begin(9600);
}

void loop() {
  // поместите сюда ваш основной код для многократного запуска:
potVal=analogRead(potPin);
LEDVal=(255./1023.)*potVal;
analogWrite(gPin,LEDVal);
Serial.println(LEDVal);
delay(dt);
}

Второй код:

int reading;
int value;

void setup() {
  pinMode(CONTROL, OUTPUT);
}

void loop() {
  reading = analogRead(POTENTIOMETER);
  value = map(reading, 0, 1024, 0, 255);   
  analogWrite(CONTROL, value);
}```

, 👍1

Обсуждение

Предполагая, что в целом возможно управлять вашим вентилятором с помощью ШИМ (что абсолютно не гарантируется), вам абсолютно необходим полевой МОП-транзистор для управления им. Контакт цифрового выхода не может обеспечить достаточный ток для вентилятора (макс. 20 мА)., @chrisl

«Мне потребуется MOSFET или транзистор, несмотря на использование потенциометра?» ... как вы думаете, что делает потенциометр?, @jsotola

@chrisl Понятно, спасибо, @AI09

@jsotola изменяет выходное напряжение., @AI09

Я предполагаю, что точка зрения jsotolas заключается в том, что потенциометр не имеет ничего общего с двигателем и потребностью в MOSFET. Poti обеспечивает ввод для Arduino. МОП-транзистор/двигатель является выходом. Вход и выход связаны только логически кодом, @chrisl

@chrisl Если я правильно понимаю, если я отрегулирую горшок, результаты, полученные кодом, изменят вывод, то есть скорость вентилятора изменится?, @AI09

@ AI09 да, вы правильно поняли ... горшок генерирует только числовое значение ... программа использует это значение ... числовое значение может так же легко поступать от датчика температуры, датчика освещенности или от математический расчет, @jsotola


1 ответ


Лучший ответ:

1

Как уже упоминалось в комментариях, вам, вероятно, потребуется добавить полевой транзистор для управления вентилятором. Arduino просто не может обеспечить ток, необходимый для привода вентилятора. Согласно документации Arduino, микроконтроллер может обеспечить только 20 мА на выходной контакт, что достаточно для управления светодиодами, но не двигателями вентиляторов.

К счастью, на веб-сайте Arduino есть руководство по управлению двигателями с ШИМ через полевой транзистор.
https://docs.arduino.cc/learn/electronics/transistor-motor-control

Следующая программа адаптирована из "Analog In, Out Serial" встроенный пример и должен быть достаточным для управления скоростью двигателя.

// Эти константы не изменятся. Они используются для присвоения имен используемым контактам:

const int analogInPin = A0;  // Контакт аналогового входа, к которому подключен потенциометр

const int analogOutPin = 9; // Контакт аналогового выхода, к которому подключен полевой транзистор

int sensorValue = 0;        // значение, прочитанное из горшка
int outputValue = 0;        // вывод значения на ШИМ (аналоговый выход)

void setup() {

// объявляем ledPin как ВЫХОД:
pinMode(analogOutPin, OUTPUT);
}

void loop() {

// читаем аналог в значении:
sensorValue = analogRead(analogInPin);

// сопоставляем его с диапазоном аналогового выхода:
outputValue = map(sensorValue, 0, 1023, 0, 255);

// изменить значение аналогового выхода:
analogWrite(analogOutPin, outputValue);

// ждем 2 миллисекунды перед следующим циклом аналого-цифрового
// преобразователь для расчета после последнего чтения:
delay(2);
}

Эта программа не тестировалась и предназначена для примера. Убедитесь, что выход полевого транзистора подключен к контакту, который может выводить ШИМ. Затем убедитесь, что ваша программа ссылается на правильный вывод.

Убедитесь, что мощность вашего блока питания достаточна для управления двигателем вентилятора.

Вот несколько схем подключения с веб-страницы учебника.

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

Примечание: конкретный вентилятор, который вы используете, может не иметь ШИМ-управления, и вам следует найти и прочитать соответствующую документацию для вентилятора.

,