Датчик температуры DS18B20 с гидроизоляцией

lex0r
Offline
Зарегистрирован: 09.01.2016

Появился вопрос по сабжу.

Проект  - контроллер аквариума. Использую Uno R3, экран 16х2 + i2c, релле на 2 выхода и собственно сам датчик DS18B20. На этапе макетирования все работало, температуру меряло, выводило на экран.

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

П.С. начинающий ардуинщик, опыта мало.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

А можно фото датчика?

bankir_1986
Offline
Зарегистрирован: 23.03.2015

Проверь герметичность датчика. Срежь термоусадку и посмотри, может там вода.

a5021
Offline
Зарегистрирован: 07.07.2013

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

lex0r
Offline
Зарегистрирован: 09.01.2016

Сам Датчик

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

temenator
Offline
Зарегистрирован: 26.12.2015

Срезать сразу термоусадку, герметик и обратно ставить.

Приятель просто голый даллас залил герметиком.

Пару лет уже работает в аквариуме.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

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

 
lex0r
Offline
Зарегистрирован: 09.01.2016

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

И кстати напомнило:

Силикон бывает нейтральный и уксусный.
Сначала заливал нейтральным, потом решил проверить уксусный.
Щупы мультика в незатвердевшем  уксусном силиконе на пределе 20 Мегаом показывали обрыв,
что было довольно неожиданно с учётом запаха уксуса вокруг.

Пошёл дальше, стал заливать кислотным платы блока питания камер для пробы:
трансформатор 220-15 ас,  4  диода, кондёры 2000.0, 7812, всё на платке
и этим-же силиконом залито  в заднюю часть хаузинга камер
Залито основательно чтобы не отваливались провода при их дёргании( глю-ган не держит-плавится летом)
Сделано было штук 100-200 за много лет, 10-15 лет назад,
все блоки питания до сих пор живы.
Правда не все камеры...

Та что теперь спокойно отношусь к  кислотному силикону и считаю его вполне " электротехническим"
То есть даже неплохим изолятором ( 220 на первичке тех трансформаторов)
Кстати для пробы подавал 220  сразу после заливки, никаких проблем.
И никакой коррозии не видел ( иногда приносили хаузинги на ремонт)

А у  кого-то есть отрицательный опыт применения кислотного силикона в "изоляции" электротехники ?

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

trembo пишет:

А у  кого-то есть отрицательный опыт применения кислотного силикона в "изоляции" электротехники ?

у меня есть - медные провода зеленеют.

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я так и думал.... А пайки оставались даже блестящими

temenator
Offline
Зарегистрирован: 26.12.2015

Есть двухкомпонентный.

Приятель брал где то однокомпонетный нетральный как краска.

Alexino
Offline
Зарегистрирован: 29.12.2015

Всё намного проще. Вода добавляет ёмкость на линии. Получается, что тупо заваливаются фронты импульсов. Отсюда и глюки.
Это единственный вариант, объясняющий это явление.
Ищите проблему в софте.

Для эксперимента, можете подобавлять ёмкости, величной начиная от 1н и выше, между выводом данных и землёй (или питанием). Получите такой же эффект.

a5021
Offline
Зарегистрирован: 07.07.2013

Одну ногу емкость линии отгрызла. Вода ни при чем. Ага.

Alexino
Offline
Зарегистрирован: 29.12.2015

Что ? Вы про какую ногу говорите ?
У человека, при погружении датчика в воду, появляются проблемы с измерением. Это ёмкость влияет.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Alexino, ни у кого не влияет, а у него влияет? Разве что у него в воду фаза 220вольт опущена, тогда будет влиять :))

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

А  кабель на металлический стакан не течёт ?
Ёмкости там от силы пару сотен пик от воды добавится.

резистор проверьте или поставьте раза в 2 поменьше.

Alexino
Offline
Зарегистрирован: 29.12.2015

dimax пишет:

Alexino, ни у кого не влияет, а у него влияет? Разве что у него в воду фаза 220вольт опущена, тогда будет влиять :))

Значит ни у кого нет софтовых проблем, а у него есть.
Вы уверены, что у него реалзиция 1-Wire идеальная ? Я, например, нет. Я даже больше скажу - у него проблема с реализацией интерфейса. Тупо не выдержаны временные интервалы для тайм-слотов.
Вы просто не встречались с ситцациями, при которых датчик наинает лагать даже при 2ух-3ёх-метровом проводе, при этом отлино работая на проводе < 1 метра. И это всё - последствия незнания интерфейса с которым работаешь.
И фаза тут совсем не при чём, я не о наводках говорю, а о ёмкости воды, которая, кстати, не такая уж и маленькая.

