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

<< 1234 678910 >>

Посетитель





78
Palestinian Territory Ramallah
9 мес. назад
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 <DHT.h> // Подключаем библиотеку для работы с датчиком

#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 < temp) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл
digitalWrite(tPIN, tStatus);
if (h < hum) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл
digitalWrite(hPIN, hStatus);
delay(1000); // Задержка в 1 секунду
Serial.print("t="); Serial.print(t); Serial.print(" h="); Serial.println(h); // Отправляем информацю о климате на COM-порт
}


Примечание (бонус ). При подключении к компютеру с COM порта можно будет считать информацию о температуре и влажности в цифрах. В самой программе Arduino можно открыть COM-монитор с помощью меню Tools/Serial Monitor и с периодичность в 1 сек будет обновляться инфа о температуре и влажности

Итого: Мы потратили около 700р. Получив контроллер с возможностью расширения до 6 терров. Устройство работает как подключенное к компьютеру, так и без него при наличии питания.

Если тема будет интересна то:
1. В следующий раз я расскажу, как наше устойство "научить" работать со времененем. И в зависимости от времени суток менять характеристики климата, а так же к реле подключить Освещение, которое будет включаться утром и выключаться вечером (если у Вас останутся свободные каналы...).
2. И по нарастающей... LCD-Дисплей с информацией; эффект рассвета и заката; управление с пульта ДУ, ПК или сенсорной панели; использование транзисторов вместо реле для устройств работающих от малого постоянного тока; и пр.

С вопросами и пожеланиями не стесняемся. Кому интересно, помогу чем смогу.

Изменено 27-4-2012 автор CiberRus
2012-03-26 добавлено 26/03/2012 13:37:26#365640

Новенький





46
Russian Federation Saint Petersburg
3 мес. назад
aleksjet


Спасибо за ссылки. Надо будет посмотреть. Хотя я сомневаюсь,чтобы на украинских аквариумных форумах , чем-то серьезным поделились.
На наших форумах не такие жадные). Но обязательно посмотрю.
Сам-то далеко продвинулся в кнопках и меню?
Может поделишься?
2012-11-20 добавлено 20/11/2012 18:12:31#387993

Посетитель





65
Russian Federation Khabarovsk
4 г. назад
Не хочу не кого обидеть но там я долго просил скинуть мне код скинули но работает Он или нет я не знаю
Скоро работы будет по меньше буду побывать разработка выть меню
2012-11-20 добавлено 20/11/2012 19:09:36#388004

Новенький





46
Russian Federation Saint Petersburg
3 мес. назад
aleksjet


Я так и подумал,что не дадут.
Пока еще не заходил к ним. На родном Arduino.сс смотрю.
Тяжело с переводчиком. Пока далеко не ушел.

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

Да и у меня времени в обрез. Больница закончилась. Пытаюсь,что-то посмотреть урывками. Да еще и в командировку с понедельника на неделю засылают.

Ты сколько кнопок планируешь использовать? Больше3-х?
Вид меню? Будут подменю или нет?

Интересно посмотреть заработает или нет присланный тебе код. Результаты сообщишь?

Изменено 20-11-2012 автор Rust
2012-11-20 добавлено 20/11/2012 20:37:23#388015

Посетитель





65
Russian Federation Moscow
4 г. назад
Кнопок наверное надо штуки четыре
Меню и под меню думаю тоже нада
Сейчас станет по свободней на работе буду заниматься больше
2012-11-20 добавлено 20/11/2012 21:55:03#388025

Новенький





46
Russian Federation Saint Petersburg
3 мес. назад
aleksjet


Я вот думаю (хотя может и ошибаюсь),чем больше кнопок тем больше функций будет выполняться. Соответственно усложняется программа (скетч), а это не очень хорошо. Надо четко определиться с параметрами,которые необходимо будет корректировать в процессе эксплуатации и после этого смотреть сколько кнопок будет необходимо для реализации этих задач. Т.е обойтись необходимым и достаточным минимумом.
Что будет необходимо регулировать, навскидку:
- время, (у меня уже убежало на полторы минуты за две недели)
- время включения и отключения LED (рассвет/закат)
- время (день/ночь) которым определяются параметры влажности и температуры
- влажность
- температура

Что еще? aleksjet добавляй.

CiberRus может подскажете,на правильном мы пути или надо это решать как-то по другому?

Изменено 21-11-2012 автор Rust
2012-11-20 добавлено 20/11/2012 22:32:35#388033

Посетитель





65
4 г. назад
Если я не ошибаюсь то кнопок можно сделать даже две или одну и с помощью нее управлять параметрами

а по функциям
1 - время (основные часы которые будут управлять таймером)
2 - время освещения
3 - время рассвет закат
4 - установка температур день ночь
5 - установка влажности день ночь
6 - дополнительные устройства ( просто реализовать как таймер) например у меня у саламандр водопад который можно тоже периодически включать выключать
7 - вентиляция

но эти все параметры можно завязать на влажность и температуру

Например:
если влажность большая включаем вентилятор и проветриваем
если температура слишком большая продуваем террариум
но это уже особенности
но думаю что они будут полезны
2012-11-21 добавлено 21/11/2012 11:56:23#388069

Посетитель





65
4 г. назад
http://avaxsearch.co...

а вот еще книженки по ардуино ))
2012-11-21 добавлено 21/11/2012 12:13:30#388071

Новенький





46
Russian Federation Moscow
3 мес. назад
aleksjet


Мне кажется, хватит трех.

Они же все на английском(.
Но все равно спасибо.
2012-11-21 добавлено 21/11/2012 15:38:01#388096

Посетитель





65
4 г. назад
наверное 4 кнопки будет в самый раз

одна листать меню вторая запоминать данные, а еще две увеличивать или уменьшать параметры
2012-11-22 добавлено 22/11/2012 08:20:57#388176

Посетитель





65
Russian Federation Moscow
4 г. назад
Еще есть ссылочка

http :// reefprojects.com /wiki/ Main_Page

Тут правда это для аквариума но там есть примеры кодов
http://www.reefprojects.com/wiki/Code
Но к сожалению на английском )
2012-11-22 добавлено 22/11/2012 21:14:22#388261

Посетитель





65
Russian Federation Moscow
4 г. назад
Еще есть ссылочка

http :// reefprojects.com /wiki/ Main_Page

Тут правда это для аквариума но там есть примеры кодов
http://www.reefprojects.com/wiki/Code
Но к сожалению на английском )
2012-11-22 добавлено 22/11/2012 21:14:24#388262

Новенький





46
Russian Federation Kazan
3 мес. назад
aleksjet


Спасибо большое.
Я уже в ней полазил,чуть раньше)).

Сейчас пытаюсь все-таки теории почитать. И совместить с примером CiberRus. Т.к. сильно подозреваю готового мы все равно не найдем.
Делать менюшку и выводить на LCD придется самим, но с правками CiberRus,если,конечно он захочет с нами возиться.
Но время в обрез.С этой подготовкой к Универсиаде. Дальше еще хуже похоже будет.
И дома пока не получается. Опять лекции Джейми пытаюсь пересматривать.
И еще примеры с "Амперки"
С понедельника в Москву уезжаю. Еще неделя коту под хвост.
2012-11-23 добавлено 23/11/2012 00:20:29#388279

Посетитель





65
4 г. назад
Какую теорию читаешь ?
поделись ))
может что вместе придумаем ?
2012-11-23 добавлено 23/11/2012 11:56:47#388312

Новенький





46
Russian Federation Kazan
3 мес. назад
aleksjet


Да ничего особенного.
То,что CiberRus советовал. Азы.

http://wiki.amperka....

Ты это уже наверное все знаешь.
А мне полезно.
2012-11-23 добавлено 23/11/2012 22:15:35#388363

Новенький





8
Russian Federation
6 г. назад
CiberRus ни как не получается скомпилировать (с первой страницы) ругается на DHT.cpp


dht.cpp:164: error: 'GitHub' does not name a type

проверял и в версии 1,0 и 0022 одна и таже ошибка ! библиотеку DHT.h(.cpp) брал так же с первой страницы.
заранее благодарен.



Изменено 30-11-2012 автор Snecky

исправил! кто столкнулся с этой ошибкой - открыть DHT.cpp и удалить в самом низу строчки после последней скобки " } "

