Работа 3D принтера без компьютера

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

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

Начнем, пожалуй, с питания.


Тут все просто. Стабилизатор на 5 вольт (я взял L7805CV с выходным током до 1,5А) для питания ардуины и дисплея. Обвязка — два конденсатора. Стабилизатор подключается к 12 вольтам. От него через резистор подключаем светодиод для индикации работы. Стабилизатор напряжения на 3.3 вольта (LD1117A33 с выходным током до 1А) для питания SD карты подключается к 5 вольтам. Обвязка так же — два конденсатора (ну и по аналогии светодиод через резистор).
Конкретные значения для конденсаторов выбираются по спецификации стабилизаторов, значения резисторов по току потребления диодов и напряжения питания (ну или опытным путем).

На RAMPS’е есть место для пайки диода D1. При его подключении на пин Vin ардуины подается 12 вольт и идет в стабилизатор на ардуине. Поначалу я его припаял, и все вместе даже работало, но через несколько минут принтер просто выключился и без подключения USB кабеля его было не включить (наверное, стабилизатор перегрелся или сгорел). Поэтому было решено выпаять диод и подключить внешний стабилизатор.

Картридер


Для питания карты памяти нужно 3.3 вольта, логические уровни карты тоже 3.3 вольта. В готовых модулях под названием SDRamps используется стабилизатор (его мы уже собрали) и микросхема преобразователя уровней (5->3.3). Так как такой микросхемы у меня не было, поэтому было решено использовать обычный резистивный делитель.
Карта подключается в режиме SPI. Используются: 3 линии SCK, CS, MOSI от ардуины к карте через делители; линия MISO напрямую с карты к ардуине; так же подключается питание 3.3 вольта; земля; и еще я подключил детектор наличия карты. Картхолдер был выпаян со старого смартфона, но можно использовать переходник SD-microSD (но у него отсутствует детектор наличия карты).

Экран

Подойдет любой символьный дисплей, начиная от 2 строк на 16 символов. Чем больше строк, тем больше данных на нем можно отобразить. Так же можно подключить графический дисплей SPI LCD 128×64 (Controller ST7565R graphic Display Family). Подключаем по схеме описанной тут. 4 линии данных, RS, Enable, 5 вольт, земля и подстроечный резистор на 10кОм для регулирования контраста.

Кнопки

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

Мосфет на нагреваемый столик


Как я уже упоминал в прошлой статье, этот самый мосфет сильно греется из-за неправильной работы. Я заменил его на APM2509N, взятый с видеокарты. Так же были нарощены дорожки питания столика. Скальпелем окуратно срезано лаковое покрытие и пропаяно толстым слоем припоя. Предыдущий мосфет грелся так, что через 30-50 минут об него можно было обжечь палец. А новый максимально нагревался до 38 градусов за 6 часовую печать. И да, мосфет стоит без радиатора.
Столик теперь нагревается до 100°С за 15-17 минут (раньше минут за 30). Да и светодиод на столике стал светить как-то ярче (а может это только кажется).

Подключаем

Выход со стабилизатора 5 вольт подключаем к любому пину 5V на RAMPS’е.
Картриадер подключается к разъему AUX-3 (слева пины RAMPS, справа — SD):
пин D50(MISO) — DO(MISO);
пин D51(MOSI) — делитель — DI(MOSI);
пин D52(SCK) — делитель — SCK;
пин D53 — делитель — CS;
3.3 вольта (со стабилизатора) — VCC;
GND — GND(VSS);
и при наличии SD Detect подключаем к нему пин D43 разъема AUX-4.

Кнопки и дисплей подключаются к разъему AUX-4.
Дисплей (слева пины RAMPS, справа — дисплея (шина данных начинается с D0)):
пин D16 — RS;
пин D17 — Enable (E);
пин D23 — Data 4 (D4);
пин D25 — Data 5 (D5);
пин D27 — Data 6 (D6);
пин D29 — Data 7 (D7);
5 вольт — VDD;
GND — VSS;
Подстроечный резистор подключаем к 5 вольтам и земле, а выход к пину VO(контрастность);
Пин RS дисплея подключаем к земле;
При наличии подсветки, подключаем 5 вольт через резистор 1.8кОм и землю.

Кнопки подключаются к земле и:
пин D31 — Up;
пин D33 — Down;
пин D35 — Click;
По умолчанию в прошивке настроены именно эти пины. Для подключения к другим, необходимо подправить файл pins.h в прошивке.

Для запуска поддержки SD карт, символьного дисплея и кнопок в прошивке в файле configuration.h раскомментируем строку:

#define REPRAP_DISCOUNT_SMART_CONTROLLER

При этом автоматически определяются ULTIPANEL, NEWPANEL, SDSUPPORT и ULTRA_LCD, отвечающие за работу дисплея, кнопок и картриадера.
Имя принтера, отображаемое на экране, задается строкой:

#define CUSTOM_MENDEL_NAME "This Mendel"

Количество символов и строк дисплея задается параметрами LCD_WIDTH и LCD_HEIGHT соответственно:

задаем размер дисплея

#ifdef ULTIPANEL //  #define NEWPANEL  //enable this if you have a click-encoder panel   #define SDSUPPORT   #define ULTRA_LCD   #ifdef DOGLCD // Change number of lines to match the DOG graphic display     #define LCD_WIDTH 20     #define LCD_HEIGHT 5   #else     #define LCD_WIDTH 20   // менять эти     #define LCD_HEIGHT 4   // два параметра   #endif #else //no panel but just LCD   #ifdef ULTRA_LCD   #ifdef DOGLCD // Change number of lines to match the 128x64 graphics display     #define LCD_WIDTH 20     #define LCD_HEIGHT 5   #else     #define LCD_WIDTH 16     #define LCD_HEIGHT 2   #endif   #endif #endif 

Для поддержки кнопок вместо энкодера в файле ultralcd.cpp

находим строки

    //manage encoder rotation     uint8_t enc=0;     if(buttons&EN_A)         enc|=(1<<0);     if(buttons&EN_B)         enc|=(1<<1);     if(enc != lastEncoderBits)     {         switch(enc)         {         case encrot0:             if(lastEncoderBits==encrot3)                 encoderDiff++;             else if(lastEncoderBits==encrot1)                 encoderDiff--;             break;         case encrot1:             if(lastEncoderBits==encrot0)                 encoderDiff++;             else if(lastEncoderBits==encrot2)                 encoderDiff--;             break;         case encrot2:             if(lastEncoderBits==encrot1)                 encoderDiff++;             else if(lastEncoderBits==encrot3)                 encoderDiff--;             break;         case encrot3:             if(lastEncoderBits==encrot2)                 encoderDiff++;             else if(lastEncoderBits==encrot0)                 encoderDiff--;             break;         }     }     lastEncoderBits = enc; 

меняем на

//manage encoder rotation     uint8_t enc=0;     if(buttons&EN_A) { 		 encoderDiff = 1; 		 delay(10);     }     if(buttons&EN_B){ 		 encoderDiff = -1; 		 delay(10);     } 

При правильной сборке, после заливки прошивки, можно убрать USB кабель в ящик стола и печатать с SD карты.

На этом пока все. Как обычно с нетерпением жду вопросов и комментариев.

P.S. В ближайшем будущем планирую поставить автокалибровку стола с сервомотором. И собрать каркас второго принтера.

ссылка на оригинал статьи http://habrahabr.ru/post/231743/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *