2620

Пишем свой софт для посудомоечной машины ч. 1. Реверс-инжиниринг1

Серия Делаем автоматику

Всем привет! Предупреждаю заранее, данный проект не является сколь-либо экономически выгодным. За время, затраченное на эту работу, можно было заработать на несколько таких новых посудомоек. Целью данного поста является демонстрация примера разработки ПО для небольшой автоматики в кустарных условиях (аналогичных производственным). Если из этой идеи получится что-то стоящее, то исходные коды проекта я потом выложу. Писать код буду в реальном времени по мере возможности. Конкретно в данном посте мы изучим устройство этой машины, подготовим платформу, и загрузим первую тестовую программу.

Итак, попала ко мне в руки вышедшая из строя посудомоечная машина. Было выяснено, что её агрегаты (соленоиды, насосы и т.д.) находятся в исправном состоянии. Вышел из строя сам контроллер, где находится программа для управления этими приборами. Что, скажу я вам, весьма серьёзная ситуация - ведь без этого контроллера большая и дорогостоящая машина подлежит отправке на помойку. В интернете я уже видел подобные проекты, но они были сделаны как-то халтурно, не уверен, что они вообще работали. Для написания подобного ПО в производственных условиях программисту уже должны быть даны технические параметры всех приборов и назначение выводов. Но у нас нет ни оригинального контроллера, ни исходников. Поэтому нет никаких шансов восстановить заводское ПО. В таком случае, будем писать своё. Но для начала необходимо изучить, что собой представляет машина - ведь у нас нет практически никаких данных, все провода для нас отличаются только цветом. Первым делом, выпаиваем старый, вышедший из строя контроллер:

Далее, мы видим на плате микросхему ULN2003 (моя называется иначе, но 2003 в названии сути не меняет). Подпаяем к прибору специальную платку (состоит из резисторов и блока переключателей):

Итак, из даташита мы знаем, что микросхема ULN2003 имеет семь входов и семь выходов с инвертированием сигнала. Сделано это для удобства подключения к реле - при подаче логической единицы 5В на вход микросхемы, выход подтягивается к земле и в катушках реле начинает течь ток. Мощный прибор, подключенный к реле, включается в работу.

Для определения этих самых приборов плату устанавливаем на машину, после чего щелкаем переключателями по очереди. Методом проб переключателей было выяснено, что каждый из 7 выходных пинов выполняет свою функцию:

1. Запуск центробежного насоса (ЦН) на большой скорости
2. Запуск ЦН на малой скорости (половинная загрузка?)
3. Открытие входного клапана (залив воды)

4. Открытие дозатора моющего средства
5. Включение соленоида, находящегося в баке с солью
6. Включение сливной помпы
7. Включение ТЭНа для нагрева воды.

Теперь стала понятна суть выходного регистра. Далее, была очередь за входным - вот тут сложнее, ибо понять, какой провод за что отвечает было очень сложно. Но, как не зря кстати, совершенно случайным образом мне была ниспослана с неба монтажная схема на этот прибор. Она многое прояснила.

Выявленные опытным путём выводы соответствуют указанным на схеме (выходы - внизу прямоугольника). Однако, также полно внесистемных обозначений. Например, что такое FM? ISS? Это всё пришлось выяснять опытным путём. В результате, спустя некоторое время, схема выглядела уже так:

Входы расположены следующим образом:

1. RE - вход терморезистора (на 9,7КОм), установленного в баке с водой. Он контролирует температуру воды, нагреваемой ТЭНом. Константа зависимости сопротивления от нагрева для него неизвестна (утеряна в заводской прошивке), её предстоит выяснять опытным путём в следующих постах. Пока опустим его. Вход аналоговый.
2. FM - Fluid Meter. Датчик воды. Представляет собой геркон с магнитом, который размыкается при заполнении бака. Вход цифровой.
3. IAQS - датчик (микрик) аквастопа. При его активации включается режим аварии и отключаются все приборы. Вход цифровой. Его мы тоже пока опустим.
4. +5V и ISS. Питание датчика соли. Он выполнен на компраторе LM339, вход цифровой.
5. ISB - неизвестный переключатель, находящийся в дозаторе моющего средства. Его расположение выяснять не стал, для тестового запуска он пока не нужен. Вход также цифровой и опустим его.
6. DOOR - датчик двери (замок). Работает аналогично IAQS.

P1 - пресловутый прессостат, но он в данной машине к модулю не подключается, а работает независимо.

Итого, имеем 4 на данный момент важных входа:
1. RE - его реализуем позже через полумостовую схему измерения
2. FM - проверяется через подтяжку линии к 5В через резистор 10K на плюс питания и 2K к самой линии.
3. ISS - аналогичным образом
4. DOOR/IAQS (их пока можно объединить) - аналогичным образом.

От себя также добавлю 2 кнопки (питание и служебная кнопка), и 6 выводов для работы дисплея 1602 (включен в полубайтном параллельном режиме).

Таким образом, мы определили, что к выбираемому контроллеру для данной машинки предъявляются следующие требования:

1. Наличие 14 и более I/O портов для всех агрегатов (выходной регистр, входы, также для подключения дисплея 1602, которого не было в оригинальной схеме)

2. Наличие на борту таймеров (непосредственно для работы отсчёта времени)

3. Наличие АЦП (для обработки показаний термодатчика)

4. Возможность подключения кварцевого генератора для обеспечения стабильности схемы

Собственно, ничего серьёзного. Подойдёт контроллер ATMEGA8 (но т.к. он уже сильно устарел, заменим на любимый китайцами и ардуинщиками ATMEGA328, они полностью совместимы). Скажу сразу, Arduino в данном проекте мы не используем, пишем на чистом AVR.

Когда контроллер выбран, настало время подготовить плату и приборы для отладки. Начнём с того, что подготовим тестовый стенд для ИМС. Запаяем её и некоторые DuPont пины.

Было / стало:

Далее, подготовим аппаратные имитаторы агрегатов машинки. Кто-то скажет, что отладить можно было и в электронном виде, на что я скажу да, можно. Но часто бывает, что в симуляторе не выявляются некоторые косяки, такие как дребезг кнопок, наводки и т.д., т.к. условия там слишком приближены к идеальным. Плюс ко всему, прибор не очень громоздкий, так что можно изготовить "набор для отладки". Состоит он из платы с микросхемой ULN2003, имитирующей работу нашего модуля и агрегатов (но вместо них установлены светодиоды). Второй модуль состоит из 2 кнопок и 3 переключателей, имитирующих наши важные датчики, также, туда будет установлен терморезистор

Для оптимизации схемы некоторые доработки выполнялись "на соплях" прямо на дисплейном модуле:

Вот так вся эта отладочная установка смотрится после сборки. Выходной регистр назначен на порт D (используется 7 выводов из 8), дисплей - на порт B (6 выводов), входной регистр - на порт C (неполный, 6 выводов):

Подписаны светодиоды, имитирующие приборы и все кнопки с переключателями. В таком виде схему можно отлаживать. Предусмотрено внутрисхемное программирование, сразу накинут кварц на 6 МГц (какой нашел, потом, возможно, поменяю). Для испытания на машинке достаточно будет отпаять с модуля блок переключателей, и установить туда также DuPont штыри, к которым будем подключать макетную плату легко и просто без изменений в схеме. В дальнейшем по завершению испытаний отладочные платы убираются.

Теперь создадим проект под эту схему. Сразу же инициализирую git-репозиторий. Пока что лишь маленькая программка "бегущие огни" на задержках для проверки правильности проводки.

Тут уже вылезли косяки: как выяснилось, две абсолютно новые непаянные ATMEGA328P, лежавшие у меня несколько лет, тупо отказались прошиваться. Судя по всему, вышли из строя от лежания. Такой подлянки я от них не ожидал - ведь стоят сейчас достаточно крупных денег. Пришлось перепаивать три раза сам контроллер с переходника, в итоге выдрал из какой-то ардуины более-менее рабочий. После чего плата завелась. Судя по всему, для решения дефицита комплектующих придется где-то раздербанить немного ардуинов.

Программа запустилась, порты были подключены верно, все приборы успешно запитаны, но дисплей пока не инициализирован. Проверено питание модулей и работа переключателей. Видно, что светодиоды успешно горят, значит, мы на финишной прямой.

Дальнейшие задачи по этому устройству, в основном, программные и заключаются в следующем (будем выполнять во второй части поста):

1. Инициализировать аппаратный таймер, отмеряющий время работы конкретного агрегата
2. Инициализировать дисплей для вывода тестовой информации о состоянии машины
3. Написать тестовую программу, которая позволит залить воду в бак машинки, прогнать её насосом без нагревания в течение 5 минут, после чего слить воду.

В дальнейшем:
- Инициализировать АЦП для корректной работы термодатчика и ТЭНа (какое мытьё посуды без нагрева воды)
- Реализовать функцию паузы / аварийного слива
- Реализовать открытие отсека моющего средства в программе
- Индикация отсутствия соли (вывести с датчика на дисплей)
- Реализовать аквастоп/остановку по замку

Более сложные заморочки, такие как выбор программы под разную посуду, подгонка времени и напора воды под конкретное моющее средство пока реализовывать не планирую, ибо эти фичи, как правило, нужны уже конечному потребителю (да и то не всегда). Для минимальной же работоспособности прибора сойдут и ранее перечисленные функции. Подключение модуля и первые натурные испытания 7-минутной тестовой программы также в следующем посте. Пока что наше изделие ещё не переросло уровень "Ардуина щелкает, светодиодами мигает", но это всё в скором времени поправимо.

А пока всё, с вами был Kekovsky, спасибо всем кто дочитал (если кому-то это интересно). Своё мнение по поводу проекта пишите в комментариях.

292
Автор поста оценил этот комментарий
Вот на такие посты и нужны донаты - человек ебется, ради того, чтобы заебаться и потом результат выложить для других людей.
@pikabu, я готов отрезать от своего рейтинга, чтобы вы пришили ему до 49500)
раскрыть ветку (1)
5
DELETED
Автор поста оценил этот комментарий

Не прошло и полгода, как и мне стало можно прислать донат :) Правда, пока посты не очень часто получается выкладывать, сезонная загруженность на работе, но в будущем, думаю, много ещё интересных идей реализуем.

0
Автор поста оценил этот комментарий
Интересная идея. Подскажите, с какой целью кварц? Частоты встроенного не хватает? Погрешность расчета времени таймеров? ))) Честно, начинающий. Не понимаю. Начал свою первую плату делать. Первое травление платы пока безобразное, но с соплями пойдет.
Собственно вопрос в том же - стоит ли переделывать под внешний кварц?
Иллюстрация к комментарию
раскрыть ветку (1)
2
DELETED
Автор поста оценил этот комментарий

Кварц ставим ибо МК из-за нестабильности генератора на логике имеет нехорошее свойство без него показывать погоду со временем.. Без кварца годится для китайских пищалок, тестовых проектов и прочего. На любую серьёзную аппаратуру лучше его всё-таки ставить.

3
Автор поста оценил этот комментарий

Не, профессия кодеров на МК на рынке в наших краях просто сильно недооценена. Железо делается в основном не тут. А тут мелкие и редкие разработки. Низкий спрос на рынке труда. Это печально, но у нас этим нормальных денег заработать очень сложно. Начинающий кодер чего-нибудь актуального под ПК легко найдет себе работу с ЗП, выше средней по рынку опытных программистов МК.

раскрыть ветку (1)
2
DELETED
Автор поста оценил этот комментарий

Именно) В веб разработку в нашем плане войти легче, таких айти контор как говна. А МК это рядом производство надо, тут сложнее

1
Автор поста оценил этот комментарий

Автор, где ты учился чтобы в этом шарить?

раскрыть ветку (1)
2
DELETED
Автор поста оценил этот комментарий

У меня основное ВО по специальности инженер-гидротехник. Остальное всё доучивалось самостоятельно в свободное время по различным книжкам))

0
Автор поста оценил этот комментарий

А для мультиварки так сможете?

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Могу и утюг запрограммировать (возможно будет пост)

1
Автор поста оценил этот комментарий
Оправдаются) напишите телегу пожалуйста, я задачу подробнее опишу
раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Tg @v_l0gynov , пишите, обсудим возможность реализации

1
Автор поста оценил этот комментарий

а что за язык?

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Это обычный Си. Есть ещё ассембер на AVR. Но на нём в дурку поедешь писать)) Хотя, возможно, и до него руки дойдут как-нибудь, обязательно написал бы пост

показать ответы
1
Автор поста оценил этот комментарий
Что за пмм если не секрет? Почему не попробовали на базе простых и более дешёвых моделей собрать? Ну и если нужны диаграммы работы в личку. Чем смогу помогу.
раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Спасибо, попробую пока своими силами. ПММ Hansa Китай, модель неизвестна

0
Автор поста оценил этот комментарий

Тогда уж на ассемблере писать)

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Элементы ассемблера будут, возможно

1
Автор поста оценил этот комментарий

А почему нельзя было снять дамп с аналогичной машинки и посмотреть ее алгоритмы работы, к чему и как она обращается?!

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

И на ПЛИСе аналог херачить? К сожалению, это немного не так работает.. Как я сниму дамп с дохлой микрухи.

показать ответы
0
Автор поста оценил этот комментарий

Тут топят за семейство ESP32, так вот, и я буду топить за него, единственное - делай код на официальном фреймворке ESP-IDF, по крайней мере, дает больше свободы в плане конфигурации проекта и отдельных компонентов, плюс под разные исполнения через menuconfig можно менять конфигурации, либо создавать sdkconfig.

И это, не стесняйся использовать более свежие варианты, например, ESP32-S2 или ESP32-S3, в них и пинов побольше будет

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

ESP'шки лежат, но руки не доходят пока что.. По расписанию у меня ассемблер x86 и кое-какие другие опыты, к тому же, некоторые писали что хотят фичу мол посудомойкой со смартфона управлять.. На мой взгляд нафиг не нужно. Особой разницы в программах нету, регулировка длительности нецелесообразна, если плохо отмылось - то что не домылось можно поставить на второй круг. Поэтому там пока без ESP.

0
Автор поста оценил этот комментарий

Или фьюзы неправильно выставлены, в большинстве случаев лечится внешним тактированием, или подохли отдельные пины, в особенности тот же пин тактирования, или просто паль когда-то продали

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Подавал внешнее тактирование.. До задницы. Грешу на третий вариант. Жду если вдруг появится мега доктор - в случае если и он не увидит, значит точно брак попался

0
Автор поста оценил этот комментарий

Как можно получить резюме?

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

На данный момент оно отсутствует как таковое, я его не составлял, т.к. работу до этого не искал, а там, где работал, оно не требовалось. Поэтому, наверное, никак..

показать ответы
1
Автор поста оценил этот комментарий
Что за пмм если не секрет? Почему не попробовали на базе простых и более дешёвых моделей собрать? Ну и если нужны диаграммы работы в личку. Чем смогу помогу.
раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

@sipai4eg, есть диаграммы работы на какую-либо ПММ? Не обязательно эту. Сейчас пишу собственно сам цикл, есть кое какие вопросы, хотелось бы свериться с другими машинками

1
Автор поста оценил этот комментарий

Вы это из дурки пишите ?)

А то! Тут хорошо, и кормят и понимают...

что бы писать на асемблере нужно обладать особым складом ума

Нет, достаточно быть "поближе к железу", то есть поработать с цифровой техникой в реале, начиная со схем на логике и т.д. Тогда ничего учить не надо, оно само собой понятно. И заметьте, я специально упомянул "ассембер на AVR" - это очень простая архитектура. Возьмите тот же ARM и всё, там всё гораздо "интереснее". Сложность разработки возрастает в разы и смысл полностью теряется.

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Согласен, AVR'овский ассемблер кажется проще.. Хотя для меня сложнее ассемблер x86.. Возможно, потому что мало разбирал его

1
Автор поста оценил этот комментарий

А Вы работу случайно не ищете? )

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Случайно всегда готов к адекватным предложениям

показать ответы
0
Автор поста оценил этот комментарий

Как правило достаточно подать тактовые импульсы на XTAL1

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Позже попробую, если получится реанимировать, напишу пост

0
Автор поста оценил этот комментарий

Да скорее всего фьюзы были не так настроены, мне такое попадалось. С внешним тактированием надо пробовать. Иногда только параллельный программатор может помочь оживить чип.

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Будут ждать доктора меги)) Если и он не поможет, то на помойку

показать ответы
1
Автор поста оценил этот комментарий
Мне интереснее всего, откуда вы планируете брать собственно программы стирки. Сидеть с таймером у аналогичной машины это странно, а пробовать самому - времени уйдет просто гора. Полагаю что именно такая информация является коммерческой тайной, нет?
раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Будем пробовать навскидку писать, на основании известных циклограмм, после чего корректировать на ходу, эффективность посмотрим по результату и на чём-то остановимся

3
Автор поста оценил этот комментарий

Сразу продумай процедуру обновления прошивки в готовой и установленной посудомойке без её разборки. 100% появится что исправить в дальнейшем. Например в сторону esp глянь.

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Внутрисхемное сделано, хотел вывести его на морду посудомойки, всунул ISP и пошел, но посмотрим по помехоустойчивости.

1
Автор поста оценил этот комментарий
Опять какой то негатив в сторону ардуины. Што мешает писать код на регистрах в ней? она их поддерживает из коробки без танцев с бубном для (avr) точно. тем более для последующей перепрошивки уже будет проще использовать usb шнурок, а не таскать программатор. Залежалые мк , это конешно сильно 🤣. А так маладец канешно
раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Честно говоря я сам тот ещё ардуинщик)) Иногда юзаю когда лень возиться с портами. Но народ не очень любит

показать ответы
1
Автор поста оценил этот комментарий
Автор, @Kekovsky, как с вами связаться?) Хотелось бы заказать подобную разработку за деньги. Если интересно напишите мне пожалуйста на skiagraf@gmail.com
раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Здравствуйте, конечно, можно это сделать. Вопрос, на что? Стоит ли игра свеч? На разработку этого набора для одной ПММ у меня ушел чуть ли не месяц (ибо занимался не только этим). Не говоря о том, что мне надо физически присутствовать рядом с аппаратом, чтобы понимать, что и куда там работает. Имеет смысл это делать для какой-нибудь промышленной машинки хотя бы за 200-300к рублёв, у которых дохнет контроллер и новый взять негде. Тогда условные 30-50 т.р., затраченные на месяц разработки и допиливания программы (хотя и то месяц - мало, можно только макет сделать) хоть как-то оправдаются. Если надо будет, напишу потом телегу свою

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества