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

 

Управляем вентилятором с помощью 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




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

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

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

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

  • 19 апреля 2016 09:40
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
супер!!! просто и понятно.