Контроллер для мониторов студийных своими руками

1. Контроллер своими руками

Посетитель

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

В качестве платформы будем использовать Arduino. Это устройство может работать как автономно (запитав его любым адаптером 7-12V или батарейкой), так и подключенным к компьютеру. Имеет 20 цифровых вводов/выводов, 6 из которых могут быть использованы как аналого-цифровые преобразователи, еще 6 могут работать в режиме широтно-импульсной модуляции. Встроенные интерфейсы I2C и SPI. И много чего еще. Более подробно: http://arduino.ru/Hardware/ArduinoBoardUno . Такая организация позволяет подключить к Arduino практически любое электронное приспособление. Простой язык программирования и наличие в сети готовых библиотек для популярных устройств позволяет без труда реализовать на базе Arduino любой проект.

Грубо говоря, до знакомства с Arduino мои знания в электроние ограничивались законом Ома. Через пару часов после приобретения я уже реализовывал простые проекты, а еще через пару дней террариум был оборудован контроллером.

Что нам понадобиться:
1. Контроллер Ардуино. Arduino на E-bay
Вариант Nano удобнее всего использовать в итоговом устройстве (стоит около 450р, есть варианты и дешевле, но по USB они напрямую не подключаются, поэтому лучше немного переплатить, и использовать более удобное). Для прототипирования лучше использовать UNO (цена

600р)
2. Датчик влажности и температуры. Датчики DHT* на E-bay
Цена от 100р в зависимости от точности. Желательно использовать DHT21 или DHT22. У DHT11 погрешность измерения температуры +-2 градуса, что существенно.
3. Релейный модуль. Релейный модуль (цена от 100р)
Такие модули бывают от 1, 2, 4, 8 до 16 (видел и 32 для маньяков) выводов, т.е. чем больше устройств надо заюзають, тем больше модуль.
4. Резистор на 10 kOm 1шт. Купить можно в ближайшем магазине радиодеталей. Цена 3р (не в ближайшем 60коп ).
5. Провода. Удобные шнуры для датчика и соединений.

Не буду рассказывать об Arduino. Вот ссылка, где о нем есть несколько статей Амперка , которые позволят быстро подружить это устройство с компьютером (см. видео Первые шаги). Кстати кто не хочет связываться с E-bay по тем или иным причинам, практически все причендалы можно купить в их интернет магазине (не сочтите за рекламу).
Но поверьте, в покупках на E-bay нет ничего сложного. Правда ждать посылку придется около месяца, но зато бюджет устройства будет в разы меньше.

Так же нам понадобится библиотека для работы с датчиком, взять ее можно здесь: https://github.com/adafruit/DHT-sensor-library . Папку поместить в каталог libraries\ установленной программы Arduino

Вот прототип (его я собрал и запрограммировал за 5 минут из того, что валялось под рукой):

Подключение датчика ( Подробно тут ):
1-й пин датчика подключаем к 5v от Arduino
2-й пин датчика к 8-му (или любому понравившимуся) пину Arduino. Так же через резистро 10 кOm этот пин надо подтянуть к 5v.
3-й никуда не подключаем.
4-й пин к Земле.

Подлюкчаем Реле (все еще проще чем с датчиком).
1. Соединяем с питанием. На модуле будет указано, какой пин отвечает за 5v (VCC) и Землю (GND)
2. Цифровые пины Arduino подключаем к управляющим пинам модуля (In1, In2 и т.д.). В данном случае к 6 и 7.

Железо готово! Через реле подлючаем необходимые устройства и доставляем радость животному.

Мы использовали всего 3 из 18-ти возможных управляющих пинов. Это значит, что мы уже знаем как к тому же самому контроллеру подлючить еще 5 террариумов с независимым управлением (обладая более углубленными знаниями мы бы знали, как подлючить еще не один десяток. ).

Чуть не забыл, вот текст программы, который надо загрузить в устройство, чтобы все заработало (программа максимально упрощена, для удобства восприятия и возможности внесений изменений. Используем простой принцип, если температура опустилась ниже указанной отметки, то включаем обогрев; с влажностью аналогично):

#include // Подключаем библиотеку для работы с датчиком

#define DHTPIN 8 // Считывающий пин с датчика
#define DHTTYPE DHT11 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 6 // Пин управления влажностью

DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht

int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int temp = 28; // Желаемая температура в градусах Цельсия (изменить на нужную)
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int hum = 45; // Желаемая влажность (изменить на нужную)

Читайте также:  Полка для маленьких игрушек своими руками

void setup() // инициализация основных данных
<
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик
pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
digitalWrite(tPIN, tStatus); // Притягиваем пин к начальному статусу (Выкл)
>

void loop() // зацикливание (код управляющей программы)
<
int h = dht.readHumidity(); // Считываем влажность
int t = dht.readTemperature(); // Считываем температуру
tStatus = (t Изменено 27-4-2012 автор CiberRus

Постоянный посетитель

Уже второй месяц пытаемся собрать что-то с Arduino.
Всё работает за исключением того что если датчик DHT22 вытянут более чем на 100см от Шилда, то значения не возвращаются.
При выключении библиотеки данные поступают нормально. Но опрашивать 5 датчиков без библиотеки, пока не придумали как.

Изменено 26-3-2012 автор RNKot

Посетитель

сообщение RNKot
Уже второй месяц пытаемся собрать что-то с Arduino.
Всё работает за исключением того что если датчик DHT22 вытянут более чем на 100см от Шилда, то значения не возвращаются.
При выключении библиотеки данные поступают нормально. Но опрашивать 5 датчиков без библиотеки, пока не придумали как.

Изменено 26-3-2012 автор RNKot

У меня датчики ближе 1м, и проблем с датчиками не было.
Т.к. проблеммы зависят от длины кабеля, то скорее всего причина в качестве провода, контакта или недостатка питания.
1. Попробуй использовать качественную витую пару, как правило это помогает, по крайней мере для аналоговых датчиков есть такая рекомендация.
2. Возможно где-то в схеме есть «паразит», который тырит питание, и датчики «срываются».
3. Используемого питания платы недостаточно для питания «обвязки». Используте внешний источник питания, или подберите более сильный.
4. Для стабилизации питания датчика можно использовать конденсатор 0,1мкФ между питанием и землей, как можно ближе к датчику. Кстати на готовых платах кондер стоит (Датчик) .

Изменено 26-3-2012 автор CiberRus

Новенький

Посетитель

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

Чтобы ваять с нуля, надо иметь доступ к дешевым деталям.
Если затариваться комплектующими в «Чип и Дейле» и им подобным где наценка 500-1000%%, то получится золотой девайс.

Постараюсь довести материал, опять же если это будет интересно читателю, до варианта, который у меня осуществляет контроль. Рассвет, закат, суточный контроль тепературы и влажности, долив жидкости в резервуры, контроль влажности почвы растений, возможность удаленно получить/изменить информацию от контроллера, слив статистики в БД. А если подключатся спецы к обсуждению, то можно и дальше.

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

Новенький

Интересно и думаю не одному мне. На форуме есть ветка «контроллер мечты», есть там дельные идеи и замечания, но в основном всё на стадии теории и обсуждения. В этой связи очень интересно лицезреть именно готовый продукт, и иметь возможность расчёта экономической целесообразности на фоне общей функциональности, тем более, что устройство имеет место быть физически и функционирует, если я всё правильно понял. А касательно комплектующих с «чип и дип’a» — сущая правда, самостоятельное изготовление выходит в разы дороже чем покупка готового в магазине и это не говоря о том, что придётся ещё программировать AVR/PIC контроллер, потратиться на программатор (ну или опять же делать самому) и проч. и проч. В общем мне кажется, что развитие этой темы будет весьма интересно многим.

Постоянный посетитель

Постоянный посетитель

Arduino на shield’е. Монитор и часы.

Коробка в которой всё пока что сложено кучей.

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

Grove — Temperature&Humidity Sensor Pro

Изменено 26-3-2012 автор RNKot

Посетитель

Для меня все очевидно, если меньше метра работает, а больше нет, то проблема именно в проводах и потере напряжения. Это как с некачественным USB, 2-х метровый кабель отваливается периодически.
1. Пробовали витую пару использовать?
2. Подключен ли контроллер к внешнему источнику питания?

Сразу бы сказали, что 5 метров. 5 метров это не больше метра, а больше 4-х .

В случае 5-ти метров используйте витую пару (причем ту, в которой толстые одножилы), другие провода Вам не подходят! Т.к. уже больше 2-х метров они сильно теряют ток.

Могу только догадываться, как Вы считали в обход библиотеки, т.к. особо не разбирал что там внутри происходит. Загляните в библиотеку dht.cpp (там тот же язык, который используется в Arduino), она дергает пин очень много раз для того, чтобы вернуть качественный результат, естественно что при считывании с помощью библиотеки более высокие требования к качеству питания датчика.

Читайте также:  Как собрать шкафчик своими руками

PS. Обычная LCD-шка жадная к контактам зато стоит 100рэ (приходится его допиливать с помощью сдвигового регистра до SPI за 30р), а из-за такой обвязки (Экран на Вашем фото), позволяющей подключить экран к I2C, китайцы берут порядка 400р. За эту цену уж лучше TFT брать, симпотичнее и информативнее.

Изменено 26-3-2012 автор CiberRus

Постоянный посетитель

Посетитель

Ну тогда ХЗ.
Завтра попробую на длинном кабеле затестить.

Конечно не совсем понятно, почему один датчик можно опросить, а 5 нет. В чем там проблема? Кусок кода в студию.

Посетитель

Ну тогда ХЗ.
Завтра попробую на длинном кабеле затестить.

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

Постоянный посетитель

Вы используете библиотеку с первого поста?
http://https//github.

там 404
если можно, скиньте эту библиотеку на почту
Спасибо.

Изменено 27-3-2012 автор RNKot

Посетитель

сообщение RNKot
Вы используете библиотеку с первого поста?
http://https//github.
там 404
если можно, скиньте эту библиотеку на kot_@pochta.ru
Спасибо.

Адрес неправильно возвращается почему-то, вот он строкой: https://github.com/a.
Видать из-за хтпсс неправильно возвращается ссылка.

Постоянный посетитель

Посетитель

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

Нам потребуется немного доработать наше устройство. А именно: соединить один из выводов Arduino с 3-им входом реле. 3-е реле будет управлять освещением, подключаем к нему лампу (пусть это будет выход 5 на Arduino, но можно использовать любой понравившийся). «Железо» готово.

Вот прототип (Т.к. добавился один проводок, то чтобы не дублировать фото с первого поста, собран на другом аналоге arduino):

Доработаем программу.

Есть много способов организовать время используя системный таймер устройства. Самый простой, это использовать готовую библиотеку, которая сама следит за корректностью согласования пользовательского времени с системным. Поэтому качаем библиотеку: Ссылка , разархивируем и помещаем в ..\libraries\ основной программы.

И немного изменяем код:

#include // Подключаем библиотеку для работы с датчиком
#include // Подключаем библиотеку работы с часами

#define DHTPIN 8 // Считывающий пин с датчика
#define DHTTYPE DHT11 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 6 // Пин управления влажностью
#define dPIN 13 // Пин на котором висит светодиод платы
#define lPIN 5 // Пин управления светом

DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht

int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int tempDay = 28; // Желаемая дневная температура в градусах Цельсия
int tempNight = 25; // Желаемая ночная температура в градусах Цельсия
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int humDay = 45; // Желаемая влажность
int humNight = 40; // Желаемая влажность

void setup() // инициализация основных данных
<
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик
pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
pinMode(hPIN, OUTPUT);
pinMode(dPIN, OUTPUT);
pinMode(lPIN, OUTPUT);
>

void loop() // зацикливание (код управляющей программы)
<
if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время
int h = dht.readHumidity(); // Считываем влажность
int t = dht.readTemperature(); // Считываем температуру
int Hour = hour(); // Получаем значение текущего часа
boolean Day = (Hour >= 8 & Hour com7. Последняя цифра — номер ком порта на котором висит устройство.

В данном исполнении устройствовполне можно использовать.

Из недостатков, которые решаются аппаратно:
1. Можно дополнить устройство специальным модулем на основе микросхемы ds1307 (На одном из фото RNKot’а он присутствует, то что с батарейкой), который позволяет энергонезависимо хранить время, и не переставлять его каждый раз при сбросе. Позже я расскажу как его подключить.
2. Электромагнитные реле издают небольшой щелчок при переключении. Для чутко спящих это может быть проблемой. В этом случае можно посоветовать отключать все устройства на ночь, если для животного это не критично (установив ночные параметры на 0 в тексте программы). Реле могут быть заменены на симисторные переключатели или биполярные транзисторы (на биполярных транзисторах позже остановимся подробней, т.к. они просты для понимания и позволяют управлять низковольтной нагрузкой).
3. Устройство представляет собой «черный ящик». А человек так устроен, что ему обязательно надо контролировать показатели. Это решаемо. Arduino позволяет без труда вывести информацию на разлинчые дисплеи (например на такой, как у RNKot’а в сообщении). Позже остановимся подробнее и на этом моменте.

Читайте также:  Красивая буква поделка своими руками

Изменено 29-3-2012 автор CiberRus

Посетитель

3. Полевой транзистор и широтно-импульсная модуляция

Рассмотрим использование полевого транзистора N-типа.
Подходящие транзисторы можно взять к примеру из испорченного источника бесперебойного питания, их там 4-6шт. Важно, что пороговое напряжение на затворе было в пределах 5v (чтобы напряжения с контакта Arduino хватило для его полного открытия).
Или купить в магазине радиодеталей. Одна из распростаненных, дешевых и надежных к примеру: IRF540N. Имеет хороший запас прочности. При использовании тока до 12V,2A-24V,1A можно смело их использовать без дополнительного отвода тепла.

Схема подлкючения, которая нам подходит:
1. К Затвору(G) подлючаем ногу Arduino (пусть это будет 3 пин). Так же желательно притянуть этот контакт к земле через резистор 10КОм, чтобы отсечь возможные шумы, поступающие на затвор.
2. Исток(S) подключаем к Земле.
3. Сток(D) к управляемому прибору. Данный канал будет давать землю, поэтому если важна полярность, то его нужно согласовать с «-» на приборе.
4. «+» от источника питания прибора подключить к «+» прибора.
5. Землю от исочника питания соединить с Землей Arduino.

Теперь притянув контакт 3 к HIGH, нагрузка будет включена, при LOW — выключена.

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

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

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

Прототип:

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

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

Скетч (в текст модуля в буквальном смылсе добавлено 5 строк):
#include // Подключаем библиотеку для работы с датчиком
#include // Подключаем библиотеку работы с часами

#define DHTPIN 8 // Считывающий пин с датчика
#define DHTTYPE DHT11 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 6 // Пин управления влажностью
#define dPIN 13 // Пин на котором висит светодиод платы
#define lPIN 5 // Пин управления светом
#define sdPIN 3 // Пин управления светодиодной лентой

DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht

int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int tempDay = 28; // Желаемая дневная температура в градусах Цельсия
int tempNight = 25; // Желаемая ночная температура в градусах Цельсия
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int humDay = 45; // Желаемая влажность
int humNight = 40; // Желаемая влажность

void setup() // инициализация основных данных
<
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик
pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
pinMode(hPIN, OUTPUT);
pinMode(dPIN, OUTPUT);
pinMode(lPIN, OUTPUT);
>

void loop() // зацикливание (код управляющей программы)
<
if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время
int h = dht.readHumidity(); // Считываем влажность
int t = dht.readTemperature(); // Считываем температуру
int Hour = hour(); // Получаем значение текущего часа
boolean Day = (Hour >= 8 & Hour switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты
<
case 7:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break;
case 20:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break;
default:analogWrite(sdPIN, (Day) ? 255:0);
>
delay(1000); // Задержка в 1 секунду
Serial.print(«t=»); Serial.print(t); Serial.print(» h=»); Serial.println(h); // Отправляем информацю о климате на COM-порт
Serial.print(Hour);Serial.print(«:»);Serial.print(Minute);Serial.print(«:»);Serial.println(second()); // Отправляем информацию о времени на COM
>

void SetTime() // установка времени из шаблона tчч:мм
<
if (Serial.read() == ‘t&#039 // Если первый символ t, то установим указанное время
<
int h = (Serial.read() — ‘0&#039 * 10 + (Serial.read() — ‘0&#039;
Serial.read();
int m = (Serial.read() — ‘0&#039 * 10 + (Serial.read() — ‘0&#039;
setTime(h, m, 0, 0, 0, 0);
>
Serial.flush();
>

Изменено 27-4-2012 автор CiberRus

Постоянный посетитель

Источник

Оцените статью
Своими руками