Introduction: Printer From a CD Reader

Picture of Printer From a CD Reader
This is an easy printer made from parts of a cd reader.
It prints using a regular marker of any color.
Maybe it doesn't have a great resolution but this is a project that I really wanted to do.


Step 1: Materials

Picture of Materials

The most important is the cd reader, also a dvd reader will work.
Try to find one with a bipolar motor for the laser, mine used a regular dc motor and I changed it later for a stepper motor.
Also you will need another stepper motor with a rubber wheel and a wooden base.
Electronic stuff is detailed in other step.

Step 2: First Motor

Picture of First Motor

Remove this motor with the metal support and the horizontal guides.
The pick up laser and the other motor are not used.


Step 3: Second Motor

Picture of Second Motor

This motor have to be removed with all the reduction gears.
Cut the plastic with a dremell and then use a sand paper to remove the excess.

Step 4: Finish the Cartridge

Picture of Finish the Cartridge

This is not actually a cartridge. But this is where the marker will be attached.
Use a piece of plastic, attach the dc motor to one of the sides and then glue all this over the guides of pick up laser.

Step 5: Marker Holder

Picture of Marker Holder

This little piece will allow you to change the marker.
Is a plastic tube with a hole on one side. Over that hole I glued a plastic nut with a screw.
This piece must be glued to the last reduction gear.

Step 6: New Motor

Picture of New Motor

This is because my cd reader used a dc motor, and it is not very efficient, so I changed it for a bipolar stepper motor.

Step 7: Electronic Board

Picture of Electronic Board

The circuit was made using a perfboard. The three switches in the image are to used in the final project

Step 8: Finish the Hardware

Picture of Finish the Hardware


Step 9: Basic Code

Picture of Basic Code

Define CONF_WORD = 0x3f70
AllDigital 'Todos los pines del PORTA como E/S
TRISA = 0x00
TRISB = 0x00 'Configuro el PORTB completo como salida.

Symbol motorpen1 = PORTA.0
Symbol motorpen2 = PORTA.1
Symbol motora1 = PORTB.0
Symbol motora2 = PORTB.1
Symbol motorb1 = PORTB.2
Symbol motorb2 = PORTB.3
Symbol bobina1 = PORTB.4
Symbol bobina2 = PORTB.5
Symbol bobina3 = PORTB.6
Symbol bobina4 = PORTB.7

PORTB = 0x00
PORTA = 0x00
Dim sleeptime As Byte
Dim sleeppap As Byte
Dim cambio As Bit
Dim fila As Byte
Dim fila2 As Byte
Dim fila3 As Byte
Dim fila4 As Byte
Dim fila5 As Byte
Dim bipo As Byte

bipo = 1
sleeppap = 2

fila = 255
fila2 = 255
fila3 = 255
fila4 = 255
fila5 = 255

cambio = True

inicio:
botones:

Gosub avanzarmotor1
Gosub avanzarmotor1
Gosub ecribirletra
Gosub ecribirletra
fila = 0
fila2 = 0
fila3 = 0
fila4 = 0
fila5 = 0
Gosub ecribirletra
Gosub ecribirletra

'aca empieza el codigo

'aca termina el codigo

fila = 0
fila2 = 0
fila3 = 0
fila4 = 0

Goto botones

End

ecribirletra:

If fila5.7 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.6 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.5 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.4 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.3 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.2 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.1 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila5.0 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.7 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.6 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.5 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.4 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.3 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.2 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.1 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila4.0 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.7 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.6 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.5 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.4 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.3 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.2 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.1 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila3.0 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.7 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.6 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.5 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.4 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.3 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.2 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.1 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila2.0 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.7 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.6 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.5 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.4 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.3 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.2 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.1 = True Then
Gosub bajarlapicera
Endif
Gosub moverhorizontal
If fila.0 = True Then
Gosub bajarlapicera
Endif
Gosub volvertodo
Gosub avanzarmotor1
Return

bajarlapicera:
motorpen1 = 1
motorpen2 = 0
WaitMs 102
motorpen1 = 0
motorpen2 = 1
WaitMs 102
motorpen1 = 0
motorpen2 = 0
WaitMs 102
Return

moverhorizontal:
bipo = bipo + 1
If bipo = 5 Then bipo = 1
PORTB = 0
motora1 = 1
motorb1 = 1
WaitMs sleeppap
PORTB = 0
motora1 = 1
motorb2 = 1
WaitMs sleeppap
PORTB = 0
motora2 = 1
motorb2 = 1
WaitMs sleeppap
PORTB = 0
motora2 = 1
motorb1 = 1
WaitMs sleeppap
PORTB = 0
Return

