Работа 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 128×64 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. В ближайшем будущем планирую поставить автокалибровку стола с сервомотором. И собрать каркас второго принтера.