С маской разобрался (не понадобилась, обошел вопрос).
И снова непонятка. Друзья, подскажите...
Простой скетч считывания данных с 4 датчиков ds18b20:
---
#include <oneWire.h>
#include <dallasTemperature.h>
OneWire oneWire(23);
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(115200);
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
int temp0=10*(sensors.getTempCByIndex(0));
int temp1=10*(sensors.getTempCByIndex(1));
int temp2=10*(sensors.getTempCByIndex(2));
int temp3=10*(sensors.getTempCByIndex(3));
Serial.print(temp0);
Serial.print("-");
Serial.print(temp1);
Serial.print("-");
Serial.print(temp2);
Serial.print("-");
Serial.println(temp3);
delay(1000);
}
---
Считывает, выбрасывает в порт то, что хочу. НО! Если отключить один из датчиков, то показывает
последнее значение измеренной температуры, а не нули или еще что-то, указывающее на отсутствие датчика.
А мне надо отследить неподключенный или неисправный датчик или обрыв провода.
Где капкан?
Заранее спасибо!
Доступная автоматика HelloDistiller на Ардуино Мега 2560
Sonologist
Профессор
Москва
2.6K 888

Отв.10020 21 Авг. 18, 06:46
Отв.10021 21 Авг. 18, 09:29
есть ли какая-то защита от пробоя симистора и выдачи полной мощности на ТЭН?Andrey_S, 20 Авг. 18, 21:44Датчик ТСА. Но я в скетче убавил температуру срабатывания. 60°С слишком много.
Andrey_S
Кандидат наук
Москва
341 39

Датчик ТСА. Но я в скетче убавил температуру срабатывания. 60°С слишком много.SA1348, 21 Авг. 18, 09:29Если симистор пробьется, датчик ТСА не поможет. Вариант только услышать звуковой сигнал...
Отв.10023 21 Авг. 18, 10:48 (через 54 мин)
Andrey_S, Чем не поможет? Собирай полноценную схему с отключением УЗО. УЗо выбьет, подача напряжения на симистор прекратиться. Других вариантов защиты нет.
Добавлено через 33мин.:
Sonologist,
Добавь проверку датчиков
А лучше используй только библиотеку OneWire без dallas. Там в цикле перед каждым опросом делаешь сброс датчиков.
Добавлено через 33мин.:
Sonologist,
Добавь проверку датчиков
if (!sensors.getAddress(Thermometer1, 0)) Serial.println("Не найден адрес датчика 0");
if (!sensors.getAddress(Thermometer2, 1)) Serial.println("Не найден адрес датчика 1");
if (!sensors.getAddress(Thermometer3, 2)) Serial.println("Не найден адрес датчика 2");
if (!sensors.getAddress(Thermometer1, 3)) Serial.println("Не найден адрес датчика 3");
А лучше используй только библиотеку OneWire без dallas. Там в цикле перед каждым опросом делаешь сброс датчиков.
Andrey_S
Кандидат наук
Москва
341 39

Собирай полноценную схему с отключением УЗО. УЗо выбьет, подача напряжения на симистор прекратиться. Других вариантов защиты нетSA1348, 21 Авг. 18, 10:48Все предельно ясно, спасибо. Именно об этом я и догадывался. Пока покатаю простую схему, со временем, может, руки дойдут до сложной.
Sonologist
Профессор
Москва
2.6K 888

Отв.10025 21 Авг. 18, 12:25 (через 24 мин)
А лучше используй только библиотеку OneWire без dallas. Там в цикле перед каждым опросом делаешь сброс датчиков.SA1348, 21 Авг. 18, 10:48Спасибо, попробую и так и так. Но, судя по публикациям в Сети без Далласа предпочтительнее.
smk787
Магистр
Семикаракорск
229 44
Отв.10026 21 Авг. 18, 18:00
Все предельно ясно, спасибо. Именно об этом я и догадывался. Пока покатаю простую схему, со временем, может, руки дойдут до сложной.Andrey_S, 21 Авг. 18, 12:02Все было бы хорошо... но по какой-то причине, при пробое симистра и достижении заданной температуры дистиляции, автоматика не всегда отключает дифавтомат,- это раз. И эту проблему не так давно обсуждали, но максим в обсуждении участия не принял. И второе, если пробой произойдет при ректификации, то сначала затопит колонну а только когда горячий спирт начнет вытекать из тса произойдет отключение. Я вижу решение этой проблемы через контроль силы тока на тэне, конечно при наличии датчика тока. Если на ректификации ток больше заданного то - авария. Если на дистиляции при достижении конечной температуры ток не упал- опять аврийное отключение через дифавтомат.
dimato
Кандидат наук
Волгоград
417 182

