<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rainbowlazer</title>
	<atom:link href="http://rainbowlazer.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://rainbowlazer.com</link>
	<description>art, design &#38; new media technotes</description>
	<lastBuildDate>Fri, 02 Jul 2010 18:10:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Show BBpress Topic Tags from Inside Wordpress</title>
		<link>http://rainbowlazer.com/scripting-programming/php/bbpress-tags-from-in-wordpress/</link>
		<comments>http://rainbowlazer.com/scripting-programming/php/bbpress-tags-from-in-wordpress/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 22:11:53 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[BBpress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=578</guid>
		<description><![CDATA[
I&#8217;ve been hosting a forum at http://diylilcnc.org using Wordpress and BBrpess integration, so that Wordpress and BBpress share user accounts. This is great for the most part; one drawback is that while you can use some of the Wordpress functions inside BBpress, you can&#8217;t go the other way and call BBpress functions from inside Wordpress.
For [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_596" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/06/bbpress-topic-tags-from-inside-wordpress.jpg" rel="shadowbox[post-578];player=img;"><img class="size-medium wp-image-596" title="Show BBpress topic tags from inside Wordpress." src="http://rainbowlazer.com/wp-content/uploads/2010/06/bbpress-topic-tags-from-inside-wordpress-300x217.jpg" alt="" width="300" height="217" /></a><p class="wp-caption-text">Show BBpress topic tags from inside Wordpress.</p></div>
<p style="text-align: center;">
<p>I&#8217;ve been hosting a forum at <a href="http://diylilcnc.org" target="_blank">http://diylilcnc.org</a> using <a href="http://bbpress.org/documentation/integration-with-wordpress/" target="_blank">Wordpress and BBrpess integration</a>, so that Wordpress and BBpress share user accounts. This is great for the most part; one drawback is that while you can use some of the Wordpress functions inside BBpress, you can&#8217;t go the other way and call BBpress functions from inside Wordpress.</p>
<p>For example, if you want to show a tag cloud with your forum&#8217;s topic tags on a Wordpress post or page, you  might try to use the function bb_tag_heatmap, but that function only works if you&#8217;re on a BBpress page. You might also think of trying wp_tag_cloud, but since Wordpress and BBpress are looking at different database tables for their tags, it won&#8217;t work either.</p>
<p>Here&#8217;s a pretty hacky way of making Wordpress show BBpress topic tags when you&#8217;re not on a forum page. I put the code below into my Wordpress theme&#8217;s sidebar.php.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9738136468704557";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text";
google_ad_channel = "";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066cc";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<pre class="brush: php">global $wpdb;

$number_of_tags_to_show = 25;
$largest = 25; //largest font in points
$smallest = 4; //smallest font in points
$tag_page_url =  "http://www.mysite.org/forum/tags"; //url of your forum tags page

$taglist = $wpdb-&gt;get_results("select name, term_id from bb_terms","ARRAY_N");//$taglist[index][name][term_id]
for ($count = 0; $count &lt; count($taglist); $count++)//use the term_id's to grab the count from bb_term_taxonomy {	 	if($taglist[$count][0])//if theres a tag term 	{ 		$query = "select count from bb_term_taxonomy where term_id = " . $taglist[$count][1]; 		$result = $wpdb-&gt;get_results($query, "ARRAY_N");
		$term_count = $result[0][0];
		$taglist[$count][2] = $term_count;
	}

} //now the array is formatted like so:  $taglist[index][name][term_id][count]

$taglist = sort2d($taglist, 2); //now the array is sorted with more popular tag at the front
$taglist = array_slice($taglist, 0, $number_of_tags_to_show);//truncate the array to show the correct number of tags
$taglist = sort2d($taglist, 0, 'asc', TRUE);//order the array alphabetically by tag

$min_count = 1;
$spread = 9;
if ( $spread &lt;= 0 )
	$spread = 1;
$fontspread = $largest - $smallest;
if ( $fontspread &lt;= 0 ) 	$fontspread = 1; $fontstep = $fontspread / $spread; while (list($tag_index) = each($taglist)) { 		 	$tag = $taglist[$tag_index][0]; 	$count = $taglist[$tag_index][2]; 	 	$fontsize = round( $smallest + ( ( $count - $min_count ) * $fontstep ), 1 ); 	$count &gt; 1 ? $title = $count . " topics" : $title = $count . " topic";

	echo '<a style="font-size: ' . $fontsize . 'pt;" title="' . $title . '" rel="tag" href="' . $tag_page_url . '/'; 	echo $tag; 	echo '">'.$tag.'</a> ';
	echo "\n";
}

function sort2d ($array, $index, $order='desc', $natsort=FALSE, $case_sensitive=FALSE)
{
   if(is_array($array) &amp;&amp; count($array)&gt;0)
   {
	 foreach(array_keys($array) as $key)
		$temp[$key]=$array[$key][$index];
		if(!$natsort)
		    ($order=='asc')? asort($temp) : arsort($temp);
	    else
	    {
		  ($case_sensitive)? natsort($temp) : natcasesort($temp);
		  if($order!='asc')
			 $temp=array_reverse($temp,TRUE);
	 }
	 foreach(array_keys($temp) as $key)
		(is_numeric($key))? $sorted[]=$array[$key] : $sorted[$key]=$array[$key];
	 return $sorted;
 }
 return $array;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/scripting-programming/php/bbpress-tags-from-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Precision Fermentation: Arduino-Controlled Crock Pot Yogurt Maker</title>
		<link>http://rainbowlazer.com/scripting-programming/arduino/arduino-yogurt-maker/</link>
		<comments>http://rainbowlazer.com/scripting-programming/arduino/arduino-yogurt-maker/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 21:27:00 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Food]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=436</guid>
		<description><![CDATA[What
A homemade thermostat attachment for a crock pot (or other electric heating device). It can be used to precisely control the temperature of the crock pot for things like yogurt fermentation.
Why

Making yogurt is fun. It is also way cheaper than buying it.
You can make yogurt on the stove or in an oven, however it is [...]]]></description>
			<content:encoded><![CDATA[<h2>What</h2>
<div id="attachment_511" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_attach_relay.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-511" title="Plug it in" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_attach_relay-300x225.jpg" alt="Plug the Crockpot into the Relay, the Relay into a Power Source" width="300" height="225" /></a><p class="wp-caption-text">Arduino-Controlled Crock Pot Yogurt Maker.</p></div>
<p>A homemade thermostat attachment for a crock pot (or other electric heating device). It can be used to precisely control the temperature of the crock pot for things like yogurt fermentation.</p>
<h2>Why</h2>
<ul>
<li><a href="http://www.wikihow.com/Make-Yogurt" target="_blank">Making yogurt</a> is fun. It is also way cheaper than buying it.</li>
<li>You can make yogurt on the stove or in an oven, however it is fairly temperature-sensitive.</li>
<li>I am lazy. I don&#8217;t like waiting around for the milk to sterilize; I usually end up burning it.</li>
<li>I wanted to experiment with <a href="http://www.arduino.cc/" target="_blank">Arduino</a> microcontroller programming (and <a href="http://fritzing.org/" target="_blank">Fritzing</a>) to give myself a high degree of control over my fermentation process.</li>
</ul>
<h2>Why Not</h2>
<ul>
<li>Electric yogurt makers already exist.
<ul>
<li><em>True, but many yogurt makers only incubate; the heating/sterilization has to be done by you on the stovetop. </em><em> </em></li>
</ul>
</li>
<li>You can also buy crock pots with thermostats.
<ul>
<li><em>I know, wanna buy me one?</em></li>
</ul>
</li>
<li>You can buy yogurt in the store.
<ul>
<li><em>Yup. This is something I make for fun anyway. I figure I may as well combine it with other fun things I like.</em></li>
</ul>
</li>
<li>This is boring.
<ul>
<li><em>Mmm hmm. <a href="http://kittenwar.com/" target="_blank">Maybe this will entertain you</a>.</em></li>
</ul>
</li>
</ul>
<h2>How</h2>
<p>The crock pot is attached to a <a href="http://en.wikipedia.org/wiki/Relay" target="_blank">relay</a> that can switch it on or off. The relay is toggled by a <a href="http://en.wikipedia.org/wiki/Microcontroller" target="_blank">microcontroller</a> based on readings from a temperature sensor (<a href="http://en.wikipedia.org/wiki/Thermistor" target="_blank">thermistor</a>) placed inside the crock  pot.</p>
<p>Here&#8217;s the basic yogurt recipe (and the <a href="http://www.wikihow.com/Make-Yogurt" target="_blank">detailed version</a>):</p>
<ol>
<li>Mix 1/2 gallon milk with 1 package of dry powdered milk.  (This is optional, but it adds nutritional value and makes the yogurt thicker).</li>
<li>Heat the milk to 185°F (85°C). This kills off microbes to make way for our yogurt cultures, and denatures enzymes in the milk that may interfere with yogurt culture growth.</li>
<li>Cool the milk to 110°F (43°C). Add 2 tablespoons of already-made yogurt with active cultures, or yogurt starter.</li>
<li>In a sealed container, ferment the yogurt for 7+ hours by keeping it  as close to 100°F (38°C) as possible.</li>
</ol>
<p>Doing things the old-fashioned way, I&#8217;d be using a stovetop and candy  thermometer for steps 2 and 3, then a warm oven or a radiator for step  4. That takes a lot of attention, and uses more containers than I care  to wash later. Many commercially-sold yogurt makers still require you to perform step 2 yourself.</p>
<p>With the Arduino setup, I use a few canning jars in a water bath inside the crock pot to ensure even heating. I submerge  the temperature sensor in the water. A <a href="http://en.wikipedia.org/wiki/Voltage_divider" target="_blank">voltage  divider</a> circuit is used to indirectly measure the resistance of the  thermistor. In the code, I make use of the <a href="http://www.daycounter.com/Calculators/Steinhart-Hart-Thermistor-Calculator.phtml" target="_self">Steinhart-Hart  Thermistor Equation</a> to translate the thermistor&#8217;s resistance into temperature. This gives a pretty good idea of  the temperature inside the crock pot.</p>
<p>In addition to the thermistor&#8217;s resistance at a given time, the Steinhart-Hart equation needs to be fed three coefficients which can be calculated from information on the  manufacturer&#8217;s <a href="http://www.jameco.com/Jameco/Products/ProdDS/207037.pdf" target="_blank">data sheet</a> based on predetermined resistances at different temperatures. Since we&#8217;ll be measuring a range between 100°F (38°C) and 185°F (85°C), I used resistance values measured at 86°F (30°C), 140°F (60°C) and 194°F (90°C) to calculate my coefficients. <a href="http://www.capgo.com/Resources/Temperature/Thermistor/ThermistorCalc.html" target="_blank">Here&#8217;s a simple calculator</a> to calculate your coefficients from a given temp/resistance range, and <a href="http://www.mstarlabs.com/sensors/thermistor-calibration.html" target="_blank">here&#8217;s a more in-depth explanation of the math involved</a>.</p>
<h2>Construction</h2>
<p style="padding-left: 30px;">Parts list:</p>
<blockquote>
<ul>
<li>(1) <a href="http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove" target="_blank">Arduino Duemilanove</a> USB-programmable microcontroller @ <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank">Sparkfun</a></li>
<li>(1) <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=7914" target="_blank">Arduino ProtoShield Kit</a> @ <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank">Sparkfun</a></li>
<li>(1) <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=7916" target="_blank">Mini Breadboard</a> @ <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank">Sparkfun</a></li>
<li>(1) <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9096" target="_blank">Relay Control PCB</a> @ <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank">Sparkfun</a></li>
<li>(1) <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=101" target="_blank">Relay SPST-NO Sealed &#8211; 30A</a> @ <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank">Sparkfun</a></li>
<li>(1) <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=7950" target="_blank">Piezo buzzer</a> or small speaker @ <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank">Sparkfun</a></li>
<li>(3) <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26storeId%3D10001%26catalogId%3D10001%26productId%3D690865">Resistor 1k Ohm 1/4 Watt<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a> @<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2F"> Jameco<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a></li>
<li>(1) <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26amp%3BstoreId%3D10001%26amp%3BcatalogId%3D10001%26amp%3BproductId%3D691104">Resistor  10k Ohm 1/4 Watt<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a> @<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2F"> Jameco<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a></li>
<li>(1) <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26amp%3BstoreId%3D10001%26amp%3BcatalogId%3D10001%26amp%3BproductId%3D36038">Signal Diode  (eg, 1N4148)<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a> @<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2F"> Jameco<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a></li>
<li>(1) <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26amp%3BstoreId%3D10001%26amp%3BcatalogId%3D10001%26amp%3BproductId%3D178597">NPN Transistor (eg, 2N3904)<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a> @<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2F"> Jameco<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a></li>
<li>(1) <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26productId%3D333973%26catalogId%3D10001%26freeText%3D333973%26app.products.maxperpage%3D15%26storeId%3D10001%26search_type%3Djamecoall%26ddkey%3Dhttp%3AOrderItemAdd">LED<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a> @ <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2F"> Jameco<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a></li>
<li>(1) <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26amp%3BstoreId%3D10001%26amp%3BcatalogId%3D10001%26amp%3BproductId%3D207037">10K Thermistor<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a> @ <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=32819&amp;url=http%3A%2F%2Fwww.jameco.com%2F"> Jameco<img src="http://www.avantlink.com/tpv/10609/0/26143/32819/-/cl/image.png" width="0" height="0" style="border: none !important; margin: 0px !important;" alt="" /></a></li>
<li>(1) <a href="http://www.mcmaster.com/#72855k24/=6ennjn" target="_blank">Moisture-Seal Heat-Shrink End Cap</a> @ <a href="http://mcmaster.com" target="_blank">McMaster-Carr</a></li>
<li>(6&#8243;-12&#8243;) <a href="http://www.mcmaster.com/#74965k64/=6enoe7" target="_blank">Moisture-Seal Heat-Shrink Tubing</a> @ <a href="http://mcmaster.com/" target="_blank">McMaster-Carr</a></li>
<li>(3&#8243;-6&#8243;) <a href="http://www.mcmaster.com/#aluminum-tubing/=6enp51" target="_blank">1/4&#8243; Inside Diameter Aluminum Tube</a> @ <a href="http://mcmaster.com/" target="_blank">McMaster-Carr</a></li>
<li>(1) <a href="http://www.mcmaster.com/#nema-plugs-connectors-and-receptacles/=6eoktp" target="_blank">120V AC Female Connector</a> @ <a href="http://mcmaster.com/" target="_blank">McMaster-Carr</a></li>
<li>(1) Heavy-gauge 3-prong extension cord or power cable</li>
<li>(1) Crock pot</li>
<li>(2-3) Glass canning jars &amp; lids (uniform size is ideal)</li>
<li>You&#8217;ll also need some lead wire, a soldering iron and a multimeter.</li>
</ul>
</blockquote>
<p style="padding-left: 30px;"><strong>Thermistor Preparation</strong></p>
<p style="padding-left: 30px;">Since the temperature readings will be taken in the water bath, we need a way to keep the thermistor from getting wet. Here&#8217;s a good reference for <a href="http://www.homebrewtalk.com/f51/diy-submersible-temperature-probe-26400/" target="_blank">constructing a waterproof sensor</a>.</p>
<div id="attachment_485" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/DIY_waterproof_thermistor_sensor.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-485" title="Waterproof Thermistor." src="http://rainbowlazer.com/wp-content/uploads/2010/03/DIY_waterproof_thermistor_sensor-300x225.jpg" alt="Waterproof Thermistor." width="300" height="225" /></a><p class="wp-caption-text">Waterproof Thermistor.</p></div>
<p style="padding-left: 30px;">I constructed my waterproof thermistor by first soldering the thermistor onto two long (~3&#8242;) lead wires, then wrapping the exposed wires with heat-shrink tubing. I slid a short length of aluminum tubing over the sensor, then used moisture-resistant shrink tubing to seal both ends. You could also use epoxy.</p>
<p style="padding-left: 30px;"><strong>Relay Construction</strong></p>
<p style="padding-left: 30px;">Sparkfun.com has <a href="http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=119" target="_blank">a great tutorial for constructing a 120V relay outlet</a> specifically for this relay board. I recommend reading over their  instructions.</p>
<p style="padding-left: 30px; text-align: center;">
<div id="attachment_492" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_relay_assembled.gif" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-492 " title="Yogurt Maker Relay Assembly" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_relay_assembled-300x225.jpg" alt="Yogurt Maker Relay Assembly" width="300" height="225" /></a><p class="wp-caption-text">Yogurt Maker Relay Assembly.</p></div>
<p style="padding-left: 30px;">I deviated slightly by using a female connector  instead of a GFCI   outlet. Use the extension cord&#8217;s male end with about 12&#8243;-14&#8243; of cord attached. Expose the three extension cord wires in the middle of the cord&#8217;s length. Cut the black wire and solder the ends to the relay board&#8217;s Load 1 and Load 2 connections. This is where the line voltage toggles on and off.</p>
<div id="attachment_488" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_relay.gif" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-488 " title="Relay Assembly: Black Wire is Soldered to Relay Board" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_relay-300x225.jpg" alt="Relay Assembly: Black Wire is Soldered to Relay Board" width="300" height="225" /></a><p class="wp-caption-text">Relay Assembly: Black Wire is Soldered to Relay Board.</p></div>
<p style="padding-left: 30px;">The three wires on the end of the cord attach to the female connector. The extension cord&#8217;s green/blue wire attaches to the green screw terminal. This is the ground wire. The black and white wires attach to the other two screw terminals. Use a connectivity tester to make sure that the larger slot receptacle is connected to the larger prong on the plug.</p>
<div id="attachment_491" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_relay_connector.gif" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-491" title="Female Connector Assembly: Green/Blue Wire Attaches to Green/Ground Screw." src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_relay_connector-300x225.jpg" alt="Female Connector Assembly: Green/Blue Wire Attaches to Green/Ground Screw." width="300" height="225" /></a><p class="wp-caption-text">Female Connector Assembly: Green/Blue Wire Attaches to Green/Ground Screw.</p></div>
<p style="padding-left: 30px;">Be careful when working with line voltage, as it can kill you. The solder points on the relay are basically live exposed wires, so use a project enclosure of some sort to keep the relay from accidentally being touched. I used a discarded plastic petroleum jelly container.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9738136468704557";
/* 300x250, created 2/12/10 */
google_ad_slot = "4778708194";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p style="padding-left: 30px;"><strong>Circuit Building</strong></p>
<p style="padding-left: 30px;">Diagrams and schematics for the Arduino-controlled crockpot yogurt maker are shown below. If you haven&#8217;t yet, I&#8217;d also recommend checking out <a href="http://fritzing.org/" target="_blank">Fritzing</a>, an open-source, cross-platform development a tool that allows users to document and share their electronics prototypes.</p>
<div id="attachment_494" class="wp-caption aligncenter" style="width: 192px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/fritzing_icon.png" rel="shadowbox[post-436];player=img;"><img class="size-full wp-image-494 " title="Yogurt Maker Fritzing Diagram &amp; Schematic." src="http://rainbowlazer.com/wp-content/uploads/2010/03/fritzing_icon.png" alt="fritzing_icon" width="182" height="182" /></a><p class="wp-caption-text">Yogurt Maker Fritzing Diagram &amp; Schematic.</p></div>
<p style="padding-left: 30px;">Fritzing offers a visual mode  that allows circuits to be documented as they look in real life. This is  a great feature for those of us who aren&#8217;t electrical  engineers, or are just visual thinkers. The best part is that the visual mode is linked to a schematic drawn with traditional electronics symbols, which can really help electronics newbs to see the translation between visual circuit layout and schematic layout.</p>
<div id="attachment_486" class="wp-caption aligncenter" style="width: 306px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_breadboard.gif" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-486 " title="Circuitry Layout." src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_breadboard-296x300.gif" alt="yogurt_maker_breadboard" width="296" height="300" /></a><p class="wp-caption-text">Yogurt Maker Circuitry Layout.</p></div>
<div id="attachment_487" class="wp-caption aligncenter" style="width: 310px"><strong><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_schematic.gif" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-487 " title="Yogurt Maker Schematic." src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_maker_schematic-300x242.gif" alt="Yogurt Maker Schematic." width="300" height="242" /></a></strong><p class="wp-caption-text">Yogurt Maker Circuitry Schematic.</p></div>
<p style="padding-left: 30px; text-align: center;">
<h2 style="text-align: left;"><strong>Code</strong></h2>
<p style="padding-left: 30px; text-align: left;">
<pre class="brush: c"> /*
 Arduino-controlled crockpot thermostat, aka DIY yogurt maker.
 By Chris Reilly

http://www.rainbowlazer.com

 This program controls a relay that switches on an electric heating element (eg, crockpot) to control temperature for fermentation processes.
 The relay state is set based on readings from a thermistor which approximate the temperature of the heating element.
 The setup() function controls the stages of temperature for making yogurt.
 After adding powdered nonfat milk to liquid milk in glass canning containers, a water bath is set up in the heater, and the thermistor is placed in the bath.

 Stage 1 heats milk to 185F, to sterilize &amp; denature enzymes in the milk.
 During this stage it's useful to cover the heating element with insulation such as towels to allow for faster/more efficient heating.
 The temp will hold at 185F for ten minutes, then stage one ends.
 At the end of stage one, the buzzer will signal for one minute.

Stage 2 cools the milk to 110F. During this stage it's useful to remove the cover and insulation from the heating element to allow for faster cooling.
As soon as the temp reaches 110F, the buzzer will signal. The temp will hold at 110F for ten minutes, then stage two ends.
Yogurt or starter culture is added and containers sealed at the end of stage 2.

Stage 3 incubates the yogurt at 100F for 8 hours. This time can be increased to taste and will result in more sour yogurt.
After holding, the heating element will be shut off. At the end of stage 3, the alarm will sound for 10 minutes, at which point the yogurt containers should be refrigerated.

 The serial monitor can be used for temperature readouts and feedback on what the program is doing.
 */

 #include &lt;EEPROM.h&gt;
 #include &lt;math.h&gt;

 // These constants won't change:
 const int sensorPin = 0;     // pin that the sensor is attached to
 const int relayPin = 13;    //pin that turns the relay on or off
 const int buzzerPin = 9;    //pin that activates the piezo buzzer
 const int buttonPin = 12;    //pin that activates the piezo buzzer

 //do a better job of getting temp
 double thermistor_read(int sensorVal) { 

     //Vout = Vin * (R2/(R1 + R2)) = analogread
     double R2 = 10000; //the other (non-thermistor) resistor in our voltage divider
     double R1;  //the resistance of\the thermistor (this will be calculated from the analog-to-digital conversion taken at the sensor pin)
     double temp;     //temp will be calculated using the Steinhart-Hart thermistor equation
     double Vin = 4.6;  //reference voltage that we get from the board

     double Vout = sensorVal * (Vin/1024); //convert the ADC reading from the analog pin into a voltage. We'll need this to calculate the thermistor's resistance next

     R1 = ((R2 * Vin) / (Vout)) - R2; //calculate resistance from the analogread value. See this page for more info: http://en.wikipedia.org/wiki/Voltage_divider

     temp = 1 / (0.0011690592 + 0.00023090243 * log(R1) + .000000074484724 * pow(log(R1), 3));
     //Steinhart-Hart thermistor equation, using coefficients calculated from the manufacturere's data sheet,
     //and the calculator found here: http://www.capgo.com/Resources/Temperature/Thermistor/ThermistorCalc.html
     //this gives us temperature in Kelvin

     temp = temp - 273.15;            // Convert Kelvin to Celcius
     temp = (temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit

     return temp;
 }

//convert millis to readable hours:mins:seconds
void timestamp(unsigned long milliseconds) {
   int seconds = milliseconds / 1000;
   int minutes = seconds / 60;
   int hours = minutes / 60;

   seconds = seconds % 60;
   minutes = minutes % 60;

   if (hours &lt; 10)
     Serial.print("0");
   Serial.print(hours);
   Serial.print(":");

   if (minutes &lt; 10)
     Serial.print("0");
   Serial.print(minutes);

   Serial.print(":");

   if (seconds &lt; 10)      Serial.print("0");    Serial.print(seconds);  }  void printDouble(double val, byte precision) {   // prints val with number of decimal places determine by precision   // precision is a number from 0 to 6 indicating the desired decimal places   // example: printDouble(3.1415, 2); // prints 3.14 (two decimal places)   Serial.print (int(val));  //prints the int part   if( precision &gt; 0) {
    Serial.print("."); // print the decimal point
    unsigned long frac, mult = 1;
    byte padding = precision -1;
    while(precision--) mult *=10;
    if(val &gt;= 0) frac = (val - int(val)) * mult; else frac = (int(val) - val) * mult;
    unsigned long frac1 = frac;
    while(frac1 /= 10) padding--;
    while(padding--) Serial.print("0");
    Serial.print(frac,DEC) ;
  }
}

 //get to a specified temperature and hold
 //go_to_temp(target temp in F, duration in seconds to hold target temp for, whether to beep during hold time)
 boolean go_to_temp(double targetTemp, int holdFor, boolean alarm) { 

     //these need to be reset each time go_to_temp is called
     boolean tempReached = 0; //whether the target temp has been reached
     unsigned long startTime = 0; //the time in millis when the target temp is first reached
     int sensorValue = 0;         // the sensor value

     //loop the temp checking/relay control function until the target temp is reached, then hold for the amount of time specified in holdFor
     //the while statement will loop forever, until the target temperature is reached
     //once that happens, millis are used to count from startTime to startTime plus the length of holdFor
     while (millis() * tempReached &lt;= (startTime + holdFor * 1000) * tempReached) {
       sensorValue = analogRead(sensorPin); //get the resistance reading from the thermistor

       if ((int)millis() % 1000 == 0){ //test the temperature every five seconds
            timestamp(millis()); //print the time elapsed since starting
            Serial.print("\tTarget temp = ");
            Serial.print(targetTemp, DEC); //print the desired temperature in F
            Serial.print("\tApprox Temp = ");
            printDouble(thermistor_read(sensorValue), 2); //print the approximate temp. in F
            Serial.print(" F");

            if (thermistor_read(sensorValue) &lt; targetTemp) { //If below target temp, turn the crock pot on               digitalWrite(relayPin, HIGH);               Serial.print("\tRelay is ON");             }             else if (thermistor_read(sensorValue) &gt; targetTemp) { //If above target temp, turn the crock pot off
                digitalWrite(relayPin, LOW);
                Serial.print("\tRelay is OFF");
            }

            if (abs(thermistor_read(sensorValue) - targetTemp) &lt; 1) { //If approx. temp is within range of desired temp, log the time                 if (tempReached == 0) { //the tempReached boolean ensures this start time log only happens once                    startTime = millis();                    tempReached = 1;                 }             }              if (tempReached){ //if the target temp has been reached                     Serial.print("\tTarget temp reached at ");                     timestamp(startTime);                     Serial.print("\tholding for ");                     timestamp((startTime + holdFor * 1000) - millis());                     if (alarm)                       if (buzz(1) == 1) //buzz the buzzer to alert                         return tempReached; //if the temp is reached, and the buzzer buzzes, and the button is pushed, return true              }              Serial.println();        }     }     if (millis() * tempReached &gt; (startTime + holdFor * 1000) * tempReached)
        return tempReached;
}

//make the buzzer generate a tone
void tone(int targetPin, long frequency, long length) {
    long delayValue = 1000000/frequency/2;
    long numCycles = frequency * length/ 1000;

    for (long i=0; i &lt; numCycles; i++){                   // for the calculated length of time...
        if (micros() % (delayValue * 2) &lt; delayValue)
            digitalWrite(targetPin,HIGH);                     // write the buzzer pin high to push out the diaphram
        else
            digitalWrite(targetPin,LOW);                     // write the buzzer pin low to pull back the diaphram
        }
}

//cycle the tone on and off for a given duration, in seconds.
int buzz(long duration) {
   long buzzEnd = millis() + duration * 1000;
   int buttonState = digitalRead(buttonPin);

   while (millis() &lt; buzzEnd) {
         if (buttonState == HIGH) {
              if (millis() % 700 &lt; 125) {
                   tone(9, 1500, 75);
               }
               else if (175 &lt; (millis() % 700) &amp;&amp; (millis() % 700) &lt; 300)
                 tone(9, 1500, 75);
               else if (400 &lt; (millis() % 700) &amp;&amp; (millis() % 700) &lt; 600)
                  tone(9, 1000, 75);
               buttonState = digitalRead(buttonPin);
         }
         else
             return 1;
    }

    return 0;
}

//Pretty much everything is controlled from setup(), since we don't want the looping that happens in loop()
//
void setup() {
     Serial.begin(9600); //open communications over the serial port @ 9600 baud
     pinMode(buzzerPin, OUTPUT); // set a pin for buzzer output
     pinMode(12, INPUT); // set a pin for pushbutton input

     /*
     Each one of these if statements below is one stage in the fermentation.
     */

     if (go_to_temp(185 /*temp(F)*/, (60 * 10) /*hold(seconds)*/, 0 /*to beep or not to beep during hold time*/) == 1) {//heat to temp (F) and hold for hold time (seconds)
         Serial.println();
         Serial.print("Stage 1 (Sterilize) Complete at ");
         timestamp(millis());
         Serial.println();
         Serial.println("Push button to advance.");
         Serial.println();
         buzz(300); //sometimes we want the alarm to happen after the hold time is complete, like in this case.
     }

     if (go_to_temp(110 /*temp(F)*/, (60 * 20) /*hold(seconds)*/, 1 /*to beep or not to beep during hold time*/) == 1) {//heat to temp (F) and hold for hold time (seconds)
         Serial.println();
         Serial.print("Stage 2 (Cool) Complete at ");
         timestamp(millis());
         Serial.println();
         Serial.println("Add yogurt/culture and seal containers.");
         Serial.println();
     }

     if (go_to_temp(110 /*temp(F)*/, 25200 /*hold(seconds)*/, 0 /*to beep or not to beep during hold time*/) == 1) {//heat to temp (F) and hold for hold time (seconds)
         Serial.println();
         Serial.print("Stage 3 (Incubate) Complete at ");
         timestamp(millis());
         Serial.println();
         Serial.println("Push button to stop buzzer.");
         Serial.println();
        // buzz(600);
     }
}

 void loop() { } //all our looping happens in individual functions
</pre>
<h2>Making Yogurt</h2>
<div id="attachment_513" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/wash_everything.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-513" title="Wash Everything!" src="http://rainbowlazer.com/wp-content/uploads/2010/03/wash_everything-300x225.jpg" alt="Wash Everything!" width="300" height="225" /></a><p class="wp-caption-text">Wash Everything! Before starting, gather up all the containers, lids and stirring  utensils to be used and thoroughly wash with hot, soapy water.</p></div>
<div id="attachment_514" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_ingredients.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-514" title="Ingredients: 1/2 gallon milk, 1 package dry milk, yogurt or starter culture" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_ingredients-300x225.jpg" alt="Ingredients: 1/2 gallon milk, 1 package dry milk, yogurt or starter culture" width="300" height="225" /></a><p class="wp-caption-text">Ingredients: 1/2 gallon milk, 1 package dry milk, yogurt or starter culture. Let the yogurt come to room temperature before using; make sure that it contains live cultures &amp; isn&#39;t expired!</p></div>
<div id="attachment_515" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_add_dry_milk.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-515" title="Add dry milk." src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_add_dry_milk-300x225.jpg" alt="Add dry milk." width="300" height="225" /></a><p class="wp-caption-text">Add the Dry Milk to the Wet Milk. Stir Thoroughly.</p></div>
<div id="attachment_516" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_in_water_bath.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-516" title="Fill Containers and Place in Water Bath" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_in_water_bath-300x225.jpg" alt="Fill Containers and Place in Water Bath" width="300" height="225" /></a><p class="wp-caption-text">Fill Containers and Place in Water Bath in Crock Pot.</p></div>
<div id="attachment_510" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/insert_thermistor.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-510" title="Insert the Thermistor " src="http://rainbowlazer.com/wp-content/uploads/2010/03/insert_thermistor-300x225.jpg" alt="Insert the Thermistor in the Water Bath (Loosely cover jars to prevent condensation from dripping in)" width="300" height="225" /></a><p class="wp-caption-text">Insert the Thermistor in the Water Bath (Loosely cover jars to prevent condensation from dripping in).</p></div>
<div id="attachment_511" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_attach_relay.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-511" title="Plug it in" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_attach_relay-300x225.jpg" alt="Plug the Crockpot into the Relay, the Relay into a Power Source" width="300" height="225" /></a><p class="wp-caption-text">Plug the Crockpot into the Relay, the Relay into a Power Source.</p></div>
<div id="attachment_512" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_insulated.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-512" title="Cover &amp; Insulate" src="http://rainbowlazer.com/wp-content/uploads/2010/03/yogurt_insulated-300x225.jpg" alt="Cover the Crockpot and Insulate with Towels or Blankets" width="300" height="225" /></a><p class="wp-caption-text">Cover the crockpot and insulate with towels or blankets to help the heating stage go faster. The milk will heat to 185° F.</p></div>
<div id="attachment_555" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/04/yogurt_maker_arduino_serial_monitor.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-555" title="Arduino Serial Monitor" src="http://rainbowlazer.com/wp-content/uploads/2010/04/yogurt_maker_arduino_serial_monitor-300x294.jpg" alt="Arduino Serial Monitor" width="300" height="294" /></a><p class="wp-caption-text">Plug the Arduino into a Computer. The Serial Monitor will give Feedback and Instructions.</p></div>
<div id="attachment_560" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/04/add_starter.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-560" title="add_starter" src="http://rainbowlazer.com/wp-content/uploads/2010/04/add_starter-300x225.jpg" alt="Add Starter to Cooled Milk" width="300" height="225" /></a><p class="wp-caption-text">After the milk has cooled to 110° F, add starter or yogurt (about a tablespoon per container).</p></div>
<div id="attachment_559" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/04/incubate.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-559" title="Incubate" src="http://rainbowlazer.com/wp-content/uploads/2010/04/incubate-300x225.jpg" alt="Incubate" width="300" height="225" /></a><p class="wp-caption-text">Seal the lids tightly and incubate for 7 hours (or more) at 100°F.</p></div>
<div id="attachment_558" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2010/04/its_yogurt.jpg" rel="shadowbox[post-436];player=img;"><img class="size-medium wp-image-558" title="its_yogurt" src="http://rainbowlazer.com/wp-content/uploads/2010/04/its_yogurt-300x225.jpg" alt="It's Yogurt!" width="300" height="225" /></a><p class="wp-caption-text">It&#39;s Yogurt! Refrigerate after opening.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/scripting-programming/arduino/arduino-yogurt-maker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plaque Buildup: Bronze Casting from Laser-Cut Forms</title>
		<link>http://rainbowlazer.com/cnc-fabrication/laser-cutting/bronze-casting-from-laser-cut-forms/</link>
		<comments>http://rainbowlazer.com/cnc-fabrication/laser-cutting/bronze-casting-from-laser-cut-forms/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 17:26:49 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[2D->3D]]></category>
		<category><![CDATA[Foundry]]></category>
		<category><![CDATA[Laser Cutting]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=397</guid>
		<description><![CDATA[Here are some pictures and notes from a test of a bronze casting using forms produced on a laser-cutter. This is a casting of a plaque with text, produced first by engraving into a 1/2&#8243; deep piece of acrylic using a laser cutter. The acrylic form is used to create a negative mold in casting [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some pictures and notes from a test of a bronze casting using forms produced on a laser-cutter. This is a casting of a plaque with text, produced first by engraving into a 1/2&#8243; deep piece of acrylic using a laser cutter. The acrylic form is used to create a negative mold in casting sand, which can then accept molten bronze.</p>
<p>This was a really cool project and seems to be successful. I&#8217;m hoping to continue and try some more interesting forms beyond text. I think cutting-edge fabrication technology is at it&#8217;s best when combined with established/non-digital techniques&#8211;it&#8217;s the best of both worlds!</p>
<p>This pour took place at the <a href="http://www.butlerstreetfoundry.com/www/htdocs/butler/Custom_Fabrication.htm" target="_blank">Butler Street Foundry</a> in Chicago. </p>
<p style="text-align: center;">
<div id="attachment_398" class="wp-caption aligncenter" style="width: 310px"><a title="Laser-cut Form for Bronze Casting" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0166.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-398 " title="Laser-cut Form for Bronze Casting" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0166-300x225.jpg" alt="Laser-cut Form for Bronze Casting" width="300" height="225" /></a><p class="wp-caption-text">Laser-cut Form for Bronze Casting</p></div>
<div id="attachment_414" class="wp-caption aligncenter" style="width: 310px"><a title="The Final Product: A Cast Bronze Plaque" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0329.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-414 " title="The Final Product: A Cast Bronze Plaque" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0329-300x225.jpg" alt="The Final Product: A Cast Bronze Plaque" width="300" height="225" /></a><p class="wp-caption-text">The Final Product: A Cast Bronze Plaque</p></div>
<div id="attachment_399" class="wp-caption aligncenter" style="width: 310px"><a title="A Deep Raster Engraving With a Tapered Shoulder Makes for a Great Plaque Form" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0167.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-399 " title="A Deep Raster Engraving With a Tapered Shoulder Makes for a Great Plaque Form" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0167-300x225.jpg" alt="A Deep Raster Engraving With a Tapered Shoulder Makes for a Great Plaque Form" width="300" height="225" /></a><p class="wp-caption-text">A Deep Raster Engraving With a Tapered Shoulder Makes for a Great Plaque Form</p></div>
<div id="attachment_401" class="wp-caption aligncenter" style="width: 310px"><a title="A Two-part Sand Mold Will Recieve the Molten Bronze" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0194.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-401 " title="A Two-part Sand Mold Will Recieve the Molten Bronze" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0194-300x225.jpg" alt="A Two-part Sand Mold Will Recieve the Molten Bronze" width="300" height="225" /></a><p class="wp-caption-text">A Two-part Sand Mold Will Recieve the Molten Bronze</p></div>
<div id="attachment_402" class="wp-caption aligncenter" style="width: 310px"><a title="Casting Sand Packed into the Two-part Sand Mold Holds an Impression of the Laser-cut Form" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0195.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-402 " title="Casting Sand Packed into the Two-part Sand Mold Holds an Impression of the Laser-cut Form" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0195-300x225.jpg" alt="Casting Sand Packed into the Two-part Sand Mold Holds an Impression of the Laser-cut Form" width="300" height="225" /></a><p class="wp-caption-text">Casting Sand Packed into the Mold Holds an Impression of the Laser-cut Form</p></div>
<div id="attachment_403" class="wp-caption aligncenter" style="width: 310px"><a title="Casting Sand is a Mixture of Sand &amp; Clay; Imagine the Best Sand-Castle Sand, Times Ten" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0196.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-403 " title="Casting Sand is a Mixture of Sand &amp; Clay; Imagine the Best Sand-Castle Sand, Times Ten" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0196-300x225.jpg" alt="Casting Sand is a Mixture of Sand &amp; Clay; Imagine the Best Sand-Castle Sand, Times Ten" width="300" height="225" /></a><p class="wp-caption-text">Casting Sand is a Mixture of Sand &amp; Clay; Imagine the Best Sand-Castle Sand, Times Ten</p></div>
<div id="attachment_400" class="wp-caption aligncenter" style="width: 310px"><a title="A Gas Furnace is Used to Melt the Bronze" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0169.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-400 " title="A Gas Furnace is Used to Melt the Bronze" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0169-300x225.jpg" alt="A Gas Furnace is Used to Melt the Bronze" width="300" height="225" /></a><p class="wp-caption-text">A Gas Furnace is Used to Melt the Bronze</p></div>
<div id="attachment_404" class="wp-caption aligncenter" style="width: 310px"><a title="Solid Bronze Goes into the Furnace to Melt" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0211.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-404 " title="Solid Bronze Goes into the Furnace to Melt" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0211-300x225.jpg" alt="Solid Bronze Goes into the Furnace to Melt" width="300" height="225" /></a><p class="wp-caption-text">Solid Bronze Goes into the Furnace to Melt</p></div>
<p><!--adsense--></p>
<div id="attachment_405" class="wp-caption aligncenter" style="width: 310px"><a title="Solid Bronze Goes into the Furnace to Melt" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0213.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-405 " title="Solid Bronze Goes into the Furnace to Melt" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0213-300x225.jpg" alt="Solid Bronze Goes into the Furnace to Melt" width="300" height="225" /></a><p class="wp-caption-text">Solid Bronze Goes into the Furnace to Melt</p></div>
<div id="attachment_406" class="wp-caption aligncenter" style="width: 310px"><a title="Lifting the Lid off the Furnace" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0244.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-406 " title="Lifting the Lid off the Furnace" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0244-300x225.jpg" alt="Lifting the Lid off the Furnace" width="300" height="225" /></a><p class="wp-caption-text">Lifting the Lid off the Furnace</p></div>
<div id="attachment_407" class="wp-caption aligncenter" style="width: 310px"><a title="The Molten Bronze is Lifted Out of the Furnace in a Container Called a Crucible" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0248.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-407 " title="The Molten Bronze is Lifted Out of the Furnace in a Container Called a Crucible" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0248-300x225.jpg" alt="The Molten Bronze is Lifted Out of the Furnace in a Container Called a Crucible" width="300" height="225" /></a><p class="wp-caption-text">The Molten Bronze is Lifted Out of the Furnace in a Container Called a Crucible</p></div>
<div id="attachment_408" class="wp-caption aligncenter" style="width: 310px"><a title="Molten Bronze Hoisted out of the Furnace" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0262.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-408 " title="Molten Bronze Hoisted out of the Furnace" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0262-300x225.jpg" alt="Molten Bronze Hoisted out of the Furnace" width="300" height="225" /></a><p class="wp-caption-text">Molten Bronze Hoisted out of the Furnace</p></div>
<div id="attachment_409" class="wp-caption aligncenter" style="width: 310px"><a title="Molten Bronze Hoisted out of the Furnace" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0263.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-409 " title="Molten Bronze Hoisted out of the Furnace" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0263-300x225.jpg" alt="Molten Bronze Hoisted out of the Furnace" width="300" height="225" /></a><p class="wp-caption-text">Molten Bronze Hoisted out of the Furnace</p></div>
<div id="attachment_410" class="wp-caption aligncenter" style="width: 310px"><a title="Molten Bronze in the Crucible" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0266.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-410 " title="Molten Bronze in the Crucible" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0266-300x225.jpg" alt="Molten Bronze in the Crucible" width="300" height="225" /></a><p class="wp-caption-text">Molten Bronze in the Crucible</p></div>
<div id="attachment_411" class="wp-caption aligncenter" style="width: 310px"><a title="Molten Bronze Poured from the Crucible into the Two-Part Sand Mold" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0303.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-411 " title="Molten Bronze Poured from the Crucible into the Two-Part Sand Mold" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0303-300x225.jpg" alt="Molten Bronze Poured from the Crucible into the Two-Part Sand Mold" width="300" height="225" /></a><p class="wp-caption-text">Molten Bronze Poured from the Crucible into the Two-Part Sand Mold</p></div>
<div id="attachment_412" class="wp-caption aligncenter" style="width: 310px"><a title="Molten Bronze Cools in the Two-Part Sand Mold: Weights are Placed on Top to Contain the Hydraulic Pressure Created in the Mold" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0313.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-412  " title="Molten Bronze Cools in the Two-Part Sand Mold: Weights are Placed on Top to Contain the Hydraulic Pressure Created in the Mold" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0313-300x225.jpg" alt="Molten Bronze Cools in the Two-Part Sand Mold" width="300" height="225" /></a><p class="wp-caption-text">Molten Bronze Cools in the Two-Part Sand Mold: Weights are Placed on Top to Contain the Hydraulic Pressure Created in the Mold</p></div>
<div id="attachment_413" class="wp-caption aligncenter" style="width: 310px"><a title="After About 20 Minutes, the Bronze has Cooled Enough to be Released from the Two-Part Sand Mold" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0324.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-413 " title="After About 20 Minutes, the Bronze has Cooled Enough to be Released from the Two-Part Sand Mold" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0324-300x225.jpg" alt="After About 20 Minutes, the Bronze has Cooled Enough to be Released from the Two-Part Sand Mold" width="300" height="225" /></a><p class="wp-caption-text">After About 20 Minutes, the Bronze has Cooled Enough to be Released from the Two-Part Sand Mold</p></div>
<div id="attachment_415" class="wp-caption aligncenter" style="width: 310px"><a title="Bronze Casting Released from the Two-Part Sand Mold" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0330.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-415 " title="Bronze Casting Released from the Two-Part Sand Mold" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0330-300x225.jpg" alt="Bronze Casting Released from the Two-Part Sand Mold" width="300" height="225" /></a><p class="wp-caption-text">Bronze Casting Released from the Two-Part Sand Mold</p></div>
<div id="attachment_416" class="wp-caption aligncenter" style="width: 310px"><a title="The Final Product: A Cast Bronze Plaque" href="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0334.jpg" rel="shadowbox[post-397];player=img;"><img class="size-medium wp-image-416 " title="The Final Product: A Cast Bronze Plaque" src="http://rainbowlazer.com/wp-content/uploads/2010/01/DSCF0334-300x225.jpg" alt="The Final Product: A Cast Bronze Plaque" width="300" height="225" /></a><p class="wp-caption-text">The Final Product: A Cast Bronze Plaque</p></div>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/cnc-fabrication/laser-cutting/bronze-casting-from-laser-cut-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CNC Routing Technique for Milling Interior Corners</title>
		<link>http://rainbowlazer.com/3d/rhino/cnc-routing-technique-for-milling-interior-corners/</link>
		<comments>http://rainbowlazer.com/3d/rhino/cnc-routing-technique-for-milling-interior-corners/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 23:39:05 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[2D->3D]]></category>
		<category><![CDATA[3D Modeling/Scanning]]></category>
		<category><![CDATA[CNC Fabrication]]></category>
		<category><![CDATA[Laser Cutting]]></category>
		<category><![CDATA[Rapid Prototyping]]></category>
		<category><![CDATA[Rhino]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=358</guid>
		<description><![CDATA[
Laser cutting is a great technique for quick fabrication, in part because of the very small point size of the laser beam. The minuscule kerf of a laser cut allows for very tight 90° angles on interior (and exterior cuts).  This makes it easy to laser-cut thin panels of material for joining, as oomout demonstrates [...]]]></description>
			<content:encoded><![CDATA[<p><!--adsense--></p>
<p><a href="http://rainbowlazer.com/wp-content/uploads/2009/10/t-bolt-joint_Quarter-Inch.dxf"></a>Laser cutting is a great technique for quick fabrication, in part because of the very small point size of the laser beam. The minuscule kerf of a laser cut allows for very tight 90° angles on interior (and exterior cuts).  This makes it easy to laser-cut thin panels of material for joining, as <a href="http://www.instructables.com/id/How_to_Make_Anything_Using_Acrylic_and_Machine_Sc/" target="_blank">oomout demonstrates in this post</a> on instructables.com (example pictured below). One of the drawbacks of laser cutting is the limited depth of materials that can be successfully through-cut; the laser cutter that I have access to can get through about 1/2&#8243; of MDF or plywood, but the cuts are very charred and not perpendicular due to the hourglass shape of the laser&#8217;s focal point.</p>
<div id="attachment_373" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/10/laser-cut_tBolt.jpg" rel="shadowbox[post-358];player=img;"><img class="size-medium wp-image-373" title="laser-cut_tBolt" src="http://rainbowlazer.com/wp-content/uploads/2009/10/laser-cut_tBolt-300x170.jpg" alt="T-Bolt connection using laser-cut panels" width="300" height="170" /></a><p class="wp-caption-text">T-Bolt connection using laser-cut 1/4&quot; panels</p></div>
<p>CNC routing is another great technique for quick fabrication. The range of material depth is much greater, there&#8217;s no burning, and through-cuts are perpendicular. One of the biggest drawbacks, however, is the inability to route interior corners due to the cylindrical shape of the cutting tool. This can require tedious hand-finishing to file or chisel out the interior corners to 90° angles, which is not worthwhile for projects that don&#8217;t have to look pretty, i.e. prototypes.</p>

<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/t-bolt_laser-cut_half-inch.jpg' rel='shadowbox[post-358];player=img;' title='t-bolt_laser-cut_half-inch'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/t-bolt_laser-cut_half-inch-150x150.jpg" class="attachment-thumbnail" alt="90° joint using laser-cut 1/2&quot; MDF - note the charring" title="t-bolt_laser-cut_half-inch" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/t-bolt_laser-cut_half-inch2.jpg' rel='shadowbox[post-358];player=img;' title='t-bolt_laser-cut_half-inch2'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/t-bolt_laser-cut_half-inch2-150x150.jpg" class="attachment-thumbnail" alt="T-bolt connection using laser-cut 1/2&quot; MDF - note the charring" title="t-bolt_laser-cut_half-inch2" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/half_inch_tBolt.jpg' rel='shadowbox[post-358];player=img;' title='half_inch_tBolt'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/half_inch_tBolt-150x150.jpg" class="attachment-thumbnail" alt="90° joint using 1/2&quot; CNC-routed MDF" title="half_inch_tBolt" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/half_inch_tBolt2.jpg' rel='shadowbox[post-358];player=img;' title='half_inch_tBolt2'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/half_inch_tBolt2-150x150.jpg" class="attachment-thumbnail" alt="T-bolt connection using CNC-routed 1/2&quot; MDF" title="half_inch_tBolt2" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/layout.gif' rel='shadowbox[post-358];player=img;' title='layout'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/layout-150x150.gif" class="attachment-thumbnail" alt="Purple = cut piece; Blue = interior corner knockouts" title="layout" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/circle_dims.gif' rel='shadowbox[post-358];player=img;' title='circle_dims'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/circle_dims-150x150.gif" class="attachment-thumbnail" alt="Cutout sizing" title="circle_dims" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/10/laser-cut_tBolt.jpg' rel='shadowbox[post-358];player=img;' title='laser-cut_tBolt'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/10/laser-cut_tBolt-150x150.jpg" class="attachment-thumbnail" alt="T-Bolt connection using laser-cut panels" title="laser-cut_tBolt" /></a>

<p>The technique pictured above is achieved by simply routing an extra bit of material out of interior corners to allow for 90° butt-joints. To set the paths for the corner knock-outs, a circle is created at each interior corner using a 3-point definition; the first point is set on the corner&#8217;s intersection, the second two are placed on each edge of the corner at a distance equal to the diameter of the router bit you plan on using. This will make sure enough material is taken away to allow for a 90° joint.</p>
<p>
<a href="http://rainbowlazer.com/wp-content/uploads/2009/10/t-bolt-joint_Quarter-Inch.dxf"><img src="http://rainbowlazer.com/wp-content/uploads/2009/10/deeexeff.gif" alt="deeexeff" width="48" height="48" align="left" /><br />
Vector path for 1/4&#8243; laser-cut t-bolt joint (.dxf)</a>
</p>
<p><br/></p>
<p>
<a href="http://rainbowlazer.com/wp-content/uploads/2009/10/CNC_tbolt_half_inch.dxf"><img src="http://rainbowlazer.com/wp-content/uploads/2009/10/deeexeff.gif" alt="deeexeff" width="48" height="48" align="left" /><br />
Vector path for 1/2&#8243; CNC-routed t-bolt joint (.dxf)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/3d/rhino/cnc-routing-technique-for-milling-interior-corners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3D Scan Editing in Rapidform</title>
		<link>http://rainbowlazer.com/3d/3d-scan-editing-in-rapidform/</link>
		<comments>http://rainbowlazer.com/3d/3d-scan-editing-in-rapidform/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 04:30:43 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[3D Modeling/Scanning]]></category>
		<category><![CDATA[Rapidform]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=266</guid>
		<description><![CDATA[Here&#8217;s a sample workflow of editing &#38; cleaning 3D scan data in Rapidform. This was scanned from a deer skull using a Handyscan 3D scanner.

]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a sample workflow of editing &amp; cleaning 3D scan data in <a href="http://www.rapidform.com/" target="_blank">Rapidform</a>. This was scanned from a deer skull using a <a href="http://www.creaform3d.com/en/handyscan3d/default.aspx" target="_blank">Handyscan</a> 3D scanner.</p>
<div id="attachment_317" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/06/skull/skull.swf" rel="shadowbox;width=800;height=600"><img src="http://rainbowlazer.com/wp-content/uploads/2009/06/Picture-39-300x224.png" alt="Here&#039;s a low-poly version of the final model. Click to view in 3D!" title="Picture 39" width="300" height="224" class="size-medium wp-image-317" /></a><p class="wp-caption-text">Here's a low-poly version of the final model. Click to view in 3D (Click/drag rotates, shift+drag pans)</p></div>
<div id="attachment_267" class="wp-caption aligncenter" style="width: 490px"><a rel="shadowbox;width=720;height=576" href="http://rainbowlazer.com/wp-content/uploads/2009/06/001_mesh_import_DS_small.mov"><img class="size-full wp-image-267" title="001_mesh_import_DS" src="http://rainbowlazer.com/wp-content/uploads/2009/06/001_mesh_import_DS.jpg" alt="001_mesh_import_DS" width="480" height="384" /></a><p class="wp-caption-text">Step 1: Import mesh data into Rapidform (Insert -&gt; Import...)</p></div>
<div id="attachment_270" class="wp-caption aligncenter" style="width: 490px"><a rel="shadowbox;width=720;height=576" href="http://rainbowlazer.com/wp-content/uploads/2009/06/002_draw_ref_planes_DS_small.mov"><img class="size-full wp-image-270" title="002_draw_ref_planes_DS" src="http://rainbowlazer.com/wp-content/uploads/2009/06/002_draw_ref_planes_DS.jpg" alt="Step 2: Draw reference planes to help align the scan in space." width="480" height="384" /></a><p class="wp-caption-text">Step 2: Draw reference planes to help align the scan in space. (Use the Extract method to draw a plane along the bottom chunk of scan data. Then use the Mirror method to draw a symmetry plane down the center of the skull. Draw a seed plane first using Draw Line to give the Mirror function a rough idea of where the center is.)</p></div>
<div id="attachment_273" class="wp-caption aligncenter" style="width: 490px"><a rel="shadowbox;width=720;height=576" href="http://rainbowlazer.com/wp-content/uploads/2009/06/003_interactive_align_DS_small.mov"><img class="size-full wp-image-273" title="003_interactive_align_DS" src="http://rainbowlazer.com/wp-content/uploads/2009/06/003_interactive_align_DS.jpg" alt="Step 3: Use Interactive Alignment to orient the scan in space. Select the first two planes as the Plane and Vector options." width="480" height="384" /></a><p class="wp-caption-text">Step 3: Use Interactive Alignment to orient the scan in space. (Select the first two planes as the Plane and Vector options.)</p></div>
<div id="attachment_269" class="wp-caption aligncenter" style="width: 490px"><a rel="shadowbox;width=720;height=576" href="http://rainbowlazer.com/wp-content/uploads/2009/06/004_heal_mesh_DS_small.mov"><img class="size-full wp-image-269" title="004_heal_mesh_DS" src="http://rainbowlazer.com/wp-content/uploads/2009/06/004_heal_mesh_DS.jpg" alt="Step 4: Use Healing Wizard to delete junk data" width="480" height="384" /></a><p class="wp-caption-text">Step 4: Use Healing Wizard to delete junk data</p></div>
<div id="attachment_268" class="wp-caption aligncenter" style="width: 490px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/06/005_fill_holes_DS_small.mov" rel="shadowbox;width=720;height=576"><img src="http://rainbowlazer.com/wp-content/uploads/2009/06/005_fill_holes_DS.jpg" alt="Step 5: Use the Fill Holes tool to fill holes. Use Fill Gulf and Bridge option to fill in large holes in stages." title="005_fill_holes_DS" width="480" height="384" class="size-full wp-image-268" /></a><p class="wp-caption-text">Step 5: Use the Fill Holes tool to fill holes. Use Fill Gulf and Bridge option to fill in large holes in stages.</p></div>
<div id="attachment_272" class="wp-caption aligncenter" style="width: 490px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/06/006_boundary_extrude_DS_small.mov" rel="shadowbox;width=720;height=576"><img src="http://rainbowlazer.com/wp-content/uploads/2009/06/006_boundary_extrude_DS.jpg" alt="Step 6: Use Boundary Extrude to fill in the nasal cavity. (This hole is too big and detailed to use Fill Holes.)" title="006_boundary_extrude_DS" width="480" height="384" class="size-full wp-image-272" /></a><p class="wp-caption-text">Step 6: Use Boundary Extrude to fill in the nasal cavity. (This hole is too big and detailed to use Fill Holes.)</p></div>
<div id="attachment_274" class="wp-caption aligncenter" style="width: 490px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/06/007_global_remesh_DS_small.mov" rel="shadowbox;width=720;height=576"><img src="http://rainbowlazer.com/wp-content/uploads/2009/06/007_global_remesh_DS.jpg" alt="Step 7: Use Global Remesh to make all the mesh faces the same size. This will make it easier to edit the extruded portion." title="007_global_remesh_DS" width="480" height="384" class="size-full wp-image-274" /></a><p class="wp-caption-text">Step 7: Use Global Remesh to make all the mesh faces the same size. This will make it easier to edit the extruded portion.</p></div>
<div id="attachment_271" class="wp-caption aligncenter" style="width: 490px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/06/008_smart_brush_DS_small.mov" rel="shadowbox;width=720;height=576"><img src="http://rainbowlazer.com/wp-content/uploads/2009/06/008_smart_brush_DS.jpg" alt="Step 8: Use Smart Brush to add detail to the extruded portion of the mesh. The Deform option pushes by default, but will pull if you hold Ctrl. " title="008_smart_brush_DS" width="480" height="384" class="size-full wp-image-271" /></a><p class="wp-caption-text">Step 8: Use Smart Brush to add detail to the extruded portion of the mesh. The Deform option pushes by default, but will pull if you hold Ctrl. </p></div>
<p><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/3d/3d-scan-editing-in-rapidform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/002_draw_ref_planes_DS_small.mov" length="5414109" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/001_mesh_import_DS_small.mov" length="1749523" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/003_interactive_align_DS_small.mov" length="4279263" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/004_heal_mesh_DS_small.mov" length="2320855" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/005_fill_holes_DS_small.mov" length="10534476" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/006_boundary_extrude_DS_small.mov" length="3891684" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/007_global_remesh_DS_small.mov" length="1778524" type="video/quicktime" />
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/06/008_smart_brush_DS_small.mov" length="9353110" type="video/quicktime" />
		</item>
		<item>
		<title>Multiple Webcams in Flash with Actionscript 3</title>
		<link>http://rainbowlazer.com/scripting-programming/multiple-webcams-in-flash-with-actionscript-3/</link>
		<comments>http://rainbowlazer.com/scripting-programming/multiple-webcams-in-flash-with-actionscript-3/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 22:57:13 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Scripting & Programming]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=231</guid>
		<description><![CDATA[
It&#8217;s true! You can have multiple webcam feeds in your swf/as3 application. Here&#8217;s how:

Plug in your webcams.
Look in your Flash Player&#8217;s Camera Settings Panel. You might have to open an existing swf to get here. You should see a dropdown list of all the cameras available to you. The first camera on the list is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rainbowlazer.com/wp-content/uploads/2009/06/picture-37.png" rel="shadowbox[post-231];player=img;"><img class="aligncenter size-medium wp-image-240" title="picture-37" src="http://rainbowlazer.com/wp-content/uploads/2009/06/picture-37-300x226.png" alt="picture-37" width="300" height="226" /></a></p>
<p>It&#8217;s true! You can have multiple webcam feeds in your swf/as3 application. Here&#8217;s how:</p>
<ol>
<li>Plug in your webcams.</li>
<li>Look in your <a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/help04.html#117113" target="_blank">Flash Player&#8217;s Camera Settings Panel</a>. You might have to open an existing swf to get here. You should see a dropdown list of all the cameras available to you. The first camera on the list is camera 0, the second is camera 1, and so on. Remember the numbers of the cameras you want to work with (In my case, I want #7 and #8).<br />
<a href="http://rainbowlazer.com/wp-content/uploads/2009/06/picture-36.png" rel="shadowbox[post-231];player=img;"><img class="aligncenter size-full wp-image-236" style="margin-top: 25px; margin-bottom: 25px;" title="Flash Player's Camera Settings" src="http://rainbowlazer.com/wp-content/uploads/2009/06/picture-36.png" alt="Flash Player's Camera Settings" width="226" height="211" /></a></li>
<li>Call your cameras with Actionscript 3. Here&#8217;s the <a href="http://rainbowlazer.com/wp-content/uploads/2009/06/multi_cam_test.as" target="_blank">code</a>, and here&#8217;s a <a href="http://rainbowlazer.com/wp-content/uploads/2009/06/multi_cam_test.zip" target="_blank">FLEX project</a>.<a href="http://rainbowlazer.com/wp-content/uploads/2009/06/picture-35.png" rel="shadowbox[post-231];player=img;"><img class="aligncenter size-full wp-image-235" style="border: 1px solid black; margin-top: 25px; margin-bottom: 25px;" title="The Actionscript 3 Code" src="http://rainbowlazer.com/wp-content/uploads/2009/06/picture-35.png" alt="The Actionscript 3 Code" width="518" height="471" /></a></li>
<li>A few pointers: be careful about plugging/unplugging the cameras. Flash Player seems not to like this, you may have to quit and restart to refresh the list. You can adjust how and where both video feeds are placed in the scene. In this example they&#8217;re layered on top of each other with the blend mode set to OVERLAY, which [sort of] averages the two feeds together.</li>
<li>Only see one camera? Depending on your camera &amp; drivers, your computer may not recognize two identical cameras at the same time. Cameras with different hardware should be recognized, though.</li>
</ol>
<p>Also, I am using <a href="http://www.amazon.com/PlayStation-3-Eye/dp/B000VTQ3LU" target="_blank">Playstation 3 Eye</a> cameras, because they are great in low light and have high frame rates, and are pretty cheap. You can get drivers for <a href="http://alexpopovich.wordpress.com/2008/10/02/sony-ps3eye-camera-directshow-capture-source-filter/" target="_blank">Windows</a> and <a href="http://webcam-osx.sourceforge.net/downloads.html" target="_blank">Mac</a> since they are not recognized automatically. Have fun!</p>
<p style="text-align: center;">
<p><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/scripting-programming/multiple-webcams-in-flash-with-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ARToolKit/FLARToolKit camera_para.dat for the iSight</title>
		<link>http://rainbowlazer.com/scripting-programming/artoolkitflartoolkit-camera_paradat-for-the-isight/</link>
		<comments>http://rainbowlazer.com/scripting-programming/artoolkitflartoolkit-camera_paradat-for-the-isight/#comments</comments>
		<pubDate>Thu, 21 May 2009 22:33:55 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[2D->3D]]></category>
		<category><![CDATA[Scripting & Programming]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=224</guid>
		<description><![CDATA[For all you ARTookit/FLARToolkit users out there, here&#8217;s a camera_para.dat file calibrated for the built-in iSight camera on a MacBook Pro. Have fun! camera_para_isight2

]]></description>
			<content:encoded><![CDATA[<p>For all you <a href="http://www.hitl.washington.edu/artoolkit/documentation/usercalibration.htm" target="_blank">ARTookit</a>/<a href="http://www.mikkoh.com/blog/?p=182" target="_blank">FLARToolkit</a> users out there, here&#8217;s a camera_para.dat file calibrated for the built-in iSight camera on a MacBook Pro. Have fun! <code><a href="http://rainbowlazer.com/wp-content/uploads/2009/05/camera_para_isight2.dat">camera_para_isight2</a></p>
<p><!--adsense--></code></p>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/scripting-programming/artoolkitflartoolkit-camera_paradat-for-the-isight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Varying Vector Cut Speeds on a 120W Laser Cutter</title>
		<link>http://rainbowlazer.com/cnc-fabrication/laser-cutting/varying-vector-cut-speeds-on-a-120w-laser-cutter/</link>
		<comments>http://rainbowlazer.com/cnc-fabrication/laser-cutting/varying-vector-cut-speeds-on-a-120w-laser-cutter/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 21:34:42 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[CNC Fabrication]]></category>
		<category><![CDATA[Laser Cutting]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=204</guid>
		<description><![CDATA[

Above is an example of varying speed settings with vector cuts and engravings on a 120W Co2 laser cutter. The ratios of power to speed are roughly the same on both groups of cuts, producing approximately the same depth; however one speed setting is much higher (30x) than the other, producing the wobbly lines on [...]]]></description>
			<content:encoded><![CDATA[<p><!--adsense--><br />
<a href="http://rainbowlazer.com/wp-content/uploads/2009/04/laser_speed_all4.jpg" rel="shadowbox[post-204];player=img;"><img class="aligncenter size-medium wp-image-203" title="laser_speed_all4" src="http://rainbowlazer.com/wp-content/uploads/2009/04/laser_speed_all4-300x157.jpg" alt="laser_speed_all4" width="300" height="157" /></a></p>
<p>Above is an example of varying speed settings with vector cuts and engravings on a 120W Co2 laser cutter. The ratios of power to speed are roughly the same on both groups of cuts, producing approximately the same depth; however one speed setting is much higher (30x) than the other, producing the wobbly lines on the fast group. The faster setting was enough to cause the laser&#8217;s Y axis to lose registration, as you can see on the two bottom lines of text.</p>
<p>Keeping a low speed is not necessary for all cuts, just those with small or intricate paths which cause the head to change position rapidly. Straight cuts with a higher speed usually look just fine.</p>
<p><a href="http://rainbowlazer.com/wp-content/uploads/2009/04/laser_speed_slow.jpg" rel="shadowbox[post-204];player=img;"><img class="aligncenter size-medium wp-image-202" title="laser_speed_slow" src="http://rainbowlazer.com/wp-content/uploads/2009/04/laser_speed_slow-297x300.jpg" alt="laser_speed_slow" width="297" height="300" /></a></p>
<p><a href="http://rainbowlazer.com/wp-content/uploads/2009/04/laser_speed_quick.jpg" rel="shadowbox[post-204];player=img;"><img class="aligncenter size-medium wp-image-194" title="laser_speed_quick" src="http://rainbowlazer.com/wp-content/uploads/2009/04/laser_speed_quick-300x277.jpg" alt="laser_speed_quick" width="300" height="277" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/cnc-fabrication/laser-cutting/varying-vector-cut-speeds-on-a-120w-laser-cutter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rhino 4 NURBS Solid Modeling Tutorial &#8211; Model a Webcam Step-by-Step</title>
		<link>http://rainbowlazer.com/3d/rhino/rhino-4-nurbs-solid-modeling-tutorial-model-a-webcam-step-by-step/</link>
		<comments>http://rainbowlazer.com/3d/rhino/rhino-4-nurbs-solid-modeling-tutorial-model-a-webcam-step-by-step/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 20:07:18 +0000</pubDate>
		<dc:creator>Taylor</dc:creator>
				<category><![CDATA[2D->3D]]></category>
		<category><![CDATA[Rapid Prototyping]]></category>
		<category><![CDATA[Rhino]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=77</guid>
		<description><![CDATA[This tutorial is based on toxiclab&#8217;s webcam tutorial. I tried to be a little more explicit as this is intended for beginners.
Colors in the screenshots are only intended to distinguish between steps. Enjoy!







Step 1.a
Start a new file (small obj/inches)



Step 1.b
In the Top viewport, draw 2 concentric circles, centered on 0, 1&#8243; and 2&#8243; diameters respectively.



Step [...]]]></description>
			<content:encoded><![CDATA[<p>This tutorial is based on <a href="http://www.toxiclab.org/tutorial.asp?ID=126">toxiclab&#8217;s</a> webcam tutorial. I tried to be a little more explicit as this is intended for beginners.</p>
<p>Colors in the screenshots are only intended to distinguish between steps. Enjoy!</p>
<table border="1" cellspacing="0" cellpadding="10" width="500" align="center">
<tbody>
<tr>
<td colspan="2">
<div id="attachment_186" class="wp-caption aligncenter" style="width: 310px"><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/webcam2.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-186 " title="webcam2" src="http://rainbowlazer.com/wp-content/uploads/2009/03/webcam2-300x288.jpg" alt="webcam2" width="300" height="288" /></a><p class="wp-caption-text">The final product should look something like this</p></div>
<p><div class="wp-caption aligncenter" style="width: 130px"><a href="http://www.rainbowlazer.com/wp-content/uploads/2010/02/web_cam.zip"><img title="Webcam file with all steps (.3dm, 16mb)" src="http://2.bp.blogspot.com/_S57BC5oDY9s/SbhgFkqdAtI/AAAAAAAAAg4/SZME3nOpHCw/s400/rhino+icon.gif" alt="" width="120" height="120" /></a><p class="wp-caption-text">Webcam file with all steps (.3dm, 16mb)</p></div></td>
</tr>
<tr>
<td><strong>Step 1.a</strong><br />
Start a new file (small obj/inches)</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_0.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-80" title="step_1a" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_0-300x234.jpg" alt="Step 1.a" width="300" height="234" /></a></td>
</tr>
<tr>
<td><strong>Step 1.b</strong><br />
In the Top viewport, draw 2 concentric circles, centered on 0, 1&#8243; and 2&#8243; diameters respectively.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_1.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-79" title="step_1b" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_1-300x245.jpg" alt="Step 1.b" width="300" height="245" /></a></td>
</tr>
<tr>
<td><strong>Step 2</strong><br />
Copy and paste the smaller circle in place.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_2.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-79" title="step_2" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_2-300x267.jpg" alt="Step 2" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 3</strong><br />
Turn on Osnap and activate Cen only. Activate Move command, snap to Cen of copied small circle, then type &lt;45 to add an angle constraint.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_3.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-79" title="step_3" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_3-258x300.jpg" alt="Step 3" width="258" /></a></td>
</tr>
<tr>
<td><strong>Step 4</strong><br />
Move small circle outward so that it intersects with the outer circle.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_4.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-79" title="step_4" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_4-300x280.jpg" alt="Step 4" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 5</strong><br />
Activate the ArrayPolar command. Select the small circle to array. Set 0 as the center of the array. Set the number of items to 4. Set the angle to 360. Hit Enter.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_5.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_5" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_5-300x286.jpg" alt="Step 5" width="300" height="286" /></a></td>
</tr>
<tr>
<td><!--adsense#tall--></td>
<td><!--adsense#image--></td>
</tr>
<tr>
<td><strong>Step 6.a</strong><br />
Select the four small circles. Activate the Split command, and split the large circle.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_6a.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_6a" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_6a-300x290.jpg" alt="Step 6a" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 6.b</strong><br />
Select the large circle, then activate the Split command and split the four smaller circles.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_6b.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_6b" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_6b-300x287.jpg" alt="Step 6b" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 7</strong><br />
Select the four larger segments of the outer circle, and the four smaller segments of the outer  circles&#8211;they&#8217;ll form a rounded cross-shape. Join these curves with the Join command.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_7.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_7" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_7-300x290.jpg" alt="Step 7" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 8</strong><br />
Turn on grid snapping. Select the innermost circle, and move it up one inch in the RIght or Front viewport by clicking and dragging.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_8.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_8" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_8-293x300.jpg" alt="Step 8" width="300" /></a><br />
<a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_8b.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_8" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_8b-300x197.jpg" alt="Step 8" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 9</strong><br />
In the Front viewport, turn on grid Snap. Activate the Interpolate Points curve tool.<br />
To draw the first point, snap to the grid intersection on the x axis that is two inches to the right of zero. Then turn Snap off. Draw a line that is the approximate shape shown &#8211; it does not have to match perfectly. To draw the last point, turn Snap back on, and snap to the grid intersection that is 1&#8243; above the x-axis and 1&#8243; to the right of the z-axis.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_9.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_9" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_9-300x265.jpg" alt="Step 9" width="300" /></a></td>
</tr>
<tr>
<td><strong>Step 10</strong><br />
Select the curve you just drew, then activate the Offset command. Set the Distance to 0.04&#8243;, and offset below the original curve.</td>
<td><a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_10a.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" title="step_9" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_10a-300x147.jpg" alt="Step 9" width="300" /></a><br />
<a href="http://rainbowlazer.com/wp-content/uploads/2009/03/step_10b.jpg" rel="shadowbox[post-77];player=img;"><img class="size-medium wp-image-97" src="http://rainbowlazer.com/wp-content/uploads/2009/03/step_10b-300x145.jpg" alt="" width="300" /></a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/3d/rhino/rhino-4-nurbs-solid-modeling-tutorial-model-a-webcam-step-by-step/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DIY 3-axis CNC Mill/Enhanced Machine Controller</title>
		<link>http://rainbowlazer.com/3d/rhino/diy-3-axis-cnc-millenhanced-machine-controller/</link>
		<comments>http://rainbowlazer.com/3d/rhino/diy-3-axis-cnc-millenhanced-machine-controller/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 02:12:20 +0000</pubDate>
		<dc:creator>Chris Reilly</dc:creator>
				<category><![CDATA[CNC Fabrication]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Rapid Prototyping]]></category>
		<category><![CDATA[Rhino]]></category>

		<guid isPermaLink="false">http://rainbowlazer.com/?p=44</guid>
		<description><![CDATA[This project has moved! Check out the latest version of the DIYLILCNC, complete with free plans and CAD files!
Taylor and I have been working on a DIY 3-axis CNC mill over the last few months. I&#8217;m posting this mostly to brag :), but also as an excuse to do some documenting on the process that [...]]]></description>
			<content:encoded><![CDATA[<p>This project has moved! Check out the latest version of the <a href="http://www.diylilcnc.org" target="_blank">DIYLILCNC</a>, complete with free plans and CAD files!</p>
<p><span style="text-decoration: line-through;"><a href="http://www.taylorhokanson.com/" target="_blank">Taylor</a> and I have been working on a <a href="http://www.instructables.com/id/How-to-Make-a-Three-Axis-CNC-Machine-Cheaply-and-/" target="_blank">DIY 3-axis CNC mill</a> over the last few months. I&#8217;m posting this mostly to brag :), but also as an excuse to do some documenting on the process that might be useful to others. We&#8217;ll keep posting as things progress.</span></p>

<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_complete_assembly.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_complete_assembly'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_complete_assembly-150x150.jpg" class="attachment-thumbnail" alt="Complete Assembly" title="rainbowlazer_dot_com_cnc_complete_assembly" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_cutswood2.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_cutswood2'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_cutswood2-150x150.jpg" class="attachment-thumbnail" alt="Milling Hardwood" title="rainbowlazer_dot_com_cnc_cutswood2" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_assmbyl2.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_assmbyl2'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_assmbyl2-150x150.jpg" class="attachment-thumbnail" alt="More Assembly" title="rainbowlazer_dot_com_cnc_assmbyl2" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_assmbyl.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_assmbyl'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_assmbyl-150x150.jpg" class="attachment-thumbnail" alt="Assembly" title="rainbowlazer_dot_com_cnc_assmbyl" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_case_connect.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_case_connect'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_case_connect-150x150.jpg" class="attachment-thumbnail" alt="Cable Connections" title="rainbowlazer_dot_com_cnc_case_connect" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_cable_connect.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_cable_connect'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_cable_connect-150x150.jpg" class="attachment-thumbnail" alt="Cable Connections" title="rainbowlazer_dot_com_cnc_cable_connect" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_enclosure_base.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_enclosure_base'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_enclosure_base-150x150.jpg" class="attachment-thumbnail" alt="Base Construction" title="rainbowlazer_dot_com_cnc_enclosure_base" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_dremel_mount.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_dremel_mount'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_dremel_mount-150x150.jpg" class="attachment-thumbnail" alt="3D Printed Dremel Mount" title="rainbowlazer_dot_com_cnc_dremel_mount" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_enclosure_constunt.jpg' rel='shadowbox[post-44];player=img;' title='rainbowlazer_dot_com_cnc_enclosure_constunt'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_cnc_enclosure_constunt-150x150.jpg" class="attachment-thumbnail" alt="Constructing the Enclosure" title="rainbowlazer_dot_com_cnc_enclosure_constunt" /></a>
<a href='http://rainbowlazer.com/wp-content/uploads/2009/01/LILCNC.jpg' rel='shadowbox[post-44];player=img;' title='LILCNC'><img width="150" height="150" src="http://rainbowlazer.com/wp-content/uploads/2009/01/LILCNC-150x150.jpg" class="attachment-thumbnail" alt="New Redesign - No Side Drilling!" title="LILCNC" /></a>

<p><span style="text-decoration: line-through;"><a href="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_lil_cnc.mov" rel="shadowbox[post-44]">Some video of testing</a></span></p>
<p><span style="text-decoration: line-through;"><a href="http://www.instructables.com/id/How-to-Make-a-Three-Axis-CNC-Machine-Cheaply-and-/" target="_blank">The original plans</a> use 1/2&#8243; MDF for all the panels. We decided to go with with clear acrylic for the visual effect. Also, we were able to use a laser cutter for most of the cutting to the edges are nice and clean.  The downside is the brittle nature of acrylic, which likes to crack when drilled from the edge (and this design requires a lot of that).  <strong> </strong></span></p>
<p><span style="text-decoration: line-through;"><strong>CONTROLLER &amp; CONFIGURATION </strong></span></p>
<p><span style="text-decoration: line-through;"><strong> </strong> We&#8217;re using linux-based <a href="http://www.linuxcnc.org/" target="_blank">Enhanced Machine Controller</a> to run the mill, with a modified version of the standard stepper configuration. Here&#8217;s our <a href="http://rainbowlazer.com/wp-content/uploads/2009/01/stepper.zip">EMC configuration files</a>. So far, I&#8217;ve been really pleased with the performance. It was trial-and-error figuring out the scaling&#8211; I ended up attaching a pencil to a dremel collet, then manually jogging each axis until I could draw a one-inch line in each direction. The scaling factors I came up with are: 520 for X and Y, and 16000 for Z, and that&#8217;s with quarter stepping set on the hardware controller board.</span></p>
<p><span style="text-decoration: line-through;">We kept getting a &#8220;<a title="http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Following_Error" href="http://" target="_blank">Joint 2 Following error</a>,&#8221; indicating that the z-axis was losing its position. I found that this was happening only when using  <a href="http://www.linuxcnc.org/docs/html/gcode_main.html#sec:G0:-Rapid-Linear" target="_blank">G00</a> (rapid-positioning) codes. I&#8217;m still a little unclear as to whether we need to even worry about positioning in this case, but for now I&#8217;m just replacing G00 codes in my toolpaths with <a href="http://www.linuxcnc.org/docs/html/gcode_main.html#sec:G1:-Linear-Motion" target="_blank">G01</a> (linear motion). It&#8217;s a little slower, but for now the error is not happening anymore. See Feed Speeds for the permanent fix.</span></p>
<p><span style="text-decoration: line-through;"><strong>TOOLPATHS</strong></span></p>
<p><span style="text-decoration: line-through;">We use <a href="http://www.rhino3d.com/" target="_blank">Rhino3D</a> and <a href="http://www.mecsoft.com/index.shtml" target="_blank">RhinoCam</a> to generate our toolpaths. I&#8217;ve found that a number of different post-processors to work just fine, but mostly we&#8217;re using .NCD&#8217;s out of habit.</span></p>
<p><span style="text-decoration: line-through;"><strong>FEED SPEEDS </strong></span></p>
<p><span style="text-decoration: line-through;">There doesn&#8217;t seem to be a way to directly set the feed and plunge speeds in EMC. The NCD post-processor defaults the feed speed to 3.7 and the plunge speed to 7.3 and the units are inches per minute. So we&#8217;ve been doing a search and replace in the post-processed files setting plunge to 14 and feed to 10 (this is easier than going back to RhinoCam to re-generate the toolpath with new feed speeds). </span><span style="text-decoration: line-through;">We also then modified the MAX_FEED_OVERRIDE setting in the  stepper_inch.ini file to 3, meaning we can increase the feed override up to 300%. We now limit the max override to 150%, and more deliberately set feed and plunge speeds in RhinoCam, under the Feeds &amp; Speeds tab &#8212; these vary depending on material.</span></p>
<p><span style="text-decoration: line-through;"><strong>ERRORS</strong></span></p>
<p><span style="text-decoration: line-through;">We kept getting a &#8220;Joint 2 following error&#8221; while testing, and found&#8211;after consulting the <a href="http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Following_Error" target="_blank">EMC documentation wiki</a>&#8211;that changing the FERROR setting to 5.0 and the MIN_FERROR to 1.0 (that&#8217;s percent) for all axes in stepper_inch.ini alleviated this error. There&#8217;s the potential with increasing the FERROR settings of losing some accuracy, but that&#8217;s not our main concern at this point.</span></p>
<p><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://rainbowlazer.com/3d/rhino/diy-3-axis-cnc-millenhanced-machine-controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://rainbowlazer.com/wp-content/uploads/2009/01/rainbowlazer_dot_com_lil_cnc.mov" length="4851188" type="video/quicktime" />
		</item>
	</channel>
</rss>
