Вентилятор на Arduino Uno, управляемый с помощью температуры

В этом проекте на Arduino мы будем управлять скоростью вращения вентилятора постоянного тока в соответствии с температурой в комнате и показывать изменения этих параметров (температуры и скорости вращения вентилятора) на жидкокристаллическом (ЖК) дисплее 16x2. В проекте будет происходить обмен данными между Arduino, ЖК дисплеем и датчиком температуры DHT11. Управлять скоростью вращения вентилятора постоянного тока мы будем с помощью широтно-импульсной (ШИМ) модуляции, с помощью которой можно управлять средним значением напряжения, подаваемого на вентилятор.

Внешний вид конструкции для управления вентилятором в зависимости от температуры на Arduino

Необходимые компоненты

  1. Плата Arduino UNO (купить на AliExpress).
  2. Датчик температуры и влажности DHT11 (купить на AliExpress).
  3. Транзистор 2n2222 (купить на AliExpress).
  4. ЖК дисплей 16x2 (купить на AliExpress).
  5. Вентилятор постоянного тока.
  6. Резистор 1 кОм (купить на AliExpress).
  7. Батарейка на 9 В.
  8. Соединительные провода.

Принципы ШИМ модуляции

Наша конструкция будет состоять из трех частей. В первой части будет измеряться температура с помощью датчика температуры и влажности DHT11. Вторая часть будет считывать значение температуры с выходного контакта DHT11, преобразовывать ее в температуру по шкале Цельсия и управлять скоростью вращения вентилятора постоянного тока с помощью ШИМ. А третья часть проекта будет показывать значение температуры и скорости вращения вентилятора на ЖК дисплее.

В этом проекте мы использовали датчик DHT11, который подробно описан в статье про измерение температуры и влажности с помощью Arduino. Но в этом проекте мы этот датчик будем использовать только для измерения температуры.

Принцип функционирования проекта достаточно прост. Мы будем создавать сигнал ШИМ модуляции на соответствующем контакте ШИМ платы Arduino, который будем подавать на базу транзистора. В соответствии с этим управляющим напряжением транзистор будет изменять значение напряжения на своем выходе, с которого и подается управляющее напряжение на вентилятор.

Пример ШИМ модуляции на цифровом осциллографе представлен на следующем рисунке.

Пример ШИМ модуляции на осциллографе

Скорость вращения вентилятора и соответствующие ей значения ШИМ и ее коэффициента заполнения представлены в следующей таблице.

Температура Цикл занятости ШИМ Значение, передаваемое в функцию управления ШИМ в Arduino Скорость вращения вентилятора
менее 26 0% 0 выключен
26 20% 51 20%
27 40% 102 40%
28 60% 153 60%
29 80% 204 80%
больше 29 100% 255 100%

Что такое ШИМ? Простыми словами это такая технология, с помощью которой мы можем управлять напряжением или мощностью. К примеру, мы подаем на электродвигатель напряжение 5 Вольт, которое будет заставлять его вращаться с некоторой скоростью. Если после этого мы снизим подаваемое напряжение на 2 Вольта (т. е. до 3 Вольт), то скорость вращения электродвигателя также уменьшится. Более подробно об использовании ШИМ можно прочитать в следующей статье: управлению яркостью свечения светодиода с помощью ШИМ.

Пример ШИМ модуляции с высоким разрешением на осциллографе

Основная идея ШИМ состоит в использовании цифровых импульсов с определенным коэффициентом заполнения (циклом занятости), который и будет отвечать за скорость вращения вентилятора.

К примеру, мы будем использовать ШИМ с коэффициентом заполнения 50% - это будет означать что на управляемое устройство мы будем подавать половину максимального напряжения импульса.

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

Duty Cycle= Ton/T

где T – общее время импульса Ton+Toff (сумма его активного и пассивного состояния)
Ton – время активного состояния импульса (означает 1 )
Toff – время пассивного состояния импульса (означает 0)

Более наглядно это представлено на следующих рисунках.

ШИМ с коэффициентом заполнения 50%

ШИМ с коэффициентом заполнения 10%

