Alex67Z
-
Число публикаций
55 -
Регистрация
-
Последнее посещение
Сообщения опубликованы Alex67Z
-
-
Вот если бы она еще работал))) Было бы .... круто))))
Вот в настоящий момент дисплей ничего не показывает. На serial.print - шим начинает переходить в "закат" и уменьшать значения. Т.е основная программа работает, а вот все что вокруг...)))
Кнопки распаены через резисторы. Если только поочередно - кнопок - 5 штук.
Да, по поводу релюх забыл.... 4 релюхи управление - 5 вольт. А уровни - герконовые, черз резистор на 5 в. При замыкании - на общий (землю).
Это все на коленках, на плате монтажной)) По отдельности - все работает. А вот вместе(((
По поводу библиотек - библиотеки те, что Алекс давал + :
Все работает в версии - 1.0
Сходу не подскажу.
Я сам пока только начинаю разбираться с arduino. Я планировал объявить глобальные переменные для хранения считанных значений температуры и создал бы отдельную процедуру для считывания с датчиков температуры. А где необходимо использовал бы значения температуры из глобальной переменой.
Мдя.... для меня темный лес.... переменные((
-
Basopotam
По поводу "мегаконтроллера" - согласен. Слишком много всего....
Дтчики температупы - DS18B20.
А если по порядку)) Arduino Uno, LCD Keypad Shield DFRobot (это LCD с кнопками. Сверху уны ставить удобно, а вот если хочешь использовать выходы на ардуино по полной, то он нафиг не нужен)), тем более при подключении его по I2C, у него RW на землю запаян, так что без напильника не обойтись - надо отрывать), часы 1307.
LCD подключен по I2C через микросхему PCF8574.
Сначала запускал часы, датчики температуры.... Потом пытался объединить скетчи.
В итоге заработало только так:
// Подключение необходимых библиотеки
#include <Wire.h>
#include "RTClib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// Датчик (или датчики) подключаются к пину 2 Ардуины
#define ONE_WIRE_BUS 2
// настройка «onewire» для работы с любыми другими девайсами (не только Dallas датчиками температуры)
OneWire oneWire(ONE_WIRE_BUS);
// подключаем Dallas Temperature.
DallasTemperature sensors(&oneWire);
// подключение библиотеки для LCD через PCF8574
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x38,16,2); // «0х38» адрес LCD
int k=0; // назначение для переменной при нажатии кнопок
int u=0; // назначение 2-й переменной для датчика уровня
int v=0; // назначение 3-й переменной для охлаждения воды
int Relay1=7; // вентилятор охлаждения радиатора, назначаем 7-й выход
int Relay2=8; // включение «луны», назначаем 8 выход
byte Relay1Status=false;
byte Relay2Status=false;
int Relay3 = 4; // вентилятор охлаждения воды, назначаем 4-й выход
int Relay4 = 12; // автодолив, назначаем 12-й выход
RTC_DS1307 RTC;
// назначаем время восходов и закатов, выходы PWM
int Hours_Start_Sunrise[6] = {11, 9, 10, 11, 12, 12}; // начало рассвета по каналам час
int Minutes_Start_Sunrise[6] = {0, 0, 0, 0, 0, 0}; // начало рассвета по каналам минута
int Hours_End_Sunrise[6] = {15, 12, 13, 14, 15, 15}; // окончание рассвета по каналам час
int Minutes_End_Sunrise[6] = {0, 0, 0, 0, 0, 0}; // окончание рассвета по каналам минута
int Hours_Start_Sunset[6] = {17, 20, 19, 18, 17, 17}; // начало заката по каналам час
int Minutes_Start_Sunset[6] = {0, 0, 0, 0, 0, 0}; // начало заката по каналам минута
int Hours_End_Sunset[6] = {21, 23, 22, 21, 21, 21}; // окончание заката по каналам час
int Minutes_End_Sunset[6] = {0, 0, 0, 0, 0, 0}; // окончание заката по каналам минута
int MinuteDay_Start_Sunrise[6]; // день в минутах для начала рассвета
int MinuteDay_End_Sunrise[6]; // день в минутах для окончания рассвета
int MinuteDay_Start_Sunset[6]; // день в минутах для начала заката
int MinuteDay_End_Sunset[6]; // день в минутах для окончания заката
int Current_MinuteDay; // текущая минута суток
int Current_Period[6]; // текущая часть суток 1-рассвет, 2-день, 3-закат, 4-ночь для каждого ШИМ
int Meridian_PWM[6] = {128, 128, 128, 128, 128, 76}; // макс. значение ШИМ 50% на все каналы, 76% на Red
int Midnight_PWM[6] = {0, 0, 0, 0, 0, 0}; // минимальное значение ШИМ
int Current_PWM[6] = {0, 0, 0, 0, 0, 0}; // текущее значение ШИМ
/* *********************************************************/
/* * * */
/* * ШИМ пин для CW, TV, RB, NB, CY, DR * */
/* * Пин - 3 - CW - Cool White * */
/* * Пин - 5 - TV - True Violet * */
/* * Пин - 6 - RB - Royal Blue * */
/* * Пин - 7 - NB - Blue * */
/* * Пин - 10 - CY – Cyan * */
/* * Пин - 11 - DR - DeepRed * */
/* * * */
/* *********************************************************/
int PWM_Pin[6] = {3, 5, 6, 9, 10, 11}; // назначение PWM выходов для CW, TV, RB, NB, CY, DR
void setup ()
{
lcd.init();
lcd.backlight();
Serial.begin(57600);
Wire.begin();
RTC.begin();
sensors.begin();
pinMode(A0, INPUT); // настраиваем аналоговый вход A0
pinMode(A1, INPUT); // настраиваем аналоговый вход A1
// назначаем на 7-м и 8-м пинах уровени
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, HIGH);
// назначаем на 4-м и 12-м пинах (пины реле) низкий уровень
pinMode(Relay4, OUTPUT);
digitalWrite(Relay4, LOW);
pinMode(Relay3, OUTPUT);
digitalWrite(Relay3, LOW);
if (! RTC.isrunning())
{
lcd.setCursor(0, 0);
lcd.print("RTC no time");
//строчка ниже – установка времени (для установки – убрать комм. и установить дату и время)
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
for (int i=0; i<=5; i++)
{
pinMode(PWM_Pin[i], OUTPUT); // Установка пин для ШИМ
}
for (int i=0; i<=5; i++)
{
analogWrite(PWM_Pin[i], Midnight_PWM[i]); // Установка минимального значения ШИМ
Current_PWM[i]=Midnight_PWM[i]; // Установка текущих значений ШИМ в минимум
}
for (int i=0; i<=5; i++)
{
MinuteDay_Start_Sunrise[i]=60*Hours_Start_Sunrise[i] + Minutes_Start_Sunrise[i]; // Расчет минуты суток для начала рассвета
MinuteDay_End_Sunrise[i]=60*Hours_End_Sunrise[i] + Minutes_End_Sunrise[i]; // Расчет минуты суток для окончания рассвета
MinuteDay_Start_Sunset[i]=60*Hours_Start_Sunset[i] + Minutes_Start_Sunset[i]; // Расчет минуты суток для начала заката
MinuteDay_End_Sunset[i]=60*Hours_End_Sunset[i] + Minutes_End_Sunset[i]; // Расчет минуты суток для окончания заката
}
}
// Процедура расчета текущего периода и значения PWM по каналам
void Led_Dim_PWM()
{
DateTime now = RTC.now();
Current_MinuteDay = (now.hour() * 60) + now.minute();
for (int i=0; i<=5; i++)
{
Current_Period[i]=4;
if (Current_MinuteDay>=MinuteDay_Start_Sunrise[i] && Current_MinuteDay<=MinuteDay_End_Sunrise[i])
{
Current_Period[i]=1;
}
if (Current_MinuteDay>MinuteDay_End_Sunrise[i] && Current_MinuteDay<MinuteDay_Start_Sunset[i])
{
Current_Period[i]=2;
}
if (Current_MinuteDay>=MinuteDay_Start_Sunset[i] && Current_MinuteDay<=MinuteDay_End_Sunset[i])
{
Current_Period[i]=3;
}
if (Current_Period[i]==1)
{
Current_PWM[i]=(float)(((float)Current_MinuteDay-MinuteDay_Start_Sunrise[i])/((float)MinuteDay_End_Sunrise[i]-MinuteDay_Start_Sunrise[i]))*((float)Meridian_PWM[i]-Midnight_PWM[i]);
if (Current_PWM[i]<Midnight_PWM[i])
{
Current_PWM[i]=Midnight_PWM[i];
}
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
if (Current_Period[i]==2)
{
if (Current_PWM[i]!=Meridian_PWM[i])
{
Current_PWM[i]=Meridian_PWM[i];
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
}
if (Current_Period[i]==3)
{
Current_PWM[i]=(float)(((float)MinuteDay_End_Sunset[i]-Current_MinuteDay)/((float)MinuteDay_End_Sunset[i]-MinuteDay_Start_Sunset[i]))*((float)Meridian_PWM[i]-Midnight_PWM[i]);
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
if (Current_Period[i]==4)
{
if (Current_PWM[i]!=Midnight_PWM[i])
{
Current_PWM[i]=Midnight_PWM[i];
if (Current_PWM[i]<Midnight_PWM[i])
{
Current_PWM[i]=Midnight_PWM[i];
}
analogWrite(PWM_Pin[i], Current_PWM[i]);
}
}
}
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" Current_MinuteDay: ");
Serial.print(Current_MinuteDay, DEC);
Serial.println();
for (int i=0; i<=5; i++)
{
Serial.print("Channel #");
Serial.print(i, DEC);
Serial.print(", Current Period: ");
if (Current_Period[i]==1) {Serial.print("Sunrise");}
if (Current_Period[i]==2) {Serial.print("Meridian");}
if (Current_Period[i]==3) {Serial.print("Sunset");}
if (Current_Period[i]==4) {Serial.print("Midnight");}
Serial.print(", Current PWM: ");
Serial.print(Current_PWM[i], DEC);
Serial.println();
}
Serial.println();
}
void RalayOnOff()
{
int SumPWM=0;
for (int i=0; i<=5; i++)
{
SumPWM=SumPWM+Current_PWM[i];
}
if (SumPWM>=50 && Relay1Status==false)
{
Relay1Status=true;
Relay2Status=false;
digitalWrite(Relay1, HIGH);
digitalWrite(Relay2, LOW);
}
if (SumPWM<50 && Relay1Status==true)
{
Relay1Status=false;
Relay2Status=true;
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, HIGH);
}
}
void loop ()
{
{
Led_Dim_PWM();
RalayOnOff();
}
DateTime now = RTC.now();
sensors.requestTemperatures(); // запрос показаний температуры
k=analogRead(0); // значение «k» равно аналоговому входу A0
u=analogRead(1); // значение «u» равно аналоговому входу A1
if (u<10) // при срабатывании датчика уровня, на выходе 4 устанавливается высокий уровень
{
digitalWrite(Relay4, HIGH);
delay(3000);
}
else if (u>=10) // при срабатывании датчика уровня, на выходе 4 устанавливается низкий уровень
{
digitalWrite(Relay4, LOW);
}
v=sensors.getTempCByIndex(1); // переменной "v" присваивается темп. 1-го датчика (Т воды)
if (v>=28) // если температура поднимается до 28 градусов, срабатывает реле на вентилятор охлаждения
{
digitalWrite(Relay3, HIGH);
}
else if (v<26) // если температура опускается до 26 градусов, вентилятор выключается
{
digitalWrite(Relay3, LOW);
}
if (k>1000) // если кнопки не нажаты, то высвечивается время и данные по температуре
{
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("A="); // температура аквариума
lcd.setCursor(2, 1);
lcd.print(sensors.getTempCByIndex(0)); // первый датчик в воде
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print("R="); // температура на радиаторе
lcd.setCursor(10, 1);
lcd.print(sensors.getTempCByIndex(1)); // второй датчик на радиаторе
}
}
Понимаю, что не очень красиво))
В комментариях расписано - что и для чего)))
Алекс!
Можете помочь?
Вот куда это:
[color=#000088]if[/color] [color=#666600]([/color] [color=#666600]([/color] millis[color=#666600]()[/color] [color=#666600]%[/color] [color=#006666]1000[/color] [color=#666600])[/color] [color=#666600]==[/color] [color=#006666]0[/color] [color=#666600])[/color] [color=#880000]//вызов раз в секунду, читаем температуру и обновляем экран[/color]
[color=#666600]{[/color]
[color=#660066]Temp_read[/color][color=#666600]();[/color] [color=#880000]//читаем температуру[/color]
[color=#660066]Screen_out[/color][color=#666600]();[/color] [color=#880000]//обновляем экран[/color]
[color=#666600]}[/color]
надо пришпилить?
Или... как правильно сделать?
P.S. Знатоков прошу не шпынять)) Помогите лучше с советом))
Никогда с программированием не дружил)) С паяльником и электрикой - более менее, а вот с программированием....
Надеюсь за офтоп не примут? а то может уже пора ветку по программированию ардуино открывать)) -
Вообще-то я это к чему спрашивал))
Имеется - Arduino UNO, LCD16x2, часы, датчики температуры...
Увидев вашу тему, подумал - вот оно, то, что надо!))) Затрат минимум, эффективность - 100%
Скетч с библиотеками запустились сразу. Все нормально работает. Подключаю LCD - по I2C, проблема((( С "delay (60000)", время на дисплее и температура обновляется через минуту((
Убираю delay - все работает нормально.
Т.к. в ардуино понимаю, надеюсь пока) мало, возник вопрос - ничего там никуда в память не забивается???)) Так что в итоге работать вообще не будет????))
-
-
Добрый день!
Проект понравился - просто и доступно! Думаю многие захотят повторить, или использовать какую нибудь часть, просто не все пишут((
Alex_M!
У меня вопрос по скетчу - что произойдет, если в
void loop ()
{
Led_Dim_PWM();
RalayOnOff();
delay(60000);
}
убрать прерывание delay(60000)???
-
Нужен камушек, примерно размеры 15х10х10.
Может у кого есть лишний?
В мини не хватило... не рассчитал.
-
Бзик аквариума -фон и пенник.
Я заказал в www.orgsteklo-shop.ru синее оргстекло по размеру задней стенки. Там при заказе можно выбрать размер, они режут, привозят. Вырезаешь потом сверху слева и справа для сампа - слив и подача воды. Клеишь герметиком.
Единственная проблема - сливать воду, выталкивать камни и живность....
-
По прошествии определенного времени после переделки какие у Вас впечатления от работы пенника???
Работает))) Как не удивительно)) Конечно если загрузить - его будет мало(( Поляки на пенник поскупились((
-
Спасибо всем за ответы.
А был куплен на Ленинском - как стромбус)))
-
-
Подложить просто что-то - не получится((
В том-то все и дело, что уровень воды стоит на уровне слива.
Что-бы понизить уровень внутри, надо понизить уровень слива. Сообщающиеся сосуды))
-
Может у кого-то есть остатки после переделки света???
Пишите в личку.
-
То что было в максе, трудно назвать пенной и пеником, особенно когда раньше пользовался на другой акве дельтеокм 600-м. Сейчас могу спокойно регулировать до сухой пены краном подачи воздуха. И при этом бьет скимат, а не желтая водичка.
-
Всем добрый день!
Решил написать по поводу доработки пенника в Aquael ReefMaх. Может кому-нибудь, кто уже намучился и пригодится))
В своем первоначальном состоянии – это чистой воды «аппарат для перегонки воды» из одного отсека в другой. Долго ждал, когда же начнет пенить)) Не дождался… (((
Обратился к Sliam по поводу Нептуна для ReefMax, но увы, он их сейчас не делает. Решил подумать, что можно сделать с родным… Конечно самый простой вариант – просто выкинуть))
Но все равно же… интересно и руки чешутся…
Основная проблема данного девайса – это высокий уровень воды. Вода доходит до трубки и получается – или он не пенит, когда перекрываешь воздух до конца, или он гонит воду, когда открываешь воздух. Но кроме крана для воздуха ничего у него больше нет…
Схематично, это выглядит так (кто имеет данный аквариум, заглядывал во внутрь пенника и понимает, о чем я пишу):
Подумал попробовать уменьшить уровень воды в пеннике, при этом перелив воды в другой отсек должен остаться.
Для этого надо перенести слив воды в другой отсек немного ниже. И это будет выглядеть так:
Я отрезал козырек и внешнюю стенку, приклеил козырек обратно (клей – эпоксин из серии «Момент»), получилось, что при заполнении пенника водой, ее уровень стал ниже – где-то до уровня начала «куполообразной»)) чаши (порядка на 4,5 -5 см).
В итоге через минут 15-20 работы, получилось следующее:
Минусы – пенник висит выше и задняя крышка не закрывается.
Но, все таки это минимальная доработка, когда он пенит и ничего под руками, я имею в виду другие пенники, нет)))
P.S. Никогда не думал, что в морском аквариуме можно покрыть стекло краской, которая СТИРАЕТСЯ! При этом стирается, когда проходишь по ней губкой… Не чем-то карябаешь, а именно, просто нажимая губкой промываешь… Будьте осторожнее, когда будете промывать задний отсек.
-
Добрый день!
Красиво получается! Хорошо и приятно что новые жильцы приживаются и раскрылись!!!
-
Весной хотел начать новую баночку литров на 100.
По мотивам AlexLegend
http://www.aqualogo.ru/phpbb2/index.php?sh...10613&st=20
В качестве актинников были куплены 2 светодиодные лампы:
Aquabeam 500 single - REEF BLUE
Длина - 18"/45 см.
http://www.urmstonaquatics.com/index.php?a...amp;portrelay=1
Но баночка не сложилась. Лампы лежат мертвым грузом.
Так что продам каждую по 4 500 руб.
Обе сразу отдам за 8 000 руб.
Если кому интересно - пишите в личку.
-
Клаву забрали.
Остался сарк...
Предложение в силе. Рассмотрю обмен на мягкоту...
-
Продам сарк и клавулярию.
1. Сарк - высота где-то 10-15 см, да и шляпка такая же.
Цена вопроса - 1500 р.
(резать и проращивать на продажу - не по мне, да и негде...)
2. Клавулярия на камне - размеры камня: высота-ширина-длина (это с какой стороны посмотреть :-))
где-то 12-14-16 см.
Цена вопроса - 1000 р.
Если заинтересовались - пишите в личку....
Живу в Строгино (Твардовского)
Фото прилагаю...
-
Кормушка и Коралия - проданы.
Остальное в продаже.
-
Всем привет. Есть некоторые ненужные вещи:
1. Помпы, все НОВЫЕ, не использовались:
a. Hydor Pico 400 (385 л/ч, 0,7 м) – 300 руб.
b. Blupower 900 – 600 руб.
c. Maxi-Jet 1000 (с труб. Вентури и Pinwheel для MCE 300) – 2 000 руб.
Можно использовать, например, для DIY скиммера…
2. Помпа Koralia Nano (в работе была 4 месяца) – 500 руб.
4. Скиммер TMC, V2SKIM- 400 (помпа Rio 2100) – 1 500 руб.
Недостатки:
Был в работе 6 месяцев.
Отсутствует «V2Bubble Stop»
Треснут сверху и заклеен стакан для скимата (из-за тугой крышки).
5. Автокормушка Trixie Aqua Pro (новая, была подарена и не пригодилась) – 500 руб.
http://www.aqua-shop.ru/product_info.php/c...ucts_quantity/0
Пишите в личку.
Если на выходные не отвечу, обязательно всем заинтересованным отвечу в рабочие дни.
-
ПВХ - забрали. Остались только помпы:
Помпы:
1. От нано скиммера Resun SK05 б.у. – 100 руб.
2. Hydor Pico 400 (385 л/ч, 0,7 м) – 300 руб.
3. Blupower 900 – 600 руб.
4. Maxi-Jet 1000 от Deltec MCE300 (подача воздуха, игольчатое) – 2 000 руб.
Рассмотрю варианты обмена на живность:
- сарки,
- ксения,
- лобофитум,
- синулярия…..
-
После перестроек, переделок, оценки остатков и понимания того, что много лишнего было глупо куплено …
Итак, есть некоторое количество фитинга, труб ПВХ и помпы…
ПВХ:
1. Диаметр 32 мм:
- труба 2 обрезка по 1,5 м – 70 руб.
- уголок 90 гр. 4 шт. – 80 руб.
- муфта соединительная 2 шт. – 20 руб.
- кран шаровой 1 шт. – 250 руб.
Итого: 420 руб.
2. Диаметр 25 мм:
- труба 2 обрезка 1,5 м + 1,2 м – 50 руб.
- уголок 90 гр. 6 шт. – 100 руб.
- муфта соединительная 4 шт. – 40 руб.
- тройник 2 шт. – 30 руб.
- кран шаровой 1 шт. – 200 руб.
Итого: 420 руб.
3. Диаметр 20 мм:
- труба 2 обрезка 0,8 м + 0,2 м – бесплатно.
- уголок 90 гр. 4 шт. – бесплатно.
- тройник 2 шт. – бесплатно.
Итого: бесплатно.
4. Диаметр 25 мм:
- труба 1 обрезок 1,2 м – бесплатно.
- уголок 90 гр. 4 шт. – бесплатно.
- тройник 2 шт. – бесплатно.
Итого: бесплатно.
Желательно забрать сразу всё! Отдам всё в одни руки за 800 руб.
Рассмотрю варианты обмена на живность:
- сарки,
- ксения,
- лобофитум,
- синулярия…..
Помпы:
1. От нано скиммера Resun SK05 б.у. – 100 руб.
2. Hydor Pico 400 (385 л/ч, 0,7 м) – 300 руб.
3. Blupower 900 – 600 руб.
4. Maxi-Jet 1000 от Deltec MCE300 (подача воздуха, игольчатое) – 2 000 руб.
Рассмотрю варианты обмена на живность:
- сарки,
- ксения,
- лобофитум,
- синулярия…..
-
Дальше - в личку.
-
Добрый день!
Новый или использовался?
Возьму.
Лед светильник 70Вт. для DMS 500PL (72л.)
в Самодельные LED светильники
Опубликовано
Алекс!
Спасибо за подсказку:
if ( ( millis() % 1000 ) == 0 ) //вызов раз в секунду, читаем температуру и обновляем экран
{
Temp_read(); //читаем температуру
Screen_out(); //обновляем экран
}
В итоге сделал отдельный блок для температуры и датчиков, все нормально работает!!!!
Basopotam
Для i2c использовалась такая шняга? http://www.ebay.com/...=item4d05d53c27
Нет. По i2c подключил так - http://jt5.ru/examples/oled-i2c/
Там все расписано.