Страница 1 из 2

Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 00:23
Leha_
Идея гравировки без использования компьютера пришла сразу после сборки станка. Стало крайне неудобно держать компьютер включенным под задачу гравировки, которая может выполняться до нескольких часов, а в некоторых случаях десятков часов. Гравер стоит в квартире на небольшом балконе, и выделить место под компьютер (в любом исполнении) это проблема, а тянуть кабель из соседней комнаты – так себе идея. Решение было принято следующее - попробовать свои силы в программировании и собрать устройство самостоятельно из того что было (устройство назову - блок управления). Используемые комплектующие -это оставшиеся модули от старых и нереализованных проектов на платформе 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 символов. Если что-то не так, то файл тупо не открывает.
Итог: Проект реализован в конечное устройство, задача выполнена. Еще раз себе доказал, что нет не решаемых задач.
В процессе реализации проекта получил массу морального удовольствия и самое главное, бесценный опыт. Не скрою, уже есть некоторые мысли, что можно оптимизировать, подкорректировать. Прижмет, займусь, пока все устраивает.

В заключении несколько фоток:
Изображение
Изображение
Изображение
Изображение
Изображение

На этом все. Если будут вопросы – пишите, с ответами постараюсь долго не тянуть.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 06:01
Q-starь
А схема то где? Мож будут адепты :monkey:

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 07:43
svm
Выглядит неплохо, но пока не пощупаешь руками, трудно что-то обсуждать или советовать. В какой среде программировалось? GRBL сидит в контроллере или отдельно? Информации никакой. Одни картинки.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 08:45
Rom327
Leha_ писал(а): В процессе реализации проекта получил массу морального удовольствия и самое главное, бесценный опыт.
Приветствую автора! Leha_, а нет желания поделиться бесценным опытом с общественностью в виде схем и прошивок? Спасибо!

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 11:48
Ev3658
Можно по проще сделать, экран особо и не нужен.
Если правильно понял, то нужно просто создать связь по Uart с GRBL модулем станка.

Как команда паузы передачи данных от GRBL модуля осуществляется?

Arduino вроде как не на чётных для Uart кварцах, может кварц перепаять под UART? (Я использую 11.0592, 14.7456, это важно).

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 21:10
Leha_
Q-starь писал(а): 21 янв 2021, 06:01 А схема то где? Мож будут адепты :monkey:
ОК
Изображение

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 21:17
Leha_
svm писал(а): 21 янв 2021, 07:43 В какой среде программировалось?
Среда программирования ----> Arduino IDE
svm писал(а): 21 янв 2021, 07:43 GRBL сидит в контроллере или отдельно?
Не совсем понял как может GRBL сидеть не в контроллере ???
GRBL залит на Arduino UNO c CNC шилдом.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 21:42
svm
Leha_ писал(а): 21 янв 2021, 21:17
svm писал(а): 21 янв 2021, 07:43 В какой среде программировалось?
Среда программирования ----> Arduino IDE
svm писал(а): 21 янв 2021, 07:43 GRBL сидит в контроллере или отдельно?
Не совсем понял как может GRBL сидеть не в контроллере ???
GRBL залит на Arduino UNO c CNC шилдом.
Т.е. GRBL не в Вашем контроллере, а на отдельной UNO. Есть варианты где автономный контроллер и GRBL на одном камне

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 22:42
Leha_
Ev3658 писал(а): 21 янв 2021, 11:48 Можно по проще сделать, экран особо и не нужен.
Если правильно понял, то нужно просто создать связь по Uart с GRBL модулем станка.
Абсолютно правильно, можно и без экрана, но теряется информативность, и потребуется дополнительно подключать SD-модуль для работы с картами памяти. На борту TFT, который использовал, уже есть встроенный SD ридер.
Изображение
Ev3658 писал(а): 21 янв 2021, 11:48 Как команда паузы передачи данных от GRBL модуля осуществляется?
Arduino вроде как не на чётных для Uart кварцах, может кварц перепаять под UART? (Я использую 11.0592, 14.7456, это важно).
Команд паузы нет. C кварцами не заморачивался.
Передача команд в GRBL передается по следующему алгоритму:
Arduino Mega с TFT
1. Считывает строку из файла с G-CODом.
2. Передает считанную строку через последовательный порт (используются пины RX и TX).
3. Мониторит последовательный порт в цикле. Ждет ответ. Как только в порт пришло "ОК" или "ERROR" переходим к пункту 1. И так до последней строки в файле.

Arduino UNO (залита программа GRBL) c CNC шилдом
1. Мониторит последовательный порт в бесконечном цикле.
2. Есть что то есть в порту, то проверяет команда это или нет. Если команда, то её выполняет и после выполнения выдает в порт "ОК". "ERROR" в противном случае.
Примерно так.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 23:07
Leha_
svm писал(а): 21 янв 2021, 21:17 Т.е. GRBL не в Вашем контроллере, а на отдельной UNO.
Да, GRBL отдельно на Arduino UNO.
svm писал(а): 21 янв 2021, 21:17 Есть варианты где автономный контроллер и GRBL на одном камне
Думаю есть (промышленные), частно не узнавал.
Самому тоже можно заморочиться, но нужно будет пилить код GRBL, довешивать его своим, а там памяти в Arduino UNO только-только хватает.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 23:23
Ev3658
Тогда предложил бы сперва сделать самое простое устройство с рядом кнопок и переключателей GRBL
Индикатор можно простой сегментный на SPI для указания строки или номера программы.
Тут скорей простота повторения нужна, многодрыг LCD тоже сложно многим сделать, а вот кнопочную версию может склепать каждый по нужному функционалу.
Можно сделать индикацию G и М команд светодиодиками :cheesy:

С кварцами стоит заморочится если будет большая скорость передачи данных и аппаратная реализация UART. Хотя связь тоже с GRBL у которой тоже кварц далеко не для UART :thinking:

При кварце 16 000 000 герц:
115200 - 7.84% ошибок
57600 - 2.08% ошибок
38400 - 0.16% ошибок
19200 - 0.16% ошибок
9600 - 0.16% ошибок
1200 - 0.04% ошибок

К примеру при кварце 11 059 200 герц 0% ошибок.

При отрисовке лазером G-code чем быстрей выплеснуть, тем быстрей прорисуется, иногда даже передача данных останавливает всё, а поддержка лазерного режима в GRBL 1.1 кажись так вообще шикарно реализована по сравнению с 0.9, там нет засветок в начале и в конце и передача нужна не от ОК до ОК, а как-то сразу до заполнения буфера GRBL системы, тот в свою очередь как раз и делает равномерный засвет лазеров и в начале и в конце луча двигаясь с одинаковой скоростью.

Для гравировки так-то проще, там дольше отрабатывается, чем гравируется, хотя в большинстве случаев все окружности и т.п. так-же просто координатами сделаны без всяких J и I и многих вкусностях G-кода, тоже нужно быстро реагировать.

Подробнее о частотах кварцевого резонатора и почему, да что и куда вот тут есть (в таблице область применения): http://microsin.net/adminstuff/hardware ... ncies.html
2021-01-21_23-26-05.png (2589 просмотров) <a class='original' href='./download/file.php?id=191363&sid=d916dce609cb55df4f50be3cc167018f&mode=view' target=_blank>Загрузить оригинал (12.34 КБ)</a>

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 23:25
Leha_
Rom327 писал(а): 21 янв 2021, 08:45 Приветствую автора! Leha_, а нет желания поделиться бесценным опытом с общественностью в виде схем и прошивок? Спасибо!
Если нужен листинг для Arduino IDE пишите в личку email ---> вышлю.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 21 янв 2021, 23:58
Leha_
Ev3658 писал(а): 21 янв 2021, 23:23 С кварцами стоит заморочится если будет большая скорость передачи данных и аппаратная реализация UART. Хотя связь тоже с GRBL у которой тоже кварц далеко не для UART :thinking:
В программе реализован подсчет ошибок. Скорость передачи стоит стандартная, по прошивке GRBL 115200 ( Serial.begin(115200);)
Ошибки были но их очень мало, можно сказать практически нет.
Заметил когда станок был подключен к компу, ошибки было почти при каждом выжигании (от 1 до 10 за 3 часа работы). Связываю это с длиной кабеля и радиопомехами.
А сейчас длина соединения минимальная не более 10 см.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 22 янв 2021, 08:45
svm
Leha_ писал(а): 21 янв 2021, 23:07
svm писал(а): 21 янв 2021, 21:17 Т.е. GRBL не в Вашем контроллере, а на отдельной UNO.
Да, GRBL отдельно на Arduino UNO.
svm писал(а): 21 янв 2021, 21:17 Есть варианты где автономный контроллер и GRBL на одном камне
Думаю есть (промышленные), частно не узнавал.
Самому тоже можно заморочиться, но нужно будет пилить код GRBL, довешивать его своим, а там памяти в Arduino UNO только-только хватает.
Я с этим немного занимался. Для фрезера полноценный GRBL вполне оправдан, а для лазерного гравера, несколько избыточен. Вот я собирал ЧПУ плазморез на основе автономного контроллера для лазера. Там под видео есть ссылки на несколько рабочих вариантов.
https://www.youtube.com/watch?v=0uOpTMjR5Qk

Достаточно одной любой Ардуинки не ниже 328 первая ссылка на двух ардуино похожа на Вашу конструкцию, только элементная база попроще.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 22 янв 2021, 15:53
Rom327
К этому проекту еще клавиатуру на Ардуино Нано добавить и блок индикации на Ардуино Про...
Не жирно ли для GRBL контроллера использовать 2 процессора ;) ?

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 22 янв 2021, 16:54
svm
Rom327 писал(а): 22 янв 2021, 15:53 К этому проекту еще клавиатуру на Ардуино Нано добавить и блок индикации на Ардуино Про...
Не жирно ли для GRBL контроллера использовать 2 процессора ;) ?
По цене, габаритам и простоте эксплуатации Ардуинки выигрывают однозначно. У меня на всех станках стоят только драйвера, выведенные на LPT разъем. На стадии отладки подключаю МАЧ. Если все Ок, то GRBL контроллер, у него распайка разъема такая-же как у МАЧ. Но все равно остается ПК, что не всегда удобно. Если у меня 4 станка и используются от случая к случаю, то держать у каждого компьютер невыгодно. Поэтому автономный контроллер на Ардуинке, вполне логичное решение. Ну а лазерному граверу и GRBL лишний. Там достаточно простенького автономника. ЧПУ плазморез, тоже лучше с автономником (проще бороться с помехами). Так, что если станок не супер навороченный, а обычный хоббийный и лишних денег нет, то такое решение вполне оправданно. Хотя есть еще хороший вариант - использование старого смартфона.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 26 янв 2021, 00:28
Leha_
Работа блока управления на видео:

https://youtu.be/ynzd-YBtFcg

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 05 мар 2021, 02:01
shura2
Запилил похожий проект, только на esp32, под 4 оси и экран с тачем. Причем на одной шине SPI также были проблемы с тачем и кардридером. пришлось их раскинуть на две шины.
Из плюсов esp - вайфай (или вебморда или просто скидывать файлы на флешку) и шикарная графическая библиотека LVGL https://www.youtube.com/watch?v=I5iTb9AkY2w , со всеми элементами графического интерфейса, отработкой нажатий и т.д.

Leha_ писал(а): Arduino Mega с TFT
1. Считывает строку из файла с G-CODом.
2. Передает считанную строку через последовательный порт (используются пины RX и TX).
3. Мониторит последовательный порт в цикле. Ждет ответ. Как только в порт пришло "ОК" или "ERROR" переходим к пункту 1. И так до последней строки в файле.
Если error, то снова эту же строку шлете? Других проверок нет?

Вы запрос "?" не передаете для определения координат и статуса?

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 09 мар 2021, 23:00
Leha_
Да экран конечно хорош, тоже хочу в перспективе перейти в проектах на STM, по сравнению с Atmel AVR небо и земля.
shura2 писал(а): 05 мар 2021, 02:01 Если error, то снова эту же строку шлете? Других проверок нет?

Вы запрос "?" не передаете для определения координат и статуса?
Если ERROR, только фиксация (для статистики) и переход к следующей команде (не отправляю строку еще раз из-за возможно цикличной ошибки, что может привести к бесконечному циклу и зависанию станка). Других проверок нет.

Запросы для определения координат и статуса не передаю. Текущее положение координаты X,Y, S(мощность лазера), F(скорость перемещения) определяются через анализ самого G-Coda перед отправкой в станок.

Re: Управление самодельным лазерным гравером посредством Arduino Mega с TFT дисплеем

Добавлено: 10 мар 2021, 18:14
shura2
Leha_ писал(а): Если ERROR, только фиксация (для статистики) и переход к следующей команде (не отправляю строку еще раз из-за возможно цикличной ошибки, что может привести к бесконечному циклу и зависанию станка). Других проверок нет.
Понятно. А что с буфером? как идет контроль его переполнения?