Статьи

Лазерний гравер на arduino: робимо своїми руками

  1. 1. Основи складання гравера на Aрдуіно
  2. 2. Матеріали та інструменти
  3. 3. Розробка підстави і осей
  4. 4. Електронна складова
  5. 5. Програмне забезпечення
  6. 6. Запуск і настроювання
  7. 7. Перевірка працездатності

Увага! Будьте обережні при використанні лазерів. Лазер, який застосовується в цій машині, може викликати пошкодження зору і, можливо, сліпоту. При роботі з потужними лазерами, більше 5 мВт, завжди надягайте пару захисних окулярів, призначених для блокування довжини хвилі лазера.

Лазерний гравер на Arduino - пристосування, роль якого - гравірування деревини та інших матеріалів. За останні 5 років лазерні діоди просунулися вперед, що дозволило зробити досить потужні гравери без особливої ​​складності управління лазерними трубами.

Варто обережно гравірувати інші матеріали. Так, наприклад, при використанні в роботі з лазерним приладом пластмаси з'явиться дим, який містить небезпечні гази при спалюванні.

У цьому уроці я постараюся дати напрям думки, а з часом ми створимо більш докладний урок по реалізації цього непростого пристрою.

1. Основи складання гравера на Aрдуіно

Для початку пропоную подивитися того як виглядав весь процес створення гравера у одного радіоаматора:

Сильні крокові двигуни також вимагають драйверів, щоб максимально використовувати їх. В даному проекті взято спеціальний кроковий драйвер для кожного мотора.

Нижче наведені деякі відомості про обраних компонентах:

  1. Кроковий двигун - 2 штуки.
  2. Розмір кадру - NEMA 23.
  3. Крутний момент 1.8 Нм на 255 унцій.
  4. 200 кроків / оборотів - за 1 крок 1,8 градусів.
  5. Струм - до 3,0 А.
  6. Вага - 1,05 кг.
  7. Біполярний 4-дротове з'єднання.
  8. Кроковий драйвер - 2 штуки.
  9. Цифровий степінг-драйв.
  10. Мікросхема.
  11. Вихідний струм - від 0,5 А до 5,6 А.
  12. Обмежувач вихідного струму - знижує ризик перегріву двигунів.
  13. Сигнали управління: входи Step і Direction.
  14. Частота імпульсного входу - до 200 кГц.
  15. Напруга харчування - 20 В - 50 В постійного струму.

Для кожної осі двигун безпосередньо управляє кульковим гвинтом через з'єднувач мотора. Двигуни монтуються на рамі з використанням двох алюмінієвих кутів і алюмінієвої пластини. Алюмінієві кути і плита мають товщину 3 мм і досить міцні, щоб підтримувати двигун (1 кг) без вигинів.

Важливо! Потрібно правильно вирівняти вал двигуна і кульковий гвинт. З'єднувачі, які використовуються, мають деяку гнучкість, щоб компенсувати незначні помилки, але якщо помилка вирівнювання надто велика, вони не спрацюють!

Ще один процес створення даного пристрою можна подивитися на відео:

2. Матеріали та інструменти

Нижче наведено таблицю з матеріалами і інструментами, необхідними для проекту «лазерний гравер на Aрдуіно».

ПунктПостачальникКількість

Кроковий двигун NEMA 23 + драйвер eBay (продавець: primopal_motor) 2 Діаметр 16 мм, крок 5 мм, кульковий гвинт довжиною 400 мм (тайванський) eBay (продавець: silvers-123) 2 16-мм а підтримка BK12 з кульковим гвинтом (приводний кінець) eBay (продавець: silvers-123); 2 16 мм BF12 Підтримка кулькового гвинта (без веденого кінця) eBay (продавець: silvers-123); 2 16 вал довжиною 500 мм (продавець: silvers-123) 4 (SK16) 16 опори вала (SK16) (продавець: silvers-123) 8 16 лінійний підшипник (SC16LUU) eBay (продавець: silvers-123) 4 eBay (продавець: silvers-123) 2 Тримач валу 12 мм (SK12) (продавець: silvers-123 ) 2 A4-розмір 4,5 мм прозорий акриловий лисиць т eBay (продавець: acrylicsonline) 4 Алюмінієва Плоска штанга 100 мм x 300 мм x 3 мм eBay (продавець: willymetals) 3 50 мм x 50 мм 2.1 м Алюмінієвий паркан Будь тематичний магазин 3 Алюмінієва Плоска штанга Будь тематичний магазин 1 Алюмінієвий кут Будь тематичний магазин 1 Алюмінієвий кут 25 мм x 25 мм x 1 м x 1,4 мм Будь тематичний магазин 1 Гвинти з головним головкою M5 (різні довжини) boltsnutsscrewsonline.com M5 гайки boltsnutsscrewsonline.com M5 шайби boltsnutsscrewsonline.com

3. Розробка підстави і осей

Розробка підстави і осей

Машина використовує кулькові гвинти і лінійні підшипники для управління становищем і рухом осей X і Y.

Характеристики кулькових гвинтів і аксесуарів машини:

  • 16 мм кульковий гвинт, довжина - 400 мм-462 мм, включаючи оброблені кінці;
  • крок - 5 мм;
  • C7 рейтинг точності;
  • BK12 / BF12 кулькові опори.

Так як кулькова гайка складається з кулькових підшипників, що котяться в гусеничному ходу проти кулькового гвинта дуже малого тертя, це означає, що двигуни можуть працювати на більш високих швидкостях без зупинки.

Обертальна орієнтація кульковою гайки блокується за допомогою алюмінієвого елемента. Базова плита кріпиться до двох лінійним підшипників та до кульковою гайки через алюмінієвий кут. Обертання вала Ballscrew призводить в лінійний рух опорну плиту.

4. Електронна складова

Електронна складова

Обраний лазерний діод - це діод потужністю 1,5 Вт, 445 нм, встановлений в корпусі розміром 12 мм, з фокусируемое скляним об'єктивом. Такі можуть бути знайдені, попередньо зібрані, на eBay. Так як це лазер 445 нм, світло, який він виробляє, є видимим синім світлом.

Лазерний діод вимагає радіатора при роботі на високих рівнях потужності. При конструюванні гравера використовуються дві алюмінієві опори для SK12 12 мм, як для кріплення, так і для охолодження лазерного модуля.

Інтенсивність виходу лазера залежить від струму, який проходить через нього. Діод сам по собі не може регулювати струм, і, якщо він підключений безпосередньо до джерела живлення, він буде збільшувати струм до тих пір, поки він не зруйнується. Таким чином, для захисту лазерного діода і управління його яскравістю потрібно регульована схема струму.

Ще один варіант схеми з'єднання мікроконтролера і електронних деталей:

5. Програмне забезпечення

Ескіз Arduino інтерпретує кожен блок команд. Існує кілька команд:

1 - перемістіть ПРАВО на один піксель FAST (порожній піксель).

2 - перемістіть ПРАВО на один піксель SLOW (згорілий піксель).

3 - перемістіть ЛІВИЙ на один піксель FAST (порожній піксель).

4 - перемістіть LEFT на один піксель SLOW (згорілий піксель).

5 - переміщення вгору на один піксель FAST (порожній піксель).

6 - перемістіть UP на один піксель SLOW (згорілий піксель).

7 - перемістіть ВНИЗ одним пікселем FAST (порожній піксель).

8 - перемістіть ВНИЗ одним пікселем SLOW (згорілий піксель).

9 - включити лазер.

0 - вимкнути лазер.

r - повернути осі в початкове положення.

З кожним символом Arduino запускає відповідну функцію для запису на вихідні висновки.

Arduino контролює швидкість двигуна через затримки між ступінчастими імпульсами. В ідеальному випадку машина буде запускати двигуни з однаковою швидкістю, незалежно від того, гравірує чи її зображення або пропускає порожній піксель. Однак через обмежену потужності лазерного діода машина повинна трохи сповільнюватися при записі пікселя. Ось чому є дві швидкості для кожного напрямку в списку символів команд вище.

Скетч 3-х програм для лазерного Arduino-гравера нижче:

/ * Stepper motor control program * / // constants will not change. Used here to set pin numbers: const int ledPin = 13; // the number of the LED pin const int OFF = 0; const int ON = 1; const int XmotorDIR = 5; const int XmotorPULSE = 2; const int YmotorDIR = 6; const int YmotorPULSE = 3; // half step delay for blank pixels - multiply by 8 (<8ms) const unsigned int shortdelay = 936; // half step delay for burnt pixels - multiply by 8 (<18ms) const unsigned int longdelay = 2125; // Scale factor // Motor driver uses 200 steps per revolution // Ballscrew pitch is 5mm. 200 steps / 5mm, 1 step = 0.025mm // const int scalefactor = 4; // full step const int scalefactor = 8; // half step const int LASER = 51; // Variables that will change: int ledState = LOW; // ledState used to set the LED int counter = 0; int a = 0; int initialmode = 0; int lasermode = 0; long xpositioncount = 0; long ypositioncount = 0; // ************************************************ ************************************************** ********* // Initialisation Function // *********************************** ************************************************** ********************** void setup () {// set the digital pin as output: pinMode (ledPin, OUTPUT); pinMode (LASER, OUTPUT); for (a = 2; a <8; a ++) {pinMode (a, OUTPUT); } A = 0; setinitialmode (); digitalWrite (ledPin, ON); delay (2000); digitalWrite (ledPin, OFF); // Turn the Serial Protocol ON Serial.begin (9600); } // *********************************************** ************************************************** *********** // Main loop // ********************************* ************************************************** ************************* void loop () {byte byteRead; if (Serial.available ()) {/ * read the most recent byte * / byteRead = Serial.read (); // You have to subtract '0' from the read Byte to convert from text to a number. if (byteRead! = 'r') {byteRead = byteRead-'0 '; } // Move motors if (byteRead == 1) {// Move right FAST fastright (); } If (byteRead == 2) {// Move right SLOW slowright (); } If (byteRead == 3) {// Move left FAST fastleft (); } If (byteRead == 4) {// Move left SLOW slowleft (); } If (byteRead == 5) {// Move up FAST fastup (); } If (byteRead == 6) {// Move up SLOW slowup (); } If (byteRead == 7) {// Move down FAST fastdown (); } If (byteRead == 8) {// Move down SLOW slowdown (); } If (byteRead == 9) {digitalWrite (LASER, ON); } If (byteRead == 0) {digitalWrite (LASER, OFF); } If (byteRead == 'r') {// reset position xresetposition (); yresetposition (); delay (1000); }}} // ********************************************* ************************************************** ************* // Set initial mode // ****************************** ************************************************** **************************** void setinitialmode () {if (initialmode == 0) {digitalWrite (XmotorDIR, OFF); digitalWrite (XmotorPULSE, OFF); digitalWrite (YmotorDIR, OFF); digitalWrite (YmotorPULSE, OFF); digitalWrite (ledPin, OFF); initialmode = 1; }} // ********************************************** ************************************************** ************ // Main Motor functions // ******************************* ************************************************** *************************** void fastright () {for (a = 0; a <scalefactor; a ++) {digitalWrite (XmotorDIR, ON ); delayMicroseconds (15); digitalWrite (XmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (XmotorPULSE, OFF); delayMicroseconds (shortdelay); digitalWrite (ledPin, OFF); } Xpositioncount ++; } Void slowright () {for (a = 0; a <scalefactor; a ++) {digitalWrite (XmotorDIR, ON); delayMicroseconds (15); digitalWrite (XmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (XmotorPULSE, OFF); delayMicroseconds (longdelay); digitalWrite (ledPin, OFF); } Xpositioncount ++; } Void fastleft () {for (a = 0; a <scalefactor; a ++) {digitalWrite (XmotorDIR, OFF); delayMicroseconds (15); digitalWrite (XmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (XmotorPULSE, OFF); delayMicroseconds (shortdelay); digitalWrite (ledPin, OFF); } Xpositioncount--; } Void slowleft () {for (a = 0; a <scalefactor; a ++) {digitalWrite (XmotorDIR, OFF); delayMicroseconds (15); digitalWrite (XmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (XmotorPULSE, OFF); delayMicroseconds (longdelay); digitalWrite (ledPin, OFF); } Xpositioncount--; } Void fastup () {for (a = 0; a <scalefactor; a ++) {digitalWrite (YmotorDIR, ON); delayMicroseconds (15); digitalWrite (YmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (YmotorPULSE, OFF); delayMicroseconds (shortdelay); digitalWrite (ledPin, OFF); } Ypositioncount ++; } Void slowup () {for (a = 0; a <scalefactor; a ++) {digitalWrite (YmotorDIR, ON); delayMicroseconds (15); digitalWrite (YmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (YmotorPULSE, OFF); delayMicroseconds (longdelay); digitalWrite (ledPin, OFF); } Ypositioncount ++; } Void fastdown () {for (a = 0; a <scalefactor; a ++) {digitalWrite (YmotorDIR, OFF); delayMicroseconds (15); digitalWrite (YmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (YmotorPULSE, OFF); delayMicroseconds (shortdelay); digitalWrite (ledPin, OFF); } Ypositioncount--; } Void slowdown () {for (a = 0; a <scalefactor; a ++) {digitalWrite (YmotorDIR, OFF); delayMicroseconds (15); digitalWrite (YmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds (15); digitalWrite (YmotorPULSE, OFF); delayMicroseconds (longdelay); digitalWrite (ledPin, OFF); } Ypositioncount--; } Void xresetposition () {while (xpositioncount! = 0) {if (xpositioncount> 0) {fastleft (); } If (xpositioncount <0) {fastright (); }}} Void yresetposition () {while (ypositioncount! = 0) {if (ypositioncount> 0) {fastdown (); } If (ypositioncount <0) {fastup (); }}}

6. Запуск і настроювання

Arduino представляє мозок для машини. Він виводить сигнали кроку і напрямки для крокових драйверів і сигналу дозволу лазера для драйвера лазера. У поточному проекті для управління машиною потрібно тільки 5 вихідних контактів. Важливо пам'ятати, що підстави для всіх компонентів повинні бути пов'язані один з одним.

7. Перевірка працездатності

Ця схема вимагає, щонайменше, харчування 10 В постійного струму, і має простий вхідний сигнал включення / вимикання, який надається Arduino. Мікросхема LM317T є лінійний регулятор напруги, який налаштований, як регулятор струму. У схему включений потенціометр, що дозволяє регулювати регульований струм.

Новости