Изменено 30-11-2012 автор Snecky
2012-11-30 добавлено 30/11/2012 16:03:04#389091

Посетитель





65
Russian Federation Moscow
4 г. назад
Snecky

расскажите по подробней

похоже у меня была такая же проблема
2012-12-01 добавлено 01/12/2012 20:06:31#389177

Новенький





8
Russian Federation Vladikavkaz
6 г. назад
блин, теперь код компилируется и заливается но не отрабатывает (((( системный монитор показывает и темп и влажность ! но не отрабатывают пины управления темп и влажностью ! кто сталкивался ??? может кто нашел решение ?
2012-12-02 добавлено 02/12/2012 12:59:57#389231

Посетитель





65
Russian Federation Moscow
4 г. назад
возьми последний код который в статье он точно работает
а лучше скинь код сюда что бы посмотреть что ты компилируешь
я тоже очень долго мучился

Изменено 2-12-2012 автор aleksjet
2012-12-02 добавлено 02/12/2012 22:42:06#389284

Новенький





8
Russian Federation
6 г. назад
допиливал код и сделал ошибку исправил и все заработало ! спс автору
2012-12-03 добавлено 03/12/2012 08:17:14#389293

Посетитель





65
4 г. назад
а у тебя какой код с меню или просто каждый раз параметры перешивать надо ?
2012-12-03 добавлено 03/12/2012 08:31:38#389295

Новенький





8
Russian Federation
6 г. назад
мне нужно только один раз настроить да и все ! сей час настроил пашет как швейцарские часы
прилипил еще и bluetooth всегда могу посмотреть что у нас с темп. и влажностью, как с телефона (андройд) так и с ноута

Изменено 4-12-2012 автор Snecky
2012-12-04 добавлено 04/12/2012 09:43:53#389389

Посетитель





65
4 г. назад
а поподробней про блю туз как организовывали интерфейс
или мена параметров происходит путем смены прошивки ? или через вед интерфейс
2012-12-04 добавлено 04/12/2012 13:49:18#389429

Новенький





8
Russian Federation
6 г. назад
bluetooth цепляется к пинам RX и TX ну и питание!bluetooth получается тот же СОМ порт (как по USB) только прошивать через него не нужно! на телефоне нужно просто поставить любою прогу для прослушивания СОМ порта, для компа хороша PUTTY или тот же Serial Monitor из IDЕ ! если время позволит напищу мониторинг на LABVIEW (если кто то оперидит меня буду рад) для передачи по WEB требуется езирнет шилд и знания PHP (с ним проблемы )

Изменено 4-12-2012 автор Snecky
2012-12-04 добавлено 04/12/2012 15:36:12#389446

Посетитель





65
4 г. назад
почитал и посмотрел про LABVIEW интересная штуковина может получиться целый умный террариум с контролем параметров
тогда и вовсе можно без дисплея обойтись

а еще у меня возник вопрос такой
защиту бы прописать в коде
если датчик отвалится например или помрет это я совсем не давно заметил когда игрался с ардуиной
после отключения датчика включается обогрев и полив так как программа видит что там идет ноль
а это может и навредить если что
2012-12-05 добавлено 05/12/2012 10:29:22#389577

Новенький





22
Singapore Singapore
6 г. назад
Уважаемый CiberRus, давно хотел задать Вам один вопрос, но из за неожиданной смерти любимого кота Макса
в конце октября находился буквально в трансе. Только только начал
возвращаться к жизни.
Вопрос следующий:
Нарастание и затухание яркости светодиодной ленты реализуется с помощью функции
switch().
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);
}
В данном варианте яркость начинает увеличиваться в 7 , а уменьшаться в 20.
Я задал переменные TimeOn и TimeOff , значения которых хранятся в eeprom и программируются с помощью кнопок.
Оказалось, что в следующем виде функция не работает:
switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты
{
case TimeOn:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break;
case TimeOff:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break;
default:analogWrite(sdPIN, (Day) ? 255:0);
}
Как быть?
2012-12-08 добавлено 08/12/2012 07:40:03#389890

<< 1234 678910 >> Создать новую темуБыстрый ответ