{"id":942,"date":"2012-05-20T13:01:10","date_gmt":"2012-05-20T13:01:10","guid":{"rendered":"http:\/\/41j.com\/blog\/?p=942"},"modified":"2015-03-07T00:00:22","modified_gmt":"2015-03-07T00:00:22","slug":"laser-cnc-from-dvd-parts","status":"publish","type":"post","link":"https:\/\/41j.com\/blog\/2012\/05\/laser-cnc-from-dvd-parts\/","title":{"rendered":"Laser CNC from Bluray parts"},"content":{"rendered":"<p><a href=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21-864x1024.jpg\" alt=\"\" title=\"lasercnc_2\" width=\"630\" height=\"746\" class=\"aligncenter size-large wp-image-956\" srcset=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21-864x1024.jpg 864w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21-253x300.jpg 253w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/p>\n<p><strong>DISCLAIMER: Lasers are dangerous, act with caution. If you do, use laser safety goggles!<\/strong><\/p>\n<p>I&#8217;ve been playing with a Bluray laser, and attempting to build a CNC laser cutter. This is my proof of concept. I&#8217;ve built a stage from 2 DVD drives.  These are the steppers used to control the motion of the laser as it scans across the disc. <\/p>\n<p>They are mounted directly on top of each other and attached with copious amounts of glue!<\/p>\n<p><a href=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/sideview.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/sideview-300x174.jpg\" alt=\"\" title=\"sideview\" width=\"300\" height=\"174\" class=\"aligncenter size-medium wp-image-943\" srcset=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/sideview-300x174.jpg 300w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/sideview-1024x596.jpg 1024w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/sideview.jpg 1088w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/laser_top.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/laser_top-300x224.jpg\" alt=\"\" title=\"laser_top\" width=\"300\" height=\"224\" class=\"aligncenter size-medium wp-image-944\" srcset=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/laser_top-300x224.jpg 300w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/laser_top-1024x764.jpg 1024w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/laser_top.jpg 1296w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>The laser used is a Bluray laser from a Panasonic BDR 207 drive. This was probably the wrong choice as it&#8217;s <a href=\"http:\/\/41j.com\/blog\/2011\/10\/3-8mm-laser-diode-jammed-in-to-aixiz\/\">a 3.8mm module<\/a>.<\/p>\n<p>Both steppers are controlled by <a href=\"http:\/\/41j.com\/blog\/2012\/05\/dvd-drive-stepper-motor-unl2003-driver-and-arduino\/\">an Arduino using a ULN2003<\/a>. The steppers seem to be at their limit and I don&#8217;t think they could push around much more weight. This maybe due to the stepper driver, or just because they&#8217;re not really designed to move much weight around. I also can&#8217;t drive both steppers simultaneously, possibly because of the wall wart power supply I&#8217;m currently using&#8230; Anyway that means no diagonal motion right now.<\/p>\n<p>Anyway, even with all it&#8217;s faults I&#8217;m pretty happy with it as a proof of concept! Here it is cutting its way through some plastic:<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"http:\/\/www.youtube.com\/embed\/1GipPZdrRzc\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>And here&#8217;s the result:<\/p>\n<p><a href=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/ths_cut1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/ths_cut1-1024x548.jpg\" alt=\"\" title=\"ths_cut\" width=\"630\" height=\"337\" class=\"aligncenter size-large wp-image-946\" srcset=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/ths_cut1-1024x548.jpg 1024w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/ths_cut1-300x160.jpg 300w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/05\/ths_cut1.jpg 1063w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/p>\n<p>Total component cost is around 100USD. After hacking the above rig together, I then when on to build a slightly more robust system:<\/p>\n<p><a href=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21-864x1024.jpg\" alt=\"\" title=\"lasercnc_2\" width=\"630\" height=\"746\" class=\"aligncenter size-large wp-image-956\" srcset=\"https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21-864x1024.jpg 864w, https:\/\/41j.com\/blog\/wp-content\/uploads\/2012\/06\/lasercnc_21-253x300.jpg 253w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/p>\n<p>Here&#8217;s the second rig in action:<\/p>\n<p><center><br \/>\n<iframe loading=\"lazy\" width=\"420\" height=\"315\" src=\"http:\/\/www.youtube.com\/embed\/wCI0Pj_bQPw\" frameborder=\"0\" allowfullscreen><\/iframe><br \/>\n<\/center><\/p>\n<p>If I continue this project there are a number of improvements to be made:<\/p>\n<p>Different stepper driver (I&#8217;ll probably just get an EasyDriver from sparkfun).<br \/>\nDifferent steppers\/mechanical components (possibly harvest the components from scanners next time, as the DVD parts give a very small work area).<br \/>\nProperly machine everything (even though it means less glue gun use \ud83d\ude41 ).<br \/>\nI&#8217;d use the laser from a Panasonic S06J drive, it&#8217;s a 5.6mm laser, and slightly higher power than the BDR 207.<\/p>\n<h2>Code<\/h2>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nconst int motorAPin1 =4;\r\nconst int motorAPin2 =5;\r\nconst int motorAPin3 =6;\r\nconst int motorAPin4 =7;\r\n\r\nconst int motorBPin1 =8;\r\nconst int motorBPin2 =9;\r\nconst int motorBPin3 =10;\r\nconst int motorBPin4 =11;\r\n \r\nvoid setup() {\r\n  \/\/ initialize the digital pin as an output.\r\n  \/\/ Pin 13 has an LED connected on most Arduino boards:\r\n  pinMode(motorAPin1, OUTPUT);\r\n  pinMode(motorAPin2, OUTPUT);\r\n  pinMode(motorAPin3, OUTPUT);\r\n  pinMode(motorAPin4, OUTPUT);\r\n\r\n  pinMode(motorBPin1, OUTPUT);\r\n  pinMode(motorBPin2, OUTPUT);\r\n  pinMode(motorBPin3, OUTPUT);\r\n  pinMode(motorBPin4, OUTPUT);\r\n  \r\n  \/\/ar(30);\r\n  \/\/assbr(30);\r\n\r\n}\r\n\r\nvoid stepFwd(int motorPin1,int motorPin2,int motorPin3,int motorPin4) {\r\n  int motorDelay=50; \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, LOW);\r\n  delay(motorDelay);\r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay);  \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay);  \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, LOW);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, LOW);\r\n  delay(motorDelay);\r\n}\r\n\r\nvoid stepRev(int motorPin1,int motorPin2,int motorPin3,int motorPin4) {\r\n  int motorDelay=50;\r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, LOW);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, LOW);\r\n  delay(motorDelay);  \r\n \r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay);  \r\n \r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, HIGH);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, HIGH);\r\n  delay(motorDelay); \r\n \r\n  digitalWrite(motorPin1, HIGH);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, HIGH);\r\n  digitalWrite(motorPin4, LOW);\r\n  delay(motorDelay);\r\n}\r\n\r\nvoid stop(int motorPin1,int motorPin2,int motorPin3,int motorPin4) {\r\n\r\n  digitalWrite(motorPin1, LOW);\r\n  digitalWrite(motorPin2, LOW);\r\n  digitalWrite(motorPin3, LOW);\r\n  digitalWrite(motorPin4, LOW);\r\n}\r\n \r\n \r\n \r\nvoid af(int nm) {\r\n  for(int n=0;n&lt;nm;n++) { stepFwd(motorAPin1,motorAPin2,motorAPin3,motorAPin4); } stop(motorAPin1,motorAPin2,motorAPin3,motorAPin4);\r\n}\r\n\r\nvoid ar(int nm) {\r\n  for(int n=0;n&lt;nm;n++) { stepRev(motorAPin1,motorAPin2,motorAPin3,motorAPin4); } stop(motorAPin1,motorAPin2,motorAPin3,motorAPin4);\r\n}\r\n\r\nvoid bf(int nm) {\r\n  for(int n=0;n&lt;nm;n++) { stepFwd(motorBPin1,motorBPin2,motorBPin3,motorBPin4); } stop(motorBPin1,motorBPin2,motorBPin3,motorBPin4);\r\n}\r\n\r\nvoid br(int nm) {\r\n  for(int n=0;n&lt;nm;n++) { stepRev(motorBPin1,motorBPin2,motorBPin3,motorBPin4); } stop(motorBPin1,motorBPin2,motorBPin3,motorBPin4);\r\n}\r\n\r\nvoid drawT() {\r\n  bf(6);\r\n  af(2);\r\n  br(2);\r\n  af(8);\r\n  br(2);\r\n  ar(8);\r\n  br(2);\r\n  ar(2);\r\n}\r\n\r\nvoid drawH() {\r\n  bf(2);\r\n  af(4);\r\n  bf(4);\r\n  ar(4);\r\n  bf(2);\r\n  af(10);\r\n  br(2);\r\n  ar(4);\r\n  br(4);\r\n  af(4);\r\n  br(2);\r\n  ar(10);\r\n}\r\n\r\nvoid drawS() {\r\n  bf(6);\r\n  af(2);\r\n  br(4);\r\n  af(2);\r\n  bf(4);\r\n  af(6);\r\n  br(6);\r\n  ar(2);\r\n  bf(4);\r\n  ar(2);\r\n  br(4);\r\n  ar(6);\r\n}\r\n\r\nvoid loop() {\r\n\r\n  for(int n=0;n&lt;3;n++) drawT();\r\n  bf(8);\r\n  for(int n=0;n&lt;3;n++) drawH();\r\n  bf(10);\r\n  for(int n=0;n&lt;3;n++) drawS();\r\n  \/\/br(18);\r\n  for(;;);\r\n\r\n\/\/  for(int n=0;n&lt;20;n++) { stepFwd(motorAPin1,motorAPin2,motorAPin3,motorAPin4); } stop(motorAPin1,motorAPin2,motorAPin3,motorAPin4);\r\n \r\n\/\/  for(int n=0;n&lt;25;n++) { stepFwd(motorBPin1,motorBPin2,motorBPin3,motorBPin4); } stop(motorBPin1,motorBPin2,motorBPin3,motorBPin4);\r\n \r\n\/\/  for(int n=0;n&lt;20;n++) { stepRev(motorAPin1,motorAPin2,motorAPin3,motorAPin4); } stop(motorAPin1,motorAPin2,motorAPin3,motorAPin4);\r\n  \r\n\/\/  for(int n=0;n&lt;25;n++) { stepRev(motorBPin1,motorBPin2,motorBPin3,motorBPin4); } stop(motorBPin1,motorBPin2,motorBPin3,motorBPin4);\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>DISCLAIMER: Lasers are dangerous, act with caution. If you do, use laser safety goggles! I&#8217;ve been playing with a Bluray laser, and attempting to build a CNC laser cutter. This is my proof of concept. I&#8217;ve built a stage from 2 DVD drives. These are the steppers used to control the motion of the laser [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-942","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1RRoU-fc","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/comments?post=942"}],"version-history":[{"count":7,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/942\/revisions"}],"predecessor-version":[{"id":948,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/942\/revisions\/948"}],"wp:attachment":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/media?parent=942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/categories?post=942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/tags?post=942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}