MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)

SergeyDSI
Идет загрузка
Загрузка
03.02.2019
9556
54
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

63
Итак самое главное!

Мне кажется придумал классное название проекту:

MMRU - Multi Material Russian (или RAMPS) Upgrade!

По моему оригинально? А Вы что думаете?

Итак железо собрано, все кабели готовы для подключения к Orange PI. Но я не стал спешить и решил запилить простой скетч, для тестирования железа.

А для начала немного подробностей, что сделано:

1. Напечатал корпус (верхнюю крышку) + блок управления, на 5 ледов и 5 бутонов. Соответственно для выбора филамента, вручную не обращаясь к средствам клипера или его меню. Быстро, удобно, молодежно.

Светодиоды и кнопки подключил к дисплейному порту, как и описывал ранее. Все прекрасно фунциклирует и радует меня, что этот этап позади - настала пора кодить и получать удовольствие от лагов :)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
2. Забегая на перед - выяснил что драйверы все таки греются, видимо сказывается ток удержания шаговиков. А без этого никак, особенно у селектора филамента. Может быть потом я буду снимать с них напряжение, но это будет уже ясно только после долгого тестирования в реальной работе. Поэтому был установлен вентилятор, сверху на крышке и запитан от D10 выхода на хотэнд вроде, так что в теории вентилятором можно будет еще и программно управлять.
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
3. Установил для тестов 3 тефлоновых входящих трубки филамента - на первое время тестов пойдет. Если уж крайние будут работать, то и средние тоже.
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
MMRU (Multi Material Russian Upgrade) Remix on MMU2 (Часть 3: Тест механики и железа)
Итак, пока это добро не установлено в шкаф к принтеру, как я и говорил - сделал тестовый скетч для проверки всех датчиков, концевиков, кнопок, светодиодов и конечно же шаговиков.

Светодиоды, по очереди перемигиваются, при нажатии кнопок и срабатывании сенсоров - в терминал валятся сообщения. Ну а для управления моторами, нужно зажать одновременно одну из трех первых кнопок (для каждого мотора соответственно) и 4 или 5 кнопками можно подвигать их туда обратно.

Вот скетч:

/*

MMRU by Sergey Krutyko Complete test after assembly

*/

#define LED1 39

#define LED2 37

#define LED3 35

#define LED4 33

#define LED5 31

#define KEY1 32

#define KEY2 47

#define KEY3 45

#define KEY4 43

#define KEY5 41

#define STOPX 3

#define FINDA 14

#define STEPS 160

#define FAN 10

#define X_STEP_PIN 54

#define X_DIR_PIN 55

#define X_ENABLE_PIN 38

#define Y_STEP_PIN 60

#define Y_DIR_PIN 61

#define Y_ENABLE_PIN 56

#define E_STEP_PIN 26

#define E_DIR_PIN 28

#define E_ENABLE_PIN 24

long ms;

bool bl;

byte led=4;

void setup() {

// initialize digital pin LED_BUILTIN as an output.

pinMode(LED_BUILTIN, OUTPUT);

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(LED3, OUTPUT);

pinMode(LED4, OUTPUT);

pinMode(LED5, OUTPUT);

pinMode(KEY1, INPUT_PULLUP);

pinMode(KEY2, INPUT_PULLUP);

pinMode(KEY3, INPUT_PULLUP);

pinMode(KEY4, INPUT_PULLUP);

pinMode(KEY5, INPUT_PULLUP);

pinMode(STOPX, INPUT_PULLUP);

pinMode(FINDA, INPUT_PULLUP);

pinMode(FAN, OUTPUT);

digitalWrite(FAN,HIGH);

Serial.begin(115200);

Serial.println('Starting Test');

}

void setled(byte led, byte s) {

if (led==0) digitalWrite(LED1, s);

if (led==1) digitalWrite(LED2, s);

if (led==2) digitalWrite(LED3, s);

if (led==3) digitalWrite(LED4, s);

if (led==4) digitalWrite(LED5, s);

}

void loop_keys() {

if (digitalRead(KEY1)==LOW) Serial.println('KEY 1 Presset');

if (digitalRead(KEY2)==LOW) Serial.println('KEY 2 Presset');

if (digitalRead(KEY3)==LOW) Serial.println('KEY 3 Presset');

if (digitalRead(KEY4)==LOW) Serial.println('KEY 4 Presset');

if (digitalRead(KEY5)==LOW) Serial.println('KEY 5 Presset');

if (digitalRead(STOPX)==HIGH) Serial.println('ENDSTOP Selector ON');

if (digitalRead(FINDA)==LOW) Serial.println('FINDA Sensor ON');

if ((digitalRead(KEY1)==LOW)and(digitalRead(KEY4)==LOW)) {

stepper_left(X_STEP_PIN,X_DIR_PIN,X_ENABLE_PIN,STEPS);

}

if ((digitalRead(KEY1)==LOW)and(digitalRead(KEY5)==LOW)) {

stepper_right(X_STEP_PIN,X_DIR_PIN,X_ENABLE_PIN,STEPS);

}

if ((digitalRead(KEY2)==LOW)and(digitalRead(KEY4)==LOW)) {

stepper_left(Y_STEP_PIN,Y_DIR_PIN,Y_ENABLE_PIN,STEPS/5);

}

if ((digitalRead(KEY2)==LOW)and(digitalRead(KEY5)==LOW)) {

stepper_right(Y_STEP_PIN,Y_DIR_PIN,Y_ENABLE_PIN,STEPS/5);

}

if ((digitalRead(KEY3)==LOW)and(digitalRead(KEY4)==LOW)) {

stepper_left(E_STEP_PIN,E_DIR_PIN,E_ENABLE_PIN,STEPS);

}

if ((digitalRead(KEY3)==LOW)and(digitalRead(KEY5)==LOW)) {

stepper_right(E_STEP_PIN,E_DIR_PIN,E_ENABLE_PIN,STEPS);

}

}

void loop_leds() {

bl=!bl;

if (bl) digitalWrite(LED_BUILTIN, HIGH); else digitalWrite(LED_BUILTIN, LOW);

setled(led,LOW);

led++;

if (led>4) led=0;

setled(led,HIGH);

}

void stepper_left(int p1,int p2,int p3, int st) {

pinMode(p1,OUTPUT);

pinMode(p2,OUTPUT);

pinMode(p3,OUTPUT);

digitalWrite(p3,LOW); // enable

digitalWrite(p2,LOW); // left

for (byte i=0; i
digitalWrite(p1,HIGH);

delay(1);

digitalWrite(p1,LOW);

delay(1);

}

}

void stepper_right(int p1,int p2,int p3,int st) {

pinMode(p1,OUTPUT);

pinMode(p2,OUTPUT);

pinMode(p3,OUTPUT);

digitalWrite(p3,LOW); // enable

digitalWrite(p2,HIGH); // right

for (byte i=0; i
digitalWrite(p1,HIGH);

delay(1);

digitalWrite(p1,LOW);

delay(1);

}

}

void loop() {

if (ms
ms=millis()+500;

loop_leds();

}

loop_keys();

delay(100);

}

Ну и запилил немного видео на тему теста:
Спасибо за внимание - всем кому интересен данный проект :)

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

63
Комментарии к статье