PS: Для эксперемента, повесьте ёмкость в 0.01-0.1 мкф, при сопротивлении подтяжки даже в 1к - рубль за сто даю, Ваш термометр загнётся...

А вот совет по уменьшению сопротивления - в точку.

lex0r
Offline
Зарегистрирован: 09.01.2016
#include <OneWire.h>                                //Подключаем библиотеку для использования однопроводного интерфейса 
                                                    //Температурного датчика DS18B20
#include <Wire.h>                                   //Подключаем библиотеку для использования I2C интерфейса с модулем RTC 
                                                    //И модуля ЖК дисплея 16Х2, который также испольует I2C
                                                    
#include <LiquidCrystal_I2C.h>                      //Подключаем библиотеку для Модуля ЖК дисплея 16Х2 
#include <RTClib.h>                                 //Подключаем библиотеку для использования модуля часов реального времени RTC
//---------------------------------------------------
int TSensorPin = 11;                                //Определяем порт шины OneWire (IC) для температурного датчика DS18B20
OneWire ds(TSensorPin);                             //Создаем соответсвующий объект  
LiquidCrystal_I2C lcd(0x27,16,2);                   //Устанавливаем I2С адрес ЖК-дисплея = 0x27. Это данные из документации на I2C модуль на дисплее
RTC_DS1307 RTC;                                     //Создаем переменную класса - для использования RTC
//----------Объявляем разные переменные--------------
const int RelayChn1 = 4;                            //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
const int RelayChn2 = 8;                            //Используем цифровой ПОРТ 7 для ВТОРОГО канала релейного модуля
const int RelayChn3 = 9;                            //Используем цифровой ПОРТ 8 для ТРЕТЬЕГО канала релейного модуля
 
//----------Настройки времени и продолжительности включения реле
//----------ПЕРВЫЙ канал----------------------------
const long StartRelCn_1 = 5900;                     //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток) 
                                                     //в данном случае 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;                        //ДЛИТЕЛЬНОСТЬ срабатывания реле во ВТОРОМ канале (в секундах) 
//----------ТРЕТИЙ КАНАЛ----------------------------
float t0 = 30.5;                                     //Уставка температуры для ТРЕТЬЕГО канала релейного модуля 
float tGistrsis = 0.7;                               //Уставка гистерезиса - т.е отклонения от темп-ры уставки
                                                     //т.е. в данном случае 0,7 = плюс минус 0,35 градуса
 
