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

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

Форум самогонщиков Автоматика
1 ... 749 750 751 752 753 754 755 ... 794 752
SerjikP66 Студент Ноябрьск 39 12
Отв.15020  05 Апр. 22, 08:50
HD_v4UI_v40 от Phisik русскоязычный на 4 строкиВиктор 37, 05 Апр. 22, 08:45
Доброго времени
в теме "WEB интерфейс к HelloDistiller на ESP8266" на 9 стр
sachalin-1 Кандидат наук Куйбышев 432 126
Отв.15021  05 Апр. 22, 08:54, через 4 мин
А вот такая ПлатаNepjuodin, 01 Апр. 22, 22:34
Если сможешь залить скетчи - то пойдёт. Но местные гуру настоятельно НЕ рекомендуют-эти платы глючные.

скетч HD_v4UI_v40 от PhisikВиктор 37, 05 Апр. 22, 08:45
Смотри здесь:
[WEB интерфейс к HelloDistiller на ESP8266]
Оорс! Опоздал, уже подсказали.
ildarunic Бакалавр Татарстан ЮВ 54 31
Отв.15022  05 Апр. 22, 16:58
Хочу поделиться своей реализацией датчика давления.

Это исправление читает АЦП и масштабирует его в давление, в связи с чем возможно (вознужно) использовать дешевые автомобильные датчики давления масла.
Например артикул SAT ST8353060040 (https://evilcar.ru/products/SAT/ST8353060040.html), после повышения цен стоит 250 руб, заявлено 0,2 бар (= 3 PSI = 150 мм. рт. столба)
Но как будет работать от 5 вольт - я не знаю.
Посмотрел как он работает - просто замыкает контакты на 0,2 бар Грустный

У меня китайский датчик https://aliexpress.ru/item/4000263159708.html, с параметрами из приложенных фрагментов кода на столбе жидкости в 1 метр показывает 1006 мм (1 мм рт. столба = 13,6 мм водяного столба.).

В файл alarm.cpp
после строк


#if  USE_MPX5010_SENSOR && defined(PIN_MPX5010)
   U_MPX5010=analogRead(PIN_MPX5010);
   #if SIMPLED_VERSION==20
     DEBUG_SERIAL.println(U_MPX5010);
     if (UstPowerReg!=(U_MPX5010))
     {
       UstPowerReg=U_MPX5010;
       flNeedAnalyse=1;
     }
   #endif


нужно сделать вот так:


#if PRESSURE_SENSOR_TYPE==0 //MPX5010
     // Updated on 2018-12-20 by Phisik
     // https://www.nxp.com/...eet/MPX5010.pdf
     // Nominal Transfer Value:    P[kPa] = (Vout/Vs-0.04)/0.09
     //
     // Vout = analogRead(PIN_MPX5010);
     // Vs   = 1024;
     //
     // P[kPa]  = (100*Vout/1024-4)/9;
     // P[mmHg]    = P[kPa]*15/2;      //  1 mmHg  = 1 kPa  x 7.50062

     // C++ integer code
     // U_MPX5010  = 10 * (100*Vout/1023-4)/9 * 15 / 2
     
     //U_MPX5010 = int(((long(15000 * U_MPX5010) >> 10) - 600) / 18);

     // Simplified msg31 equation gives 1-2% error
   U_MPX5010=(U_MPX5010*4-160)/5;  //Перевод прочитанного напряжения на ножке в мм. рт. столба (в 10 мм р.ст, то есть 100, это 10 мм рст).
#endif

#if PRESSURE_SENSOR_TYPE==1 //Датчик давления масла автомобильный
 // Updated on 2022-04-05 by ildarunic
 // Китайский Датчик якобы выдает от 0,5 до 4,5 вольт в зависимости от давления, что соответствует диапазону 102-922 единиц АЦП из 1024 при опорном напряжении 5 вольт.
 // Не буду переводить АЦП в вольты, а сразу смашстабирую значения в PSI
 // датчик такой https://aliexpress.ru/item/4000263159708.html, нужно брать на 5 PSI
 //
 //                 -= ПОИЩИТЕ ДАТЧИК ДАВЛЕНИЯ МАСЛА В ЛЮБОМ АВТОМОБИЛЬНОМ МАГАЗИНЕ, красная цена им 200-300 руб. =-

 if ((U_MPX5010 >= PRESSURE_SENSOR_MIN_ADC)&&(U_MPX5010 <= PRESSURE_SENSOR_MAX_ADC))                // берем значения из рабочего диапазона датчика давления
 {
   U_MPX5010 = (map(U_MPX5010, PRESSURE_SENSOR_MIN_ADC, PRESSURE_SENSOR_MAX_ADC, 0, 500)) * 5.171507548025;   //  масштабируем значения АЦП в значения давления и переводим в мм рт. столба
                                                             // (PRESSURE_SENSOR_MIN_ADC - минимальные показания АЦП при атмосферном давлении = 95)
                                                             // (PRESSURE_SENSOR_MAX_ADC - максимальные покания АЦП при максимально допустимом давлении датчика = 922)
                                                             // (500 - верхний диапазон датчика давления для датчика 5 PSI; 500 тут надо так как функция map не работает с дробными частями)
                                                             // Иначе говоря смасштабирались в диапазон 0-500 и разделили на 100, получили дапазон 0-5 PSI
                                                             // Но переменная U_MPX5010 хранит значения в 10 раз больше (100 - это 10 мм рт. столба), а 1 PSI = 51.71507548025 мм. рт. столба
                                                             // в итоге получаем "/ 100 * 10 * 51.71507548025" = "* 5.171507548025"                                              
 }
 else if (U_MPX5010 < PRESSURE_SENSOR_MIN_ADC)             // присваиваем граничные значения при выходе за пределы рабочего диапазона датчика давления
 {  U_MPX5010 = 0.00;  }  
 else if (U_MPX5010 > PRESSURE_SENSOR_MAX_ADC)
 {  U_MPX5010 = 2586;  }  // 2586 = 5 PSI * 51.71507548025 * 10

#endif



В файл settings.h рядом со строкой

#define USE_MPX5010_SENSOR 1 // Phisik: раньше использовалось условие #ifdef PIN_MPX5010,
                            // из-за чего приходилось постоянно следить чтобы пин не был определен


добавить это
                           
#define PRESSURE_SENSOR_TYPE 1         //ildarunic: 0 = MPX5010, 1 = автомобильный датчик давления
#define PRESSURE_SENSOR_MIN_ADC 95   // минимальные показания АЦП при атмосферном давлении (95)
#define PRESSURE_SENSOR_MAX_ADC 922  // максимальные покания АЦП при максимально допустимом давлении датчика (922)
                                      // китайский датчик на словах выдает 0.5-4.5 вольт, что соответсвует АЦП 102-922 из 1024
                                      // но на деле нижние показания начинаются с 92-95 (430 мВ)
SerjikP66 Студент Ноябрьск 39 12
Отв.15023  06 Апр. 22, 08:27
нужно брать на 5 PSIildarunic, 05 Апр. 22, 16:58
Доброго времени
Подскажите не маловато ли давление при выборе 5 PSI
При пересчете:
5 фунт-сила на квадратный дюйм (фунт-сила/дюйм², psi) = 258.5 миллиметров ртутного столба (мм рт. ст.)
При соотношении атмосферного давления в среднем 760 миллиметр ртутного столба (0°C) = 14.6 psi

Спасибо
ildarunic Бакалавр Татарстан ЮВ 54 31
Отв.15024  06 Апр. 22, 09:36
5 фунт-сила на квадратный дюйм (фунт-сила/дюйм², psi) = 258.5 миллиметров ртутного столба (мм рт. ст.)SerjikP66, 06 Апр. 22, 08:27

На самом деле 5 PSI это дохрена, но это минимальный датчик на просторах али.
Давление в колонне бывает около 20 мм рт.столба.
Речь про датчик дифференциального давления, а не абсолютного.
SerjikP66 Студент Ноябрьск 39 12
Отв.15025  06 Апр. 22, 09:53, через 18 мин
Давление в колонне бывает около 20 мм рт.столбаildarunic, 06 Апр. 22, 09:36
Разъясните пожалуйста тогда, в каком месте установливать сей датчик. Я полагал, что его необходимо наворачивать на куб. Или я ошибаюсь судя по давлению это чуть ли не связь с атмосферой. Или я снова путаю дифференциальное давления и абсолютное
ildarunic Бакалавр Татарстан ЮВ 54 31
Отв.15026  06 Апр. 22, 12:17
Да, на куб. Давление возникает из-за сопротивления в СПН. Куб герметизировать нельзя!
Вы поставьте датчик давления и выведите колонну на предзахлеб, запишите значения.
Далее отрегулируйте мощность/отбор так, чтобы давление было рабочее давление было в примерно 70% от предзахлебного.

[Давление в колонне при ректификации]
SerjikP66 Студент Ноябрьск 39 12
Отв.15027  06 Апр. 22, 13:28
Далее отрегулируйте мощность/отбор так, чтобы давление было рабочее давление было в примерно 70% от предзахлебного.ildarunic, 06 Апр. 22, 12:17
Спасибо за легбез прочитал
Будем экспериментировать (хотя уже и гоню давно, но все на "глаз", теперь "прикручиваю автоматику", и надо по новой учиться) век живи - век учись :-)))
sergei122 Новичок Домодедово 2
Отв.15028  06 Апр. 22, 14:04, через 37 мин
Доброго дня.Подскажите пожалуйста,при проверке и компиляции скетча {кроме 2.60},Ардуино пишет-Недостаточно памяти,программа может работать нестабильно.MEGA2560 как у всех китай.Это критично или ничего страшного?Сделал и собрал платы ,собрался залить скетч и задумался.Поиск ничего не дал.Спасибо.
ildarunic Бакалавр Татарстан ЮВ 54 31
Отв.15029  06 Апр. 22, 14:11, через 7 мин
У меня тоже так пишет, но работает.
sergei122 Новичок Домодедово 2
Отв.15030  06 Апр. 22, 14:29, через 18 мин
Спасибо буду пробовать.
alk0m Кандидат наук Нижний Новгород 380 109
Отв.15031  07 Апр. 22, 23:21
Добрый день, дошли руки до автоматики, все спаял, в корпус разместил, датчики подключил, все вроде работает. Платы от Бенгура v3
Встал вопрос, как запитать плату через автомат и УЗО. Платы мне распаивал Бенгур (за что ему отдельное спасибо), но закралось сомнение в том, что не хватает деталей для сторожа. Может быть кто ни будь подскажет?
Как я понял надо впаять:
1. CD4060
2. smd сопротивление 10кОм
3. Конденсатор 10 мф 25 В
4. МОС3023
5. Сопротивление 10кОм
Заработает сторож в данном случае?
Вот тут Бенгур писал, что надо вместо 10 кОм поставить 5.1 кОм, но я не понял какого резистора это касается? [сообщение #13749489]
2022_04_07_12_48_IMG_1236.JPG
2022_04_07_12_48_IMG_1236. Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
2022_04_07_22_20_IMG_1239.JPG
2022_04_07_22_20_IMG_1239. Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
2022_04_07_22_20_IMG_1241.JPG
2022_04_07_22_20_IMG_1241. Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.
SerjikP66 Студент Ноябрьск 39 12
Отв.15032  08 Апр. 22, 06:11
Платы от Бенгура v3alk0m, 07 Апр. 22, 23:21
Доброго времени
[Простая автоматика на Ардуино Мега 2560 из готовых элементов. Страница 4] (Возможные неисправности)

Схема сторожа
Скорее не ошибка, а поправка. На силовой плате 12В и 220В есть резистор на 10К между 6 ногой moc3023 и контактом L, отвечающий за работу сторожа. Так вот номинал этого резистора для работы с УЗО 30мА завышен, лучше выбрать 5.1К
ffasad Студент Verkhnednepovsk 27 15
Отв.15033  08 Апр. 22, 12:04
Если у Вас оборудование типа "Прима"serjrv, 10 Окт. 20, 00:10
если данный алгоритм кто то захочет реализовать и в данной автоматике, наработками поделюсь.serjrv, 10 Окт. 20, 00:10
Хорошего дня.
Очень интересует реализация управления краном.
Поделитесь пожалуйста
Nepjuodin Студент Новосибирск 13
Отв.15034  08 Апр. 22, 12:45, через 41 мин
По поводу управления краном тоже в этой теме задавал вопрос, однако ответа не получил.
serjrv Кандидат наук Камышин 393 219
Отв.15035  08 Апр. 22, 14:39
Очень интересует реализация управления краном.
Поделитесь пожалуйстаffasad, 08 Апр. 22, 12:04
Схема для преобразования ШИМ в напряжение:
0-10v.jpg
0-10v. Доступная автоматика HelloDistiller на Ардуино Мега 2560. Автоматика.

Код для контроллера:
// переменная прилетающая из web для коррекции полного открытия шарового крана, примерные значения: 120 = 7 вольт максимум, 180 = 10 вольт максимум.
// на практике 100% открытие шарового крана обычно не требуется, поэтому и введена данная поправка. Так же и 0-5 вольт легко реализовать.
uint8_t TapCorrectionWeb = 120;

// переменная в которой как раз и задается % открытия, значения от 0 до 200
// когда прилетает из web или локальных установок значение с шагом 0.5%, просто умножаем его на 2 чтобы избавится от переменной float
// (так проще при необходимости в EEPROM сохранять).
uint8_t steamPercent;

// массив значений % -> ШИМ для шарового крана 0-10 вольт, т.к. проходная дырка не имеет линейной зависимости от угла.
// 0% - 100% с шагом 5%
uint16_t percentCorrectSquare[22] = { 200,2107,2299,2545,2833,3154,3505,3881,4278,4695,5128,5576,6037,6509,6991,7480,7976,8478,8983,9491,10000,10000 };

// пересчет процентов в значение 12 битного ШИМ для шарового крана
// data = 200 это 100% т.к. шаг изменения 0.5
uint16_t percentCalc(uint8_t data) {
  uint8_t cnt = data / 10;
  float TapCorrection = (float)TapCorrectionWeb / 100;
  // т.к. в массиве забиты значения с шагом в 5%, производим вычисление промежуточных значений для ШИМ
  uint16_t percent_1 = (uint16_t)((float)(TapCorrection * percentCorrectSquare[cnt]) / 10);
  uint16_t percent_2 = (uint16_t)((float)(TapCorrection * percentCorrectSquare[cnt + 1]) / 10);
  uint16_t percent = (uint16_t)((float)(TapCorrection * percentCorrectSquare[cnt])) + (percent_2 - percent_1) * (data - cnt * 10);
  // результат
  if (percent / 5 > 4095) return 4095; // подстраховка )))
  else return (percent / 5);
}

// установка ШИМ для шарового крана 0-10 вольт
//    канакл,  значение для 12 битного ШИМ
setPWM(PWM_CH5, percentCalc(steamPercent));

// p.s. реализация функции setPWM() зависит уже от вашего железа, на чем ШИМ реализован.
alk0m Кандидат наук Нижний Новгород 380 109
Отв.15036  08 Апр. 22, 22:57
Добрый день, дошли руки до автоматики, все спаял, в корпус разместил, датчики подключил, все вроде работает. Платы от Бенгура v3
Встал вопрос, как запитать плату через автомат и УЗО. Платы мне распаивал Бенгур (за что ему отдельное спасибо), но закралось сомнение в том, что не хватает деталей для сторожа. Может быть кто ни будь подскажет?
Как я понял надо впаять:
1. CD4060
2. smd сопротивление 10кОм
3. Конденсатор 10 мф 25 В
4. МОС3023
5. Сопротивление 10кОм
Заработает сторож в данном случае?
Вот тут Бенгур писал, что надо вместо 10 кОм поставить 5.1 кОм, но я не понял какого резистора это касается? [сообщение #13749489]alk0m, 07 Апр. 22, 23:21
Сегодня все запаял на плату. 1, 2 и 3 на 12В плату, а на 220В плату 4, 5 (вместо 10кОм впаял 5,1)
Подключил как описано тут [сообщение #13749489]
Сторож не работает. При вынутой Ардуино Узо не срабатывает.
Скетч для 4х строчного дисплея с кириллицей отсюда [сообщение #13821130]
После сборки выявилось, что мощность ТЕНа определяет в 2 раза меньше, а фактическую мощность в 5 раз меньше ( при выставленных 100Вт показывает 20)При этом напряжение показывает верное.
Что то я запутался в конец
UPD. (О) Признак того, как надо использовать датчик тока стояло 1, поставил 2: фактическая мощность стала равна заданной.
Может забыл написать: используется датчик тока ASC712 30A
Остались 2 проблемы: неработающий сторож и заниженное в 2 раза значение определяемой мощности ТЭНа (кнопкой вверх)
UPD2. Поменял в скетче значение #define USE_BRESENHAM_ASC71 с 1 на 0 в секции settings и мощность ТЭНа стала определяться.
Осталось со сторожем разобраться.....
SerjikP66 Студент Ноябрьск 39 12
Отв.15037  09 Апр. 22, 11:25
Поменял в скетче значение #define USE_BRESENHAM_ASC71 с 1 на 0 в секции settingsalk0m, 08 Апр. 22, 22:57
Доброго времени
Мне ранее подсказывали что в скетче надо ставить 1 если он физически есть (а так ты его отключил полностью)
На экранчике автоматики при выборе использовать или нет устанавливаешь 0 после настройки ватт и прочего установить затем 2 (использовать)
Тут тоже есть совет от zaka
[сообщение #13438587]
alk0m Кандидат наук Нижний Новгород 380 109
Отв.15038  09 Апр. 22, 11:53, через 28 мин
SerjikP66, Я раньше тоже так думал, но у меня заработало только в этой конфигурвции. Сегодня проверил на 4,5 кВт ТЭНе. Все регулируется как и положено. Заодно понял, что радиатор маловат, очень сильно греется, рука не терпит. Хочу сделать с пассивным охлаждением, не люблю вентиляторы.
SerjikP66 Студент Ноябрьск 39 12
Отв.15039  09 Апр. 22, 15:44
Хочу сделать с пассивным охлаждениемalk0m, 09 Апр. 22, 11:53
Это как? Каким способом, можно инфу?