С маской разобрался (не понадобилась, обошел вопрос).
И снова непонятка. Друзья, подскажите...
Простой скетч считывания данных с 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.5K 876
![](https://cdn.homedistil.ru/th/1611/16/28194.163801.png)
Отв.10020 21 Авг. 18, 06:46
Отв.10021 21 Авг. 18, 09:29
есть ли какая-то защита от пробоя симистора и выдачи полной мощности на ТЭН?Andrey_S, 20 Авг. 18, 21:44Датчик ТСА. Но я в скетче убавил температуру срабатывания. 60°С слишком много.
Andrey_S
Кандидат наук
Москва
317 38
![](https://forum.homedistiller.ru/Themes/default/images/post/wireless.gif)
Датчик ТСА. Но я в скетче убавил температуру срабатывания. 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
Кандидат наук
Москва
317 38
![](https://forum.homedistiller.ru/Themes/default/images/post/wireless.gif)
Собирай полноценную схему с отключением УЗО. УЗо выбьет, подача напряжения на симистор прекратиться. Других вариантов защиты нетSA1348, 21 Авг. 18, 10:48Все предельно ясно, спасибо. Именно об этом я и догадывался. Пока покатаю простую схему, со временем, может, руки дойдут до сложной.
Sonologist
Профессор
Москва
2.5K 876
![](https://cdn.homedistil.ru/th/1611/16/28194.163801.png)
Отв.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
Кандидат наук
Волгоград
406 177
![](https://cdn.homedistil.ru/th/1404/10/31635.164397.jpg)
Отв.10027 21 Авг. 18, 18:23, через 23 мин
Я вижу решение этой проблемы через контроль силы тока на тэне, конечно при наличии датчика тока. Если на ректификации ток больше заданного то - авария. Если на дистиляции при достижении конечной температуры ток не упал- опять аврийное отключение через дифавтомат.smk787, 21 Авг. 18, 18:00Полностью поддерживаю только кто бы изменил скетч.
И второе, если пробой произойдет при ректификации, то сначала затопит колонну а только когда горячий спирт начнет вытекать из тса произойдет отключениеsmk787, 21 Авг. 18, 18:00Здесь на много раньше сигнализирует датчик давления. У меня был пробой семистора, автоматика запищала а выброса в тса не было. Может то-же стоит завязать датчик давления с дифавтоматом.
Shinanai
Кандидат наук
Иваново
483 80
Отв.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
Кандидат наук
Иваново
483 80
![](https://forum.homedistiller.ru/Themes/default/images/post/wireless.gif)
Можно и поменьше. Я на тса 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
Кандидат наук
Ульяновск
432 70
![](https://cdn.homedistil.ru/th/1704/14/47367.167091.jpg)
![](https://forum.homedistiller.ru/Themes/default/images/post/wireless.gif)
любезнейший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
![](https://cdn.homedistil.ru/th/2301/14/21231.368926.png)
Отв.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
Кандидат наук
Иваново
483 80
![](https://forum.homedistiller.ru/Themes/default/images/post/wireless.gif)
Ну о чем вы, любезнейший?! в кубе 95, должен быть стоп, симистр пробило, воду не отключили, вы спите или нет долгое время рядом. Температура в кубе растет, дистиляция идет... идет... и идет и будет идти пока тэн не оголится и не сгорит. а Тса и выход продукта будет холодной.smk787, 22 Авг. 18, 10:59Можно в цепь контроля поставить KSDI-95 95*C 5А непосредственно на куб. Контроль тока пока не доступен, а термостаты по 30р за штуку купить не проблема.
Существуют надежные семисторы по адекватной цене?
сообщения удалены (2)
Phisik
Куратор
Екатеринбург
666 1.4K
Отв.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
![](https://cdn.homedistil.ru/th/1801/18/55706.168444.png)
Отв.10039 23 Авг. 18, 14:19
Детектор нуля до УЗО или после?Phisik, 23 Авг. 18, 12:37Срабатывает NO DETECT ZERO отключает узо, на экране NO DETECT ZERO. Мега запитана до УЗО, если про это речь..
сообщения удалены (13)