Перейти к контенту
МОРСКОЙ АКВАРИУМ - форум Аква Лого

Содержание Эублефары это, пожалуй, самые распространённые в культуре ящерицы, а в настоящее время они ещё и невероятно популярны. Причина этого проста – они совершенно не сложны в содержании. Эти гекконы обладают приятной внешностью и покладистым характером: легко привязываются к людям и охотно идут на контакт.
Сегодня, в век центрального отопления и тройных стеклопакетов, обогрев аквариума уже не кажется нам актуальной задачей. Но как же справлялись с этой проблемой наши предки в доэлектрическую эпоху, когда нормальная комнатная температура редко превышала 14-18 градусов?

Рекомендуемые сообщения

LC фильтр никогда не ставил, все работает и без... хотя вреда не будет.

Выносил датчики метров на 20, причем было штук пять их на одном проводе - никаких глюков.

Мое мнение - или програмные глюки, или капитально проседает напряжение при подключении вентиляторов.

Поделиться этим сообщением


Ссылка на сообщение

LC фильтр никогда не ставил, все работает и без... хотя вреда не будет.

Выносил датчики метров на 20, причем было штук пять их на одном проводе - никаких глюков.

Мое мнение - или програмные глюки, или капитально проседает напряжение при подключении вентиляторов.

 

Контролер - Ардуино. Он питается отдельно от вентиляторов. С напряжением все ОК, померял.

 

Отодвинул провода вентилятора от проводов 1Wire. Стало существенно лучше, почти совсем хорошо. Только самый дальний датчик подглючивает (один раз в минуту примерно). Можно, как советует Юрий поставить проверку в программу, но лучше бы еще что-то селать со схемой. Конденсаторы поставить можно, но уже только навесным монтажом разве что.

 

А если действително обернуть провода от датчиков фольгой (например, вытащить из ethernet кабеля и припаять к минусу? Поможет?

 

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

Изменено пользователем Just Serge (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

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

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

Подтягивающий резистор какой? 4.7к?

Поделиться этим сообщением


Ссылка на сообщение

Конденсаторы поставить можно, но уже только навесным монтажом разве что.

Ну к датчикам ведь тянется провод, там земля и +5 есть, там и можно поставить. Но если говоришь, что один глючный (а разница на 2 градуса - это глючный) то скорее всего причина в нем. Или я не так понял и просто в том месте холоднее?

Поделиться этим сообщением


Ссылка на сообщение

Датчик поменял, не помогло. На 20-30 один из двух самых дальних датчиков не отвечают.

 

А какой конденсатор лучше поставить? И где: максимально близко к контроллеру между "+" и GND?

Изменено пользователем Just Serge (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

возле контролера. Люьой, какой найдешь. 20...100мкф х 10...16в

Поделиться этим сообщением


Ссылка на сообщение

Нет, что-то конденсатор не помог. Только часы отключились...

Поделиться этим сообщением


Ссылка на сообщение

Нет тут связи между ними.

Проверяй пайку, контакты, ошибки. Или ты полярность конденсатора наоборот поставил и коротишь питание.

Поделиться этим сообщением


Ссылка на сообщение

Нет тут связи между ними.

Проверяй пайку, контакты, ошибки. Или ты полярность конденсатора наоборот поставил и коротишь питание.

 

С часами разобрался - они просто сбросились пока я паял и перемкнул контакты. Перегрузил - все ОК.

 

Полярность конденсатора правильная. Возможно, где-то глубже проблема лежит.

Поделиться этим сообщением


Ссылка на сообщение

Что за контроллер?

Откуда ты ему питание берешь, и какое?

Поделиться этим сообщением


Ссылка на сообщение

Контроллер - Ардуино. Питается от преобразователя 48/12В. Еще один такой преобразователь питает вентиляторы.

Поделиться этим сообщением


Ссылка на сообщение

Тогда не знаю.

Для эксперимента, на время укороти провода полностью (до 20-30)см и проверь что все датчики работают нормально.

 

После этого скорее всего надо ставить экранированный провод на датчики, и все три вывода (питание, земля и дата) брать с платы ардуино отдельно от всего остального. Сейчас у тебя скорее всего земля вентиляторов и земля датчиков - это один провод, я угадал?

Поделиться этим сообщением


Ссылка на сообщение

Да, земля общая, одна на всех.

 

Подглючивают как раз два самых дальних датчика.

 

Тут, в принципе, можно было бы не обращать внимания (в конце концов, датчики неправильно срабатывают только в одном случае из 20, и то только два из них), но просто я опасаюсь, что это может быть проявлением чего-то более неприятно.

 

Вот шилд. Темпертатурные датчики подключаются к метсу, обозначенному Ts.

post-8797-0-20045300-1362851562_thumb.jpg

Изменено пользователем Just Serge (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

Плата тут не причем, скорее всего. У тебя помехи идут по земляному проводу от вентиляторов.

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

Поделиться этим сообщением


Ссылка на сообщение

Сейчас земляной провод на вентиляторы и земляной провод на датчики (идут именно от выводов шилда) - это отдельные провода. Правда, не экранированные. Экран надо с землей соединить, правильно ли я понимаю? Экранировать все три, или можно начать с "даты"? Можно ли все три объединить в один экран?

Изменено пользователем Just Serge (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

Экран с землей, Попробуй общий экран на дату и питание.

Поделиться этим сообщением


Ссылка на сообщение

Провозился сегодня часа полтора, укутывая все это в фольгу и изоленту :cool2: .

Не особо помогло, зато помог перенос точки ввода проводов от вентилятора в корпус на противоположную от места ввода проводов температуры сторону. Они и раньше, в общем, не соприкасались, но теперь вообще почти замечательно: датчики (точнее, один из них) выдает одну-две ошибки на 1000 циклов (три других датчика – ноль ошибок). Причем ошибка всегда одна и та же - "-127 С".

 

Думаю, что это вполне удовлетворительный результат, спасибо всем, кто помог разобраться!

 

Кстати, если считывать температуру с разрешением 9 бит, то ошибок раза в три больше, чем при 12-бит. Наверное, что это связано с тем, что время ожидания ответа от датчика при 9-битном режиме считывания существенно меньше, чем при 12-битном. Наверное, если еще раза в полтора увеличить время ожидания (сейчас установлено 750мс в 12-бит режиме), то ошибки будут возникать еще реже.

  • Upvote 1

Поделиться этим сообщением


Ссылка на сообщение

Помехи в монтаже, это ясно.

Не уверен что ожидание уменьшит к-во ошибок. Может и некорректность в программе.

Поделиться этим сообщением


Ссылка на сообщение

Кстати, если считывать температуру с разрешением 9 бит, то ошибок раза в три больше, чем при 12-бит. Наверное, что это связано с тем, что время ожидания ответа от датчика при 9-битном режиме считывания существенно меньше, чем при 12-битном. Наверное, если еще раза в полтора увеличить время ожидания (сейчас установлено 750мс в 12-бит режиме), то ошибки будут возникать еще реже.

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

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

Второе - время ожидания 750мс - это функция ждет или как оно организовано? Если функция не возвращается 750мс, как это сделано в некоторых стандартных библиотеках, это никуда не годится. Надо одной функцией посылать всем датчикам команду на измерение температуры, и другой функцией считывать из них информацию. Причем удобно поставить их в обратном порядке - сначала считываем информацию, считали, и тут же подали команду на измерение, без каких-либо задержек. Обеспечить, чтобы этот код исполнялся не чаще 1 раза в секунду и все у вас будет работать без задержек вообще.

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

  • Upvote 1

Поделиться этим сообщением


Ссылка на сообщение

Карен, спасибо за рекомендации по софту.

 

Я пока использовал вполне стандартную библиотеку (https://github.com/milesburton/Arduino-Temperature-Control-Library) с очень незначительными изменениями.

 

750мс именно ждет (функция "delay") и это не лучшее решение, наверное. Собственно, это надо будет переделывать потихоньку.

 

Проверка CRC там, похоже, не дописана еще. Но автор библиотеки собирается это сделать когда-нибудь :)

 

Но это, наверное, можно все делать постепенно. Поскольку с железом я закончил и софт тоже худо-бедно работает, планирую с субботу подвесить эту штуку, хоть и страшновато немного :mellow:.

Поделиться этим сообщением


Ссылка на сообщение

Посмотрел библиотеку, по моему там куча лишнего, не стал разбираться.

Проверка CRC там, похоже, не дописана еще. Но автор библиотеки собирается это сделать когда-нибудь :)

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

 

 

//------------------------------------------------------------------

unsigned char DS18B20_ReadScratchPadMy(void){

unsigned char i;

unsigned char *ptr = (char*) &ds18b20; //указатель для доступа к структуре ds18b20.

unsigned char CRC = 0;

w1_write(READ_SCRATCHPAD); //Команда чтения ОЗУ DS18B20.

for(i=0; i<9; i++){ //ОЗУ DS18B20 содержит 9 байт, поэтому у нас 9 циклов.

*(ptr+i) = w1_read(); //Поочередно заполняем структуру DS18B20_ScratchPad содержанием ОЗУ датчика.

if(i < 8) //Первые 8-байт отправляем на алгоритм подсчета контрольной суммы.

CRC = CRC8My(*(ptr+i), CRC);

}

if(CRC == ds18b20.crc) return 1; //Если посчитанная МК сумма совпадает с той что была переданна 9 байтом - вернем 1.

else return 0; //Если нет, возвращаем 0.

/*

// без проверки контрольной суммы

unsigned char i;

unsigned char *ptr = (char*) &ds18b20; //указатель для доступа к структуре ds18b20.

w1_write(READ_SCRATCHPAD); //Команда чтения ОЗУ DS18B20.

for(i=0; i<9; i++){ //ОЗУ DS18B20 содержит 9 байт, поэтому у нас 9 циклов.

*(ptr+i) = w1_read(); //Поочередно заполняем структуру DS18B20_ScratchPad содержанием ОЗУ датчика.

}

return 1;

*/}

//---------------------------------------------------------------------------

unsigned char CRC8My(unsigned char val, unsigned char crc){

unsigned char i = 8;

crc ^= val;

do {

if (crc & 0x01) {

crc >>= 1;

crc ^= 0x8C;

} else { crc >>= 1; }

} while (--i);

return crc;

}

//---------------------------------------------------------------------------

Поделиться этим сообщением


Ссылка на сообщение

Карен, спасибо, все понятно! Думаю, это поможет.

 

Сергей

Поделиться этим сообщением


Ссылка на сообщение

Да, если кому-то интересно что получается по тепловому режиму.

 

Параметры такие:

 

Радиаторы низкопрофильные, 25см х 17 см х 2 см (вот такие: http://www.chipdip.r...2-250x170x20mm/).

На каждом по 24 диода (6 XML, 14 Royal Blue, 4 Blue), все запитаны на 1000 мА.

Вентилятор Skythe 120мм х 10 мм. (кажется, 2500 RPM).

Температура в комнате 24 гр. (слишком жарко на мой вкус, но жена у меня мерзнет при меньшей температуре :( )

 

После 3 часов работы температура радиаторов 37-38 гр.

Поделиться этим сообщением


Ссылка на сообщение

Подвесил я вчера сей агрегат. Даже не верится, что из затеи что-то получилось!

 

Результат меня несколько удивил в хорошем смысле. После МГ, которые не менялись года три (да и вообще аквой практически не занимался последнее время), оказалось, что мои кораллы даже имеют какие-то цвета, а не все одинаковые уныло-коричневые :cool:

 

Как уже писали на форме, лчше всего окрасились те, у кого наличествуют флуоресцирующие белки. Особенно красная монтипора, зеленые акры, зоосы. Вместе с тем, совершенно посерела кораллина, еще какие-то грибы у меня были неопределенно-филоетовые - тоже стали темно серые. Это под роялями и голубыми. При полном свете (с XML) они становятся блее заметны, но у флуоресценция, конечно, значительно уменьшается.

 

В общем со спектром надо еще поразвлекаться. Может быть, заменить 2-3 синих на красные. А может быть, и не надо.

 

Да, и с количеством диодов я переборщил, кажется. В полдень у меня XML на 700мА, RB и B - по 550, и мне кажется, что это даже перебор. Хотя, возможно, не привык просто еще. Кораллы все открытые дискомфорта не испытывают (пока).

 

Немног фоток.

 

 

post-8797-0-40897800-1363519502_thumb.jpg post-8797-0-89403700-1363519711_thumb.jpg

post-8797-0-39870800-1363519545_thumb.jpg post-8797-0-38740500-1363519583_thumb.jpg

post-8797-0-86018600-1363519618_thumb.jpg post-8797-0-03356000-1363519652_thumb.jpg

  • Upvote 1

Поделиться этим сообщением


Ссылка на сообщение

Пожалуйста, авторизуйтесь, чтобы оставить комментарий

Вы сможете оставлять комментарии после авторизации



Войти

×
×
  • Создать...