Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем
Добавлено: 21 янв 2021, 00:23
Идея гравировки без использования компьютера пришла сразу после сборки станка. Стало крайне неудобно держать компьютер включенным под задачу гравировки, которая может выполняться до нескольких часов, а в некоторых случаях десятков часов. Гравер стоит в квартире на небольшом балконе, и выделить место под компьютер (в любом исполнении) это проблема, а тянуть кабель из соседней комнаты – так себе идея. Решение было принято следующее - попробовать свои силы в программировании и собрать устройство самостоятельно из того что было (устройство назову - блок управления). Используемые комплектующие -это оставшиеся модули от старых и нереализованных проектов на платформе Arduino, ждущих свою очередь в различных коробках.
Напишу сразу, я не считаю себя профессиональным программистом и данный вид деятельности не является источником моего дохода. Проект был реализован исключительно в личных интересах в свободное от основной работы время (вдруг начальство сможет меня идентифицировать). Хобби у меня такое. Было интересно смогу или нет. Взял себя на «СЛАБО».
В проекте использовал (все ранее покупалось на Aliexpress):
1. Arduino Mega 2560 .
2. TFT модуль 3.5 дюйма.
3. Модуль джойстика KY-023.
4. SD удлинитель + адаптер с SD на микро SD.
5. Соединительные провода.
6. 3D принтер для печати корпуса блока управления.
Проект разделил на этапы:
Первый – определение подключения блока управления к лазерному граверу, который управляется Arduino UNO с CNC шилдом. Подача питание и передача данных между ними.
Второй – учитывая, что софт на устройство пишется самостоятельно, определение функциональных возможностей программы по управлению станком и моих хотелок.
По моему мнению, блок управления должен выполнять следующие функции:
Основные:
- работать с файловой системой CD карты (открывать и считывать данные из файлов);
- передавать управляющие команды на CNC шилд и обрабатывать принятые;
- отображать информацию о текущем состоянии станка;
- перемещать голову с лазером по осям для определения точки старта станка (начало гравировки);
Дополнительные:
- обходить лазером периметр места гравировки (полезная опция, подсмотрел на профессиональных станках);
- перемещать голову с лазером в центр гравировки (для наглядности, проверка центра гравировки);
- отображать на дисплее гравируемое изображение (то, что выжигает в текущий момент времени, то и прорисовывает на дисплее);
- возможность менять скорость перемещения по осям и мощность лазера в процессе гравировки. Очень удобно для подбора скорости и мощности, для материала, на котором производится гравировка, без изменения G-CODa;
- расчет оставшегося времени до конца гравировки;
- возможность изменять настройки GRBL.
Третий – разработка и печать корпуса блока управления на 3D принтере.
Четвертый – тестирование софта в боевых условиях (на станке). Устранение ошибок выявленных в ходе тестирования.
В итоге 2-х недельной работы, основное время было затрачено на программирование, поиск путей решения неожиданно возникающих проблем, отладку и исправления выявленных косяков. Те, кто знаком с программированием на IDE под ARDUINO, поймут меня. Это те еще танцы, начиная с проблем напряжения питания модулей и заканчивая самой совместимостью модулей и многообразностью библиотек для них.
Коротко принцип работы блока управления:
Arduino Mega с TFT дисплеем на борту которого есть SD ридер, под управлением программы считывает G-COD из файла и передает его по Serial порту на Arduino UNO с CNC шилдом, которая в свою очередь управляет самим станком. Примерно так.
Ниже фото каждого экрана программы блока управления.
1. Основной экран.
2. Экран выбора файла с G-CODом гравировки.
3. Экран анализа файла и определения стартовой точки.
4. Экран гравировки.
5. Экран настройки параметров GRBL.
Алгоритм гравировки с помощью блока управления такой:
1. В любой программе на компе генерируем G-COD, того изображение которое нужно гравировать (обычно использую «LaserGRBL», программа простая и удобная, без всяких навороченных труднообъяснимых возможностей).
2. Копируем файл с G-CODом на SD карту.
3. Вставляем в карту в блок управления.
4. Выбираем файл.
5. Определяем станку начальную точку гравировки.
6. Запускаем гравировку.
7. Ждем и наслаждаемся работой станка (не забывая о защите глаз). Пока станок работает, думаем, что с этой штукой, которая получится делать и что еще на нем прикольного выжечь.
Проблемы, с которыми столкнулся в процессе разработки:
1. Первоначально хотел использовать TFT дисплей c тачем (есть один у меня такой подопытный), но одновременное использование тача и SD ридера на Arduino Mega возник программный конфликт они оба используют SPI, по факту из них работает только первый инициализированный либо тач, либо SD. Одновременно – Х**. Убил трое суток, перепробовав кучу библиотек так не смог решить проблему, ничего не помогло. Китайцы тоже ничего толкового не посоветовали. Плюнул, взял другой TFT без тача. Может кто сталкивался с такой проблемой, подскажите как ее решить.
2. Из-за недостаточного количества внутренней памяти в Arduino Mega пришлось все изображения, используемые в программе (картинки кнопок, фон главного экрана) хранить в отдельной папке на внешней CD карте памяти. Перспективно, наверно, подумаю и сделаю какие-нибудь шаблонные кнопки, чтобы исключить такую ситуацию. Пока смысла не вижу - некритично.
3. Arduino на безе чипа ATmega2560 с функционалом справляется - нормально, но для некоторых вещей, которые можно было реализовать в данном проекте производительности такого микроконтроллера не достаточно. Например, предпросмотр изображения картинки по G-CODу перед запуском выжигания. На мой взгляд, очень полезная опция, но с ATmega2560 анализ G-CODа с прорисовкой займет достаточное время по этой причине пришлось от нее отказаться. Да, знающие люди скажут, ведь есть STM32, но для меня это очередной этап самосовершенствования, пока только знакомлюсь с этой архитектурой.
4. Библиотека работы с SD картой, которую использую, кириллицу в названиях файлов вообще не переваривает и длина имени файла должна быть не более 15 символов. Если что-то не так, то файл тупо не открывает.
Итог: Проект реализован в конечное устройство, задача выполнена. Еще раз себе доказал, что нет не решаемых задач.
В процессе реализации проекта получил массу морального удовольствия и самое главное, бесценный опыт. Не скрою, уже есть некоторые мысли, что можно оптимизировать, подкорректировать. Прижмет, займусь, пока все устраивает.
В заключении несколько фоток:
На этом все. Если будут вопросы – пишите, с ответами постараюсь долго не тянуть.
Напишу сразу, я не считаю себя профессиональным программистом и данный вид деятельности не является источником моего дохода. Проект был реализован исключительно в личных интересах в свободное от основной работы время (вдруг начальство сможет меня идентифицировать). Хобби у меня такое. Было интересно смогу или нет. Взял себя на «СЛАБО».
В проекте использовал (все ранее покупалось на Aliexpress):
1. Arduino Mega 2560 .
2. TFT модуль 3.5 дюйма.
3. Модуль джойстика KY-023.
4. SD удлинитель + адаптер с SD на микро SD.
5. Соединительные провода.
6. 3D принтер для печати корпуса блока управления.
Проект разделил на этапы:
Первый – определение подключения блока управления к лазерному граверу, который управляется Arduino UNO с CNC шилдом. Подача питание и передача данных между ними.
Второй – учитывая, что софт на устройство пишется самостоятельно, определение функциональных возможностей программы по управлению станком и моих хотелок.
По моему мнению, блок управления должен выполнять следующие функции:
Основные:
- работать с файловой системой CD карты (открывать и считывать данные из файлов);
- передавать управляющие команды на CNC шилд и обрабатывать принятые;
- отображать информацию о текущем состоянии станка;
- перемещать голову с лазером по осям для определения точки старта станка (начало гравировки);
Дополнительные:
- обходить лазером периметр места гравировки (полезная опция, подсмотрел на профессиональных станках);
- перемещать голову с лазером в центр гравировки (для наглядности, проверка центра гравировки);
- отображать на дисплее гравируемое изображение (то, что выжигает в текущий момент времени, то и прорисовывает на дисплее);
- возможность менять скорость перемещения по осям и мощность лазера в процессе гравировки. Очень удобно для подбора скорости и мощности, для материала, на котором производится гравировка, без изменения G-CODa;
- расчет оставшегося времени до конца гравировки;
- возможность изменять настройки GRBL.
Третий – разработка и печать корпуса блока управления на 3D принтере.
Четвертый – тестирование софта в боевых условиях (на станке). Устранение ошибок выявленных в ходе тестирования.
В итоге 2-х недельной работы, основное время было затрачено на программирование, поиск путей решения неожиданно возникающих проблем, отладку и исправления выявленных косяков. Те, кто знаком с программированием на IDE под ARDUINO, поймут меня. Это те еще танцы, начиная с проблем напряжения питания модулей и заканчивая самой совместимостью модулей и многообразностью библиотек для них.
Коротко принцип работы блока управления:
Arduino Mega с TFT дисплеем на борту которого есть SD ридер, под управлением программы считывает G-COD из файла и передает его по Serial порту на Arduino UNO с CNC шилдом, которая в свою очередь управляет самим станком. Примерно так.
Ниже фото каждого экрана программы блока управления.
1. Основной экран.
2. Экран выбора файла с G-CODом гравировки.
3. Экран анализа файла и определения стартовой точки.
4. Экран гравировки.
5. Экран настройки параметров GRBL.
Алгоритм гравировки с помощью блока управления такой:
1. В любой программе на компе генерируем G-COD, того изображение которое нужно гравировать (обычно использую «LaserGRBL», программа простая и удобная, без всяких навороченных труднообъяснимых возможностей).
2. Копируем файл с G-CODом на SD карту.
3. Вставляем в карту в блок управления.
4. Выбираем файл.
5. Определяем станку начальную точку гравировки.
6. Запускаем гравировку.
7. Ждем и наслаждаемся работой станка (не забывая о защите глаз). Пока станок работает, думаем, что с этой штукой, которая получится делать и что еще на нем прикольного выжечь.
Проблемы, с которыми столкнулся в процессе разработки:
1. Первоначально хотел использовать TFT дисплей c тачем (есть один у меня такой подопытный), но одновременное использование тача и SD ридера на Arduino Mega возник программный конфликт они оба используют SPI, по факту из них работает только первый инициализированный либо тач, либо SD. Одновременно – Х**. Убил трое суток, перепробовав кучу библиотек так не смог решить проблему, ничего не помогло. Китайцы тоже ничего толкового не посоветовали. Плюнул, взял другой TFT без тача. Может кто сталкивался с такой проблемой, подскажите как ее решить.
2. Из-за недостаточного количества внутренней памяти в Arduino Mega пришлось все изображения, используемые в программе (картинки кнопок, фон главного экрана) хранить в отдельной папке на внешней CD карте памяти. Перспективно, наверно, подумаю и сделаю какие-нибудь шаблонные кнопки, чтобы исключить такую ситуацию. Пока смысла не вижу - некритично.
3. Arduino на безе чипа ATmega2560 с функционалом справляется - нормально, но для некоторых вещей, которые можно было реализовать в данном проекте производительности такого микроконтроллера не достаточно. Например, предпросмотр изображения картинки по G-CODу перед запуском выжигания. На мой взгляд, очень полезная опция, но с ATmega2560 анализ G-CODа с прорисовкой займет достаточное время по этой причине пришлось от нее отказаться. Да, знающие люди скажут, ведь есть STM32, но для меня это очередной этап самосовершенствования, пока только знакомлюсь с этой архитектурой.
4. Библиотека работы с SD картой, которую использую, кириллицу в названиях файлов вообще не переваривает и длина имени файла должна быть не более 15 символов. Если что-то не так, то файл тупо не открывает.
Итог: Проект реализован в конечное устройство, задача выполнена. Еще раз себе доказал, что нет не решаемых задач.
В процессе реализации проекта получил массу морального удовольствия и самое главное, бесценный опыт. Не скрою, уже есть некоторые мысли, что можно оптимизировать, подкорректировать. Прижмет, займусь, пока все устраивает.
В заключении несколько фоток:
На этом все. Если будут вопросы – пишите, с ответами постараюсь долго не тянуть.