Устройство поможет вам сохранять определенную температуру на рабочем месте.
Описание работы:
Для начала работы подключите питание к Arduino. Загорится индикатор, на котором будет высвечиваться текущая температура в комнате. Чтобы установить ограничения по температуре, необходимо вращать потенциометр. При вращении потенциометра влево, на индикаторе будет высвечиваться и уменьшаться температура до 16 градусов. При вращении потенциометра вправо, на индикаторе будет высвечиваться и увеличиваться температура до 32 градусов. Установите нужную температуру, которую необходимо поддерживать и оставьте потенциометр в покое, через секунду на индикаторе будет снова высвечиваться текущая температура. При увеличении температуры в комнате, включиться вентилятор. При дальнейшем увеличении температуры, скорость вращения вентилятора будет увеличиваться до максимальной. Существует 4 скорости работы вентилятора. Скорость зависит от разницы температуры между комнатной температурой и температурой выставленной с помощью потенциометра. При разнице температуры больше 1 градуса, но меньше 2 градусов, скорость составляет 25%. При разнице температуры больше 2 градусов, но меньше 4 градусов, скорость составляет 50%. При разнице температуры больше 4 градуса, но меньше 8 градусов, скорость составляет 75%. При разнице температуры больше 8 градуса, скорость составляет 100%.
Нам понадобится:
- Arduino Uno х 1шт.
- Trema Set Shield х 1шт.
- Trema-модуль силовой ключ х 1шт.
- Trema-модуль потенциометр х 1шт.
- Trema-модуль Четырехразрядный LED индикатор х 1шт.
- Trema-модуль датчик температуры и влажности I2C х 1шт.
Для реализации проекта нам необходимо установить следующие библиотеки:
- Библиотека iarduino_4LED для работы с Trema-модуль четырехразрядным LED индикатором.
- Библиотека iarduino_AM2320 для работы с Trema-модуль датчиком температуры и влажности I2C.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.
Схема сборки:
- Устанавливаем Trema Set Shield в Arduino Uno.
- Устанавливаем Trema-модуль Четырехразрядный LED индикатор в 2 посадочную площадку.

Устанавливаем Trema-модуль датчик температуры и влажности I2C в 3 посадочную площадку, в верхнюю I2C колодку.

- Устанавливаем Trema-модуль силовой ключ в 4 посадочную площадку.

- Устанавливаем Trema-модуль потенциометр в 6 посадочную площадку.

- Полученные результат представлен ниже на рисунке.

- Подключить кулер к Источник питания на 12В, через Коннектор с помощью Проводков как показано на рисунке ниже.

Код программы:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_4LED.
#include <iarduino_4LED.h> // Подключаем библиотеку iarduino_4LED
iarduino_4LED dispLED(1, A0); // Объявляем объект для работы с функциями библиотеки iarduino_4LED, с указанием выводов дисплея ( CLK , DIO )
//
#include <iarduino_AM2320.h> // Подключаем библиотеку iarduino_AM2320.
iarduino_AM2320 SensTH; // Объявляем объект SensorTH для работы с датчиком AM2320, используя функции и методы библиотеки iarduino_AM2320.
//
int menu; // Переменная выбора события.
int pinPot = A3; // Объявляем пин для работы с потенциометром.
int pinPowerKey = 2; // Объявляем пин для работы с силовым ключом.
//
float ptVol; // Переменная для чтения показаний с потенциометра.
float potVoluePrev; // Переменная для предыдущих показаний с потенциометра.
int i; // Переменная счета.
int led; // Переменная выбора горящей точки.
//
bool counter = false; // Переменная события, разрешает/запрещает событие каждые полсекунды.
long prevmicros; // Переменная для хранения значений таймера.
//
void setup() //
{ //
pinMode(pinPowerKey, OUTPUT); // Переводим вывод pinPowerKey в режим выхода.
//
dispLED.begin(); // Инициируем LED дисплей.
SensTH.begin(); // Инициируем работу с датчиком AM2320.
//
menu = 1; // Событие 1.
ptVol = map(analogRead(pinPot), 5, 1018, 16, 32); // Читаем показания с потенциометра и масштабируем значения в диапазон от 16 до 32.
potVoluePrev = ptVol; // Сохраняем показания потенциометра в предыдущей переменной.
} //
//
void loop() //
{ //
switch(menu) // Выбираем событие.
{ //
case 1: // Событие 1.
if (micros() - prevmicros > 500000) // Если прошло пол секунды.
{ //
prevmicros = micros(); // Сохраняем нынешнее значение счетчика Arduino.
counter = !counter; // Изменяем переменную событию на противоположную переменную.
if (!counter) // Если переменная события false.
{ //
switch(SensTH.read()) // Читаем показания датчика температуры.
{ //
case AM2320_OK: // Ответ с полученными данными.
dispLED.light(7); // Устанавливаем максимальную яркость свечения LED индикатора.
dispLED.print(SensTH.tem, TEMP); // Выводим значение температуры на дисплей.
//
if(SensTH.tem - ptVol >= 1 && SensTH.tem - ptVol <= 2)// Если разница температур на потенциометре и датчике температуры больше 1, но меньше 2.
{led = 4; analogWrite(pinPowerKey, 63);} // Выбираем 4 точку на индикаторе, подаем 25% напряжение на силовой ключ.
//
if(SensTH.tem - ptVol >= 2 && SensTH.tem - ptVol <= 4)// Если разница температур на потенциометре и датчике температуры больше 2, но меньше 4.
{led = 3; analogWrite(pinPowerKey, 127);} // Выбираем 3 точку на индикаторе, подаем 50% напряжение на силовой ключ.
//
if(SensTH.tem - ptVol >= 4 && SensTH.tem - ptVol <= 8)// Если разница температур на потенциометре и датчике температуры больше 4, но меньше 8.
{led = 2; analogWrite(pinPowerKey, 191);} // Выбираем 2 точку на индикаторе, подаем 75% напряжение на силовой ключ.
//
if(SensTH.tem - ptVol >= 8) // Если разница температур на потенциометре и датчике температуры больше 8.
{led = 1; analogWrite(pinPowerKey, 255);} // Выбираем 1 точку на индикаторе, подаем 100% напряжение на силовой ключ.
//
if(SensTH.tem - ptVol <= 1) // Если разница температур на потенциометре и датчике температуры меньше 1.
{led = 0; analogWrite(pinPowerKey, 0);} // Выбираем 0 точку на индикаторе, подаем 0% напряжение на силовой ключ.
break; // Выходим из оператора case.
} //
} //
if (counter) {dispLED.point(led, true); } // Включаем заданную точку на индикаторе.
if (!counter){dispLED.point(led, false);} // Выключаем заданную точку на индикаторе.
} //
ptVol = map(analogRead(pinPot), 5, 1018, 16, 32); // Читаем показания с потенциометра и масштабируем значения в диапазон от 16 до 32.
if(ptVol != potVoluePrev){menu = 2;} // Если показания потенциометра не совпадают с предыдущими показаниями, то переходим к событию 2.
break; // Выходим из оператора case.
//
case 2: // Событие 2.
dispLED.point(1, false); // Выключаем 1 точку на индикаторе.
dispLED.point(3, false); // Выключаем 3 точку на индикаторе.
dispLED.point(4, false); // Выключаем 4 точку на индикаторе.
//
ptVol = map(analogRead(pinPot), 5, 1018, 16, 32); // Читаем показания с потенциометра и масштабируем значения в диапазон от 16 до 32.
if (ptVol - potVoluePrev < 60) {i++;} // Если разность показания потенциометра и предыдущих показаний потенциометра меньше 60, то увеличиваем переменную счета.
if (ptVol != potVoluePrev) // Если показания потенциометра не совпадают с предыдущими показаниями.
{ //
i = 0; // Обнуляем переменную счета.
dispLED.light(2); // Устанавливаем уровень яркости свечения LED индикатора.
dispLED.print(ptVol, TEMP); // Выводим показания потенциометра в виде температуры.
potVoluePrev = ptVol; // Сохраняем показания потенциометра в предыдущей переменной.
} //
if (i >= 100) {menu = 1; i = 0; led = 0;} // Если переменная счета больше 100, переходим к событию 1, обнуляем переменную счета, выбираем 0 точку на индикаторе.
break; // Выходим из оператора case.
} //
} //
Алгоритм работы:
В начале скетча (до кода setup) выполняются следующие действия:
- Подключаем библиотеку iarduino_4LED для работы с Trema-модуль Четырехразрядным LED индикатором.
- Объявляем объект dispLED, с указанием выводов дисплея.
- Библиотека iarduino_AM2320 для работы с Trema-модуль датчиком температуры и влажности I2C.
- Объявляем объект SensorTH для работы с датчиком температуры.
- Объявляем пины для работы с Trema-модуль потенциометр, Trema-модуль силовой ключ.
- Объявляем переменные участвующие в работе скетча.
В коде setup выполняются следующие действия:
- Переводим вывод для силового ключа в режим выхода.
- Инициируем LED дисплей.
- Инициируем работу с датчиком температуры.
- Считываем показания потенциометра, сохраняя показания в предыдущую и нынешнюю переменную потенциометра.
- Выбираем событие 1.
В коде loop выполняются следующие действия:
- Выбор события.
- Событие 1. В нем каждые пол секунды выполняем считывание показаний с датчика температуры. Выводим значение температуры на дисплей. Устанавливаем максимальную яркость свечения LED индикатора. Зажигаем точку в соответствии со скоростью вращения вентилятора. Считываем показания потенциометра, если показания изменились переходим к событию 2.
- Событие 2. В нем гасим все точки, кроме второй. Читаем показания потенциометра. Если разница показания потенциометра и предыдущих показаний потенциометра меньше 60, то увеличиваем переменную счета. Если показания потенциометра не совпадают с предыдущими показаниями, обнуляем переменную счета, устанавливаем небольшой уровень яркости свечения LED индикатора. Выводим показания потенциометра в виде температуры. Сохраняем показания потенциометра в предыдущей переменной. Если переменная счета больше 100, переходим к событию 1, обнуляем переменную счета, выбираем 0 точку на индикаторе.

Обсуждение