Су-вид своими руками на Ардуино

Аппарат из того что было...

Ответить
AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#1

Сообщение AlexRyg » 26.05.2020{, 13:20}

Решил сделать су-видницу из того что есть. По завершению изобретения смонтирую видео процесса и работы.
В наличии есть Ардуины Уно, Нано, Мега. Для реализации выбрал Мега. Почему мега, чтоб реализовать практически все свои хотелки по настройке, управлению. и функционалу.
Программа получается не слабая, а процессор наоборот - слабый. От этого реакция процессора на кнопки настроек и переключений несколько заторможена. Но не критично.
Итак, используемые детали:
Железо: Термос из нержавейки, подстаканник нерж. от стеклянного заварника, корпус от студийной фотовспышки, кипятильник 0.5 кВт и маленький погружной насос 12В, который должен перекачивать воду в посуде, для обеспечения однородной температуры по всему объему.
Электроника: Ардуино Мега 2560, модуль реального времени, динамик от айфона 3S, Дисплей OLED I2C с размером экрана 0,96″ и разрешением 128*64 точек, реле 10А, датчик температуры 18В20, термощуп на термисторе 100К, 4 кнопки и выключатель питания, блок питания 12В 7А.
Хотелки: 1 кнопка переключает экраны. Всего 4 экрана.
На 1 экране температура воды, в одной строке настройка нужной температуры, во второй строке реальная температура с датчика. На этом экране кнопки + и - позволяют установить желаемую температуру воды.
На 2 экране таймер, в одной строке настройка таймера на нужное время готовки, во второй строке тайме с тремя нулями (час:мин:сек), после старта готовки таймер получает значение установки и начинает обратный отсчет, чтоб отключить работу устройства по окончанию времени. На этом экране кнопки + и - настраивают таймер.
На 3 экране Настройка температуры готовности для термощупа. В одной строке настройка желаемой температуры (кнопки + и -), на второй строке реальная температура со щупа.
На 4 экране настройка отключения термощупа и таймера. В одной строке таймер (управляется кнопкой +, выставляется в 0 или 1), в другой строке термощуп, кнопкой - так же в 0 или 1. Т.е. если я буду готовить по времени, то термощуп отключаю от блок-схемы, установив показатель в 0. Так же и с таймером, если решил готовить не по таймеру, а по температуре внутри продукта (на щупе).
И 4 кнопка запуск программы на выполнение.
Т.к. процессор слабоват, кнопки не реагиют быстро на нажатие, на некоторые кнопки прицепил динамик с айфона. Динамик так же дает сигнал при запуске программы и при окончании готовности. При желании можно забить и несложную мелодию.
В процессе сборки-теста возникла проблема сотрудничества модуля часов реального времени и дисплея, вернее библиотеки дисплея. Но проблему решил текстовой библиотекой для дисплея.
Тема о это конфликте здесь, кому интересно могут почитать.
По завершению смонтирую видео как все это делалось и испытывалось.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Су-вид своими руками на Ардуино

#2

Сообщение com » 26.05.2020{, 13:46}

Какое отношение этот проект имеет к SCADA?

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Су-вид своими руками на Ардуино

#3

Сообщение ecoins » 26.05.2020{, 14:31}

AlexRyg писал(а):
26.05.2020{, 13:20}
Т.к. процессор слабоват,
По описанным требованиям производительность mega2560 более чем достаточно.
Вы сильно удивитесь, если вместо mega2560 попробуете Arduino Due - почти уверен, что столкнетесь с теми же "торможениями".
О причинах этого уже не раз писалось:
1. Тормозит блок LCD типа HD44780.
2. Другие блоки (порой самые безобидные) могут включать функции delay()';
3. Блоки лучше расположить по платам и вызывать их через какой-либо планировщик задач. Мы используем свой "Диспетчер задач" - выложен в 1-ом посте ветки "Разработки ecoins".
------
Если все сделать аккуратно, регулярный период loop() не будет превышать 50 мкс и на mega2560 c ее ресурсами можно добавить много задач, включая HMI KaScada. В последнем случае управлять можно будет дополнительно с планшета, не нем может быть много разных экранов, а реакция на нажатие кнопок будет выше уровня среднего человеческого восприятия.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#4

Сообщение AlexRyg » 26.05.2020{, 15:05}

com писал(а):
26.05.2020{, 13:46}
Какое отношение этот проект имеет к SCADA?
Пожалуй никакого. Если можно модераторам перенесите тему в viewforum.php?f=54

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#5

Сообщение AlexRyg » 27.05.2020{, 10:38}

ecoins писал(а):
26.05.2020{, 14:31}
3. Блоки лучше расположить по платам и вызывать их через какой-либо планировщик задач. Мы используем свой "Диспетчер задач" - выложен в 1-ом посте ветки "Разработки ecoins".
Не зря пост создал по своему проекту. Я скорее начинающий чем продвинутый, поэтому таких хитростей не знал. Но ваши наводки и библиотеки очень помогли.
Я воспользовался советом, библиотеками и блоками и в результате кнопки реагируют на нажатие в 15-20 раз быстрее.
Спасибо

Отправлено спустя 12 минут 52 секунды:
Только почему-то блок Shed не корректно работает у меня. Создал переменные mean10, mean25, выполнение платы указал по условию mean25 - True, плата не обрабатывается, а если в условие платы ставлю mean10, плата обрабатывается

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Су-вид своими руками на Ардуино

#6

Сообщение ecoins » 27.05.2020{, 11:14}

AlexRyg писал(а):
27.05.2020{, 10:51}
Только почему-то блок Shed не корректно работает у меня. Создал переменные mean10, mean25, выполнение платы указал по условию mean25 - True, плата не обрабатывается, а если в условие платы ставлю mean10, плата обрабатывается
Пришлите проект, я предполагаю как Вы реализовали, там требуется некоторая аккуратность, посмотрю проект и напишу.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#7

Сообщение AlexRyg » 27.05.2020{, 23:29}

ecoins писал(а):
27.05.2020{, 11:14}
Пришлите проект, я предполагаю как Вы реализовали
В личку отправил

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Су-вид своими руками на Ардуино

#8

Сообщение ecoins » 28.05.2020{, 00:33}

Рекомендации:
1. Посмотреть приложенные пример. Примеры выложен в 1-ом посте. 2.Рекомендуем использовать полный диспетчер +.
Вызов диспетчераПоказать
Схема.png
3.Первой платой рекомендуется ставить плату, которая будет выполняться только один раз = в ней разместить все одноразовые настройки.
4. У Вас в проекте много плат вызывается по разным условиям. Рекомендуем все платы вызывать только из второй платы, где расположен диспетчер.
Условия синхронизировать (через блоки сравнение и AND) с задачами. Это гарантирует, что в каждый цикл loop() будет вызвана только одна задача.
5. У Вас (слева) определено очень много переменных. По возможности надо отказываться от переменных в пользу контактов. Это и ускоряет и экономит оперативную память.
6. Если не получается применить контакты - вместо переменных лучше использовать структуры. Переменных лучше иметь минимум. Такой проект и читается лучше.
7. Работа со строковыми переменными отнимает и много оперативной памяти, но главное процессорное время. Какие-то заготовки лучше подготовить в 1-ой плате (которая выполняется один раз). Там где идет формирование выводимых текстов - все это разместить как медленные задачи. Полученные строки связывать со входами дисплеев только через контакты - это существенно ускоряет работу, так как передается только адрес, а не копируется вся строка.
---
Пока всё. Успехов.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#9

Сообщение AlexRyg » 28.05.2020{, 08:11}

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

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#10

Сообщение AlexRyg » 03.06.2020{, 11:56}

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

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

Су-вид своими руками на Ардуино

#11

Сообщение Skull » 03.06.2020{, 13:23}

ecoins писал(а):
26.05.2020{, 14:31}
1. Тормозит блок LCD типа HD44780.
Ребят, может тормозить скорость I2C. Я с таким столкнулся на блоках для серв. Проблему решил правкой скорости I2C в библиотеке

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Су-вид своими руками на Ардуино

#12

Сообщение ecoins » 03.06.2020{, 14:15}

Skull писал(а):
03.06.2020{, 13:23}
Ребят, может тормозить скорость I2C. Я с таким столкнулся на блоках для серв. Проблему решил правкой скорости I2C в библиотеке
Странно, если это существенно помогло.
Торможение от LCD HD44780 происходит по трем причинам:
1.В стандартной библиотеке куча delay(). Когда вывода много, набирается...
2.Стандартный блок FLProg работает со строковыми переменными. Само копирование строки для 8-разрядных контроллеров это ощутимое время, а если на это же плате есть формирование строковой переменной, то счет может идти на десятки миллисекунд.
3.Стандартный блок FLProg при изменении длины переменных очищает весь дисплей! Это выполняется вставкой кода перед кодом всех плат - пользователь блока на это повлиять не может.
Самая команда стирания (даже через i2c) относительно быстрая, но на всех платах, где стоят блоки LCD вывод повторяется. А это уже значительное время.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Су-вид своими руками на Ардуино