Отв.10027 21 Авг. 18, 18:23 (через 23 мин)
Я вижу решение этой проблемы через контроль силы тока на тэне, конечно при наличии датчика тока. Если на ректификации ток больше заданного то - авария. Если на дистиляции при достижении конечной температуры ток не упал- опять аврийное отключение через дифавтомат.smk787, 21 Авг. 18, 18:00Полностью поддерживаю только кто бы изменил скетч.
И второе, если пробой произойдет при ректификации, то сначала затопит колонну а только когда горячий спирт начнет вытекать из тса произойдет отключениеsmk787, 21 Авг. 18, 18:00Здесь на много раньше сигнализирует датчик давления. У меня был пробой семистора, автоматика запищала а выброса в тса не было. Может то-же стоит завязать датчик давления с дифавтоматом.
Shinanai
Кандидат наук
Иваново
480 78
Отв.10028 21 Авг. 18, 22:09
Коллеги, а есть ли какая-то защита от пробоя симистора и выдачи полной мощности на ТЭН? Мандраж какой-то меня одолевает на ночь оставлять мой ректификационный станок...Andrey_S, 20 Авг. 18, 21:44самое простое и надёжное поставить защиту с использованием магнитного пускателя. В цепь управления пускателя установить KSDI-60 60*C 5А, располагать их на тса и в нужных местах контроля. KSDI-60 60*C 5А нужны размыкающие при 60 градусах, есть замыкающие при 60.
Узо крайне не надёжная вещь.
smk787
Магистр
Семикаракорск
229 44
Отв.10029 22 Авг. 18, 02:16
самое простое и надёжное поставить защиту с использованием магнитного пускателя. В цепь управления пускателя установить KSDI-60 60*C 5А, располагать их на тса и в нужных местах контроля. KSDI-60 60*C 5А нужны размыкающие при 60 градусах, есть замыкающие при 60.И в каком таком месте его прилепить на дистиляции?
Узо крайне не надёжная вещь.Shinanai, 21 Авг. 18, 22:09
Отв.10030 22 Авг. 18, 07:39
smk787, На выходе продукта из дистиллятора. Так же хорошо помогает при отключении воды. 60°С многовато будет.
Shinanai
Кандидат наук
Иваново
480 78

Можно и поменьше. Я на тса 60 поставил. Попробовал воду выключить, сработало очень быстро.
Только их плотно крепить нужно к трубкам, хомут самое то. С наружи тепло изоляцией мотануть.
Только их плотно крепить нужно к трубкам, хомут самое то. С наружи тепло изоляцией мотануть.
smk787
Магистр
Семикаракорск
229 44
Отв.10032 22 Авг. 18, 10:59
smk787, На выходе продукта из дистиллятора. Так же хорошо помогает при отключении воды. 60°С многовато будет.SA1348, 22 Авг. 18, 07:39Ну о чем вы, любезнейший?! в кубе 95, должен быть стоп, симистр пробило, воду не отключили, вы спите или нет долгое время рядом. Температура в кубе растет, дистиляция идет... идет... и идет и будет идти пока тэн не оголится и не сгорит. а Тса и выход продукта будет холодной.
Отв.10033 22 Авг. 18, 11:42 (через 43 мин)
Ну о чем вы, любезнейший?!smk787, 22 Авг. 18, 10:59Да, запамятовал, сам же поднимал первым этот вопрос, про отключении при превышении температуры в кубе. Но ответа так и не было.
Пользую сейчас своей, другой автоматикой.
Mim
Кандидат наук
Ульяновск
438 71


любезнейшийsmk787, 22 Авг. 18, 10:59не знаю, у меня Тен на 3 кВт природной нагрузке вырубает тса, при включенной воде. Правда пользуюсь автономкой
smk787
Магистр
Семикаракорск
229 44
Отв.10035 22 Авг. 18, 13:01 (через 37 мин)
не знаю, у меня Тен на 3 кВт природной нагрузке вырубает тса, при включенной воде. Правда пользуюсь автономкойMim, 22 Авг. 18, 12:25ну значит вам это и не надо.
Добавлено через 5мин.:
Опять уходим от темы. Вопрос нестабильного отключения диф автомата по окончании процесса так и стался открытым. Думаю что контроль по силе тока за состоянием симистра тоже правильное решение, что для дистиляции, что для ректификации. Макс, поможешь? и ты еще как то обещал сделать в общедоступном скетче возможность назначения ДТ...
msg31
Научный сотрудник
Барнаул
4.6K 2.5K

Отв.10036 22 Авг. 18, 13:15 (через 14 мин)
Макс, поможешь? и ты еще как то обещал сделать в общедоступном скетче возможность назначения ДТ...smk787, 22 Авг. 18, 13:01Мне бы кто помог макросы поставить, которые строки во флеш память запихивают.
То есть вместо
sprintf(lcd_buffer,"Temp %i",(int)2); //запись в буфер текста и значений температуры в подготовленном
Поставить
sprintf(lcd_buffer,String(F("Temp %i" ) ).c_str(),(int)2); //запись в буфер текста и значений температуры в подготовленном
Это надо везде в функции
void DisplayData()
сделать.
Самому времени не хватает на столь кропотливую работу.
Я бы сделал тогда и датчик давления и назначения температуры. А сейчас памяти не хватает.
Shinanai
Кандидат наук
Иваново
480 78

