1. Chú ý: Các bạn nên tham khảo Nội quy trước khi viết bài (click vào liên kết bên dưới).
    * Nội quy và Thông báo diễn đàn CNCProVN.com
    * Nếu bạn thấy hứng thú với bài viết. Hãy dùng chức năng Share to facebook để chia sẻ bài viết lên facebook.

https://mta.vn/ http://cnc24h.com/
          
Kết quả 1 đến 6 của 6

Chủ đề: CODE ARDUINO DIY máy in phẳng epson L800

  1. #1
    Thợ bậc 6
    Ngày tham gia
    Oct 2015
    Bài viết
    342
    Cám ơn
    10
    Được cám ơn 99 lần
           ở 75 bài viết

    CODE ARDUINO DIY máy in phẳng epson L800

    up đoạn code arduino này cho các bạn yêu thích tham khảo cho ý kiến
    quan trọng là điểm đọc encoder chuyển sang pulse cho motor (step hay servo)

    Mã:
    /* DIY DTG Arduino Uno code for Epson L800 DIY máy in phẳng UV(cẩn thận mua mực xịn nếu mua mực dỏm ; hư đầu in ráng chụi nha)
     * http://www.cncprovn.com
     * http://forum.cncprovn.com/forums/80-Arduino
     * Created: 26/4/2018 
     */
    
    #define ENCODER_OPTIMIZE_INTERRUPTS
    #include <Encoder.h>
    #include <Bounce2.h>
    //Khai báo chân encoder
    Encoder epsonEncoder(2, 3); 
    //Khai báo các nút nhấn (lấy khay in ra nút 5 )(đẩy khay in vào nút 4)(in trắng 2 pass nút 6)(cảm biến nhận in nút 10 start print)
    int peSignal = 10;   
    int inBtn = 4;     
    int outBtn = 5;     
    int passBtn = 6;   
    
    int motorEnable = 7;     //  enable driver(step hay servo)
    int motorDirection = 8;  // driver dir pin
    int motorStep = 9;       // driver Pulse pin
    
    int backStop = 11;  // Back or Home position
    
    // khai báo các pulse (khoảng cách lấy khay in )ra vào 
    int stepperPosition;  
    int stepperCount;    
    int stepperFactor = 35;                            
    int platenState;         
    int passCount;
    int maxPasses;
    int ejectSpeed = 550;  
    int homeSpeed = 750;
    int maxSteps = 9000;
    long platenEncoder = 260000; 
    int peMinEncoder = 12000;
    int peMaxEncoder = 12500;
    long positionEncoder  = -800; 
    long newEncoder; 
        Bounce debouncer_inBtn = Bounce(); 
        Bounce debouncer_outBtn = Bounce(); 
        Bounce debouncer_backStop = Bounce();                         
    void setup() {   
      Serial.begin(115200);
      Serial.println("Epson Encoder:");
      pinMode(motorStep, OUTPUT);
      pinMode(motorDirection, OUTPUT);
      pinMode(passBtn, INPUT_PULLUP);
      platenState = 1;  
      stepperPosition = 0;
      stepperCount = 0; 
      passCount = 0;
      pinMode(inBtn,INPUT_PULLUP);
      debouncer_inBtn.attach(inBtn);
      debouncer_inBtn.interval(5);
      pinMode(outBtn,INPUT_PULLUP);
      debouncer_outBtn.attach(outBtn);
      debouncer_outBtn.interval(5); 
      pinMode(backStop,INPUT_PULLUP);
      debouncer_backStop.attach(backStop);
      debouncer_backStop.interval(5);
      analogWrite(peSignal, 165);
    }
    void loop() {
        debouncer_inBtn.update();
        debouncer_outBtn.update();
        debouncer_backStop.update();
      int value_inBtn = debouncer_inBtn.read();
      int value_outBtn = debouncer_outBtn.read();
      int value_backStop = debouncer_backStop.read();
        if (value_inBtn == LOW & (stepperPosition) > 0){
          platenState = 2;
          passCount = 0;  // Reset the pass counter to 0.    
          }
         if (value_outBtn == LOW & (stepperPosition) < (maxSteps)) {
          platenState = 4;      
          }
    switch (platenState) { 
       case 1:
              if (value_backStop == LOW) { 
                epsonEncoder.write(0);
                stepperPosition = 0;
                platenState = 4; 
                break;
              }          
            digitalWrite(motorDirection, HIGH); // Set motor to reverse
            digitalWrite(motorStep, HIGH); // Take a step
              delayMicroseconds(homeSpeed); // Step Speed
            digitalWrite(motorStep, LOW);  
         break;   
         case 2: 
              if (value_backStop == LOW) {
                epsonEncoder.write(0); 
                stepperPosition = 0; 
                platenState = 3;
                break;
              }          
            digitalWrite(motorDirection, HIGH);
            digitalWrite(motorStep, HIGH);
              delayMicroseconds(homeSpeed);
            digitalWrite(motorStep, LOW);
            stepperPosition--;       
         break;    
         case 3: 
         if (value_backStop == LOW) { 
            digitalWrite(motorDirection, LOW); 
            digitalWrite(motorStep, HIGH);
              delayMicroseconds(12500);
            digitalWrite(motorStep, LOW);     
          break;
          }
           newEncoder = epsonEncoder.read(); 
           if (newEncoder != positionEncoder) {
          stepperCount = newEncoder / stepperFactor;
       Serial.print("Encoder = ");
       Serial.print(newEncoder);
       Serial.println();
       Serial.print("Stepper Count = ");
       Serial.print(stepperCount);
       Serial.println();
       Serial.println(); 
        positionEncoder = newEncoder;
      }
          if (stepperCount > stepperPosition) { 
            digitalWrite(motorDirection, LOW);      
            digitalWrite(motorStep, HIGH); 
              digitalWrite(motorStep, LOW);
              stepperPosition++;
          }
          if (stepperCount < stepperPosition) {  
              digitalWrite(motorDirection, HIGH);                 
              digitalWrite(motorStep, HIGH);
              digitalWrite(motorStep, LOW);
              stepperPosition--;
          }
           if ((newEncoder) > peMinEncoder & (newEncoder) < peMaxEncoder) {
                analogWrite(peSignal, 0);     
           }
            if ((newEncoder) > platenEncoder) {
                analogWrite(peSignal, 165);
                  passCount = passCount + 1;
                if (digitalRead(passBtn) == HIGH){ 
                    maxPasses = 1;
                }
                  else
                {
                    maxPasses = 2;
                }
                if (passCount == maxPasses){ 
                     platenState = 4;   
                }
                   else
                {
                    platenState = 2; // Send the platen back in for automatic 2nd pass
                }                    
                }     
         break;    
         case 4:
           if (stepperPosition > maxSteps) {
            platenState = 0;        
            }
           digitalWrite(motorDirection, LOW); 
            digitalWrite(motorStep, HIGH); 
              delayMicroseconds(ejectSpeed);
            digitalWrite(motorStep, LOW);
            stepperPosition++;
         break;    
         default: 
         break; 
      }
    }
    Lần sửa cuối bởi tranhung123456, ngày 26-04-2018 lúc 12:32:52 PM.
    DĐ + Zalo : 09784595Bốn Chín

  2. Có 2 thành viên đã cám ơn tranhung123456 cho bài viết hữu ích này:


  3. #2
    Thợ bậc 6
    Ngày tham gia
    Oct 2015
    Bài viết
    342
    Cám ơn
    10
    Được cám ơn 99 lần
           ở 75 bài viết
    thêm 1 số hình của mấy tên Nga chế máy
    Click vào ảnh để xem ảnh lớn hơn. 

Name:	nvLhHR6Q.png 
Views:	1 
Size:	1.20 MB 
ID:	57019
    Click vào ảnh để xem ảnh lớn hơn. 

Name:	s-l1600.jpg 
Views:	1 
Size:	166.7 KB 
ID:	57020
    Click vào ảnh để xem ảnh lớn hơn. 

Name:	img5.jpg 
Views:	2 
Size:	231.9 KB 
ID:	57021
    Lần sửa cuối bởi tranhung123456, ngày 26-04-2018 lúc 12:42:23 PM.
    DĐ + Zalo : 09784595Bốn Chín

  4. Có 2 thành viên đã cám ơn tranhung123456 cho bài viết hữu ích này:


  5. #3
    Học việc
    Ngày tham gia
    Jun 2018
    Bài viết
    1
    Cám ơn
    0
    Được cám ơn 0 lần
           ở 0 bài viết

    Máy in và sáng tạo

    E đang chế máy này nhưng phần code thì e chưa hiểu được, a có thể comment giải thích sau các đoạn coder của a được không ạ. E cảm ơn

  6. #4
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,077
    Cám ơn
    1,598
    Được cám ơn 4,908 lần
           ở 2,397 bài viết
    Chưa thử đoạn code, và cũng không nắm rỏ cách vận hành. Nhưng lướt qua thì thấy có một điểm nên lưu ý.

    stepperfactor là hệ số để hiệu chuẩn lại đĩa encoder và step motor cũng như cơ cấu truyền động bên ngoài cho chính xác.
    Với arduino thì số thực nó chỉ lưu trữ được 2 số lẻ. Do đó khi thiết kế truyền động nên tính toán sao cho hệ số sau khi chia nó tròn được thì tuyệt vời.
    DT: O9O8984O1O - CKD's Youtube Channel - Tổng hợp chủ đề
    827 Bùi Hữu Nghĩa, p.Long Hòa, q.Bình Thủy, tp CT

  7. #5
    Thợ bậc 4
    Ngày tham gia
    Dec 2016
    Bài viết
    110
    Cám ơn
    35
    Được cám ơn 15 lần
           ở 15 bài viết
    Có bác nào đang làm mà giang dở không? Không làm nữa thì thanh lý con Epson L800 em nghiên cứu thử.

    @CKD
    Với arduino thì số thực nó chỉ lưu trữ được 2 số lẻ ==> dùng con Uno 32bit thay cho con UNO 8 bit giai quyet duoc ma.

  8. #6
    Thợ cả
    Ngày tham gia
    Jul 2014
    Bài viết
    3,303
    Cám ơn
    1,537
    Được cám ơn 1,014 lần
           ở 787 bài viết
    Code này chạy được đó

Các Chủ đề tương tự

  1. máy in phun chế thành máy in phẳng
    Bởi tatuongthinh trong diễn đàn Máy in CNC
    Trả lời: 68
    Bài viết cuối: 03-10-2018, 11:02:57 PM
  2. Trả lời: 29
    Bài viết cuối: 09-06-2017, 06:28:19 PM
  3. Cần mua máy epson 1400 hoặc 1390
    Bởi hoangvu93 trong diễn đàn Cần mua
    Trả lời: 0
    Bài viết cuối: 26-11-2015, 09:25:54 PM
  4. máy in dạng phẳng
    Bởi tatuongthinh trong diễn đàn Cơ khí chế tạo
    Trả lời: 9
    Bài viết cuối: 28-09-2014, 05:56:34 PM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •