DTG printer / принтер планшетный

и плата лежала . я ее до сегоднешнего дня не трогал
.
плату я не проверю . просто не разберусь .
где то валяется еще плата uno , плата драйверов итд . уверен она заработает .
еще подумаю . поковыряюсь . на время откажусь от джостика что бы продолжить с принтером заниматься .
осталось две детали напечатать но это после отладки кода . так как не знаю где ось Z будет стоять .
хотел сегодня полностью собрать принтер и запустить . наверное уже завтра , сегодня с платой буду разбираться .
может сгореть аналоговый вход ? блин , я эже не знаю на что думатьт
позже сделаю фотки .

Без схемы, никто помочь не сможет.

да и со схемой , вариант был на время другую плату uno3 поставить ,
и выписать новую .
Но обошлось . порт не выгорел целиком . после манипуляцию pin A0 рабочий , может и A2 A3 тоже рабочие а вот A4 где был раньше джойстик , не ожил , ну и фиг с ним .
сейчас собрал на A0 джойстик, проверил все .
Все работает . джой . концевики . энкодер . кнопки .
завтра установлю ось Z , на ней теперь весь принтер весит а точнее только ОСЬ Y
пока шлейфы и переходники в пути , плата и кнопки управления временно прицепил на ось Z , как придут все переедет в основной корпус где сейчас и энкодер.
ось Z будет пока не надежна закреплена пока точное местонахождения не определит логика принтера .

Может сегодня дособираю новый стенд пр нтер планшет , у моторчика, что на оси Z. отвалились два проводочка,
припоять для меня самое сложное в этом проекте. Я думаю справлюсь.
Прикрутить плату принтера и все проверить.
Сниму видио о моих заметках как сейчас ведет себя принтер его логика и как в моем понимании должна.




Вроде все прикрутил, пару дотверстий осталось досверлить, но уже 21 час,
Может успею и буду проверять потихоньку.

Что то вообще не понимаю что происходит.
Собрал принтер, расставил линейки на фото, и решил записать видио в замедленной. Сьемки, как, куда и на сколько стол отьезжает, для написания логики.
Но что то пошло не так., принтер стал правильно работать, вернее вся это система.
То есть, как теперь это все работает.
При нажатии кнопки на пк печать, стол едет чуть вперед и назад до тех пор пока не нажму кнопку датчика бумаги.
Нажав и удерживая кнопку датчика бумаги, принтер понимает что это 0 нуль.
Далее, стол едет вперед до того места где я поместил картинку для печати.
Отпечатав, стол едет вперед, пока я не отпущу кнопку датчика бумаги.
То есть все верно он делает, я так и хотел.
Какая то мистика.
Код я поставил первый без кнопок на чем мы и эксперементировали.
Получаетрься все просто , в коде нужно на задний концевик прописать кнопку нажатия и удержания датчика бумаги а на переднюю отпускания этой кнопки.
Но на принтере 3.3 в у этой кнопки а у ардуино 5 в.
Я могу и через мосфет это сделать.
Кнопку при делать к мосфету а
включения мосфета к пину ардуино.
У кнопки есть
3.3в
Gnd
S
Я не знаю что приделать к мосфету, и как работает кнопка, что она замыкает.
Если скажите что gnd и S то так не работает, принтер не реагирует это я проверял месяц назад, когда хотел прикрутить кнопку к ардуине.
На кнопке есть резистор.
Кто что подскажет.?
Вылажу фото кнопки и мосфета.
И схему.


  • Цвет: красный колпачок
  • Напряжение: 3,5, 5 В
  • Выход: цифровой уровень (нажмите высокий, отпустите низкий)
  • Интерфейс: 3 P интерфейс S V G

у меня появилась глупая но наверное рабочая идея
нажать кнопку и перемотать изолентой
а в разрыв S провода кинуть на мосфет

Если схема такая, то

Спойлер

с мосфетом все верно
с кнопкой не уверен . я в инете искал схему не нашел
вот фото резистора на кнопке я так понимаю он идет от gnd к чему то .
я не разобрался с кнопкой



всеравно не понятно какие провода к мосфету привязать ?
если gnd и s то так не заработает а 3.3 вольт к чему соединять ?

Если это про кнопку, то соединять, как я нарисовал.
Только при ардуино digitalWrite(pin, HIGH), на выходе кнопки (S) будет низкий уровень, и, наоборот.

P.SДобавить для подстраховки, если что напутаете

Спойлер

ардуино и мосфет я так делал и мосфет отрабатывает и на станке у меня мосфет также клапан включает . тут понятно.
на схеме у вас gnd и s идут в мосфет а куда провод 3.3в ?

Это надо подать 3.3в со схемы принтера.

дак он есть .
так по порядку .
я с кнопки снимаю три провода . 3в gnd и s
gnd и s в мосфет а куда деть 3.3 в ?

прозвонил кнопку и оказалось что при нажатии замыкаются 3в и s другие между собой не звонятся .
но если замкнуть 3в и S без gnd то это не работает . я месяц назад тоже пробовал
поэксперементитую

Ну я же нарисовал - на VIN платы мосфета

блин . извиняюсь не заметил . попробую
я пока кнопку изолентой заматал как включенную и в разрыв сигналки мосфет пустил и так работает
сейчас ваш вариант проверю .

Работает - не трожь!))
(есть такое правило)

