Су-вид своими руками на Ардуино
Су-вид своими руками на Ардуино
Решил сделать су-видницу из того что есть. По завершению изобретения смонтирую видео процесса и работы.
В наличии есть Ардуины Уно, Нано, Мега. Для реализации выбрал Мега. Почему мега, чтоб реализовать практически все свои хотелки по настройке, управлению. и функционалу.
Программа получается не слабая, а процессор наоборот - слабый. От этого реакция процессора на кнопки настроек и переключений несколько заторможена. Но не критично.
Итак, используемые детали:
Железо: Термос из нержавейки, подстаканник нерж. от стеклянного заварника, корпус от студийной фотовспышки, кипятильник 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 кнопка запуск программы на выполнение.
Т.к. процессор слабоват, кнопки не реагиют быстро на нажатие, на некоторые кнопки прицепил динамик с айфона. Динамик так же дает сигнал при запуске программы и при окончании готовности. При желании можно забить и несложную мелодию.
В процессе сборки-теста возникла проблема сотрудничества модуля часов реального времени и дисплея, вернее библиотеки дисплея. Но проблему решил текстовой библиотекой для дисплея.
Тема о это конфликте здесь, кому интересно могут почитать.
По завершению смонтирую видео как все это делалось и испытывалось.
В наличии есть Ардуины Уно, Нано, Мега. Для реализации выбрал Мега. Почему мега, чтоб реализовать практически все свои хотелки по настройке, управлению. и функционалу.
Программа получается не слабая, а процессор наоборот - слабый. От этого реакция процессора на кнопки настроек и переключений несколько заторможена. Но не критично.
Итак, используемые детали:
Железо: Термос из нержавейки, подстаканник нерж. от стеклянного заварника, корпус от студийной фотовспышки, кипятильник 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 кнопка запуск программы на выполнение.
Т.к. процессор слабоват, кнопки не реагиют быстро на нажатие, на некоторые кнопки прицепил динамик с айфона. Динамик так же дает сигнал при запуске программы и при окончании готовности. При желании можно забить и несложную мелодию.
В процессе сборки-теста возникла проблема сотрудничества модуля часов реального времени и дисплея, вернее библиотеки дисплея. Но проблему решил текстовой библиотекой для дисплея.
Тема о это конфликте здесь, кому интересно могут почитать.
По завершению смонтирую видео как все это делалось и испытывалось.
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Су-вид своими руками на Ардуино
По описанным требованиям производительность mega2560 более чем достаточно.
Вы сильно удивитесь, если вместо mega2560 попробуете Arduino Due - почти уверен, что столкнетесь с теми же "торможениями".
О причинах этого уже не раз писалось:
1. Тормозит блок LCD типа HD44780.
2. Другие блоки (порой самые безобидные) могут включать функции delay()';
3. Блоки лучше расположить по платам и вызывать их через какой-либо планировщик задач. Мы используем свой "Диспетчер задач" - выложен в 1-ом посте ветки "Разработки ecoins".
------
Если все сделать аккуратно, регулярный период loop() не будет превышать 50 мкс и на mega2560 c ее ресурсами можно добавить много задач, включая HMI KaScada. В последнем случае управлять можно будет дополнительно с планшета, не нем может быть много разных экранов, а реакция на нажатие кнопок будет выше уровня среднего человеческого восприятия.
Су-вид своими руками на Ардуино
Пожалуй никакого. Если можно модераторам перенесите тему в viewforum.php?f=54
Су-вид своими руками на Ардуино
Не зря пост создал по своему проекту. Я скорее начинающий чем продвинутый, поэтому таких хитростей не знал. Но ваши наводки и библиотеки очень помогли.ecoins писал(а): 26 май 2020, 14:31 3. Блоки лучше расположить по платам и вызывать их через какой-либо планировщик задач. Мы используем свой "Диспетчер задач" - выложен в 1-ом посте ветки "Разработки ecoins".
Я воспользовался советом, библиотеками и блоками и в результате кнопки реагируют на нажатие в 15-20 раз быстрее.
Спасибо
Отправлено спустя 12 минут 52 секунды:
Только почему-то блок Shed не корректно работает у меня. Создал переменные mean10, mean25, выполнение платы указал по условию mean25 - True, плата не обрабатывается, а если в условие платы ставлю mean10, плата обрабатывается
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Су-вид своими руками на Ардуино
Пришлите проект, я предполагаю как Вы реализовали, там требуется некоторая аккуратность, посмотрю проект и напишу.AlexRyg писал(а): 27 май 2020, 10:51 Только почему-то блок Shed не корректно работает у меня. Создал переменные mean10, mean25, выполнение платы указал по условию mean25 - True, плата не обрабатывается, а если в условие платы ставлю mean10, плата обрабатывается
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Су-вид своими руками на Ардуино
Рекомендации:
1. Посмотреть приложенные пример. Примеры выложен в 1-ом посте. 2.Рекомендуем использовать полный диспетчер +.
[spoiler title=Вызов диспетчера] [/spoiler]
3.Первой платой рекомендуется ставить плату, которая будет выполняться только один раз = в ней разместить все одноразовые настройки.
4. У Вас в проекте много плат вызывается по разным условиям. Рекомендуем все платы вызывать только из второй платы, где расположен диспетчер.
Условия синхронизировать (через блоки сравнение и AND) с задачами. Это гарантирует, что в каждый цикл loop() будет вызвана только одна задача.
5. У Вас (слева) определено очень много переменных. По возможности надо отказываться от переменных в пользу контактов. Это и ускоряет и экономит оперативную память.
6. Если не получается применить контакты - вместо переменных лучше использовать структуры. Переменных лучше иметь минимум. Такой проект и читается лучше.
7. Работа со строковыми переменными отнимает и много оперативной памяти, но главное процессорное время. Какие-то заготовки лучше подготовить в 1-ой плате (которая выполняется один раз). Там где идет формирование выводимых текстов - все это разместить как медленные задачи. Полученные строки связывать со входами дисплеев только через контакты - это существенно ускоряет работу, так как передается только адрес, а не копируется вся строка.
---
Пока всё. Успехов.
1. Посмотреть приложенные пример. Примеры выложен в 1-ом посте. 2.Рекомендуем использовать полный диспетчер +.
[spoiler title=Вызов диспетчера] [/spoiler]
3.Первой платой рекомендуется ставить плату, которая будет выполняться только один раз = в ней разместить все одноразовые настройки.
4. У Вас в проекте много плат вызывается по разным условиям. Рекомендуем все платы вызывать только из второй платы, где расположен диспетчер.
Условия синхронизировать (через блоки сравнение и AND) с задачами. Это гарантирует, что в каждый цикл loop() будет вызвана только одна задача.
5. У Вас (слева) определено очень много переменных. По возможности надо отказываться от переменных в пользу контактов. Это и ускоряет и экономит оперативную память.
6. Если не получается применить контакты - вместо переменных лучше использовать структуры. Переменных лучше иметь минимум. Такой проект и читается лучше.
7. Работа со строковыми переменными отнимает и много оперативной памяти, но главное процессорное время. Какие-то заготовки лучше подготовить в 1-ой плате (которая выполняется один раз). Там где идет формирование выводимых текстов - все это разместить как медленные задачи. Полученные строки связывать со входами дисплеев только через контакты - это существенно ускоряет работу, так как передается только адрес, а не копируется вся строка.
---
Пока всё. Успехов.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Су-вид своими руками на Ардуино
[ref]ecoins[/ref], Спасибо, интересные наставления. Как для новичка с лету все не понять, нужно потыкать, потрогать, чтоб понять логику действий. Некоторые моменты не понятны, но потыкаю, если не пойму буду спрашивать.
Су-вид своими руками на Ардуино
Смонтировал 1-ю часть изготовления су-видницы. Это не окончательный вариант. Делал и на меге, но мега глюкнула, окончательно сделал на Уно. Позже по свободке смонтирую выложу.
https://youtu.be/O5hHbf0VF1k
https://youtu.be/O5hHbf0VF1k
Су-вид своими руками на Ардуино
Ребят, может тормозить скорость I2C. Я с таким столкнулся на блоках для серв. Проблему решил правкой скорости I2C в библиотеке
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Су-вид своими руками на Ардуино
Странно, если это существенно помогло.Skull писал(а): 03 июн 2020, 13:23 Ребят, может тормозить скорость I2C. Я с таким столкнулся на блоках для серв. Проблему решил правкой скорости I2C в библиотеке
Торможение от LCD HD44780 происходит по трем причинам:
1.В стандартной библиотеке куча delay(). Когда вывода много, набирается...
2.Стандартный блок FLProg работает со строковыми переменными. Само копирование строки для 8-разрядных контроллеров это ощутимое время, а если на это же плате есть формирование строковой переменной, то счет может идти на десятки миллисекунд.
3.Стандартный блок FLProg при изменении длины переменных очищает весь дисплей! Это выполняется вставкой кода перед кодом всех плат - пользователь блока на это повлиять не может.
Самая команда стирания (даже через i2c) относительно быстрая, но на всех платах, где стоят блоки LCD вывод повторяется. А это уже значительное время.
Су-вид своими руками на Ардуино
Все может быть, но я решил проблему текстовой библиотекой для дисплея. Кроме скорости решилась проблема и с нехваткой памяти. Проект реализовал на Уно, со всеми хотелками и памяти с запасом, а со стандартной библиотекой еще и памяти не хватало.Skull писал(а): 03 июн 2020, 13:23 Ребят, может тормозить скорость I2C. Я с таким столкнулся на блоках для серв. Проблему решил правкой скорости I2C в библиотеке
И в стандартной библиотеке русский шрифт не поддерживался, а в текстовой поддерживается.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Су-вид своими руками на Ардуино
В момент инициализации - да, в остальном не очень.ecoins писал(а): 03 июн 2020, 14:15 1.В стандартной библиотеке куча delay(). Когда вывода много, набирается...
Только при увеличении длинны строки.ecoins писал(а): 03 июн 2020, 14:15 3.Стандартный блок FLProg при изменении длины переменных очищает весь дисплей! Это выполняется вставкой кода перед кодом всех плат - пользователь блока на это повлиять не может.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Су-вид своими руками на Ардуино
Если в процессе работы настройка дисплея собьется (например плохой контакт), то для этого стоит предусмотреть повторную инициализацию (так сделано в библиотеке ecoins), иначе надо перезагружать контроллер. При такой инициализации из-за delay() контроллер "тормозится" на > 1 сек.
Каждая очистка экрана >2мс.
Каждое перемещение курсора >2мс.
В итоге набегает + другие причины описанные выше и может стать "кошмаром" для разработчика....
[spoiler title=Точнее при увеличение длины]
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;}
}[/spoiler]
Точнее при увеличение длины, очистка и обновление строк распространяется на весь дисплей. Например, если вывод состоит из 8-ми фрагментов и в каком то фрагменте вместо 21 выводится новое значение =2, то все очищается и выводится по новому. Зависит от размера дисплея для 16х2 вроде мерил >20мс.
--------------------------
После многих трудностей и борьбы "с ветряными мельницами", ecoins пришло к выводу, что это "заноза" и для себя радикально решило проблему.
Помимо решение проблемы с быстродействием, библиотеке LCD ecoins предоставляет много дополнительных удобных опций.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Су-вид своими руками на Ардуино
То в топку такого электронщика!!!ecoins писал(а): 03 июн 2020, 20:57 Если в процессе работы настройка дисплея собьется (например плохой контакт),
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Су-вид своими руками на Ардуино
Это конечно довод ->меня "в топку"

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