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

55

‘).appendTo(this.inner).click(function () { $(document).toggleFullScreen(); $.fancybox.toggle(); $(‘.fullscreen’).hide(); }); }, afterClose: function () { $(document).fullScreen(false); $(‘.fullscreen’).show(); }, scrolling: ‘yes’, helpers: { title: { type: ‘over’ }, overlay: {locked: false} } }); });

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

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

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

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

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

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

Светодиоды и кнопки подключил к дисплейному порту, как и описывал ранее. Все прекрасно фунциклирует и радует меня, что этот этап позади — настала пора кодить и получать удовольствие от лагов :)

d13d938c24fa7563f5bc3a065397af3e.jpg
a706ac60187eb7b19432c632955e24d4.jpg
d8e7fd1b6e28b6feae6a631e303bfa60.jpg
cc393431cab57201242c46a90df7b5f0.jpg
0cacf3314873719799c60b4b22cf2cf4.jpg
0cacf3314873719799c60b4b22cf2cf4.jpg

2. Забегая на перед — выяснил что драйверы все таки греются, видимо сказывается ток удержания шаговиков. А без этого никак, особенно у селектора филамента. Может быть потом я буду снимать с них напряжение, но это будет уже ясно только после долгого тестирования в реальной работе. Поэтому был установлен вентилятор, сверху на крышке и запитан от D10 выхода на хотэнд вроде, так что в теории вентилятором можно будет еще и программно управлять.

e36f5d3f5ec859b943c7c50582225b7f.jpg

3. Установил для тестов 3 тефлоновых входящих трубки филамента — на первое время тестов пойдет. Если уж крайние будут работать, то и средние тоже.

PREVIEW
ee15b43c7eed09129a1297157fadadb9.jpg
65f77667c2836d55dbdce6af8dcbbb4f.jpg

Итак, пока это добро не установлено в шкаф к принтеру, как я и говорил — сделал тестовый скетч для проверки всех датчиков, концевиков, кнопок, светодиодов и конечно же шаговиков.

Светодиоды, по очереди перемигиваются, при нажатии кнопок и срабатывании сенсоров — в терминал валятся сообщения. Ну а для управления моторами, нужно зажать одновременно одну из трех первых кнопок (для каждого мотора соответственно) и 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);
}

Ну и запилил немного видео на тему теста:

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

Источник публикации

Читайте также

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here
Перетащите ползунок, чтобы вставить комментарий