//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях) 
void setup(){
  
   digitalWrite(TSensorPin,HIGH); 
    pinMode(RelayChn1,OUTPUT);                       //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
    pinMode(RelayChn2,OUTPUT);                       //Инициализируем порт для ВТОРОГО канала как ВЫХОД   
    pinMode(RelayChn3,OUTPUT);                       //Инициализируем порт для ТРЕТЬЕГО канала как ВЫХОД   
 
    digitalWrite(RelayChn1,HIGH);                    //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень 
    digitalWrite(RelayChn2,HIGH);                    //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой 
    digitalWrite(RelayChn3,HIGH);                    //   
 
    Wire.begin();                                    //Инициируем I2C интерфейс
    RTC.begin();                                     //Инициирум RTC модуль
 
    lcd.init();                                      //Инициализируем ЖК дисплей 
    lcd.setBacklight(1);                             //Включаем на ЖК дисплее подсветку
//    RTC.adjust(DateTime(__DATE__, __TIME__));      //С этой строки необходимо убрать комментарии один раз в начале, 
                                                     //для того, чтобы загрузить в RTC дату и время на момент компиляции программы  
                                                     //Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки 
                                                     //времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!
 
//----------Подготавливаем экран ЖК дисплея - выводим на него статичные поля
    lcd.clear();
    lcd.setCursor(9, 0);
    lcd.print("t=");
    lcd.setCursor(0, 1);
    lcd.print("R1=0");
    lcd.setCursor(5, 1);
    lcd.print("R2=0");
    lcd.setCursor(10, 1);
    lcd.print("R3=0");
 
}                                                    // КОНЕЦ ИНИЦИАЛИЗАЦИИ
//--------------------------------------------------
void loop()                                          // ПРОГРАММЫй безусловный ЦИКЛ 
{
    DateTime myTime = RTC.now();                     //Читаем данные времени из RTC   
 
    //---------Вывод часов на ЖК--------------------
    lcd.setCursor(0, 0);                             //Перемещаем курсор ЖК дисплея в первую строку в 5-ю позицию
    if (myTime.hour() < 10) lcd.print ("0");         //так дополняются лидирующие нули - когда есть необходимость
    lcd.print(myTime.hour());                        //Выводим значение ЧАСОВ               
    lcd.print(':');                                  //Выводим символ разделителя (:) 
    if (myTime.minute() < 10) lcd.print ("0");    
    lcd.print(myTime.minute());                      //Выводим значение МИНУТ 
    lcd.print(':');                                  //Выводим символ разделителя (:) 
    if (myTime.second() < 10) lcd.print ("0");
    lcd.print(myTime.second());                      //Выводим значение СУЕКУНД
 
    //----------Раздел обработки реле по времени ----
    long utime = myTime.unixtime();                  //сохраняем время в формате UNIX
    utime %= 86400;                                  //Сохраняем в переменной остаток деления на кол-во секнд в сутках, 
                                                     //Это дает количество секунд с начала текущих суток
 
    //------------КАНАЛ 1------------------------------
    if ((utime >= StartRelCn_1) && 
       (utime < (StartRelCn_1+DurationCh_1)))
                                                     //Если секунд с начала суток больше, чем задано для включения 
                                                     //Но, одновременно и меньше, чем задано для включения + длительность 
      {
          digitalWrite(RelayChn1,LOW);               //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
         lcd.setCursor(3, 1);
         lcd.print("1");
      }  
    else
      {
          digitalWrite(RelayChn1,HIGH);              //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
          lcd.setCursor(3, 1);
          lcd.print("0");
      } 
 
    //------------КАНАЛ 2 - все аналогично -----------
    if ((utime >= StartRelCn_2) && 
       (utime < (StartRelCn_2+DurationCh_2)))
      {
        digitalWrite(RelayChn2,LOW);                 //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
        lcd.setCursor(8, 1);
        lcd.print("1");
      }  
    else
      {
          digitalWrite(RelayChn2,HIGH);              //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
          lcd.setCursor(8, 1);
          lcd.print("0");
      } 
    //----------Вывод температуры на ЖК--------------
    float temp = getTemp();                          //Читаем температуру с датчика 
    lcd.setCursor(11, 0);                            //Выводим температуру на ЖК
    lcd.print(temp);
    //------------КАНАЛ 3 Контроль температуры -------
    if (temp < t0-tGistrsis/2)
      {
        digitalWrite(RelayChn3,LOW);                 //Устанавливаем на ТРЕТЬЕМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
        lcd.setCursor(13, 1);
        lcd.print("1");
      }     
    else if (temp > t0+tGistrsis/2)
      {
        digitalWrite(RelayChn3,HIGH);                //Устанавливаем на ТРЕТЬЕМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
        lcd.setCursor(13, 1);
        lcd.print("0");
      }     
      
 
 
}
//------------Конец ЦИКЛА-----------------------------
//*****************************************************
 
//-------------Объявления и реализация функций---------
float getTemp(){                                       //функция чтения значения температуры с датчика DS18B20 по шине OneWire
    byte data[12];
    byte addr[8];
 
    if ( !ds.search(addr)) {
        //no more sensors on chain, reset search
        lcd.setCursor(0, 0);
        lcd.print("NO more addrss!");
 
        ds.reset_search();
        return -1001;
     }
 
    if ( OneWire::crc8( addr, 7) != addr[7]) {
          lcd.setCursor(0, 0);
          lcd.print("CRC is not valid!");
 
        return -1002;
    }
 
    if ( addr[0] != 0x10 && addr[0] != 0x28) {
          lcd.setCursor(0, 0);
          lcd.print("NOT recognizd!");
 
        return -1003;
    }
 
    ds.reset();
    ds.select(addr);
    ds.write(0x44,1); 
 
    byte present = ds.reset();
    ds.select(addr); 
    ds.write(0xBE); 
 
 
    for (int i = 0; i < 9; i++) { 
        data[i] = ds.read();
    }
 
    ds.reset_search();
 
    byte MSB = data[1];
    byte LSB = data[0];
 
    float TRead = ((MSB<<8) | LSB); 
    float Temperature = TRead / 16;
 
    return Temperature;
}

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

Alexino
Offline
Зарегистрирован: 29.12.2015

А где задержка между началом преобразования и чтением температуры ? 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Измерял ёмкость кабеля  в моей сети из пятидесяти одного датчика.
7000 пик было максимум.
7 хвостов в разные стороны. 50- 100  метров.
Половина по правилам, датчики сидят последовательно.
Некоторые со звездой на конце, из одной точки 3-4  по сторонам 20-30 метров
Каждый хвост к своему пину.
Резисторы 1к8, питание каждого хвоста 78L05,
кондёр по питанию не помню, 1000.0 или 2000.0, что под руку попалось.
При токе с десяток миллиамер не важно.
Всё работает уже давно  и без глюков.
Изредка CRC можно увидеть, но это судьба такая.
Так что думайте......

Сегодняшний скриншот:
Вторая цифра- номер канала. A0-A7 на мега 256

lex0r
Offline
Зарегистрирован: 09.01.2016

Разве она нужна ? Если что код не мой.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Если не сделать паузу после StartConvrersion и ReadScratcpad более 0,75 секунды ( на 12- разрядах)
то вы считаете предыдущее преобразование.

Кстати, а кто вам мешает проверить датчик простым примером из библиотеки?
Там софтом  всё в порядке

Alexino
Offline
Зарегистрирован: 29.12.2015

trembo пишет:

Всё работает уже давно  и без глюков.
Изредка CRC можно увидеть, но это судьба такая.
Уважаемый, повторюсь и для Вас. То, что работает у Вас давно и без глюков - Ваша заслуга. У меня тоже всё работает идеально.
Но есть варианты, когда не будет работать даже с 5-тью метрами провода - этой ёмкости будет достаточно, чтобы завалить фронты на столько, что плохо-реализованный интерфейс будет давать знать о себе.
По данному примеру сказать ничего не могу, ибо вся реализация спрятана в библиотеку. И компильнуть код не могу, в надежде на то, что библиотека стандартная, ругается на OneWire.h Но могу сказать точно - причина у ТС в ёмкости, возникающей при опускании датчика с проводом в воду. И с вероятностью в 99.9% уменьшение сопротивления подтяжки его спасёт, это основы электроники (RC-цепь). Остальные 0.1% - исправление его собственной программы.

lex0r
Offline
Зарегистрирован: 09.01.2016

Итог: поставил 4.7 кОМ как советуют к этому датчику, 2кОм, 1 кОм ничего не поменялось, при погружении на 30 см начинаются глюки

П.С. к работающему контроллеру подцепил запасно датчик, все на нем проводил.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

lex0r, ну возьмите уже отдельную 3х литровую банку, и протестируйте на ней. В #15 я конечно пошутил, но нужно точно убедиться, что нет привязки к конкретному аквариуму.

lex0r
Offline
Зарегистрирован: 09.01.2016

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

lex0r, ну вот, уже что-то. Разбирайтесь, нам отсюда не виден ваш аквариум. Как это не смешно, но наиболее вероятная причина -переменный ток в воде :)

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

 Да , и на время эксперимента уберите электрического ската из аквариума.

lex0r
Offline
Зарегистрирован: 09.01.2016

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

orcsin
Offline
Зарегистрирован: 12.06.2015