#13

Сообщение AlexRyg » 03.06.2020{, 16:17}

Skull писал(а):
03.06.2020{, 13:23}
Ребят, может тормозить скорость I2C. Я с таким столкнулся на блоках для серв. Проблему решил правкой скорости I2C в библиотеке
Все может быть, но я решил проблему текстовой библиотекой для дисплея. Кроме скорости решилась проблема и с нехваткой памяти. Проект реализовал на Уно, со всеми хотелками и памяти с запасом, а со стандартной библиотекой еще и памяти не хватало.
И в стандартной библиотеке русский шрифт не поддерживался, а в текстовой поддерживается.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Су-вид своими руками на Ардуино

#14

Сообщение Sancho » 03.06.2020{, 16:43}

ecoins писал(а):
03.06.2020{, 14:15}
1.В стандартной библиотеке куча delay(). Когда вывода много, набирается...
В момент инициализации - да, в остальном не очень.
ecoins писал(а):
03.06.2020{, 14:15}
3.Стандартный блок FLProg при изменении длины переменных очищает весь дисплей! Это выполняется вставкой кода перед кодом всех плат - пользователь блока на это повлиять не может.
Только при увеличении длинны строки.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Су-вид своими руками на Ардуино

#15

Сообщение ecoins » 03.06.2020{, 20:57}

Sancho писал(а):
03.06.2020{, 16:43}
В момент инициализации - да, в остальном не очень.
Если в процессе работы настройка дисплея собьется (например плохой контакт), то для этого стоит предусмотреть повторную инициализацию (так сделано в библиотеке ecoins), иначе надо перезагружать контроллер. При такой инициализации из-за delay() контроллер "тормозится" на > 1 сек.
Каждая очистка экрана >2мс.
Каждое перемещение курсора >2мс.
В итоге набегает + другие причины описанные выше и может стать "кошмаром" для разработчика....
Sancho писал(а):
03.06.2020{, 16:43}
Только при увеличении длинны строки.
Точнее при увеличение длиныПоказать
void loop()
{
if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
//Плата:1
if (!(0)) {
_dispTempLength1 = (String("")).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print(String(""));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
Точнее при увеличение длины, очистка и обновление строк распространяется на весь дисплей. Например, если вывод состоит из 8-ми фрагментов и в каком то фрагменте вместо 21 выводится новое значение =2, то все очищается и выводится по новому. Зависит от размера дисплея для 16х2 вроде мерил >20мс.
--------------------------
После многих трудностей и борьбы "с ветряными мельницами", ecoins пришло к выводу, что это "заноза" и для себя радикально решило проблему.
Помимо решение проблемы с быстродействием, библиотеке LCD ecoins предоставляет много дополнительных удобных опций.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Су-вид своими руками на Ардуино

#16

Сообщение Sancho » 03.06.2020{, 21:02}

ecoins писал(а):
03.06.2020{, 20:57}
Если в процессе работы настройка дисплея собьется (например плохой контакт),
То в топку такого электронщика!!!
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Су-вид своими руками на Ардуино

#17

Сообщение ecoins » 04.06.2020{, 08:51}

Sancho писал(а):
03.06.2020{, 21:02}
То в топку такого электронщика!!!
Это конечно довод ->меня "в топку" :smile453:
----------
Если серьезно - стенды с плохими контактами, это дополнительная возможность тестирования надежности в целом устройства и способность программного продукта поддерживать работоспособность устройства.
Все наши библиотеки для работы с внешними устройствами обрабатывают возможные сбои устройства, в том числе и связанные с линиями связи (обычно до трех попыток подряд, потом обрабатывается как ошибка).
Если устройство восстановило работу, то оно снова может быть включено в работу.
--------
Таким образом поддерживается "горячая" замена устройства.
-------
P.S. Если используются провода с одноконтактными разъемами ("мама") они обычно поставляются из Китая в виде разноцветных шлейфов,
с ними часто появляются проблемы с контактами, особенно если провод несколько раз использовался.
Это в следствии их конструкции - в последнее время в Китае их делают в виде стальной квадратной трубочки с непонятным покрытием.
Хорошая конструкция - это как в ленточных кабелях, латунный пружинящий контакт. Он прорезает стержень, с которым соединяется.
К сожалению, я не встречал в продаже (может кто подскажет) хороших ленточных кабелей с одиночными разъемами типа "мама".
--------
Шутки в электронике это конечно хорошо. Иногда весело.
Но проблемы электрических контактов и способность внешних устройств к единичным сбоям они не решают.

Ответить

Вернуться в «Проекты»