PrintInk
Made by: Hyun Dong Lee, Yo Han Seol
photo of pen plotter
Parts used
- 3 micro servos
- 8 3d printed parts (PLA was used, but ABS should be better)
- sharpie pen (any soft felt pen should work)
- pennies (for balancing the weight of the head)
- tape/rubber bands (for fixing the weight, motors, and pen temporarily in place)
- wooden base
- mbed LPC1768
Noncritical parts
- uLCD-144-G2
Video of pen plotter
Comments
- a larger array gives higher densities, but due to the low precision of the servos, this does not affect the print.
- faster wait times are possible, but higher inaccuracy was observed.
Code
Import programprinter
final ver
#include "mbed.h" #include "rtos.h" #include "Servo.h" #include "uLCD_4DGL.h" DigitalOut myled(LED1); Servo myservobody(p21); Servo myservopen(p22); Servo myservohead(p23); float min_move = 0.02; int max_pixel = 50; float min_wait = 0.02; float pen_wait = 0.08; float pen_down = 1; float pen_up = 0.7; uLCD_4DGL uLCD(p9,p10,p11); int tlrow = 0; int tlcol = 0; int trow = 0; int tcol = 0; int temp1; int temp2; Thread thread; char printData[50][50]; //initialize 2d array here int temp = 0; void lcd() { uLCD.cls(); uLCD.printf("row:%d\ncol:%d",tlrow,tlcol); uLCD.printf("\nsv1:%d\nsv2:%d",(int)(myservobody*100),(int)(myservohead*100)); } int main() { uLCD.baudrate(3000000); myservopen = pen_up; myservohead = 0; myservobody = 0; for(float i=0; i<=1.0; i+= min_move) { for(float j=0; j<=1.0; j+= min_move) { tlrow = (int)(i/min_move); tlcol = (int)(abs(j - 1.0)/min_move); temp = printData[tlrow][tlcol]; if(temp == 1) { thread.start(lcd); if(myservobody>i) { while(myservobody>i) { myservobody = myservobody - min_move; wait(min_wait); } } else { while(myservobody<i) { myservobody = myservobody + min_move; wait(min_wait); } } if(myservohead>j) { while(myservohead>j) { myservohead = myservohead - min_move; wait(min_wait); } } else { while(myservohead<j) { myservohead = myservohead + min_move; wait(min_wait); } } myservohead = j; myservobody = i; myled = 1; myservopen = pen_down; wait(pen_wait); myservopen = pen_up; wait(pen_wait); myled = 0; tcol = tlcol; trow = tlrow; } } } }
Please log in to post comments.