ARDUINO для автоматизации аквариума

<< 45678910 12131415 >>

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
ARDUINO для автоматизации аквариума
Создал отдельную тему по вопросам использования простых и не дорогих плат ARDUINO для целей автоматизации аквариума.
Идея такая - довести это устройство до полнофункционального контроллера для аквариума, в итоге - с WEB сервером для управления по сети в т.ч. Интернет, и GSM модулем с отправкой SMS.
Начало обсуждения в теме про дозатор :
http://www.aqa.ru/fo...

Информация будет, в основном, в виде конкретных примеров.

Пример 1. Использоание плат Arduino UNO и Arduino NANO для управления по времени суток устройствами в 2-х каналах посредством релейного модуля.
Предполагается использование для создания 2-х канального дозатора, но и для включения света, например подойдет, и для многих других целей также.

Используется модуль часов реального времени, для точного планирования по времени суток, и релейный модуль. В данном примере используется 4-канальный, но 2 канала не используются...

Схема коммутации в случае использования платы UNO R3:


Схема коммутации в случае использования платы NANO:


Программа для среды программирования Arduino:
//***************************************************
// Скетч для управления релейным модулем, в котором *
// использовано два канала. Используется также RTC *
// Релейный модуль - с инверсной логикой на входе *
// Автор: ZORS *
// Версия 1. Дата 21.12.2013 02:40 *
//***************************************************
//----------ИМПОРТ БИБЛИОТЕК-------------------------
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <RTClib.h> //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

//----------Объявляем разные переменные------------
const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
const int RelayChn2 = 7; //Используем цифровой ПОРТ 7 для ВТОРОГО канала релейного модуля
//----------Настройки времени и продолжительности включения реле

//----------ПЕРВЫЙ канал----------------------------
const long StartRelCn_1 = 25200; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток)
//в данном случае 25200 - это 7 часов 00 минут = ( 60секунд *60 минут *7 = 25200)
const long DurationCh_1 = 10; //ДЛИТЕЛЬНОСТЬ срабатывания реле в ПЕРВОМ канале (в секундах)

//----------ВТОРОЙ канал----------------------------
const long StartRelCn_2 = 37800; //Время срабатывания во ВТОРОМ канале релейного модуля (в секундах от начала суток)
//В данном случае 10 часов 30 минут = (60 секунд * 60 минут * 10 часов + 60сек*30мин = 37800)
const long DurationCh_2 = 15; //ДЛИТЕЛЬНОСТЬ срабатывания реле во ВТОРОМ канале (в секундах)

//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup(){

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
pinMode(RelayChn2,OUTPUT); //Инициализируем порт для ВТОРОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
digitalWrite(RelayChn2,HIGH); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой



Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль

// RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале,
//для того, чтобы загрузить в RTC дату и время на момент компиляции программы
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки
//времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

} // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//--------------------------------------------------
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//----------Раздел обработки реле по времени ----
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток

//------------КАНАЛ 1------------------------------
if ((utime >= StartRelCn_1) &&
(utime < (StartRelCn_1+DurationCh_1)))
//Если секунд с начала суток больше, чем задано для включения
//Но, одновременно и меньше, чем задано для включения + длительность
{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//------------КАНАЛ 2 - все аналогично -----------
if ((utime >= StartRelCn_2) &&
(utime < (StartRelCn_2+DurationCh_2)))
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

}//------------Конец ЦИКЛА-----------------------------


(Редактор текста на данном сайте - к сожалению, "ломает" красивое форматирование.

PS: Выложил этот скетч на файлообменник :
http://my-files.ru/h...

В данной программе реализован, довольно-таки простой подход, а простота - основа надежности.

Каждое из 2-х реле срабатывают один раз в сутки в указанное время, причем время указывается в количестве секунд от начала суток, и удерживается указанное количество времени в секундах.
Такой способ задания времени - несколько сложен для понимания, но за это - не нагружает программу и процессор лишним функционалом, который понадобится всего один раз.
Для определения времени наступления события начала включения и выключения реле - используется время в формате UNIX.

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

У комплектных минутных и секундных таймеров "с розеткой" - об этом можно только мечтать....не реализован такой функционал, и еще у них есть один минус. Реле в таких таймерах - не удерживаемое, а переключаемое, со всеми вытекающими последствиями....

Для программирования нескольких включений каждого реле в течение суток - естественно, потребуется несколько другой подход....спрашивайте когда кому-то потребуется, пока не хочу все усложнять...
В принципе, можно добавить константных переменных, содержащих время и длительность срабатывания, и соответственно добавить проверку на условия.
Если количество необходимых срабатываний каждого реле в сутках больше чем 2 - лучше оформить проверку условий в отдельной функции. Как, говорил человек, учивший меня программированию - "все, что ты делаешь в программе больше двух раз - оформляй отдельной процедурой, или функцией".

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

Весь этот пример тестировался на "живом" железе :

Для наглядности отладки был еще подключен LCD дисплей 16 сим в 2 строках.
Схема итоговая была такая:

Обратите внимание, что при использовании I2C последовательного интерфейса - соединения значительно упрощаются. И LCD дисплей подключен транзитом через модуль RTC (часов реального времени). Никаких паяных соединений нет вообще....все скоммутировано - проводами с разъемами.
Скетч - естественно, несколько другой использовался с добавлением строк инициализации и использования LCD 16x2.

Плата использовалась типа такой:
http://www.ebay.com/...
цена примерно 350 руб.

Релейный модуль
http://www.ebay.com/...
цена примерно 150 руб.

Модуль часов реального времени:
http://www.ebay.com/...
Цена примерно 55 руб.

Для сокращения бюджета можно использовать плату проще:
http://www.ebay.com/...
Цена примерно 200 руб.

Если есть потребность подключить ЖК дисплейчик, то лучше брать ЖК дисплей (LCD) c I2C интерфейсом - это сильно упрощает коммутацию, и сокращает количество использованных портов на микроконтроллере.
Например такой можно использовать :
http://www.ebay.com/...
цена около 180 руб.

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

Для использования I2C интерфейса - необходима библиотека Wire. Она есть в стандартном дистрибутиве среды программирования Arduino.
Для использования модуля RTC на микросхеме DS1307 нужна библиотека RTClib.
Если ее не будет в стандартном дистрибутиве, то ее можно взять в интернет. Например здесь :
http://arduino-info....

Необходимо, скачать, и разархивировать zip-файл в папку с понятным названием, например RTCLib. Затем эту папку поместить в папку, где среда Arduino хранит свои библиотеки. Если ставили среду программирования с настройками по умолчанию, то этой папкой будет :
C:\Program Files\Arduino\libraries
Сюда и помещайте папки с подключаемыми библиотеками. Если на этот момент, среда программирования была запущена - ее необходимо закрыть, и запустить заново. После этого библиотека будет доступна в меню Скетч/Импортировать библиотеку.

Микросхема RTC модуля DS1307, как правило использует адрес на шине I2C равный 0x68
поэтому, необходимо проверить в библиотечных файлах, библиотеки RTClib наличие строки типа этой:
#define DS1307_ADDRESS 0x68

Если будет использоваться LCD 16x2 с I2C интерфейсом, то - понадобиться библиотека LiquidCrystal_I2C. Можно скачать здесь :
http://dvrobot.ru/lc...
Как подключить к среде программирования Arduino - см. выше

ВАЖНО : при использовании I2C устройств - в скетче, библиотека Wire - должна быть объявлена первой, иначе - будут ошибки компиляции.

По этому примеру - все....

в следующем - присоединение термо-датчика DS18B20, и создание несложного терморегулятора.....


Изменено 24.12.13 автор Z0RS
2013-12-21 добавлено 21/12/2013 15:57:48#1907148

Новичок




1
Russian Federation Volkhov
2 г. назад
Программирование нескольких включений каждого реле в течение суток
Z0RS
Для программирования нескольких включений каждого реле в течение суток - естественно, потребуется несколько другой подход....спрашивайте когда кому-то потребуется, пока не хочу все усложнять...


Уважаемый ZORS, если вас не затруднит, помогите пожалуйста с кодом для включения реле несколько раз в сутки.(до 20 раз на 5-10 минут)
Хочу использовать вашу схему для авто полива гидропоники.
Заранее Спасибо.
2015-01-25 добавлено 25/01/2015 14:05:28#2044255

Новичок




12
Санкт-Петербург
2 г. назад
senatorow
http://www.aqa.ru/forum/ARDUINO-dlya-avtomatizatsii-akvariuma-268157-page2#pid1945103
в этом посте автор все очень подробно разжевал на примере своего секундного таймера. все очень просто

struct Task TaskList[] PROGMEM = {
{RelPin1, 600,60,20, LOW},
{RelPin2, 600,120,20, LOW},
{RelPin3, 600,180,20, LOW},
{RelPin4, 600,270,20, LOW},

вот отрывок из его скетча где я изменил время срабатывания каждые десять минут мои помпы срабатывают на 20 секунд.
2015-02-12 добавлено 12/02/2015 16:49:22#2051701

Посетитель




228 23
Екатеринбург
1 г. назад
Заинтересовала идея бюджетного ледконтроллера на базе Arduino Nano, в связи с этим вопрос.
Возможно ли реализовать на Arduino Nano и нескольких переменных резисторах управление ШИМ драйверами.
2015-03-23 добавлено 23/03/2015 11:52:25#2068399

Посетитель




232 11
Курчатов
2 мес. назад
скептик

а зачем переменные резисторы? PWM можно управлять с Arduino nano по программе, в ней 2 контакта под это точно есть
2015-03-23 добавлено 23/03/2015 12:24:47#2068411

Завсегдатай




332 45
Подольск
10 час. назад
Если переменники планировались в качестве "аналогового" регулятора уставки (вместо кнопок и памяти), то нет проблем подключить к аналоговому входу ардуины.
С выходом тоже все просто - если у драйвера дискретный ШИМ вход, то подключаем его к "аналоговогому" каналу ардуины который умеет генерить ШИМ и собственно генерим.
А если у драйвера вход регулировки аналоговый, то можно сделать простейший цифро-аналоговый преобразователь из матрицы резисторов R-2R или RC-фильтра (на который подать тот же ШИМ). Или обойтись без ардуины, подключив переменник напрямую к драйверу
2015-03-23 добавлено 23/03/2015 12:37:03#2068416

Посетитель




228 23
Екатеринбург
1 г. назад
Переменные резисторы для задания параметров.
Допустим их 6.
1 Уровень максимальной яркости белых СД (от 0 до 100%)
2 Уровень максимальной яркости синих СД (от 0 до 100%)
3 Уровень максимальной яркости зеленых СД (от 0 до 100%)
4 Уровень максимальной яркости красных СД (от 0 до 100%)
2. Продолжитемьность светового дня для всех каналов (на min - 4ч. на max - 12ч.)
3. Продолжительность рассветов/закатов для всех каналов (на min - без, на max - без задержки в пиковом значении)
Возможно понадобится кнопка start. При кратковременном нажатии начало программы, при длительном нажатии ускоренная 5минутная.
Из предыдущих ответов делаю вывод что подобное управление вполне реализуемо.
Кто-нибудь может написать программу под эти условия?
2015-03-23 добавлено 23/03/2015 13:48:53#2068461

Новичок




2
Ukraine Zaporizhzhya
1 г. назад
//Инициирум RTC модуль

// RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале,
//для того, чтобы загрузить в RTC дату и время на момент компиляции программы
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки
//времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

[

Подскажите как должна выглядеть датта и время в строке RTC.adjust(DateTime(__DATE__, __TIME__)).приведите пример. спасибо...

Изменено 21.6.15 автор Alex112
2015-06-21 добавлено 21/06/2015 22:20:44#2101575

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
сообщение Alex112
//Инициирум RTC модуль
Подскажите как должна выглядеть датта и время в строке RTC.adjust(DateTime(__DATE__, __TIME__)).приведите пример. спасибо...

Именно так и будет выглядеть. Просто убираете знак комментария перед строкой - и все. В самих скобках ничего не меняем. После инициализации часиков нужно ОБЯЗАТЕЛЬНО вернуть на место знак комментария и загрузить этот же скетч еще раз. Иначе при каждом выключении/включении питания ардуины часы будут возвращаться к тому времени, когда вы их загрузили.
2015-06-21 добавлено 21/06/2015 23:29:46#2101602

Новичок




2
Ukraine Zaporizhzhya
1 г. назад
Дядька-рыбомор

Пробывал убирал коментарий и ставил заново. не пойму что не так?
//***************************************************
// Скетч для управления релейным модулем, в котором *
// использовано два канала. Используется также RTC *
// Релейный модуль - с инверсной логикой на входе *
// Автор: ZORS *
// Версия 1. Дата 21.12.2013 02:40 *
//***************************************************
//----------ИМПОРТ БИБЛИОТЕК-------------------------
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <RTClib.h> //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

//----------Объявляем разные переменные------------
const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
const int RelayChn2 = 7; //Используем цифровой ПОРТ 7 для ВТОРОГО канала релейного модуля
//----------Настройки времени и продолжительности включения реле

//----------ПЕРВЫЙ канал----------------------------
const int StartRelCn_1 = 25200; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток)
//в данном случае 25200 - это 7 часов 00 минут = ( 60секунд *60 минут *7 = 25200)
const int DurationCh_1 = 28800; //ДЛИТЕЛЬНОСТЬ срабатывания реле в ПЕРВОМ канале (в секундах)

//----------ВТОРОЙ канал----------------------------
const int StartRelCn_2 = 32400; //Время срабатывания во ВТОРОМ канале релейного модуля (в секундах от начала суток)
//В данном случае 10 часов 30 минут = (60 секунд * 60 минут * 10 часов + 60сек*30мин = 37800)
const int DurationCh_2 = 37800; //ДЛИТЕЛЬНОСТЬ срабатывания реле во ВТОРОМ канале (в секундах)

//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup(){

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
pinMode(RelayChn2,OUTPUT); //Инициализируем порт для ВТОРОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
digitalWrite(RelayChn2,HIGH); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой



Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль

// RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале,
//для того, чтобы загрузить в RTC дату и время на момент компиляции программы
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки
//времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

} // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//--------------------------------------------------
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//----------Раздел обработки реле по времени ----
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток

//------------КАНАЛ 1------------------------------
if ((utime >= StartRelCn_1) &&
(utime < (StartRelCn_1+DurationCh_1)))
//Если секунд с начала суток больше, чем задано для включения
//Но, одновременно и меньше, чем задано для включения + длительность
{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//------------КАНАЛ 2 - все аналогично -----------
if ((utime >= StartRelCn_2) &&
(utime < (StartRelCn_2+DurationCh_2)))
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

}//------------Конец ЦИКЛА-----------------------------
2015-06-22 добавлено 22/06/2015 07:58:48#2101635

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
сообщение Alex112
Дядька-рыбомор

Пробывал убирал коментарий и ставил заново. не пойму что не так?

А что именно не так? Опишите проблему, какой у вас ардуино, какие комплектующие контролера, и вам постараются помочь. А вы просто привели выдернутый из контекста кусок кода из одного из скетчей ZORSа. А еще лучше: можно обратиться на специализированные форумы ардуинистов, я так и делал несколько раз, и мне давали очень дельные советы. Здесь все-таки аквариумисты, а не программисты обитают
2015-06-22 добавлено 22/06/2015 18:18:19#2101763

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




258 30
Russian Federation Moscow
1
2 час. назад
подскажите а что такое БИТ и как число влияет на регулировку яркости?
я про контроллеры на которых написано 12 бит или 8 бит.
и вот к примеру данный контроллер.
http://www.rapidled....

плюсом я нашел вот такую штуку, понравилась из всех своим дизайном интерфейса.


http://www.plantedta...

https://codebender.c...

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


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

http://iarduino.ru/s...

или будет вот такой модуль еще

http://iarduino.ru/s...


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

вы сделали свой вариант контроллера и мне кажется (это конечно не правильно по отношению и к автору и нам форумчанам) но.....
вам как автору было намного проще сделать деление в теме
1 хотите контроллер для света - вот вам инструкция и программа
2 контроллер для света и УДО - вот библиотека или та часть библиотеки которая отсутствовала в первой части
и так далее
ведь не всем нужны столь заумные контроллеры (мне вообще от контроллера необходимо рассвет и закат и что бы управлял вентиляторами охлаждения на радиаторе и все) все остальное от лукавого (это я про жидкие удобрения, просто народу кто то втолковал эту глупую мысль и все с ней бегают. а между тем забыли чему нас учили еще в школе. что все необходимые вещества растения с КОРНЯМИ получают через КОРНИ, не через листья а именно от корня. я пробовал подкладывать специальные таблетки под корень и даже при моем скудном свете растения росли а если им под корень еще и гармон роста подкладывать то прут как на дрожах. но про корни никто не помнит и все читают про добавки вносимые в воду. а между тем надо просто почитать про растения и понять как они растут а не слушать компании которые впихивают нам всякую ненужную чушь. тоже самое и про измерение всяких параметров воды.вы хоть на одной разводне видели такие приборы. правильно их там нет, там есть закон природы - хочешь приспособишься не хочешь сдохнешь. хочешь размножаться научишься не хочешь будешь монахом)
извините все это не относится к теме просто накипело.... как народ разводят а они как л.... все это слушают и ведутся..... чем проще аквариум тем он надежнее и тем сложнее в нем сбить баланс даже при средней тяжести ошибке.
все выдохнул

Изменено 27.6.15 автор zelda78
2015-06-27 добавлено 27/06/2015 06:50:38#2103047

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
zelda78

По-моему, вы сами не знаете, чего хотите. С одной стороны, вам нужны лишь закаты/рассветы и терморегуляция. С другой - вы проводите в пример какие-то запредельно навороченные чужие разработки и тут же говорите - там слишком много лишнего. Так определитесь - делаете сами или покупаете готовое.
Если делаете сами - ну так за вас никто собирать конструкцию и писать код не будет. Вы должны сами понять свой нужный функционал, поставить перед собой конкретную цель. Если долько диммирование - то данная тема все разжевала и в рот положила. Боюсь показаться нескромным, но в своей теме я выложил все этапы постройки - заметьте - работоспособного девайса. Но у каждого есть свои маленькие пожелания, а поэтому код и конструкция могут отличаться. К примеру, у меня три канала диммирования, а вам нужно два. Значит, разбрайтесь в коде и пишите его под два. Или, к примеру, вы хотите часы ds3231. Да, их можно поставить, даже библиотеку менять не надо. Но тогда из кода нужно выбросить кусок коррекции времени, т.к. эти часы довольно точные и не нуждаются в программном исправлении хода. Но сделать это нужно САМОМУ. Поймите, пока не начнете сами ковыряться в коде - ничего не поймете и не сможете настраивать контроллер "под себя любимого". Это довольно просто, я уже вам писал в личку, что ни разу не программист, а вообще гуманитарий.
Бит - это единица информации, равная одному разряду в двоичном коде.
2015-06-27 добавлено 27/06/2015 19:42:23#2103176
Нравится lexx8691

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
сообщение zelda78
...все необходимые вещества растения с КОРНЯМИ получают через КОРНИ, не через листья а именно от корня.

Это очень спорное утверждение. Ну, например, СО2 растения получают все же через листья. А поэтому утверждать - ВСЕ ЧЕРЕЗ КОРНИ - неверно. А потом мы имеем дело с водными растениями, которые в процессе эволюции приспособлены к листовому питанию. Конечно, крипты или эхи значительную массу веществ берут из грунта. Но вы попробуйте накормить через корни наяс или амбулию. Зачахнут, я вас уверяю. А у мхов корней вообще нет, только ризоиды для прикрепления к субстрату. Так то.
Но это к данной теме не относится, модераторы - не губите за флуд
2015-06-27 добавлено 27/06/2015 19:58:46#2103177

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




258 30
Russian Federation Moscow
1
2 час. назад
я привел чужую разработку, по той причине что среди всех контроллеров котоые сейчас идут на форумах у этого мне больше всех понравился внешний вид, ведь внешний вид или так сказать симпатия тоже не мало важно....
а все остальное потом разберемся...
это как три платформы на сотовых, кому и что нравится....
тот то и купил.
так и мне вот понравился данный вид контроллера, возможно и функционал у него крутой.
во вторник приедет мой бутерброд и буду мучать его на предмет заливки данной проги.

ну может быть тогда вы подскажете как и что почитать на предмет нахождения этих кусков и как их писать ил исправлять.


Изменено 27.6.15 автор zelda78
2015-06-27 добавлено 27/06/2015 20:38:10#2103185

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




258 30
Russian Federation Moscow
1
2 час. назад
читал так и не понял как и с чего происходит управление настройками (кнопки или что иное предусмотрено) может кто то просветить.
2015-07-01 добавлено 01/07/2015 12:40:54#2104262

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
zelda78

Управление только программно, т.е. в приведенных данных примерах те параметры (время, температура, скорость и др.) которое вы установите в скетче, то и будет испольнять контроллер. Мне сначала показалось неудобным (нельзя менять время вкл/выкл света, только путем изменения проги и ее загрузки), а потом понял, что этого вполне хватает, т.к. менял установки ну от силы пару раз за год.
Есть, конечно, и решения с кнопочным управлением установок, их довольно много, но нужно поискать. Я остановился на более простом.
2015-07-01 добавлено 01/07/2015 17:41:38#2104401

Завсегдатай




305 104
Москва
1 час. назад
Добрый день . Давно валялся набор ардуинки.
Начал с простого собирать .

я так пронял , дисплей мне просто так не подключить через батарейку , так как дисплею нужен адаптер для i2c ???
2015-07-02 добавлено 02/07/2015 13:21:09#2104631

Завсегдатай




332 45
Подольск
10 час. назад
Bloody

Адаптер для i2c в таком экране как у автора служит лишь исключительно для экономии ножек МК (2 вместо 6, да и те общие для нескольких модулей).
Если ножек хватает - то можно подключать напрямую, параллельным интерфейсом. Ищите схему LCD Shield. Еще потребуется постоянный резистор для ограничения тока светодиода подсветки (если таковой уже на экране не припаян) и подстроечный для настройки контрасности.
2015-07-02 добавлено 02/07/2015 14:01:08#2104658

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
Bloody

Необязательно. Вот тут схема подключения без I2C, но в таком случае требуется больше проводов. I2C позволяет обойтись всегт четыремя: "+" и "-" 5В и еще два: SDA и SCL.
2015-07-02 добавлено 02/07/2015 18:35:40#2104737

Завсегдатай




305 104
Москва
1 час. назад
Дядька-рыбомор

всем большое спасибо . Уже подключил дисплей ,сначала не получалось ,думаю из за хренового контакта , поэтому я злился и бесился на китайцев . Сегодня взял паяльник и жестко припаял штырьки к лсд . Теперь всё работает , сейчас приделаю батарейку и релюшки . Ручки чешутся ))))) если все получился , это же сколько можно будет выкинуть таймеов 220 , контроллеры с куллерами....
2015-07-03 добавлено 03/07/2015 11:51:58#2104915