ШИМ с коэффициентом заполнения 90%

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема вентилятора на Arduino Uno, управляемого с помощью температурыЖК дисплей подключен к плате Arduino в 4-битном режиме, более подробно об этом можно прочитать в статье про подключение ЖК дисплея к Arduino. Контакты ЖК дисплея RS, EN, D4, D5, D6 и D7 подсоединены к цифровым контактам Arduino 7, 6, 5, 4, 3 и 2. Датчик DHT11 подсоединен к контакту 12 Arduino через подтягивающий резистор. Контакт 9 Arduino используется для управления скоростью вращения вентилятора (с помощью транзистора).

Исходный код программы

Сначала мы произведем подключение библиотек для работы с ЖК дисплеем и датчиком температуры (dht), а затем инициализируем контакты для подключения ЖК дисплея, датчика температуры и вентилятора.

Код для подключения необходимых библиотек

Затем инициализируем все остальные нужные нам вещи в секции setup. А затем в секции loop мы будем использовать dht-функции для считывания значений с датчика температуры, извлекать из этих значений температуру, переводить ее в температуру по шкале Цельсия и отображать ее значение на ЖК дисплее.

Код для считывания температуры

После этого мы будем сравнивать значение температуры с заранее установленными нами температурными порогами (выше приведенная в тексте статьи таблица) и исходя из результатов сравнения будем генерировать соответствующее значение ШИМ на выходном контакте, к которому подключен транзистор, управляющий скоростью вращения вентилятора.

Код для управления скоростью вращения вентилятора

Для генерации ШИМ мы будем использовать функцию analogWrite(pin, PWM value). Мы будем использовать все 8 бит. Значение ШИМ будет эквивалентно аналоговому значения напряжения. То есть, к примеру, если мы хотим сгенерировать ШИМ с коэффициентом заполнения 20%, то мы в эту функцию (analogWrite) должны передать значение 255/5.

Далее приведен полный текст программы.

Видео, демонстрирующее работу схемы

Также про вентилятор на симуляторе Arduino Uno, управляемый с помощью температуры, можно посмотреть следующее подробное обучающее видео (на английском языке):

(1 голосов, оценка: 5,00 из 5)
Загрузка...
10 199 просмотров

Комментарии

Вентилятор на Arduino Uno, управляемый с помощью температуры — 12 комментариев

  1. Здравствуйте.
    Скажите пожалуйста, вот у вас есть самая первая схема, а как так будет работать транзистор?
    Может есть какая-то условность для схем, которую я не знаю, но без общего минуса для контроллера и вентилятора такая схема, как мне кажется, неверна.

    • Добрый вечер. На моем сайте уже достаточно много схем, где транзистор управляет нагрузкой в своей цепи именно так, как изображено на представленной схеме. Это самый простой способ, но не самый лучший, конечно. Лучше использовать реле, тогда будет обеспечена хорошая развязка между цепью вентилятора и платой Ардиуно. А какой вариант предлагаете вы? Можете пример привести?

      • Меня возмутила передача сигнала по одному проводу.
        И хотел уточнить, это сложившаяся практика?
        Или, всё-таки, может быть существует некое соглашение об общем подключении, когда достаточно указать один провод?

        • Реле потребует два провода точно, но не обеспечит необходимую скорость для передачи используемого сигнала.

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

        • Передача сигнала по одному проводу - сейчас это очень часто используется, в том числе во многих датчиках. Например, в датчике температуры DS18B20. Хотя один из его контактов все же подключается к общей земле с платой Ардуино. Я, конечно, тоже в определенной мере привык к старым схемам подключения транзисторов, в которых на базу транзистора подается напряжение смещения через одиночный резистор или через базовый делитель на двух резисторах и только после этого на базу подается сигнал относительно земли, но времена меняются, техника идет вперед

  2. А где вы собирали эту схему? я попробовал собрать в ISIS PROFESSIONAL , но там нет gnd да и других некоторых портов

    • Лично я не собирал, студенты мои собирали. А почему вы думаете что она не должна работать? На мой взгляд, в ней все прозрачно. ISIS PROFESSIONAL - не работал с ним, поэтому, к сожалению, не могу ничего подсказать по этому поводу

  3. Есть какое нибудь видео по сборке схемы?
    Никак не могу понять что с чем соединять и как это сделать.
    Или фотография уже готовой схемы в живую.

    • Нет, такого видео нет. Вроде бы на приведенной в статье схеме отчетливо видно что с чем соединять. Соединения какого элемента на схеме у вас вызывают затруднения?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *