Устройство поможет вам сохранять определенную температуру на рабочем месте.
Описание работы:
Для начала работы подключите питание к 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 точку на индикаторе.
Обсуждение