У меня с подобным реле тоже глюки, НАНО начинает малость бредить :(

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

lex0r
Offline
Зарегистрирован: 09.01.2016

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

Alexino
Offline
Зарегистрирован: 29.12.2015

lex0r, Вы задержку после команды преобразования поставили ?

И ещё, ошибки CRC пишет ? Или просто начинает врать температуру ?
Опишите подробнее симптомы.

lex0r
Offline
Зарегистрирован: 09.01.2016

Честно говоря не понял где задержку поставить

179     for (int i = 0; i < 9; i++) {
180

        data[i] = ds.read();

 

Перед этими строками? и задержку функцией delay ставить ? 

Ошибку пишет эту, нет датчика в цепи

 if ( !ds.search(addr)) {
148         //no more sensors on chain, reset search
149         lcd.setCursor(0, 0);
150         lcd.print("NO more addrss!");
151  
152         ds.reset_search();
153         return -1001;

 

Alexino
Offline
Зарегистрирован: 29.12.2015
float getTemp(){                                       //функция чтения значения температуры с датчика DS18B20 по шине OneWire
    byte data[12];
    byte addr[8];
 
    if ( !ds.search(addr)) {
        //no more sensors on chain, reset search
        lcd.setCursor(0, 0);
        lcd.print("NO more addrss!");
 
        ds.reset_search();
        return -1001;
     }
    ds.reset_search();
 
    if ( OneWire::crc8( addr, 7) != addr[7]) {
          lcd.setCursor(0, 0);
          lcd.print("CRC is not valid!");
 
        return -1002;
    }
 
    if ( addr[0] != 0x10 && addr[0] != 0x28) {
          lcd.setCursor(0, 0);
          lcd.print("NOT recognizd!");
 
        return -1003;
    }
 
    ds.reset();
    ds.select(addr);
    ds.write(0x44,1); 

    delay(1000);
 
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); 
 
 
    for (int i = 0; i < 9; i++) { 
        data[i] = ds.read();
    }
 
    byte MSB = data[1];
    byte LSB = data[0];
 
    float TRead = ((MSB<<8) | LSB); 
    float Temperature = TRead / 16;
 
    return Temperature;
}

 

Alexino
Offline
Зарегистрирован: 29.12.2015

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

lex0r
Offline
Зарегистрирован: 09.01.2016

Будет повешан еще 1 датчик для измерения температуры воздуха на тот же канал

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

dimax пишет:

lex0r, ну вот, уже что-то. Разбирайтесь, нам отсюда не виден ваш аквариум. Как это не смешно, но наиболее вероятная причина -переменный ток в воде :)

Похоже.
Выньте все приборы которые опущены в воду. Особенно нагреватели.
Короче сделайте из аквариума макет 3-ёх литровой банки.
Если аквариум имеет металлический каркас- соедините с землёй Ардуины.
Попробуйте запитать плату с датчиком от батареек.

lex0r
Offline
Зарегистрирован: 09.01.2016

Эм если читали тему, то все дело в релле, которое наводки дикие создает

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

lex0r, вы не все детали проговариваете. Какие-то вновь вспывающие факты начинают противоречить предыдущим. Например сначала вы писали, что глюк появляется только опуская датчик в воду, а вынимая обратно всё ок. Но ведь как я понимаю провода к реле подключены были и в том и в другом случае, и экперемент отличался только местополодением датчика. Выходит что-то ещё было изменено? Вы отсоединяли реле, когда вынимали датчик?

lex0r
Offline
Зарегистрирован: 09.01.2016

Никакого противоречия

Собрал устройство с релле на две нагрузки + ртс часы + датчик температуры с гидроизоляцией.

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

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

Потом отключил полностью релле от ардуины, опустил в аквариум датчик, датчик работает нормально.

готов записать видео всех моих действий вечером, после работы

Alexino
Offline
Зарегистрирован: 29.12.2015

lex0r, Вы задержку поставили после преобразования ? Она обязательна ! Как после её установки ведёт себя устройство ? 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Опустите датчик в воду. При всё отключено работает?  Вы пишите "работает"

Включайте ваши нагрузки по одной, но напрямую в розетки. Датчик после этого работает?
Кстати у вас 5-ти Вольтовые реле.
Откуда они питаются? ( там на плате есть синяя  перемычка)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

lex0r пишет:

 выключит нагрузки на релле из сети (свет для аквариума) глюки пропали.

Ну а почему в моём сообщении #31 вы с чем-то несогласны? Значит утечка тока идёт через свет в аквариуме. Стало быть моё сообщение #15 было пророческим.  Как у вас организован свет, где находятся лампочки физически?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Похоже на это, хотя для утечки от света
необходим замкнутый контур для прохождения этого тока, а у нас его нет ;(
Да и что с того что даже по земле аквариум-Ардуина течёт небольшой ток ( через кондёры фильтров лампы и блока питания)
Не может он создать что-то  критическое.
У нас земля Ардуины ,  датчика  и  реле жёстко связаны, а земля  реле возможно даже развязана оптронами .
Создать разность потенциалов на участке проводника нужен "реальный" и не маленький ток.

lex0r
Offline
Зарегистрирован: 09.01.2016

Свет у меня на люминесцентных лампах с электрическими пускателями, сами лампы закреплены на пластике, с водой вообще никак не соприкасаются, исключаю вариант с утечками, аквариум без металлокаркаса абсолютно, вечером покажу все на видео

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

lex0r пишет:

Свет у меня на люминесцентных лампах с электрическими пускателями...

Вот так, под пытками, правда и открывается. :)) При работающих лампах извлеките стартер из той, которая дает помехи.

Если сразу не помогло, то проверьте комбинации лампа-стартер-реле и выясните, что именно дает помеху. ЛДС вообще источник повышенных помех, неисправные стартеры к ним - особо злостных помех, плюс некачественный контакт питания (реле) это вообще - гремучая смесь.

lex0r
Offline
Зарегистрирован: 09.01.2016

С ЭПРА проблем не было, работают пол года, тогда у меня возникает вопрос ЭПРА убран далеко, помехи идут через управляющие провода на реллешке ?

https://www.youtube.com/watch?v=wEnxOfqAWRU   видео не полное к сожалению, как оказалось, когда закончили съемки, моя благоверная перепутала продолжение съемки со стопами, завтра дубль 2 сделаем )

Alexino
Offline
Зарегистрирован: 29.12.2015

Цитата:

Автор ограничил доступ к видео.
Сожалеем об этом.

lex0r
Offline
Зарегистрирован: 09.01.2016

Открыл доступ.