Свой на Aqa.ru




1149 188
Ростов-на-Дону
1 дн. назад
сообщение Bloody
если все получился , это же сколько можно будет выкинуть таймеов 220 , контроллеры с куллерами....

Абсолютно верное решение. У меня на аквариуме с контроллером раньше стояло 4 таймера: свет утро/вечер, основной свет, СО2 и кулер для охлаждения воды. Теперь все в одной коробочке контроллера с блоком из 4-х реле.
2015-07-03 добавлено 03/07/2015 17:01:59#2105004

Завсегдатай




305 104
Москва
1 час. назад
Прошу помощи . =)
То ли не нашёл , то ли балбес . Вроде все сделал.
времятемпература 2 релюшки .
Хочется ещё на 3 релюшку повесить управление куллерами . Как правильно написать условие???

..............
float tempc
...............
pinMode(RelayChn3,OUTPUT);
digitalWrite(RelayChn3,HIGH);
...............
вот как написать
иф tempc > 26
digitalWrite(RelayChn3,HIGH);
2015-07-06 добавлено 06/07/2015 17:51:37#2105664

Посетитель




61 10
Russian Federation Moscow
1 дн. назад
if (tempc > 26 ){
digitalWrite(RelayChn3,LOW) // Включение при 27 градусах и выше.
}else{
digitalWrite(RelayChn3,HIGH)// Выключение при 26 и ниже.
}
Или на оборот (HIGH,LOW). Все зависит от типа реле.


Изменено 6.7.15 автор Filter
2015-07-06 добавлено 06/07/2015 17:59:18#2105667
Нравится Bloody

Посетитель




61 10
Russian Federation Moscow
1 дн. назад
Если честно, на "пропеллер",я бы ставил немного по другому, что бы его не колбасило на пограничной температуре и лишний раз не входить в условия , для перезаписи команды, это в теории, на практике надо тестировать, какие значение приходят от датчика температуры.. Если он перепрыгиваться данные значения.. то немного поменять код..

if (tempc == 26.5 ){
digitalWrite(RelayChn3,LOW);
}
if (tempc == 26 ){
digitalWrite(RelayChn3,HIGH);
}


Изменено 6.7.15 автор Filter
2015-07-06 добавлено 06/07/2015 20:47:19#2105704

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
Filter
if (tempc > 26 ){
digitalWrite(RelayChn3,LOW) // Включение при 27 градусах и выше.
}else{
digitalWrite(RelayChn3,HIGH)// Выключение при 26 и ниже.
}
Или на оборот (HIGH,LOW). Все зависит от типа реле.




Можно проще, если помнить, что конструкции кода для проверки логических условий сами дают в итоге значения типа TRUE или FALSE, что одно и тоже что HIGH и LOW.
Будет всего одна строка в коде. Ее необходимо вставить в тело основного цикла:
digitalWrite(RelayChn3,!(tempc > 26 )) // это если реле включается инверсным сигналом т.е. уровнем LOW иначе убрать восклицательный знак.

Кстати, при применении данной конструкции и скомпиленный код будет лучше, т.е. компактнее и эффективнее.

Если нужен гистерезис, т.е. "зазор" между температурой включения то, это - тоже можно вставить в проверку условия. Наверное, сами догадаетесь как?

И еще в данном коде есть ошибка...Нельзя сравнивать значния типа float со значением типа int. А компилятор именно так и поймет в большинстве случаев. Лучше использовать 26.0 или использовать для сравнения переменную соответствующего типа.

Изменено 6.7.15 автор Z0RS
2015-07-06 добавлено 06/07/2015 21:14:12#2105707

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