цифровая электроника
вычислительная техника
встраиваемые системы

 

Управляем вентилятором с помощью Arduino

Автор: Mike(admin) от 10-06-2014, 07:55

Хотите автоматизировать работу вентилятора? С помощью Arduino и датчика температуры LM35 это возможно!


Управляем вентилятором с помощью Arduino

Схема:


Схема управления вентилятором с помощью Arduino

Код:



    #include <LiquidCrystal.h>
    //источник: http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/
    LiquidCrystal lcd(7,6,5,4,3,2);
    int tempPin = A1; // выход LM35
    int fan = 11; // вывод на вентилятор
    int led = 8; // вывод на светодиод
    int temp;
    int tempMin = 30; // температура начала вращения вентилятора
    int tempMax = 70; // максимальная температура, когда вентилятор вращается на 100%
    int fanSpeed;
    int fanLCD;
     
    void setup() {
    pinMode(fan, OUTPUT);
    pinMode(led, OUTPUT);
    pinMode(tempPin, INPUT);
    lcd.begin(16,2);
    }
     
    void loop() {
    temp = readTemp(); // получаем температуру
    if(temp < tempMin) { // если temp меньше минимума
    fanSpeed = 0; // кулер не вращается
    digitalWrite(fan, LOW);
    }
    if((temp >= tempMin) && (temp <= tempMax)) { // если temp больше минимума
    fanSpeed = map(temp, tempMin, tempMax, 32, 255); // текущая скорость вентилятора
    fanLCD = map(temp, tempMin, tempMax, 0, 100); // скорость вращения для отображения на LCD
    analogWrite(fan, fanSpeed); // вращаем кулер со скоростью fanSpeed
    }
    if(temp > tempMax) { // если temp больше максимума
    digitalWrite(led, HIGH); // включаем светодиод
    } else { // иначе выключаем светодиод
    digitalWrite(led, LOW);
    }
    lcd.print("TEMP: ");
    lcd.print(temp); // отображение температуры
    lcd.print("C ");
    lcd.setCursor(0,1); // перевод курсора на следующую сторку
    lcd.print("FANS: ");
    lcd.print(fanLCD); // отображение скорости вращения вентилятора
    lcd.print("%");
    delay(200);
    lcd.clear();
    }
     
    int readTemp() { // получить температуру и переконвертировать ее в цельсии
    temp = analogRead(tempPin);
    return temp * 0.48828125;
    }

При желании для визуализации значения температуры можно использовать LCD-дисплей. Для этого в код включена библиотека LiquidCrystal. Также следует для конкретного типа вентилятора подобрать свой транзистор. В данном случае используется широко распространенный BD139.


Важно задать требуемые значения tempMin и tempMax. Значение tempMin определяет теипературу, при которой вентилятор начинает вращаться, а tempMax представляет температуру, при достижении которой загорится красный светодиод, оповещающий о достижении максимальной температуры. Например, если установить tempMin=30, а tempMax=35, то кулер начнет вращаться при температуре 30°C, и достигнет максимальной скорости при температуре 35°C.


Текущее значение температуры сохраняется в переменной temp, а затем используются структуры if() для сравнения этой переменной с tempMin. Если temp меньше tempMin, то вентилятор отключается. Следующий if() сравнивает, больше ли temp значение minTemp и меньше tempMax. И если это так, то используется функция map() для преобразования temp из одного значения в другое. В нашем случае переменная fanSpeed будет иметь значение 32 при tempMin и 255 при tempMax. Этизначения применяются для управления скоростью вентилятора с помощью ШИМ и функции analogWrite().


fanLCD преобразует temp в диапазон от 0% до 100%, что соответствует полной остановки кулера и максимальной скорости вращения.




<Источник>


Теги: Arduino



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Sergoen

  • 26 января 2016 15:22
  • Группа: Посетители
  • ICQ:
  • Регистрация: 26.01.2016
  • Статус: Пользователь offline
  • Комментариев: 1
  • Публикаций: 0
^
Очень понравились статьи ! спасибо ! помогите написать скетч для работы не с вентелятором , а с реле . Тоесть включение первого реле от изменений температуры , второе реле от изменений влажности . и соответственно вывод на 2 строчный 16 символьный монитор
Цитата
  • SaWisH

  • 19 апреля 2016 09:40
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
супер!!! просто и понятно.
Цитата
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
помогите пожалуйста , Хочу в бат файл который бы регулировал скорость вращения кулера ,в зависимости от температуры