Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Доступная автоматика HelloDistiller на Ардуино Мега 2560

Форум самогонщиков Автоматика
1 ... 499 500 501 502 503 504 505 ... 794 502
Sonologist Профессор Москва 2.5K 875
Отв.10020  21 Авг. 18, 06:46
С маской разобрался (не понадобилась, обошел вопрос).
И снова непонятка. Друзья, подскажите...
Простой скетч считывания данных с 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);
 
}
---


Считывает, выбрасывает в порт то, что хочу. НО! Если отключить один из датчиков, то показывает
последнее значение измеренной температуры, а не нули или еще что-то, указывающее на отсутствие датчика.
А мне надо отследить неподключенный или неисправный датчик или обрыв провода.
Где капкан?
Заранее спасибо!
SA1348 Профессор Саратов 3.3K 1.5K
Отв.10021  21 Авг. 18, 09:29
есть ли какая-то защита от пробоя симистора и выдачи полной мощности на ТЭН?Andrey_S, 20 Авг. 18, 21:44
Датчик ТСА. Но я в скетче убавил температуру срабатывания. 60°С слишком много.
Andrey_S Кандидат наук Москва 317 38
Отв.10022  21 Авг. 18, 09:54, через 26 мин
Датчик ТСА. Но я в скетче убавил температуру срабатывания. 60°С слишком много.SA1348, 21 Авг. 18, 09:29
Если симистор пробьется, датчик ТСА не поможет. Вариант только услышать звуковой сигнал...
SA1348 Профессор Саратов 3.3K 1.5K
Отв.10023  21 Авг. 18, 10:48, через 54 мин
Andrey_S, Чем не поможет? Собирай полноценную схему с отключением УЗО. УЗо выбьет, подача напряжения на симистор прекратиться.  Других вариантов защиты нет.

Добавлено через 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
Отв.10024  21 Авг. 18, 12:02
Собирай полноценную схему с отключением УЗО. УЗо выбьет, подача напряжения на симистор прекратиться.  Других вариантов защиты нетSA1348, 21 Авг. 18, 10:48
Все предельно ясно, спасибо. Именно об этом я и догадывался. Пока покатаю простую схему, со временем, может, руки дойдут до сложной.
Sonologist Профессор Москва 2.5K 875
Отв.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
Отв.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
И в каком таком месте его прилепить на дистиляции?
SA1348 Профессор Саратов 3.3K 1.5K
Отв.10030  22 Авг. 18, 07:39
smk787, На выходе продукта из дистиллятора. Так же хорошо помогает при отключении воды. 60°С многовато будет.
Shinanai Кандидат наук Иваново 483 80
Отв.10031  22 Авг. 18, 08:42
Можно и поменьше. Я на тса 60 поставил. Попробовал воду выключить, сработало  очень быстро.
Только их плотно крепить нужно к трубкам, хомут самое то. С наружи тепло изоляцией мотануть.
smk787 Магистр Семикаракорск 229 44
Отв.10032  22 Авг. 18, 10:59
smk787, На выходе продукта из дистиллятора. Так же хорошо помогает при отключении воды. 60°С многовато будет.SA1348, 22 Авг. 18, 07:39
Ну о чем вы, любезнейший?! в кубе 95, должен быть стоп, симистр пробило, воду не отключили, вы спите или нет долгое время рядом. Температура в кубе растет, дистиляция идет... идет... и идет и будет идти пока тэн не оголится и не сгорит. а Тса и выход продукта будет холодной.
SA1348 Профессор Саратов 3.3K 1.5K
Отв.10033  22 Авг. 18, 11:42, через 43 мин
Ну о чем вы, любезнейший?!smk787, 22 Авг. 18, 10:59
Да, запамятовал, сам же поднимал первым этот вопрос, про отключении при превышении температуры в кубе. Но ответа так и не было.
Пользую сейчас своей, другой автоматикой.
Mim Кандидат наук Ульяновск 432 70
Отв.10034  22 Авг. 18, 12:25, через 44 мин
любезнейший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 Кандидат наук Иваново 483 80
Отв.10037  22 Авг. 18, 13:27, через 13 мин
Ну о чем вы, любезнейший?! в кубе 95, должен быть стоп, симистр пробило, воду не отключили, вы спите или нет долгое время рядом. Температура в кубе растет, дистиляция идет... идет... и идет и будет идти пока тэн не оголится и не сгорит. а Тса и выход продукта будет холодной.smk787, 22 Авг. 18, 10:59
Можно в цепь контроля поставить KSDI-95 95*C 5А непосредственно на куб. Контроль тока  пока не доступен, а термостаты по 30р за штуку купить не проблема.
Существуют надежные семисторы по адекватной цене?
сообщения удалены (2)
Phisik Куратор Екатеринбург 656 1.4K
Отв.10038  23 Авг. 18, 08:12
Обновление HelloDistiller v3.80 и новая прошивка для ESP8266

ВступлениеЛето заканчивается, времени на тесты больше нет, поэтому начинаю выкладывать свои наработки. Как прошивка Hello Distiller, так и прошивка ESP могут содержать ошибки. Внимательно все тестируйте и не оставляйте оборудование без присмотра. Внимательно проверяйте перед прошивкой файлы pins.h & settings.h. Дважды, а лучше трижды, убедитесь что пины и настройки соответствуют вашей аппаратной конфигурации.

Выкладываю все "как есть". Инструкции к прошивке ESP пока нет, но я надеюсь что разобраться будет не сложно.

Возможно постепенно буду дополнять это сообщение полезной информацией.

Основные изменения в HelloDistiller v3.801. Убрал 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 запустится с дефолтными настройками.

Что есть в прошивке для ESP82661. Асинхронный WEB сервер
2. Асинхронный MQTT клиент с поддержкой авторизации, но без SSL
3. Wifi клиент/точка доступа
4. Аутентификация (можно порт на роутере прокинуть и смотреть с внешки через интернет)
5. Графики
6. Системный лог

Внимание! Есть обновления!
Дальнейшая разработка Web UI происходит в этой теме


PS Отдельное спасибо тем, кто тестировал прошивку перед публикацией.
000.jpg
000.jpg Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
Настройка flash-tool.jpg
Настройка flash-tool.jpg Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
2.jpg
2.jpg Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
5.jpg
5.jpg Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
3.jpg
3.jpg Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
1.jpg
1.jpg Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.

HelloDistiller380.zip 112.8 Кб
HelloDistillerEsp.ino.bin 432.0 Кб
HelloDistillerEsp.ino.15px.spiffs.bin 3.0 Мб
HelloDistillerEsp.ino.18px.spiffs.bin 3.0 Мб
Arduino-LiquidCrystal-I2C-library.zip 125.7 Кб
сообщения удалены (7)
dim073 Новичок Димитровград 4 1
Отв.10039  23 Авг. 18, 14:19
Детектор нуля до УЗО или после?Phisik, 23 Авг. 18, 12:37
Срабатывает NO DETECT ZERO отключает узо, на экране NO DETECT ZERO. Мега запитана до УЗО, если про это речь..
сообщения удалены (13)