ваш вариант еще не попробовал . там есть вопрос по резистору . 5-10 к ом . он обязателен .
долго разбирался со своим мосфетом .он не включался но дело оказалось в пине 12 . он не работает на выход только вход . прицепил к пину 6 ивсе заработало . но есть баги.
как избавлюсь от багов буду пробовать вашу схему так как моя кнопка еще в пиленках.
вот какие баги .
когда включаю печать . стол едет назад до концевика включается мосфет и срвбатывает кнопка подачи бумаги и стол едет в печать .
вроде все верно но за 1 сек он в концевик стукается три раза а потом в печать .
и после печати . стол едет на другой концевик . он также за 1 -2 сек ударяется раз 5 в концевик мосфет выключается и отключается датчик бумаги стол останавливается .
датчик бумаги прикручен на
if (!digitalRead(9)) { включения digitalWrite(6, HIGH);
if (!digitalRead(10)) { выключения digitalWrite(6, LOW);

принтер не успевает подумать как ударяется в концевик несколько раз
там наверное нужно ставить прерывания энкодера после встречи с концевиком
вот код

//Энкодер на пинах 2, 3. Используется внутренняя подтяжка.
// volatile int enc, motor_position;
  int16_t enc, motorPos; 
  float Kmotor = 0.567; //ПОДБИРАЕМ СООТНОШЕНИЕ МОТОР/ЭНКОДЕР

#include <avr/wdt.h>                    // Библиотека часть компилятора avr-gcc
#define ENABLE_PIN  8
#define limitPin1    9
#define limitPin    10
#define button1   12
#define button2     5
#define mosfet     6



void setup(){                
  Serial.begin(115200);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(ENABLE_PIN , OUTPUT);
  pinMode(5, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(6, OUTPUT);

  digitalWrite(ENABLE_PIN, 0); //пока включим драйвер на постоянку, чтобы не было пропусков

  PCIFR=PCIF2; PCICR=1<<PCIE2;               //разрешить прерывание
  PCMSK2=1<<PCINT18 | 1<<PCINT19;            //выбрать вход на котором сработает прерывание 
}





// uint32_t timer = 0;
// void(* resetFunc) (void) = 0;
const int STEP_PIN = 4;
const int DIR_PIN = 7;
const int R360 = 200;                         //шагов на полный оборот
// int T = 10;
// int A = 0;



ISR(PCINT2_vect){
  static char EncPrev=0;                           //предыдущее состояние энкодера
  static char EncPrevPrev=0;                       //пред-предыдущее состояние энкодера
    char EncCur = 0;
    if(!(PIND & (1 << PD2))){EncCur  = 1;}         //опрос фазы 1 энкодера
    if(!(PIND & (1 << PD3))){ EncCur |= 2;}        //опрос фазы 2 энкодера

    if(EncCur != EncPrev)                          //если состояние изменилось,
    { if(EncPrev == 3 &&                             //если предыдущее состояние 3
          EncCur != EncPrevPrev )                      //и текущее и пред-предыдущее не равны,
      { 
        if(EncCur == 2) 
            enc++;
          else                          
            enc--;      
      }
   
      EncPrevPrev = EncPrev;                           //сохранение пред-предыдущего состояния
      EncPrev = EncCur;                                //сохранение предыдущего состояния
    }
}



void Step(bool Dir) //шаг в + или -
{
  if(Dir) {digitalWrite(DIR_PIN,0); motorPos++; } else {digitalWrite(DIR_PIN,1); motorPos--; } //направление шага
  //делаем шаг:
  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(1);
  digitalWrite(STEP_PIN, LOW);
}


void loop() {
  // Мотор следит за энкодером:
  int16_t deltaPos = enc-((int16_t) motorPos * Kmotor);
  if(deltaPos>=  1) Step(1); // надо делать шаг +
  if(deltaPos<= -1) Step(0); // надо делать шаг -

       if (!digitalRead(5)) {   // кнока ухода в нулевое положеия 
      digitalWrite(ENABLE_PIN, LOW);   
	  digitalWrite(DIR_PIN, HIGH); 
      for (int i = 0; (!digitalRead(9)) < 1; i++) {                 
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(500);
      digitalWrite(STEP_PIN, LOW);
      }
	}


       if (!digitalRead(12)) {
        digitalWrite(ENABLE_PIN, HIGH);
      
      }

   if (!digitalRead(10)) {	                      //pin коцевика
        digitalWrite(6, LOW);
       digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, HIGH);
	    for (int i = 0; i < R360; i++) {                
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(1000);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      }
      
    }
    
    if (!digitalRead(9)) {	                      //pin коцевика
       digitalWrite(6, HIGH);
       digitalWrite(ENABLE_PIN, LOW);        
      digitalWrite(DIR_PIN, LOW);
	    for (int i = 0; i < R360; i++) {                
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(1000);                  // скорость отьеда от limit
      digitalWrite(STEP_PIN, LOW);
      
      }     
      
    }
}

Сейчас нет времени разбираться. Но у вас же одновременно(почти) но, в разнобой , работает код печати от Ardumana, и ваше ручное управление. Пробуйте включать- отключать прерывание PCINT от энкодера, что-ли…

да я пробую разные варианты

Возможно я не прав. Ручное управление или концевики работают при печати?
Т.е. принтер сам доходит до концевика?