Электрощиток

Подключение кулера к arduino. Вентилятор с помощью ардуино, который зависит от температуры

Подключение кулера к arduino. Вентилятор с помощью ардуино, который зависит от температуры

Автоматический вентилятор Ардуино, который включается сам, когда температура в помещении достигнет определенной величины.

В этом уроке вы узнаете о вентиляторах с регулятором температуры на Ардуино, используя датчик и реле DHT22. Мы будем использовать датчик DHT22 для получения значения температуры и выведем это значение температуры на ЖК-дисплее. Затем мы проверим, будет ли значение температуры больше 35 или нет, если температура будет больше 35, тогда реле будет активировано и вентилятор начнет вращаться.

Нам понадобятся следующие детали для нашего проекта:

Принципиальная схема вентилятора Ардуино

Принципиальная схема нашего вентилятора выглядит так:

Давайте разберемся с соединением всех деталей. Прежде всего сделайте подключение ЖК-дисплея к Ардуино следующим образом:

  • Подсоедините вывод VSS на ЖК-дисплее к земле Arduino.
  • Подключите контакт VDD к 5V Arduino.
  • Подсоедините вывод V0 к центральному выводу потенциометра 10K. Подключите два других контакта потенциометра к 5V и к земле.
  • Подсоедините штырь RS к контакту 2 Arduino.
  • Подключите контакт R/W к земле Arduino. Это поместит ЖК-дисплей в режим чтения.
  • Подключите контакт E (Enable) к контакту 3 Arduino.
  • Подключите контакты D4-D7 к контакту 4, 5, 6, 7 Ардуино.
  • Подключите контакт 15, который является положительным выводом подсветки светодиода на 5-контактный штырь через резистор 220 Ом.
  • Подключите контакт 16, который является отрицательным выводом подсветки светодиода к земле Arduino.

Затем подключите релейный модуль к Arduino. На стороне входа модуля реле выполните соединения следующим образом:

  • Подключите вывод VCC модуля реле к выводу 5V Arduino.
  • Подключите вывод IN модуля реле к выходу 9 Arduino.
  • Подключите вывод GND модуля реле к GND Ардуино.

На выходной стороне модуля реле подключите минус 9В-батареи к общему (C) модулю реле и подключите NC модуля реле к минусу вентилятора. Затем подключите плюс батареи к плюсу вентилятора.

В конце сделайте соединения для датчика температуры и влажности DHT22.

  • Подключите контакт 1 DHT22, который является выводом VCC, к 5V Ардуино.
  • Подключите контакт 2 DHT22, который является выводом данных к выходу 8 Arduino.
  • Подключите контакт 4 от DHT22, который является заземляющим контактом, к земле Arduino.

Скетч для Ардуино

Ниже вы можете скопировать и загрузить код в свою Ардуино Уно.

#include "DHT.h" #include "LiquidCrystal.h" LiquidCrystal lcd(7, 8, 9, 10, 11 ,12); #define DHTPIN 6 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE); int relay_pin = 9; void setup() { lcd.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH); } void loop() { lcd.clear(); float t = sensor.readTemperature(); //считывание температуры с датчика // Проверка, посылает ли датчик значения или нет if (isnan(t)) { lcd.print("Failed"); delay(1000); return; } lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print(" C"); if (t > 35){ digitalWrite(relay_pin, LOW); lcd.setCursor(0,1); lcd.print("Fan is ON "); delay(10); } else{ digitalWrite(relay_pin, HIGH); lcd.setCursor(0,1); lcd.print("Fan is OFF "); } delay(2000); }

Объяснение кода

Прежде всего, мы включили библиотеки для датчика DHT22 и для ЖК-дисплея. Библиотеки помогут сделать код более простым.

Скачать все необходимые библиотеки для своих проектов вы можете на нашем сайте в разделе - .

#include "DHT.h" #include "LiquidCrystal.h"

Затем мы инициализировали контакты к которым мы подключили ЖК-дисплей и датчик DHT22. После этого мы определили тип датчика DHT, который используется. Существует множество других типов датчиков DHT, таких как DHT11, поэтому здесь важно определить тип.

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); #define DHTPIN 8 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE);

В функции настройки мы дали команду DHT22 и LCD, чтобы начать общение с Arduino. Затем мы объявили контакт реле как выходной вывод, потому что мы дадим напряжение от Ардуино к реле для активации реле. Реле работает обратно (High означает Low для реле).

Lcd.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH);

В функции цикла мы очищаем ЖК-экран, а затем считываем значение температуры от датчика.

lcd.clear(); float t = sensor.readTemperature(); if (isnan(t)) { lcd.print("Failed"); delay(1000); return; }

Затем мы печатаем значение температуры на ЖК-дисплее, и если значение температуры будет больше 35, тогда реле будет активировано, и вентилятор начнет вращаться.

Lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print(" C"); if (t > 35){ digitalWrite(relay_pin, LOW); lcd.setCursor(0,1); lcd.print("Fan is ON "); delay(10); }

На этом всё. Хороших вам проектов!

25 ноября 2014 в 15:47

Управление микроклиматом на Arduino

  • DIY или Сделай сам

Итак, дано: Гараж неотапливаемый, не утепленный, кирпичный двухэтажный с огромной влажностью внутри, от которой гниет деревянное межэтажное перекрытие, на стенах зимой снежная шуба и прочая неприятная ржавчина.

Задача: «Осушить» гараж.

Решение. Не будем вдаваться в подробности капиллярного подсоса воды бетоном и прочих источников появления влаги в воздухе гаража - сосредоточимся на том, что мы можем сделать с уже появившейся влагой. Если не рассматривать слишком дорогую для гаража технику типа осушителей, то единственный способ, который я нашел, это вытеснять внутренний сырой воздух более сухим наружным при помощи простого вентилятора.

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

Как известно, DHT22 отдает температуру и относительную влажность. Как сравнивать показания датчиков? Действительно ли наружный воздух «суше», чем внутренний? Что будет с воздухом, если его всосать в гараж? Возможно, он настолько теплее, что даже при меньшей относительной влажности снаружи даст конденсат на стенах внутри. Внутренняя температура всегда отличается от наружной, но при этом постепенно стремится к наружной. Степень «постепенности» неизвестна. Будет температура расти или падать - так же неизвестно.

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

Но пришла следующая идея. Абсолютная влажность она на то и абсолютная, что от давления, температуры и прочего не зависит. И если абсолютная влажность наружного воздуха ниже абсолютной влажности внутреннего, то наружный воздух однозначно «суше» и независимо от того, как изменится его температура внутри - он «лучше» замещенного воздуха.

Идея - идеей, но и тут оказались мелкие проблемы. Оказывается абсолютная влажность вычисляется по температуре и относительной влажности по графикам типа такого:

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

Казалось бы, на этом и все. Сравниваем две абсолютные влажности и если снаружи «суше» - включаем вентилятор, но не тут то было. Первая проблема в том, что если представить, что наружный воздух имеет постоянную влажность, а внутри никакого источника влаги нет, но есть сырой воздух, то при прокачивании через гараж наружный воздух будет смешиваться с имеющимся там воздухом и внутренняя влажность будет бесконечно приближаться к наружной, но не достигнет ее или достигнет очень не скоро. А это крайне неэффективно по электричеству. Очевидное решение - ввести какую-то разность влажностей, при достижении которой вентилятор выключать и считать внутренний воздух сухим, но тут возникает вторая проблема. При перепаде температур от +30 до -30 значение абсолютной влажности изменяется в тысячу раз. То есть при -30 градусах разница в 0.001 грамма на кубометр воздуха может означать, что вы пройдете точку росы и на стенах выпадет шуба. А при +30 эта тысячная ничего не значит, потому что в кубометре может висеть 20 грамм воды.

Никакого четкого, обоснованного решения придумано не было. Волевым научным тыком разность была принята в 0.01 грамма на кубометр из того соображения, что от инея на стенах вреда не много, поскольку при повышении температуры, при работе робота - лед просто сублимирует и будет удален с остальным воздухом. И из эмпирических соображений было введено еще одно энергосберегающее ограничение. При относительной наружной влажности выше 90% наружный воздух не прокачивается. Просто потому, что это ненормально высокая для нашего региона влажность и даже если этот воздух суше внутреннего - очень скоро и его тоже придется выкачивать. Цифра 90% так же с потолка.

Результат.

Полтора года робот пашет безостановочно.

Ардуино в коробке с автоматом, там же блок питания. На ней же справа внутренний датчик. Релейный блок в самой розетке. Выключатель принудительно включает вентилятор в обход реле. Шуба из инея зимой пропала. Дерево все рассохлось. Ничего не гниет. Потребляет порядка двух киловатт-часов в месяц. Если в «сухом» гараже подышать минут 15 - робот включает вентилятор. В общем, все работает.

Побочный эффект - вымораживает. Причем вымораживает так, что шуба из инея теперь периодически появляется снаружи, а в мае, когда светит солнышко и зеленеет травка - внутри без ватника трясет от холода.

Поле для оптимизации. Если прикрутить SD-карточку и пособирать статистику - можно выбрать более обоснованную отсечку, чем 90%. Можно подумать и поставить разность абсолютных влажностей на отсечку в зависимость от температуры.

А вот теперь самое интересное - развитие.

Сейчас прорабатывается система приточно-вытяжной вентиляции с рекуперацией для частного дома. Задача снизить расход энергии и на вентиляцию и на обогрев. Казалось бы, все просто. Датчики СО2 по комнатам. Вентилируем только ту комнату, где «надышали», но есть масса вопросов, на которые у меня пока нет ответов. Буду рад помощи.

1. Как контролировать отток через печку? Вот есть частотник на приточном вентиляторе, есть на вытяжном. Если бы не печка, можно было бы обойтись одним и крутить вентиляторы синхронно. А как быть с оттоком через печь? (Отдельный воздуховод на приток печи - не предлагать);
2. (без учета печки) Алгоритм управления оборотами вентиляторов? Текущая идея в том, что скорость вращения должна зависеть не от концентрации СО2 а от скорости роста концентрации. То есть если концентрация растет - обороты растут, падает - падают и какая-то отсечка, скажем, 500-600ppm. Повышением отсечки можно ввести зимний экономный режим с повышенной концентрацией СО2;
3. Есть желание заслонку печки привязать к датчику СО, в том плане, чтобы он держал заслонку максимально закрытой максимальное количество времени, но страшно;
4. Чисто технический вопрос: как все это датчиковое великолепие максимально дешево развесить по дому, поскольку для целей управления отоплением еще и DHT22 в каждой комнате будут?

Спасибо за внимание. Схему робота я не рисовал, скетч вышлю всем желающим, с радостью приму конструктивные предложения.

Чего только не придумал человек для облегчения своей жизни. В любой отрасли люди хотят применить минимум сил для создания какого-либо продукта, они стараются делать его более компактным и удобным в использовании. И электротехника не является исключением. Представляем к вашему вниманию Uno Protoshield. Этот шилд является очень компактным и удобным для создания вашего проекта, особенно для массового подключения электронных элементов к Arduino. Если внимательно взглянуть на Protoshield, то можно заметить, что подключение проводов к плате воспроизводится с помощью пайки. Шилд имеет форму Arduino Uno неслучайно, из-за этого Protoshield подключается к Arduino напрямую. Также он имеет множество отверстий покрытых металлическим слоем, с помощью которых и воспроизводится подключение устройств.


Сегодня мы создадим очень полезный проект, который вы сможете установить у себя дома. Идея проекта состоит в том, что Ардуино, при считывании информации с датчика влажности и температуры DHT11 , будет управлять нашим реле, который по необходимости будет включать вентилятор. Короче говоря, мы создадим климат контроль. Главным преимуществом нашей установки станет использование Uno Protoshield, так как он значительно уменьшит его размеры. Узнать подробную информацию о датчике влажности и температуры DHT11 и о реле вы сможете в разделе Arduino для начинающих . Ну а в этой статье мы подробно поговорим про, пока не известный нам, Uno Protoshield!

Характеристики Uno Protoshield


Как уже говорилось, Uno Protoshield используется для удобства и уменьшения размеров вашей установки. Шилд включает в себя большое количество отверстий покрытых металлическим слоем и предназначенных для соединения проводов с помощью пайки. Также Protoshield имеет два светодиода и две кнопки. Одна кнопка используется для сбросса, другая же - обычная кнопка, которую можно подключить к своему проекту, например, при нажатии - включить светодиод. Подключение шилда к Arduino реализуется методом наложения платы, сделав, так сказать, бутерброд.

Подключение нашего мини проекта

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

Все эти элементы можно приобрести по низкой цене и с высоким качеством в интернет магазине SmartElements .

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



После того, как вы приготовили компоненты, перейдем к подключению. Для этого нам понадобится надежная схема, но это не проблема!



Схема подключения показана с использованием макетной платы breadbord. Мы были вынуждены сделать так потому, что это выглядит нагляднее и разборчивее. Подключение через Uno Protoshield воспроизводится также, как и с помощью макетной платы, тут ничего сложного нет! Остается только аккуратно припаять соединительные провода к Protoshield и все готово.


Убедительная просьба работать с электричеством и воспроизводить пайку, соблюдая технику безопасности. Прежде чем начинать паять, посмотрите видео-уроки в интернете, чтобы не причинить вред вашему организму.

Скетч программы для управления реле с помощью датчика температуры и влажности DHT11

Для работы датчика на Arduino нужно скачать и установить библиотеку DHT11.

Скачать библиотеку можно здесь.


После того, как мы скачали нужную библиотеку, ее нужно правильно установить . Скачанные файлы нужно переместить по следующему пути:

Диск C Progtam Files Arduino Libraries



#include "DHT.h" //библиотека для работы с DHT
#define DHTPIN 3 //Обозначаем номер пина, к которому подключен датчик DHT11
#define Relay 5 //Обозначаем номер пина, к которому подключен реле
DHT dht(DHTPIN, DHT11); //инициируем датчик DHT

Void setup() {
pinMode (Relay, OUTPUT); //Инициализируем режим работы порта в режиме выхода
dht. begin();
Serial.begin (9600);
}

Void loop() {
delay (2000);
float h = dht.readHumidity(); //Считываем влажность в переменную "h"
float t = dht.readTemperature(); //Считываем температуру в переменную "t"
if (isnan(t) || isnan(h)) { //если неправильно считалась информация {
Serial.println ("Ошибка при считывании информации"); //выводим надпись в программе
} else { //иначе
Serial.print ("Humidity: "); //выводим надпись Humidity
Serial.print (h); //выводим значение переменной влажности
Serial.print (" %\t"); //выводим надпись %\t
Serial.print ("Temperature: "); //выводим надпись в программе
Serial.print (t); //выводим переменную температуры
Serial.println (" *C"); //выводим надпись *C
}
if (h > 40) //Указываем условие, если переменная "h" (влажность) больше 40%
{
digitalWrite (Relay, LOW); //то включаем наше реле, которое приводит в действие вентилятор
}
else //иначе
{
digitalWrite (Relay, HIGH); //Реле будет выключено, вентилятор не работает
}
/*Вы можете изменить переменную на переменную. Мы привели вам самый простой пример, его идею можно использовать для создания качественного проекта! */
}

Подробный разбор скетча

Приступим к анализу выше приведенного скетча. Как обычно, мы после каждой строки оставили комментарий, чтобы вам было удобнее понять и усвоить информацию. Программа будет работать по следующему алгоритму:

1)Микроконтроллер считывает информацию с датчика влажности и температуры DHT11.
2)Если влажность, которую показал датчик, больше 40%, то включается реле, которая включает вентилятор.

В нашем скетче за основу берется влажность, именно из-за нее и включается реле, но вы можете изменить, и поставить вместо "h" и "t" и, тогда рабочее состояние реле будет зависеть уже от температуры. Также можно менять значение минимального значения переменной, для включения реле.


if (h > 40) //В этой строчке мы и можем изменить "h" на "t", а также поменять значение "40" на любое другое

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


pinMode (Relay, OUTPUT);
dht. begin();
Serial.begin (9600);

Здесь тоже все сделано по стандарту, инициализируем работы портов и включаем работу датчиков.

Следующая часть кода более интересна, но также не сложна.


float h = dht.readHumidity();
float t = dht.readTemperature();

На данном этапе мы указываем Arduino, чтобы он считывал информацию с датчика DHT11 в переменные "h" и "t".


if (h > 40)
{
digitalWrite (Relay, LOW);
}
else
{
digitalWrite (Relay, HIGH);
}

Заключительным действием мы обрабатываем данные и указываем, при каких значениях будет работать наше реле, а при каких не будет. Как говорилось раннее, эти значения можно менять!


Пришло время сравнить работу на макетной платой и с Unoprotoshield.


Как вы можете заметить, разница громадная. Наш проект с Uno Protoshield получился намного компактнее, и выглядит на много лучше чем с макетной платой. А как вы думаете?!

Надеюсь у вас все получилось! Если у вас остались вопросы, можете написать нам в


Arduino - программно-аппаратный комплекс с открытым исходным кодом. Причём "открытость" распространяется не только на программную часть, но и на аппаратную. В основе аппаратной части лежит плата с программируемым микроконтроллером AVR компании Atmel - 8-ми битным RISC-контроллером (всё по взрослому!). Однако пугаться не стоит, т.к. программная составляющая, основанная на проекте Wiring, избавляет от кошмара низкоуровнего программирования.

По сути, Arduino - это радиоконструктор. Основная плата - ядро радиоконструктора помимо микроконтроллера содержит стабилизатор питания, позволяющий запитывать плату от различных источников питания, и USB интерфейс, позволяющий подключить плату (и запитать) непосредственно к компьютеру для загрузки кода без использования кучи разнообразнейших программаторов и для двухстороннего обмена информацией.

Вообще, отцам основателям проекта стоит поставить памятник при ещё жизни, настолько простой и привлекательной стала робототехника благодаря их усилиям и усилиям многих энтузиастов по всему миру. Уже выпускаются десятки клонов этой платформы (вот что open-source животворящий делает!). Seeeduino, Iteaduino, Freaduino, DFRduino... "тысячи их". Одни полностью копируют исходный Arduino, другие содержат приятные "плюшки" в виде модулей беспроводной связи, дополнительных выводов, USB hub, SD-card слоты и т.д.

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

Я обратил внимание на платформу Arduino после того как пытался выбрать себе реобас в новую систему. Так как планировалось, что система будет работать с некоторым разгоном, охлаждение должно было быть достаточно эффективным, но рёв взлетающего самолёта посреди ночи явно разбудит домочадцев. Можно было бы найти какой-то компромис, но все карты спутали производители процессоров внедрившие динамическое управление тактовой частотой (читай - тепловыделением). Достичь компромиса шум-надёжность с помощью классического пассивного реобаса в новых условиях было уже невозможно. Всевозможные активные реобасы либо обладали весьма скромным функционалом, либо стоили как самолёт и/или их приобретение было весьма затруднительно по причине отсутствия таковых на отечественном рынке. Но даже у систем за большие деньги функционал на мой перфекционистский взгляд недостаточно гибок. Последние надежды на интеллектуальное управление режимом системой охлаждения разбились о Asus Fan Xpert. Количество каналов управления по температуре на Asus Rampage IV Formula оказалось равно всего 2-м, а управление каналом (температура-обороты) всего по 2-м точкам (линейно) - не самое элегантное решение.
Updated. У платы Asus Rampage IV Extreme так же всего два канала, но управляются они уже по трём точкам - прямо таки неслыханная щедрость со стороны Asus!

Таким образом, мысль получить за относительно скромные деньги стопроцентно настраиваемую легкомасштабируемую модульную систему, показалась весьма заманчивой. В этой серии статей я постараюсь провести читателя от первых шагов знакомства с Arduino до построения собственного убер-реобаса [с блэкджеком и шлюхами].

Итак, приступим. Для начала определимся что нам потребуется по минимуму для опытов и построения реобаса.

Самый минимум - собственно плата Arduino, USB кабель и немного провода (в изоляции, естественно).

Arduino Nano (цена около 800р.)


Arduino Uno (цена 800-900р.)

Arduino Mega 128/256 (цена 1100-1500р.)

Есть ещё чипы (вообще без платы) с прошитым Arduino-загрузчиком, но они более подходят только для реализации уже отлаженных решений, т.к. для работы с ней помимо макетной "беспаечной" платы (bredboard) потребуется плата адаптер или горсть резисторов конденсаторы и разъёмы. Не очень-то подходит для начального уровня.
Arduino Nano для удобства тоже требует breadboard, но всё необходимое для подключения по USB на ней уже распаяно. Так что дешевизна этого и одночипового вариантов мнимая.

По большому счёту эти платы отличаются только количеством выводов и программа написанная для младшей модели запустится и на старшей. Наоборот тоже, при условии, что используете то же самое количество выводов платы. В большинстве случаев вполне достаточно Arduino Uno (или её клона). Но если вы задумаете построить убер-реобас, то лечше сразу взять Arduino Mega, т.к. только подключение символьного ЖК дисплея отнимет у вас сразу шесть цифровых выходов. Останется всего 7, из них надо будет хотя бы один отдать под кнопочное управление, ещё 4 займёт плата расширения с SD-карточкой (для логирования и хранения калибровок датчиков). Таким образом с Uno либо придётся искать компромисы, отказавшись от ЖК индикатора и выводя информацию только на монитор через USB-подключение, либо расширять функционал объединяя несколько плат Ардуино или же за счёт применения всевозможных регистров-контроллеров шины (что хоть и приемлемо для проффи но всё равно муторно). Плата Arduino Mega содержит 32 дополнительных цифровых ввода-вывода, что сильно упростит подключение всевозможной переферии.

Теперь о самих выводах.

В первом приближении их можно условно разделить на три группы:

Аналоговые входы (A0, A1, A3...)

Цифровые вход/выходы (D0, D1, D2...)

Цифровые вход/выходы с возможностью ШИМ (PWM) вывода. (PWM D3, PWM D5...)

Дабы не утомлять читателя, назначение и особенности работы выводов буду давать по мере необходимости. Нетерпеливые могут найти информацию в Сети самостоятельно. Мы же перейдём непосредственно к первому эксперименту.
Все начинающие работать с Arduino первым делом начинают подключать светодиоды и баловаться с их включением-выключением. Но мы же не какие-то там моддеры! Хотя и для управления подсветкой Ардуино тоже более чем подойдёт, но начнём мы с подключения PWM (4-х контактного вентилятора). Это даже ещё проще чем светодиод.
Вот принципиальная схема:

Здесь и далее обозначения выводов Arduino полностью совпадает с нанесёнными на плату, см. увеличенные фотографии выше, или wiki страницы приобретённых Вами плат Arduino. (У меня, например такая)
После сборки схемы в програмную оболочку Arduino загрузим код:
// начало
// глобальные переменные

int fanCtrlPin = 3; // выходы на драйвер вентилятора D3

// установка частоты PWM на 32кГц (примерно)
//для нужного типа платы убрать "//" в начале строки
// это для плат типа Arduino Nano и Uno:

// TCCR2B = (TCCR2B & 0xF8) | 0x01; // timer 2 (pins 11,3)
// это для плат типа Arduino Mega:

// TCCR3B = (TCCR3B & 0xF8) | 0x01; // timer 3 (pins 2,3,5)

PinMode(fanCtrlPin, OUTPUT); // назначаем контакт D3 как выход

AnalogWrite(fanCtrlPin, 255); // полные обороты

Delay(2000); // задержка 2 секунды (2000 миллисекунд)

AnalogWrite(fanCtrlPin, 40); // обороты до минимальных

Delay(2000); // задержка 2 секунды

AnalogWrite(fanCtrlPin, 200); // меняем обороты

Delay(2000); // задержка

AnalogWrite(fanCtrlPin, 80); // опять изменение оборотов

Delay(2000); // задержка

}
// конец

Пару слов об оболочке Arduino. Скачать архив можно с официального сайта . Программная оболочка не требует инсталяции, но надо будет в меню выбрать тип Вашей платы и номер порта к которому подключена ардуина. Возможно потребуется установка драйвера. Подробнее можно прочитать . пусть название Freeduino вас не смущает, это ещё один полность совместимый клон. Помимо этого можно посмотреть познавательные уроки на youtube задав в поиск "Ардуино Джереми Блум". В первом же уроке видеоинструкция по настройке. Если что-то непонятно, спрашивайте в комментариях.
А вот что должно получится у нас в итоге.

Частота вращения вентилятора меняется циклически. Для теста специально взял старый и шумный кулер. На глаз оценить частоту вращения трудно, а до замера частоты вращения мы доберёмся чуть попозже.
Теперь немного пояснений по коду и что же в итоге у нас получилось.
Для начала про структуру кода для Arduino.
Код обязательно должен содержать две процедуры:
void setup() { ..... } - процедура установки, выполняется только один раз, после включения питания или сброса.
void loop() { ..... } - процедура управление которой передаётся после выполнения setup() . Написанный в ней код будет выполнятся циклически, как только (если) будет исполнена последняя команда начнёт выполняться первая.
Перед процедурой setup() принято объявлять глобальные переменные (переменные, которые будут доступны во всех процедурах). В нашем примере это целочисленная (int ) переменная fanCtrlPin . Можно было бы обойтись и без неё, но с ней получается наглядней (видно где обозначение вывода, а где - величина которую меняем). Помимо этого, если вздумается переключить вентилятор на другой вывод, исправить надо будет всего лишь одну строчку.
Помимо указанных процедур можно писать собственные и обращатся к ним (об этом позже), но эти две должны быть обязательно.
Ещё пару слов про установку частоты. Двойным слэшем "//" обозначаются комментарии, соответсвенно, чтобы задействовать нужную строчку надо будет убрать комментирование перед ней. Установка частоты необходима, т.к. по умолчанию может стоять совсем другая частота PWM (на моей плате по умолчани стояло что-то около 4кГц), а PWM вентиляторы требуют частоты выше 20кГц. Какие значения может принимать частота PWM мы так же рассмотрим чуть позже.
Теперь о командах (операторах).
pinMode(pin, mode) - устанавливает вывод с номером pin в режим ввода (вместо mode пишем INPUT ) или вывода (OUTPUT )
delay(time) - задержка выполнения кода, time - время в миллисекундах.
analogWrite(pin, pwm_duty) - устанавливает на выводе pin значение цикла pwm_duty .
pwm_duty может принимать значения от 0 до 255. 0 соответвует полностью выключенному состоянию (однако вентиляторы PWM даже при выключенном сигнале контроля оборотов будут крутится на некоей минимальной частоте), 255 - полностью включенному. Меняя pwm_duty можно менять чатоту оборотов вентилятора. Суть ШИМ (широтно-импульсной модуляции, она же PWM) в изменении соотношения времени включенного и выключенного состояния для прямоугольного сигнала (он же меандр). Непонятно? Что ж ШИМ мы рассмотри немного позже, когда дойдём до регулировки оборотов обычного 3-х контактного вентилятора. А пока, для затравки, дам несколько картинок немного проясняющих абракадабру написанную выше.

Следующий шаг - подключить термодатчик и заставить вентилятор менять обороты от температуры на датчике.