Ну о чем вы, любезнейший?! в кубе 95, должен быть стоп, симистр пробило, воду не отключили, вы спите или нет долгое время рядом. Температура в кубе растет, дистиляция идет... идет... и идет и будет идти пока тэн не оголится и не сгорит. а Тса и выход продукта будет холодной.smk787, 22 Авг. 18, 10:59Можно в цепь контроля поставить KSDI-95 95*C 5А непосредственно на куб. Контроль тока пока не доступен, а термостаты по 30р за штуку купить не проблема.
Существуют надежные семисторы по адекватной цене?
сообщения удалены (2)
Phisik
Куратор
Екатеринбург
706 1.5K
Отв.10038 23 Авг. 18, 08:12
Обновление HelloDistiller v3.80 и новая прошивка для ESP8266
Выкладываю все "как есть". Инструкции к прошивке ESP пока нет, но я надеюсь что разобраться будет не сложно.
Возможно постепенно буду дополнять это сообщение полезной информацией.
2. Поправил номера датчиков температуры TEMP_KUB/TEMP_RK20/TEMP_TSA по всему скетчу, теперь просто, меняя эти переменные в settings.h, можно менять местами датчики. Старый способ убрал.
3. Добавил изменение Т стабилизации при ректификации (ADJUST_COLUMN_STAB_TEMP), если она час не меняется, чтобы учесть изменения атмосферного давление
4. Сильно переписал код MQTT. Работа с портом теперь полностью асинхронная, как на прием, так и на передачу. PROGMEM используется напрямую с помощью strncmp_P(). В итоге стабильная скорость работы у меня достигает 500000 бод. Выше не тестировал, пробуйте.
5. Добавил пинг-понг по uart. Если обмена нет порт переинициализируется. Теперь можно в любой момент подключать/отключать esp. (К сожалению, это тоже не всегда помогает, как оказалось)
6. Добавил I2C экран (спасибо шлем AlexDol)
7. Добавил отключение экранов и переписал алгоритм отключения пунктов меню без LAST_ITEM/FIRST_ITEM
8. Наверно еще что-нибудь исправил, а что-нибудь испортил.
Вставить в setup.cpp перед lcd.clear(); в строчке 291
Новая прошивка для ESP8266 - это мое видение удобства. Нужна ESP с 4мя мегабайтами флеша на борту, а то сайт не влазит. Я рекомендую взять nodemcu v1-3. На ней есть кнопка Flash и светодиод. Если после первого моргания светодиода зажать Flash - ESP запустится с дефолтными настройками.
2. Асинхронный MQTT клиент с поддержкой авторизации, но без SSL
3. Wifi клиент/точка доступа
4. Аутентификация (можно порт на роутере прокинуть и смотреть с внешки через интернет)
5. Графики
6. Системный лог
Внимание! Есть обновления!
Дальнейшая разработка Web UI происходит в этой теме
PS Отдельное спасибо тем, кто тестировал прошивку перед публикацией.
Вступление
Лето заканчивается, времени на тесты больше нет, поэтому начинаю выкладывать свои наработки. Как прошивка Hello Distiller, так и прошивка ESP могут содержать ошибки. Внимательно все тестируйте и не оставляйте оборудование без присмотра. Внимательно проверяйте перед прошивкой файлы pins.h & settings.h. Дважды, а лучше трижды, убедитесь что пины и настройки соответствуют вашей аппаратной конфигурации.Выкладываю все "как есть". Инструкции к прошивке ESP пока нет, но я надеюсь что разобраться будет не сложно.
Возможно постепенно буду дополнять это сообщение полезной информацией.
Основные изменения в HelloDistiller v3.80
1. Убрал esp-link, ибо отваливалась, оказалось это не только у нас.2. Поправил номера датчиков температуры TEMP_KUB/TEMP_RK20/TEMP_TSA по всему скетчу, теперь просто, меняя эти переменные в settings.h, можно менять местами датчики. Старый способ убрал.
3. Добавил изменение Т стабилизации при ректификации (ADJUST_COLUMN_STAB_TEMP), если она час не меняется, чтобы учесть изменения атмосферного давление
4. Сильно переписал код MQTT. Работа с портом теперь полностью асинхронная, как на прием, так и на передачу. PROGMEM используется напрямую с помощью strncmp_P(). В итоге стабильная скорость работы у меня достигает 500000 бод. Выше не тестировал, пробуйте.
5. Добавил пинг-понг по uart. Если обмена нет порт переинициализируется. Теперь можно в любой момент подключать/отключать esp. (К сожалению, это тоже не всегда помогает, как оказалось)
6. Добавил I2C экран (спасибо шлем AlexDol)
7. Добавил отключение экранов и переписал алгоритм отключения пунктов меню без LAST_ITEM/FIRST_ITEM
8. Наверно еще что-нибудь исправил, а что-нибудь испортил.
Как вернуть сортировку датчиков DS18B20
Добавить в конец settings.h#define NEED_DS18B20_PRESET 1
#if NEED_DS18B20_PRESET
// Added by Phisik on 2017-08-16
// Ниже мы займемся сортировкой датчиков DS18B20, если датчики зафиксированы и никак их не поменять местами.
// Если у вас 1 комплект оборудования, то можно поменять выше TEMP_KUB/TEMP_RK20/TEMP_TSA и не включать сортировку.
// Если комплектов оборудования несколько, то придется сортировать
// Количество пресетов для датчиков, по ним потом будет сортировать те, что найдем
// Тут надо указать сколько у вас наборов
#define DS18B20_PRESET_NUM 2
// В этой переменной хранятся адреса нужных нам датчиков
// Я оставил здесь свои номера, вы ставьте свои.
// Адреса надо предварительно получить сканнером. Брать его в примерах File->Example->OneWire->ds18x20_temperature,
// здесь https://www.pjrc.com/teensy/td_libs_OneWire.html или искать мои сообщения на HomeDistillers.
// Меняем пин OneWire на 37 - (OneWire ds(37);), заливаем его на наш контроллер и топаем к колонне.
// Числа должны быть в шестнадцатеричной системе исчисления, т.е. дописываем 0x (ноль-икс)
// к тому, что выплюнет сканнер. Смотрим пример:
// Это получено от сканера:
// ROM = 28 FF 30 6A A2 16 3 5A
// Chip = DS18B20
// Data = 1 B0 1 4B 46 7F FF C 10 9B CRC=9B
// Temperature = 27.00 Celsius, 80.60 Fahrenheit
// ROM = 28 FF D5 FB A1 16 4 5B
// Chip = DS18B20
// Data = 1 AF 1 4B 46 7F FF C 10 35 CRC=35
// Temperature = 26.94 Celsius, 80.49 Fahrenheit
// ROM = 28 FF A7 34 A2 16 5 AC
// Chip = DS18B20
// Data = 1 B1 1 4B 46 7F FF C 10 D8 CRC=D8
// Temperature = 27.06 Celsius, 80.71 Fahrenheit
// No more addresses.
// Видим 3 датчика, их адреса "ROM = x x x x x x x ", и температуру каждого,
// греем те, до которых дотянемся, выясняем какой куда приварен. Далее формируем массив адресов
// датчиков, он трехмерный, стараемcя не запутаться в скобках, помним про ноль-икс!
const unsigned char dsSensorPreset[DS18B20_PRESET_NUM][MAX_DS1820][8] = {
{ // первый набор
{0x28, 0xFF, 0x30, 0x6A, 0xA2, 0x16, 0x3, 0x5A}, // Первый датчик из первого набора
{0x28, 0xFF, 0xD5, 0xFB, 0xA1, 0x16, 0x4, 0x5B}, // Второй датчик из первого набора
{0x28, 0xFF, 0xA7, 0x34, 0xA2, 0x16, 0x5, 0xAC}, // Третий датчик из первого набора
{0,0,0,0,0,0,0,0}, // Если каких-то датчиков нет, то ставим нули
{0,0,0,0,0,0,0,0} // Запятую в конце перед фигурной скобкой не надо
},
{ // Второй набор
{0x28, 0xFF, 0x30, 0x6A, 0xA2, 0x16, 0x3, 0x5A}, // Первый датчик из второго набора
{0x28, 0xFF, 0xD5, 0xFB, 0xA1, 0x16, 0x4, 0x5B}, // Дальше я думаю все понятно...
{0x28, 0xFF, 0xA7, 0x34, 0xA2, 0x16, 0x5, 0xAC},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
} // Тут тоже без запятой
}; // dsSensorPreset[][][]
#endif
Вставить в setup.cpp перед lcd.clear(); в строчке 291
#if defined(NEED_DS18B20_PRESET) && (NEED_DS18B20_PRESET==1)
// Added by Phisik on 2017-08-16
// Сейчас мы отсортируем датчики по готовым пресетам
// Алгоритм такой, берем первый адрес из ds1820_rom_codes и перебираем все наши пресеты
// до первого совпадения, если совпадение найдено, то заполняем ds1820_rom_codes адресами
// из пресета.
// NB! фактически мы адреса не сортируем и не проверяем, а используем заданные пользователя.
// Поэтому внимательно забиваем ВСЕ адреса в пресеты, иначе работать правильно не будет!
if (DS18B20_PRESET_NUM>0) {
// Здесь будем хранить новые коды
int nPreset = -1;
for(int i=0; i<DS18B20_PRESET_NUM && nPreset==-1; i++)
for(int j=0; j<ds1820_devices && nPreset==-1; j++) {
int k = 0;
while(k<8 && ds1820_rom_codes[0][k] == dsSensorPreset[j][k])
k++; // перебираем байты адреса до первого mismatch
if(k>=8) // Если все 8 байт совпали, то сохраняем текущий номер пресета
nPreset = i;
}
// Теперь заполняем ds1820_rom_codes[][] данными из пресета
for(int j=0; j<ds1820_devices && nPreset!=-1; j++)
for(int k=0; k<8; k++)
ds1820_rom_codes[j][k] = dsSensorPreset[nPreset][j][k];
#ifdef DEBUG
sprintf_P(lcd_buffer, PSTR("Found match with %n preset for DS18B20 sensors"), nPreset);
DEBUG_SERIAL.println(lcd_buffer);
#endif
} // if (DS18B20_PRESET_NUM>0)
#endif
Новая прошивка для ESP8266 - это мое видение удобства. Нужна ESP с 4мя мегабайтами флеша на борту, а то сайт не влазит. Я рекомендую взять nodemcu v1-3. На ней есть кнопка Flash и светодиод. Если после первого моргания светодиода зажать Flash - ESP запустится с дефолтными настройками.
Что есть в прошивке для ESP8266
1. Асинхронный WEB сервер2. Асинхронный MQTT клиент с поддержкой авторизации, но без SSL
3. Wifi клиент/точка доступа
4. Аутентификация (можно порт на роутере прокинуть и смотреть с внешки через интернет)
5. Графики
6. Системный лог
Внимание! Есть обновления!
Дальнейшая разработка Web UI происходит в этой теме
PS Отдельное спасибо тем, кто тестировал прошивку перед публикацией.
сообщения удалены (7)
dim073
Новичок
Димитровград
4 1

Отв.10039 23 Авг. 18, 14:19
Детектор нуля до УЗО или после?Phisik, 23 Авг. 18, 12:37Срабатывает NO DETECT ZERO отключает узо, на экране NO DETECT ZERO. Мега запитана до УЗО, если про это речь..
сообщения удалены (13)