moverhorizontalatras:
bipo = bipo + 1
If bipo = 5 Then bipo = 1
PORTB = 0
motora2 = 1
motorb1 = 1
WaitMs 6
PORTB = 0
motora2 = 1
motorb2 = 1
WaitMs 6
PORTB = 0
motora1 = 1
motorb2 = 1
WaitMs 6
PORTB = 0
motora1 = 1
motorb1 = 1
WaitMs 6
PORTB = 0
Return

volvertodo:
Dim y As Byte
For y = 0 To 41
motora2 = 1
motorb1 = 1
WaitMs sleeppap
PORTB = 0
motora2 = 1
motorb2 = 1
WaitMs sleeppap
PORTB = 0
motora1 = 1
motorb2 = 1
WaitMs sleeppap
PORTB = 0
motora1 = 1
motorb1 = 1
WaitMs sleeppap
PORTB = 0
Next y
PORTB = 0
Return

avanzarmotor1:
If cambio = True Then
cambio = False
Else
cambio = True
Endif

If cambio = True Then
PORTB = 0
bobina1 = 1
WaitMs sleeptime
PORTB = 0
bobina1 = 1
bobina2 = 1
WaitMs sleeptime
PORTB = 0
bobina2 = 1
WaitMs sleeptime
PORTB = 0
bobina2 = 1
bobina3 = 1
WaitMs sleeptime
PORTB = 0
Else
PORTB = 0
bobina3 = 1
WaitMs sleeptime
PORTB = 0
bobina3 = 1
bobina4 = 1
WaitMs sleeptime
PORTB = 0
bobina4 = 1
WaitMs sleeptime
PORTB = 0
bobina4 = 1
bobina1 = 1
WaitMs sleeptime
PORTB = 0
Endif
Return

retrocedermotor1:
If cambio = True Then
cambio = False
Else
cambio = True
Endif
If cambio = True Then
PORTB = 0
bobina4 = 1
WaitMs sleeptime
PORTB = 0
bobina3 = 1
bobina4 = 1
WaitMs sleeptime
PORTB = 0
bobina3 = 1
WaitMs sleeptime
PORTB = 0
bobina2 = 1
bobina3 = 1
WaitMs sleeptime
PORTB = 0
Else
PORTB = 0
bobina2 = 1
WaitMs sleeptime
PORTB = 0
bobina2 = 1
bobina1 = 1
WaitMs sleeptime
PORTB = 0
bobina1 = 1
WaitMs sleeptime
PORTB = 0
bobina4 = 1
bobina1 = 1
WaitMs sleeptime
PORTB = 0
Endif
Return

Step 10: Code Generator

Picture of Code Generator

For an easy drawing I made this program in Java language.
You just need to open it and make your draw, when you finish it just press "p" and you will see a window with the source code that you need. Copy this code and paste it between the labels "'aca empieza el codigo" and "'aca termina el codigo" of your basic code.

Step 11: Examples

Picture of Examples


Comments

snehil.sourabh (author)2016-02-19

Hi cn any1 tell me how to connect the marker motor and how to connect the circuit to pc via parallel port

NoynonMayta (author)2015-12-22

how to use basic code?

Robson Couto made it! (author)2014-09-16

Thank you for the idea, you're creative!

Yonatan24 (author)Robson Couto2015-11-25

That is just so EPIC!

I see that you did it on a breadboard, Is it still a prototype or will you keep it that way?

Robson Couto (author)Yonatan242015-11-27

Thank you! I left it in the breadboard, but should not because of the heat. I never had the opportunity to make the circuit in cooper board. Maybe one day ^^.

Deivys20071 made it! (author)2015-10-05

Hola bruno! estoy haciendo la mia también jeje.. excelente proyecto!

andsen942 (author)2015-04-19

Hey! Love the project and getting ready to order some parts. What parts did you use to create the power for this thing? Thanks!

nbáscones (author)2015-04-09

hola bruno.

gran trabajo !! me gustaría hacer este instructable pero los cd que tengo tienen motores dc regulares con encoder magnético. el cable tiene 6 contactos ¿conoces como se pueden conectar a arduino para operar con esos motores?

muchas gracias!

snehil.sourabh (author)2015-01-29

hi bro can u send me a detailed circuit diagram at my e mail snehilsourabh17@gmail.com i will be very thankful to u

arcomp (author)2014-09-25

Fantastic!

rramesh1 (author)2014-09-20

can u make an instructable on making a dot matrix printer using parallel ports

AndyGadget (author)2013-07-23

 
I've only just seen this - Absolutely Brilliant!
I was involved with designing dot-matrix printers way back in the 'eighties - Our fastest one did 320 characters per second but had nowhere near the appeal and style of yours.

babu1423 (author)2013-06-24

how do u connect the circuit to the computer to upload the program and the image? awsome project man .

subhradeep3000 (author)2012-02-03

Can u give me a link to the full circuit diagram i don't know where to connect the switches and the marker motor.

kevinmaru28 (author)2011-12-21

can u plz upload a video showing connections of your printer to PC

kevinmaru28 (author)2011-12-21

If I want to write some other text so i need to change code

lyakunina (author)2011-12-07

Awesome project!! Just one question.
"The three switches in the image are to used in the final project". What for?

brunoip (author)lyakunina2011-12-21

While debbugging that switches were for moving the paper or the pen or something like that. Now in the last program they are meaningless. Sorry for the late reply

brunoip (author)2011-12-21

The java program generates de basic code for the pic, then you have to assembly this code and upload it into the pic

aigotinsane (author)2011-09-22

looks like we just got a new definition to printers anyways its awesome and im amazed

kivster (author)2011-07-17

Can I buy one

brunoip (author)kivster2011-08-29

you can make one

Blake1995 (author)2011-07-14

could you tell me the names of all the components and connections you used please. And also how did you connect it to the computer.

brunoip (author)Blake19952011-07-14

You connect it to the computer when you load the program into the pic

Blake1995 (author)brunoip2011-07-14

I just remembered that but now I feel stupid :( lol

Blake1995 (author)Blake19952011-07-15

could you tell me were you got the chip marked 1293. Thanks in advanced.

It is L293.
It's a very common integrated used for get highs currents (up to 900mA), since a microcontroller usually has about 20 mA as maximum current output.

thanks for the help

brunoip (author)bananacocodrilo2011-08-08

I think 900 mA is the maximun current that you can handle with that ic.

babu1423 (author)2011-07-15

can you tell me all the name of the part's because i just started making robot's so i don't know what the symbols mean?

freethetech (author)babu14232011-08-06

If you don't know what the symbols in the schematics mean, you need to learn basic circuitry first, buddy.

ms10 (author)2011-07-29

cool i liked .great project i would like to make one

babu1423 (author)2011-07-17

what do you do after you download the pic sumlator ide

tsusanto (author)2011-07-15

Good

babu1423 (author)2011-07-15

can we use java script

babu1423 (author)2011-07-15

which motor did you use ? this one .

babu1423 (author)2011-07-15

which motor did you use ?this one.

babu1423 (author)2011-07-15

how big is the rectangle cut out?

R.A.T.M (author)2011-07-14

bender omg

Hugu (author)2011-07-13

Great project! congrats!!

Look, I and my team, we were interested in producing your circuit board and put in ower webshop with a link redirected to this instructable, because your project is a good project for others to make too!

Our webloja is this: www.g7electronica.net and if you send us the schematic by email (comercialg7@gmail.com) and if you authorize us make pcb of your circuit, we were very grateful!

By the way, if you want pcb's semi-professional, but with good quality and affordable for your circuits, you can also contact us! ;)

Kiteman (author)2011-07-09

It just occurred to me - if you used the thermal paper from some till machines, you could use the laser from the drive to plot your images instead of the pen, and you could call it a laser printer!

aessam1 (author)2011-07-08

only i can say
YoU aRe CrEaTiVe

mymixed (author)2011-07-08

Great job getting in the microcontroller contest!

antoman11 (author)2011-07-07

Megaman, TwoFace, The Batman, Yoda, Clone Trooper, Bender, AWESOME

Aaamazzara (author)2011-07-07

This project looked so easy but i really dont know how to build this circuit board :(
I want to build this so badly

gzaloprgm (author)2011-07-03

Really nice and simple... I wonder what limits the resolution and speed of it? Amount of gear tooths?

zack247 (author)gzaloprgm2011-07-05

seems to be the amount of steps in the stepper motors used, unless it was the coding that places the pen spots as more 8-bit pictures than something more precise.

gzaloprgm (author)zack2472011-07-06

I don't think so... Aren't CD motors precise enough to read each "track" of the disc (< 1 mm)?

The PIC has only 3.5 KB of code memory, so I'm thinking that might be the limit.

Would be nice to add more colors, maybe using some primitive way of "cartridge" with a small (and fast) valve

zack247 (author)gzaloprgm2011-07-06

or perhaps a rotating spindle with R,Y,B colored markers..

too bad theres no way (that i know of) to expand the memory size on the pic so you could do larger prints that are more precise.

gzaloprgm (author)zack2472011-07-06

Yes there are lots of ways: EEPROMs (like 24LC256), SD cards (preferrable, needs 3.3v interface), connecting to a PC (needs MAX232 or USB-TTL converter), or even tape recorders / audio (connecting an mp3 player headphones output to a uC and crudely analyse the frequency)

A cheap 32KiB EEPROM should give 512x512 monochrome pixels...

I am trying this as soon as I buy the motor controllers...