Меню сайта
Категории раздела
Борьба с запахом [6]
Средства и устройства для борьбы с запахом и очистки воздуха.
Материалы, инструменты и оборудование [20]
Расходники, инструменты, приспособления и материалы, которые могу быть полезны для сооружения гроубокса.
Источники CO2 [9]
Углекислый газ необходим растениям для фотосинтеза, помогает растениям расти быстрее и потенциально дать больший урожай.
Гидропоника/Аэропоника [4]
Вода/воздух в качестве субстрата
Полив [5]
Ирригационные системы
Контроль [16]
Системы мониторинга
Освещение [11]
Источники света для растений
Гроубоксы [12]
Помещения для выращивания
Субстраты [11]
Среды для выращивания
Удобрения [9]
Средства для улучшения урожая
Электроника [47]
Софт [1]
Полезные советы [6]
Выращивание грибов [15]
Саморазвитие и бизнес [2]
Гроурепорты [1]
Статистика

Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа
Главная » Статьи » Электроника

Регулировка скорости вращения канального вентилятора 220В с помощью arduino

Потребуется:

Arduino - 1шт.

Датчик температуры - 1шт.

Твердотельное реле - 1шт.

 

В этом примере будут использоваться следующие компоненты:

Arduino Pro Mini.

Реле SSR-25DA. (Судя по описанию потребляемый ток всего 7.5mA)

Датчик температуры 18b20.

 

 

Пример подключения:

Для управления скоростью вращения вентилятора используется PIN 9 т.к. он ШИМ и после изменения частоты ШИМ эффект искажения работы некоторых функций проявится только для Servo library нам это не страшно т.к. здесь мы не используем такой функционал. Цифровой датчик температуры подключается к цифровому порту PIN 2. Так как вывод микроконтроллера держит 40mA то можно запитывать реле прямо с микроконтроллера, ему ничего не будет, но все равно на всякий случай воспользуемся транзистором кт315:

 

Распиновка транзисторов npn перехода:

Распиновка 1N4148

Частота бытовой сети куда будет подключаться вентилятор составляет 50Гц. Используемое реле SSR-25DA оборудовано датчиком пересечения ноля (cross zero sensor). Это значит что реле отключится/включится только в те моменты когда синусоида переменного тока будет пересекать значение 0. Поэтому частота работы ШИМ должна быть не выше чем 50Гц*2 = 100Гц (2 - потому, что за один период синусоида переменного тока пересекает ноль дважды).

Т.к. по умолчанию частота ШИМ гораздо выше надо ее разделить. Ниже таблица допустимых делителей для разных PIN:

 

PINs Частота, Гц  Делитель
3 31250 1, 8, 32, 64, 128, 256, 1024
5 62500 1, 8, 64, 256, 1024
6 62500 1, 8, 64, 256, 1024
9 31250 1, 8, 64, 256, 1024
10 31250 1, 8, 64, 256, 1024
11 31250 1, 8, 32, 64, 128, 256, 1024

 

Мы используем PIN 9, значит его частота по умолчанию 31250Гц, нам надо получить не более 100Гц, для этого разделим на 1024. Получим ~30Гц. Такой частоты уже достаточно для регулировки оборотов. Если вместо вентилятора подключить лампу накаливая то будет видно как она мерцает, для бытового канального вентилятора это не критично.

 

 

 

Скетч:

В скетче используется код получения значения температуры отсюда.

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
int ventPin = 9;
int maxTemp=28;
int minTemp=26;
int interval=20; //min 30sec recomended for 18B20
DallasTemperature sensors(&oneWire);
void setup(void) {
  Serial.begin(9600);
  sensors.begin();
  setPwmFrequency(ventPin, 1024); //division on 1024 for ~30Hz
}
void loop(void) {
  sensors.requestTemperatures();
  Serial.print("Temp=");
  float temp=sensors.getTempCByIndex(0);
  Serial.print(temp);
  Serial.print("; Power=");
 int val = (((-1)*((maxTemp-temp)-(maxTemp-minTemp)))/2*100)*255/100;
  if (val<0) {val=0;}
  if (val>255) {val=255;}
  Serial.print(val);
  if (val>20) {
    analogWrite(ventPin, val);
    Serial.print("; Vent=on;");
  } else {
    analogWrite(ventPin, 0);
    Serial.print("; Vent=off;");
  }
  delay(interval*1000);
}
void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
  }
}

 

При требуемой мощности менее 20% вентилятор запускаться не будет вообще т.к. возможно не будет хватать времени для проворачивания ротора двигателя и он не будет крутиться. Начиная с 20% мощности на ротор начнет поступать ток и тока станет достаточно для проворачивания вентилятора. 

 

 

 

 

Для информации:

Рассказы про частоту ШИМ arduino здесь.

Общий пример схемы подключения реле к ардуино через транзистор:

 

Полезные ссылки: авторегулирование.

 

Категория: Электроника | Добавил: kimih (2014-12-12)
Просмотров: 10535 | Комментарии: 1 | Рейтинг: 3.0/2
Всего комментариев: 1
avatar
1
Очень занимательно. Увлекаюсь симрейсингом (компьютерные автосимуляторы) и дорабатываю свой симулятор перегрузок. Хочу установить подобный вентилятор для реализации ветра - при наборе скорости включается вентилятор и увеличивает вращение. Так понимаю что ваша принципиальная схема вполне подойдет для реализации этой задумки, необходимо только немного переправить код программы. Буду благодарен если свяжетесь со мной, тк не все понимаю в коде и некоторых деталях (vk/ztanislav  skype ztanislav2). Сейчас плата ардуино управляет двумя двигателями, качающими кресло, получая значения с компьютера. Думаю не будет проблемой задействовать еще один аналоговый выход.
avatar
Поиск
Реклама