tag:blogger.com,1999:blog-78937834820938464552024-03-18T02:48:00.145-07:00fun of DIYXiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-7893783482093846455.post-74532509050494162232019-02-07T22:04:00.002-08:002019-02-07T22:04:23.545-08:00Regarding Google's recent policy changesSince I opened this blog site in 2013, I have been feeling thrilled to receive great attention from hackers and DIYers. There had been many great discussions in the comment sections. Personally, I have learned a lot, and I think many visitors benefited from the comments as well!<br />
<br />
It is unfortunate that Google is going to permanently close its Google+ service, which is having a painful impact on this blog site.<br />
<br />
Yesterday, I was astonished to find that all the comments under my blog posts have been deleted because they were all Google+ comments. I looked at the recent policy change and found the following message:<br />
<br />
<span style="background-color: #f9edbe; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;">"Following the announcement of Google+ API deprecation scheduled for March 2019, a number of changes will be made to Blogger’s Google+ integration on 4 February 2019. </span><br style="background-color: #f9edbe; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;" /><br style="background-color: #f9edbe; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;" /><b style="background-color: #f9edbe; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;">Google+ Comments: </b><span style="background-color: #f9edbe; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;">Support for Google+ comments will be turned down, and all blogs using Google+ comments will be reverted back to using Blogger comments. Unfortunately, comments posted as Google+ comments cannot be migrated to Blogger and will no longer appear on your blog. "</span><br />
<span style="background-color: #f9edbe; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;"><br /></span>
So basically, all the old comments are removed!<br />
<br />
It is definitely a big loss to me and visitors to this blog. The good thing is that Google is not closing blogspot, and people can still leave comments as a Google user, not a Google+ user.<br />
<br />
I have been trying to download my Google+ archive, which does include some old comments. But they are very unstructured. If anyone has found a solution to add the old comments back, please leave a comment!<br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com9tag:blogger.com,1999:blog-7893783482093846455.post-17158262551573218622018-08-28T19:42:00.001-07:002018-12-19T09:41:47.422-08:00Deep Learning with Raspberry Pi -- Real-time object detection with YOLO v3 Tiny! [updated on Dec 19 2018, detailed instruction included]<b>A quick note on Dec 18 2018:</b><br />
Since I posted this article late Aug, I have been inquired many times on the detailed instruction and also the python wrapper. Having been really busy in the last several months, I finally found some spare time completing this blog with detailed instruction! All the information can be found in my GitHub repos which was forked from shizukachan/darknet-nnpack. I have modified the Makefile, added the two Python nonblocking wrapper, and made some other minor modification. It should "almost" work out of the box!<br />
<a href="https://github.com/zxzhaixiang/darknet-nnpack/blob/yolov3/rpi_video.py">https://github.com/zxzhaixiang/darknet-nnpack/blob/yolov3/rpi_video.py</a><br />
<br />
Here goes the updated article<br />
<br />
I am a big fan of Yolo (You Only Look Once, <a href="https://pjreddie.com/darknet/yolo/" target="_blank">Yolo website</a>). Redmon & Farhadi's famous Yolo series work had big impacts on the deep learning society. BTW, their recent "paper" (<a href="https://arxiv.org/abs/1804.02767" target="_blank">Yolo v3: an incremental Improvement</a>) is an interesting read as well.<br />
<br />
So, what is Yolo? Yolo is a cutting-edge object detection algorithm, i.e., it detects objects from images. Traditionally people used moving windows to scan an image, and then try to recognize each snapshot in every possible window locations. This method is of course very time consuming because there are many different ways to place the window, and many computations need to be done repeatedly. Yolo, standing for "You Only Look Once" (not You Only Live Once), smartly avoids those heavy computations by directly predicting object category and their bounding boxes simultaneously.<br />
<br />
YoloV3 is one of the latest updates of Yolo algorithm. The biggest change is that YoloV3 now uses only convolutional layers and no more fully-connected layer. Don't let the technical term scare you away! What does this implies is that YoloV3 does not care about the input image size anymore! As long as the height and width are integer times 32 (such as 224x224, 288x288, 608x288, etc), YoloV3 will work fine! Another major improvement of YoloV3 is that it gives predictions in the intermediate layers as well. Again, what does it mean, is that Yolo3 now does a better job predicting small objects than its previous version!<br />
<br />
I will have to skip the technical detail here because the paper explained everything. The only thing you need to know is that Yolo is lightweight and fast and decently accurate. It is so lightweight and fast that it can even be used on Raspberry Pi, a single-board computer with smart-phone-grade CPU and limited RAM and no CUDA GPU, to run object detection in real-time! And, it is also convenient because the authors had provided configuration files and weights trained on COCO dataset. So no need to train your own model if you are only interested to detect common objects.<br />
<br />
<br />
Although Yolo is super efficient, it still requires quite a lot of computation. The original YoloV3, which was written with a C++ library called Darknet by the same authors, will report "segmentation fault" on Raspberry Pi v3 model B+ because Raspberry Pi simply cannot provide enough memory to load the weight. <b>YoloV3-tiny</b> version, however, can be run on RPI 3, very slowly.<br />
<br />
<b>Again, I wasn't able to run YoloV3 full version on Pi 3. I think it wouldn't be possible to do so considering the large memory requirement by YoloV3. This article is all about implementing YoloV3-Tiny on Raspberry Pi Model 3B!</b><br />
<br />
Quite a few steps still have to be done to speed up yolov3-tiny on the pi:<br />
1. Install NNPACK, an acceleration library for the neural network to run on multi-core CPU<br />
2. Add some special configuration to the Makefile to compile the Darknet Yolo source code on Cortex CPU and NNPACK optimization<br />
3. Either install opencv C++ (big pain on raspberry pi) or write some python code to wrap darknet. I believe Yolo comes with a python wrapper but I haven't had a chance to test it on RPI.<br />
4. Download Yolov3-tiny.cfg and Yolov3-tiny.weights. Run Darknet with Yolo tiny version (not full version)!<br />
<br />
<span style="background-color: white;">Sounds complicated? Luckily digitalbrain79 (not me) had already figured it out </span>(https://github.com/digitalbrain79/darknet-nnpack). I had more luck with Shizukachan's fork version. I even made a few more changes to make it easier to follow:<br />
<br />
<h1 style="background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em;">
Step 0: prepare Python and Pi Camera</h1>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Log in to Raspberry Pi using SSH or directly in terminal.</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Make sure <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">pip-install</code> is included (it should come together with Debian</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo apt-get install python-pip
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Install OpenCV. The simplest way on RPI is as follows (do not build from source!):</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo apt-get install python-opencv
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Enable pi camera</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo raspi-config
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Go to <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">Interfacing Options</code>, and enable <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">P1/Camera</code></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
You will have to reboot the pi to be able to use the camera</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
A few additional words here. In the advanced option of raspi-config, you can adjust the memory split between CPU and GPU. Although we would like to allocate more ram to CPU so that the pi can load a larger model, you will want to allocate at least 64MB to GPU as the camera module would require it.</div>
<h1 style="background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em;">
<a aria-hidden="true" class="anchor" href="https://github.com/zxzhaixiang/darknet-nnpack/tree/yolov3#step-1-install-nnpack" id="user-content-step-1-install-nnpack" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration-line: none;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z" fill-rule="evenodd"></path></svg></a>Step 1: Install NNPACK</h1>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
NNPACK was used to optimize <a href="https://github.com/pjreddie/darknet" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">Darknet</a> without using a GPU. It is useful for embedded devices using ARM CPUs.</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Idein's <a href="https://github.com/Idein/qmkl" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">qmkl</a> is also used to accelerate the SGEMM using the GPU. This is slower than NNPACK on NEON-capable devices and primarily useful for ARM CPUs without NEON.</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
The NNPACK implementation in Darknet was improved to use transform-based convolution computation, allowing for 40%+ faster inference performance on non-initial frames. This is most useful for repeated inferences, ie. video, or if Darknet is left open to continue processing input instead of allowed to terminate after processing input.</div>
<h2 style="background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
<a aria-hidden="true" class="anchor" href="https://github.com/zxzhaixiang/darknet-nnpack/tree/yolov3#install-ninja-building-tool" id="user-content-install-ninja-building-tool" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration-line: none;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z" fill-rule="evenodd"></path></svg></a>Install Ninja (building tool)</h2>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Install <a href="https://github.com/Maratyszcza/PeachPy" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">PeachPy</a> and <a href="https://github.com/Maratyszcza/confu" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">confu</a></div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo pip install --upgrade git+https://github.com/Maratyszcza/PeachPy
sudo pip install --upgrade git+https://github.com/Maratyszcza/confu
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Install <a href="https://ninja-build.org/" rel="nofollow" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">Ninja</a></div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">git clone https://github.com/ninja-build/ninja.git
cd ninja
git checkout release
./configure.py --bootstrap
export NINJA_PATH=$PWD
cd
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">Install clang (I'm not sure why we need this, NNPACK doesn't use it unless you specifically target it).</del><br />
<del style="box-sizing: border-box;">sudo apt-get install clang</del></div>
<h2 style="background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
<a aria-hidden="true" class="anchor" href="https://github.com/zxzhaixiang/darknet-nnpack/tree/yolov3#instal-nnpack" id="user-content-instal-nnpack" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration-line: none;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z" fill-rule="evenodd"></path></svg></a>Install NNPACK</h2>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Install modified <a href="https://github.com/shizukachan/NNPACK" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">NNPACK</a></div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">git clone https://github.com/shizukachan/NNPACK
cd NNPACK
confu setup
python ./configure.py --backend auto
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
If you are compiling for the Pi Zero, change the last line to <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">python ./configure.py --backend scalar</code></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
You can skip the following several lines from the original darknet-nnpack repos. I found them not very necessary (or maybe I missed something)<br />
<del style="box-sizing: border-box;">It's also recommended to examine and edit <a href="https://github.com/digitalbrain79/NNPACK-darknet/blob/master/src/init.c#L215" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">https://github.com/digitalbrain79/NNPACK-darknet/blob/master/src/init.c#L215</a> to match your CPU architecture if you're on ARM, as the cache size detection code only works on x86.</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">Since none of the ARM CPUs have a L3, it's <a href="https://github.com/Maratyszcza/NNPACK/issues/33" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">recommended</a> to set L3 = L2 and set inclusive=false. This should lead to the L2 size being set equal to the L3 size.</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">Ironically, after some trial and error, I've found that setting L3 to an arbitrary 2MB seems to work pretty well.</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Build NNPACK with ninja (this might take * <em style="box-sizing: border-box;">quie</em> * a while, be patient. In fact my Pi crashed in the first time. Just reboot and run again):</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">$NINJA_PATH/ninja
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
do a <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">ls</code> and you should be able to find the folders <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">lib</code> and <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">include</code> if all went well:</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">ls
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Test if NNPACK is working:</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">bin/convolution-inference-smoketest
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
In my case, the test actually failed in the first time. But I just ran the test again and all items are passed. So if your test failed, don't panic, try one more time.</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Copy the libraries and header files to the system environment:</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo cp -a lib/* /usr/lib/
sudo cp include/nnpack.h /usr/include/
sudo cp deps/pthreadpool/include/pthreadpool.h /usr/include/
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">If the convolution-inference-smoketest fails, you've probably hit a compiler bug and will have to change to Clang or an older version of GCC.</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">You can skip the qmkl/qasm/qbin2hex steps if you aren't targeting the QPU.</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">Install <a href="https://github.com/Idein/qmkl" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">qmkl</a></del><br />
<del style="box-sizing: border-box;">sudo apt-get install cmake</del><br />
<del style="box-sizing: border-box;">git clone <a href="https://github.com/Idein/qmkl.git" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">https://github.com/Idein/qmkl.git</a></del><br />
<del style="box-sizing: border-box;">cd qmkl</del><br />
<del style="box-sizing: border-box;">cmake .</del><br />
<del style="box-sizing: border-box;">make</del><br />
<del style="box-sizing: border-box;">sudo make install</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">Install <a href="https://github.com/Terminus-IMRC/qpu-assembler2" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">qasm2</a></del><br />
<del style="box-sizing: border-box;">sudo apt-get install flex</del><br />
<del style="box-sizing: border-box;">git clone <a href="https://github.com/Terminus-IMRC/qpu-assembler2" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">https://github.com/Terminus-IMRC/qpu-assembler2</a></del><br />
<del style="box-sizing: border-box;">cd qpu-assembler2</del><br />
<del style="box-sizing: border-box;">make</del><del style="box-sizing: border-box;">sudo make install</del></div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
<del style="box-sizing: border-box;">Install <a href="https://github.com/Terminus-IMRC/qpu-bin-to-hex" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">qbin2hex</a></del><br />
<del style="box-sizing: border-box;">git clone <a href="https://github.com/Terminus-IMRC/qpu-bin-to-hex" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">https://github.com/Terminus-IMRC/qpu-bin-to-hex</a></del><br />
<del style="box-sizing: border-box;">cd qpu-bin-to-hex</del><br />
<del style="box-sizing: border-box;">make</del><br />
<del style="box-sizing: border-box;">sudo make install</del></div>
<h1 style="background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em;">
<a aria-hidden="true" class="anchor" href="https://github.com/zxzhaixiang/darknet-nnpack/tree/yolov3#step-2-install-darknet-nnpack" id="user-content-step-2-install-darknet-nnpack" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration-line: none;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z" fill-rule="evenodd"></path></svg></a>Step 2. Install darknet-nnpack</h1>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
We have finally finished configuring everything needed. Now simply clone this repository. Note that we are cloning the <span style="box-sizing: border-box; font-weight: 600;">yolov3</span>branch. It comes with the python wrapper I wrote, correct makefile, and yolov3 weight:</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">cd
git clone -b yolov3 https://github.com/zxzhaixiang/darknet-nnpack
cd darknet-nnpack
git checkout yolov3
make
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
At this point, you can build darknet-nnpack using <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">make</code>. Be sure to edit the Makefile before compiling.</div>
<h1 style="background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em;">
<a aria-hidden="true" class="anchor" href="https://github.com/zxzhaixiang/darknet-nnpack/tree/yolov3#step-3-test-with-yolov3-tiny" id="user-content-step-3-test-with-yolov3-tiny" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration-line: none;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z" fill-rule="evenodd"></path></svg></a>Step 3. Test with YoloV3-tiny</h1>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
Despite doing so many pre-configurations, Raspberry Pi is not powerful enough to run the full YoloV3 version. The YoloV3-tiny version, however, can be run at about 1 frame per second rate</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
I wrote two python nonblocking wrappers to run Yolo, <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">rpi_video.py</code> and <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">rpi_record.py</code>. What these two python codes do is to take pictures with PiCamera python library, and spawn darknet executable to conduct detection tasks to the picture, and then save to prediction.png, and the python code will load prediction.png and display it on the screen via opencv. Therefore, all the detection jobs are done by darknet, and python simply provides in and out. <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">rpi_video.py</code> will only display the real-time object detection result on the screen as an animation (about 1 frame every 1-1.5 second); <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">rpi_record.py</code> will also save each frame for your own record (like making a git animation afterwards)</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
To test it, simply run</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo python rpi_video.py
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
or</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">sudo python rpi_record.py
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
You can adjust the task type (detection/classification?), weight, configure file, and threshold in line</div>
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="background: initial; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">yolo_proc = Popen(["./darknet",
"detect",
"./cfg/yolov3-tiny.cfg",
"./yolov3-tiny.weights",
"-thresh", "0.1"],
stdin = PIPE, stdout = PIPE)
</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
For more details/weights/configuration/different ways to call darknet, refer to the official <a href="https://pjreddie.com/darknet/yolo/" rel="nofollow" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration-line: none;">YOLO homepage</a>.</div>
<div style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
As I mentioned, YoloV3-tiny does not care about the size of the input image. So feel free to adjust the camera resolution as long as both height and width are integer multiplication of 32.<br />
<br />
<pre style="background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; font-size: 13.6px; line-height: 1.45; margin-bottom: 16px; overflow-wrap: normal; overflow: auto; padding: 16px;"><code style="border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; word-break: normal;">#camera.resolution = (224, 224)
#camera.resolution = (608, 608)
camera.resolution = (544, 416)</code></pre>
</div>
<br />
Here are my test results:<br />
<br />
1. It worked. Yolov3-tiny on Raspberry Pi 3 Model B+ has a frame rate of <b>1 frame per sec (FPS)</b>. The rpi_video.py will print the time it requires Yolov3-tiny to predict on an image. I was able to get numbers like 0.9 second to 1.1 second per frame. Not bad at all! Of course, you can't do any rigorous fast object tracing. But for a surveillance camera, or slow robot, or even drone, 1FPS is promising. NNPACK is critical here. As pointed out by Shizukachan, without NNPACK the frame rate will be lower than 0.1FPS!<br />
<br />
2.Make sure the power supply you are using can truly provide 2.4A (which is desired by RPI 3B). I have seen cases that the detection speed drops to 1 frame per 1.7 seconds because the power supply did not provide sufficient power.<br />
<br />
3. It worked limitedly. Yolov3-tiny is not that accurate compared to Yolov3 full version. But if you want to detect specific objects in some specific scene, you can probably train your own Yolo v3 model (must be the tiny version) on GPU desktop, and transplant it to RPI. Never try to train the model on RPI. Don't even think about it.. With pre-trained Yolov3-tiny on COCO dataset, some good transfer learning can be leveraged to speed up the training speed.<br />
<br />
4. I didn't modify the source code of Yolo. When performing a detection task, Yolo outputs an image with bounding box, label and confidence overlaied on top. If you would like to get such information in a digital form, you will have to dig into Yolo's source code and modify the output part. It should be relatively straightforward.<br />
<br />
Finally, the results. Note that I accelerated the video 5 times. The actual frame rate is about 1 frame per second.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilq_RcQ-xCSEqbk1BhuT5ngWol_7N7d0CUHVleyHFwu_vCRkoTrRBiMo1IQFjPS9RlM6zojpNU0wzPyEGJwBD7X6QexXpcg05hMsU9oltP0Kq2qeR5yh2q1Xne0GvKvwKabAS816K2abQ/s1600/yolo_rpi_Xiang.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="416" data-original-width="416" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilq_RcQ-xCSEqbk1BhuT5ngWol_7N7d0CUHVleyHFwu_vCRkoTrRBiMo1IQFjPS9RlM6zojpNU0wzPyEGJwBD7X6QexXpcg05hMsU9oltP0Kq2qeR5yh2q1Xne0GvKvwKabAS816K2abQ/s640/yolo_rpi_Xiang.gif" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Yolov3-tiny successfully detected keyboard, banana, person (me), cup, sometimes sofa, car, etc. It thought curious George as teddy bear all the time, probably because COCO dataset does not have a category called "Curious George stuffed animal". It got confused on the old-fashion calculator and sometimes recognized it as a laptop or a cell phone. But in general, I was very surprised to see the results, and the frame rate! </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com82tag:blogger.com,1999:blog-7893783482093846455.post-10737631119017636772018-08-21T22:28:00.004-07:002018-08-23T09:17:06.220-07:00Deep Learning With Raspberry Pi - Installation<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">This is goind to be the begining of a series of posts about fusion of deep learning and Raspberry Pi!</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">Deep Learning has become a new world language in the recent 5 years. With the latest development in the convolutional neural network, LSTM, attention models, GANs, reinforcement learning, we see a promising trend of training model to do things that in the past human believed only human brain can master. For example, writing a caption to an image, or composing a piece of music, or driving a car. With millions of images/text corpse, properly designed deep neural network model can somehow be calibrated to “learn” specific task without explicit programming. Normally when people talk about training deep learning, people talk about CUDA, GPU matrix operation, and parallelization, massive memory requirement, etc. </span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">Now, as the most popular single-board computer/development kit/IoT board, Raspberry Pi, even the latest 3 Model B+ (1.4GHz CPU, 1G DDR2 RAM), does not have enough computation power to train any decent deep learning model. Forget about training. However, this does not mean that deep learning and Raspberry Pi are exclusive to each other. It is still possible to run a deep learning framework and deep learning model on Raspberry Pi. In fact, it is super fun, and probably also super useful to run forward deep learning on Raspberry Pi. Imaging that your Pi Camera can now identify human being and probably who they are, or issue alert when a bunny is eating your garden, or recognize obstacle for a Pi-powered robot, or display camera frame in van Goghor style, or maybe just play endless Pi-composed Jazz. A new world is enabled by Raspberry Pi + Deep Learning! </span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">As a lazy person, I don’t want to reinvent the wheel. Given that there are well-established, robust, deep learning libraries, such as tensorflow, pyTorch, etc., it makes sense to first try those libraries in the Pi. In this article, I will be showing how to install tensorflow and keras (a high-level wrapper of tensorflow) on Raspberry Pi 3 Model B+ running a Raspbian Stretch (version 9). I haven’t tested the workflow in other Raspberry Pi models or another Raspbian version. However, my intuition told me that Pi 3 Model B or Raspbian Jessie should work the same way.</span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">To proceed, you’ll need to understand basic Linux commands and Python programming and know how to use Raspberry Pi. You do not need to know deep learning, just assume it as a magic black box. I get a lot of help from this post:</span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><a href="https://www.pyimagesearch.com/2017/12/18/keras-deep-learning-raspberry-pi/">https://www.pyimagesearch.com/2017/12/18/keras-deep-learning-raspberry-pi/</a></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<h3 style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;"><span style="line-height: 127%;"> 1. </span><span style="line-height: 127%;">Which version of Python? Python 2.7!</span></span></h3>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
</div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">Raspbian comes with Python 2.7 and 3.5. Although I am a fan of Python 3 and tensorflow prefers Python 3, for Pi, I still highly recommend <b><u>Python 2.7</u></b>. The reason is that installing numpy, scipy and opencv with Python 2.7 is so much easier and hassle-free! The last thing I want to do is to build scipy and opencv from binary on Pi. IT IS GOING TO TAKE FOREVER!</span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<h3 style="text-indent: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large; text-indent: -0.25in;">2. Installing pre-request libraries</span></h3>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
</div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">In order to install/run tensorflow and kera, you have to install numpy and scipy, h5py. I also recommend to install OpenCV, because, come on, we want to do image stuff with deep learning.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">I highly recommend installing those libraries pre-compiled. Because Pi is a slow computer, it might take 10 min – 2 hr to install those libraries by compiling binary on Pi. And, forget installing OpenCV from source code on Pi! Trust me, it is a painful process! </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">So how to install pre-compiled libraries?</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;"><br /></span></div>
<div class="MsoListParagraphCxSpLast">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 127%;">DO THIS</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="background-color: #444444; font-family: "trebuchet ms" , sans-serif;"><span style="border: 1pt none; padding: 0in;"><b><span style="color: lime;">pi:</span><span style="color: cyan;">~ $</span></b><span style="color: seagreen;"> </span><span style="color: white;">sudo apt-get install python-numpy python-scipy python-h5py python-opencv </span></span><span style="color: #555555; font-family: "courier new";"></span></span></div>
<div class="MsoListParagraphCxSpFirst">
<br /></div>
<div class="MsoListParagraphCxSpLast">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="line-height: 127%;">DO NOT</span><span style="line-height: 127%;"> THIS</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in;">
<span style="background-color: #444444; font-family: "trebuchet ms" , sans-serif;"><span style="border: 1pt none; padding: 0in;"><b><span style="color: lime;">pi:</span><span style="color: cyan;">~ $</span></b><span style="color: seagreen;"> </span><span style="color: white;">pip install numpy scipy h5py opencv</span><span style="color: seagreen;"> </span><span style="color: white;"> </span></span><span style="color: #555555; font-family: "courier new";"></span></span></div>
<div class="MsoListParagraphCxSpFirst">
</div>
<br /></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="line-height: 127%;"> <span style="font-family: "arial" , "helvetica" , sans-serif;">The second approach, most times, end up downloading wheel file and run setup.py for long long long time. I think scipy took me more than 30 min and still failed for some reason. The first approach, easy and fast.</span></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<h3 style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large; line-height: 107%;"> 3. Install Tensorflow</span></h3>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">I basically followed tensorflow official websites for this part. Some people said that they have to install an older version of tensorflow like 1.0, however, I was able to install 1.9.0 and run it without a problem (well, there were some non-harmful warnings)</span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">First, make sure that you have libatlas library, a linear computation library, is installed. Simply do</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"><br /></span> <span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"></span><br />
<div class="MsoListParagraphCxSpFirst" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<b style="background-color: #444444; font-family: "trebuchet ms", sans-serif;"><span style="color: lime;">pi:</span><span style="color: cyan;">~ $</span></b><span style="background-color: #444444; color: seagreen; font-family: "trebuchet ms" , sans-serif;"> </span><span style="background-color: #444444; color: white; font-family: "trebuchet ms" , sans-serif;">sudo apt-get install libatlas-base-dev</span><span style="background-color: #444444; color: seagreen; font-family: "trebuchet ms" , sans-serif;"> </span><span style="background-color: #444444; color: white; font-family: "trebuchet ms" , sans-serif;"> </span></div>
<div class="MsoListParagraphCxSpMiddle">
<br /></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">Second, let’s install tensorflow. A simple pip install is likely to fail here. This is become tensorflow and some associated libraries will take more than 100MB size, and be default Raspbian has 100MB allocated for swap. If you use pip install directly, highly likely that you will encounter memory errors. There are two ways to overcome this. One is to temporarily change the swap size, install tensorflow, and chance swap size back. This will require to reboot the Pi twice. An easier way, I believe, is to add some additional argument to pip install:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"><br /></span> <span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"></span><br />
<div class="MsoListParagraphCxSpFirst" style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<br />
<div class="MsoNormal" style="color: black; font-family: "times new roman"; font-style: normal; font-weight: 400; letter-spacing: normal; line-height: normal; margin-bottom: 0in; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<div style="margin: 0px;">
<span style="background-color: #444444; font-family: "trebuchet ms" , sans-serif;"><span style="border: 1pt none; padding: 0in;"><b><span style="color: lime;">pi:</span><span style="color: cyan;">~ $</span></b><span style="color: seagreen;"> </span><span style="color: white;">pip install --no-cache-dir tensorflow</span><span style="color: seagreen;"> </span><span style="color: white;"> </span></span><span style="color: #555555; font-family: "courier new";"></span></span></div>
</div>
</div>
<div class="MsoListParagraphCxSpMiddle">
<br /></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">In this way, we are installing tensorflow without caching. No need to chance swap size.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">Installing tensorflow took a while, as for Python 2 we have to compile some libraries. Time for a cup of coffee.</span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: "arial" , "helvetica" , sans-serif; text-indent: -0.25in;"><br /></span>
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;"><span style="text-indent: -0.25in;"> 4. Installing </span>keras</span></h3>
</div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">This took me a while. Because for some reason installing keras wants to recompile scipy and it always fails me due to some dependencies issues. Now I am very sure that I have all key libraries installed for keras, I only want pip install to install keras itself. So finally I realized that I only need to tell pip install to ignore dependencies. To do this, simply type</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle">
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in;">
<span style="background-color: #444444; font-family: "trebuchet ms" , sans-serif;"><span style="border: 1pt none; padding: 0in;"><b><span style="color: lime;">pi:</span><span style="color: cyan;">~ $</span></b><span style="color: seagreen;"> </span><span style="color: white;">pip install keras==2.1.5 --no-cache-dir --no-deps</span><span style="color: seagreen;"> </span><span style="color: white;"> </span></span><span style="color: #555555; font-family: "courier new";"></span></span></div>
<div class="MsoListParagraphCxSpFirst">
</div>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">I didn’t test other </span>keras<span style="font-family: "arial" , "helvetica" , sans-serif;"> version. But I think the newer version should be fine.</span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: "arial" , "helvetica" , sans-serif; text-indent: -0.25in;"><br /></span>
<br />
<h3 style="text-indent: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif; text-indent: -0.25in;"><span style="font-size: large;">5. Test that packages are all installed correctly.</span></span></h3>
</div>
<script src="https://gist.github.com/zxzhaixiang/5fdd00198b9a04cfe9547bfc9c0c7fbb.js"></script>
<br />
<pre><span style="font-family: "arial" , "helvetica" , sans-serif;">As I said, there are some warnings. But, hooray!</span></pre>
<pre></pre>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;">6. Run a pre-trained model</span></h3>
<pre><div class="MsoNormal">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Keras comes with many well-known pre-trained CNN models for image recognition. As a first try, </span><span style="font-family: "arial" , "helvetica" , sans-serif; white-space: normal;">I tested MobileNet, a lightweight small </span><span style="font-family: "arial" , "helvetica" , sans-serif; white-space: normal;">CNN first brought by Howard et al in Google in Apr 2017. The concept of </span><span style="font-family: "arial" , "helvetica" , sans-serif; white-space: normal;">MobileNet is that it is so lightweight and </span><span style="font-family: "arial" , "helvetica" , sans-serif; white-space: normal;">simple and it can be run on mobile devices.</span></div>
<div class="MsoNormal">
<o:p></o:p></div>
</pre>
<pre><span style="font-family: "arial" , "helvetica" , sans-serif;">To test it, I downloaded this image</span></pre>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif; margin-left: 1em; margin-right: 1em;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwLn8QpRvIVVb12rXR6b3_0xWZL3SJUxUG61Bizxtx-TLysmK7QgFFh83BVyfW_QINkEG0KiBuSf10PjSGdAd6p9CXPnMaDlgi-8QUkpO2J6ikVQbJUlGATfrVBPaWrRtLfn1yEiozREY/s1600/mikumi.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="318" data-original-width="500" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwLn8QpRvIVVb12rXR6b3_0xWZL3SJUxUG61Bizxtx-TLysmK7QgFFh83BVyfW_QINkEG0KiBuSf10PjSGdAd6p9CXPnMaDlgi-8QUkpO2J6ikVQbJUlGATfrVBPaWrRtLfn1yEiozREY/s320/mikumi.jpg" width="320" /></a></span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="MsoNormal">
<div class="separator" style="clear: both;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">from this website <a href="http://www.shadesofgreensafaris.net/images/uploads/mikumi.jpg">http://www.shadesofgreensafaris.net/images/uploads/mikumi.jpg</a> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">by typing the following command in terminal</span></div>
<div class="separator" style="clear: both;">
<b style="background-color: #444444; font-family: "Trebuchet MS", sans-serif;"><span style="color: lime;">pi:</span><span style="color: cyan;">~ $ </span></b><span style="background-color: #444444; color: white; font-family: "trebuchet ms" , sans-serif;">curl http://www.shadeofgreensafaris.net/images/uploads/mikumi.jpg > image.jpg</span><span style="background-color: #444444; color: white; font-family: "trebuchet ms" , sans-serif;"> </span></div>
<div class="separator" style="clear: both;">
<span style="background-color: #444444; color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif; line-height: 107%;">Here is the python code</span><br />
<span style="line-height: 107%;"><br /></span></div>
<script src="https://gist.github.com/zxzhaixiang/6f458acb6690cd2272a50bfc5bb51ce6.js"></script>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">And, the bottom of the outputs:</span><br />
<br />
<script src="https://gist.github.com/zxzhaixiang/d2b995e7144521cd4f8910f6a0af62fb.js"></script> <span style="font-family: "arial" , "helvetica" , sans-serif;">So MobileNet does recognize the impala correctly in its first guess. It tooks about 40 seconds to load the 4 million parameter model, and only took 3 seconds to make a prediction. Not bad!</span><br />
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com1tag:blogger.com,1999:blog-7893783482093846455.post-13264212781456917772016-02-27T22:25:00.002-08:002016-02-27T22:33:35.299-08:00Raspberry Pi 3 vs Raspberry Pi 2, what do we know about it nowThe next big thing happening to Raspberry Pi, a credit-card size mini computer and development board after launched for 4 years, is Raspberry Pi 3 model B.<br />
<br />
As various sources have already pointed out, based on RPi's claim in FCC, the new RPi will have a on-board wifi(2.4G only)-Bluetooth module. For example, check <a href="http://funofdiy.blogspot.com/2016/02/raspberry-pi-3-is-on-way.html" target="_blank">my previous post</a>, <a href="http://www.pcworld.com/article/3038727/consumer-electronics/fcc-docs-show-raspberry-pi-3-with-on-board-wi-fi-and-bluetooth.html" target="_blank">PCworld </a>and <a href="http://www.cnx-software.com/2016/02/27/raspberry-pi-3-model-b-board-adds-wifi-and-bluetooth-connectivity/" target="_blank">CNX-software</a>, or the <a href="https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&calledFromFrame=N&application_id=Ti%2FYleaJNSl%2BTR5mL5C0WQ%3D%3D&fcc_id=2ABCB-RPI32" target="_blank">FCC website</a>.<br />
<br />
Some blur images of the new RPi can be found on the FCC website. Here let me do a simple comparison between Raspberry Pi 2 model B and the new Raspberry Pi and see what we can figure out simply from the circuit board.<br />
<br />
<span style="font-size: large;"><b>First, front side</b></span><br />
Top is RPi 2 model B and bottom is the new RPi.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCGKvvSOrYOAijUejeFzj_IjD-8xb5fwdrBHajTgkDGuC__J-9gbBI6mxqi2-oS9CxoxHlufP_k6ylPYTeunKwq1i_-c_hOJUQJQGL8srYKtRIzUxeCX0TzlvmCUY0PY2-U-aOneGIHhI/s1600/front_comparison.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="598" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCGKvvSOrYOAijUejeFzj_IjD-8xb5fwdrBHajTgkDGuC__J-9gbBI6mxqi2-oS9CxoxHlufP_k6ylPYTeunKwq1i_-c_hOJUQJQGL8srYKtRIzUxeCX0TzlvmCUY0PY2-U-aOneGIHhI/s640/front_comparison.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="font-size: large;"><b>Second, reverse side</b></span><br />
Top is RPi 2 model B and bottom is the new RPi.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDzUBRcID912ef5zTwgQkY7pS-GN4D1WwttXCGyujpjKcAJxhIhbPsuUkJZP3B3yvRi7n5IZWb1KUCsFc4F6V6GVXdXzG-CLptvqNuJwCDnjk4cM7PVkprah4dwKbPRxt_refft7Pt9GQ/s1600/back_comparison.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDzUBRcID912ef5zTwgQkY7pS-GN4D1WwttXCGyujpjKcAJxhIhbPsuUkJZP3B3yvRi7n5IZWb1KUCsFc4F6V6GVXdXzG-CLptvqNuJwCDnjk4cM7PVkprah4dwKbPRxt_refft7Pt9GQ/s640/back_comparison.png" width="546" /></a></div>
<br />
<div>
This is what <b style="font-size: x-large;">MagPi </b>said..</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeCjBYDEkncTo4Sipqt3EPpUrT-ZvyFJ2-y4EsDr4cwB3EsRT8s-CJnF_898EWx0iYLFR6o-QiWK7pz7c6DpLe3dirP-YJgiHTH_PMJFihyphenhyphenJZAne_kbZtNMyvLzNPjNpnVmyDRWTirQIM/s1600/Raspberry_Pi_3_64-Bit_ARM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeCjBYDEkncTo4Sipqt3EPpUrT-ZvyFJ2-y4EsDr4cwB3EsRT8s-CJnF_898EWx0iYLFR6o-QiWK7pz7c6DpLe3dirP-YJgiHTH_PMJFihyphenhyphenJZAne_kbZtNMyvLzNPjNpnVmyDRWTirQIM/s640/Raspberry_Pi_3_64-Bit_ARM.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
Now, what do we know about the new RPi?</div>
<div>
<br /></div>
1. <b>Name</b>: as shown in the figure, the new RPi is indeed called Raspberry Pi 3 Model B. The tested version is already v1.2 and it was developed in 2015.<br />
<br />
2. <b>Processor: </b>The image released on FCC is very blurry. We can't tell for sure tell the exact model number of the processor of RPi 3. However, as advertised by the latest MagPi magazine, the new RPi will be using a 64-bit 1.2GHz ARM processor. For comparison, RPi 2 model B is using 32-bit 900MHz ARM-A7 Cortex.<br />
<br />
3. <b>wireless</b>: RPi 3 has an onboard WiFi-Bluetooth module (see the upper right of the reverse side of the Pi). The antenna of the module is on the upper left corner of the front side of the board. It is not very big. I think its performance is probably similar to those USB wifi dongle. With the onboard wireless module, we essentially have one more available USB slot!<br />
<br />
4. <b>USB</b>: RPi 3 model B has four USB slots as RPI 2 model B<br />
<br />
5. <b>Ethernet</b>: RPi 3 has an ethernet port just like RPi 2.<br />
<br />
6. <b>GPIO: </b>Both RPi 2 model B and RPi 3 model B have 40 GPIO pins.<br />
<br />
7. <b>RAM: </b>unclear. The image of the new Pi is really blur...<br />
<br />
8. <b>Display: </b>both RPi 2 and RPi 3 have standard HDMI port and composite video-audio jack port. However, seems like the new RPi 3 gets an extra video port (probably parallel to HDMI?).<br />
<br />
9. others...: some minor rearrangement of chips (diodes, regulators, etc.)<br />
<br />
<br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com2tag:blogger.com,1999:blog-7893783482093846455.post-77711813820331773292016-02-27T14:59:00.000-08:002016-02-27T17:40:24.796-08:00Raspberry Pi 3 is on the way!<span style="font-family: "times" , "times new roman" , serif;">Several hours ago, United States FCC (<span style="background-color: white; color: #222222; line-height: 25.5px;">Federal Communications Commission) published documents about an incoming</span> Raspberry Pi 3 submitted by the </span><span style="font-family: "times" , "times new roman" , serif;">Raspberry Pi </span><span style="font-family: "times" , "times new roman" , serif;">Trading under FCC ID 2ABCB-RPI32 on Feb 26 2016.</span><br />
<span style="font-family: "times" , "times new roman" , serif;"><br /></span>
<span style="font-family: "times" , "times new roman" , serif;">The FCC link can be found <a href="https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=Ti%2FYleaJNSl%2BTR5mL5C0WQ%3D%3D&fcc_id=2ABCB-RPI32" target="_blank">here </a></span><br />
<br />
Apparently the new Raspberry Pi 3 has a built-in 2.4GHz wifi module and bluetooth as shown in the FCC documents. Finally!<br />
<br />
Here are some photos from the FCC document. The new RPi looks very similar to RPi 2, same number of GPIO pins, same number of USB slots (however with the built-in wifi module you gain one more!), etc. However we don't know the detailed specs. FCC only care about wireless communication frequency and power, that's why these documents are there. We will need to wait until an official release by RPi foundation.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBFxd2PcY48e7g9sqM8XyQpJH-1Dkfv89crGu1Pd5oQ-hgKcVZEtsZOuxmzdwrY1KiveHUNARLco0hYwLNwXLmR_C5j7MhNDWmtIqDchHNUj63YJtI5NqK-s4eHz3Xi8N8RsvL5Zmg6Vs/s1600/back.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBFxd2PcY48e7g9sqM8XyQpJH-1Dkfv89crGu1Pd5oQ-hgKcVZEtsZOuxmzdwrY1KiveHUNARLco0hYwLNwXLmR_C5j7MhNDWmtIqDchHNUj63YJtI5NqK-s4eHz3Xi8N8RsvL5Zmg6Vs/s320/back.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFjsxf-rd-UL7XBbV6PehKPRXzNmYu1TCywuhQo-te0Tq-P57d4ykkVqTFYRnUCdGCX22TXn7M3Vz6dfq_O5vTJNB0L_F1zSGvwendqYglDRRVPtb1bh0ep40P_HYP7Vf29mSSRgu82y4/s1600/front2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFjsxf-rd-UL7XBbV6PehKPRXzNmYu1TCywuhQo-te0Tq-P57d4ykkVqTFYRnUCdGCX22TXn7M3Vz6dfq_O5vTJNB0L_F1zSGvwendqYglDRRVPtb1bh0ep40P_HYP7Vf29mSSRgu82y4/s320/front2.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzX9OJzRy8WsTZQHz6xEMckTvPGkd0Ae_Bde6598nbkMyTOSqw5sQqoiQ8OoGVbv2k6A8nEhcnHYELWbx93CBSr6_Zt9Bp3qykOCsV_zJwXR3Hw3zVBPiNP1nqKhDVQ-ykdgHGKdvtigs/s1600/front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzX9OJzRy8WsTZQHz6xEMckTvPGkd0Ae_Bde6598nbkMyTOSqw5sQqoiQ8OoGVbv2k6A8nEhcnHYELWbx93CBSr6_Zt9Bp3qykOCsV_zJwXR3Hw3zVBPiNP1nqKhDVQ-ykdgHGKdvtigs/s320/front.png" width="320" /></a></div>
<br />
<br />
Also please check this pcworld post <a href="http://www.pcworld.com/article/3038727/consumer-electronics/fcc-docs-show-raspberry-pi-3-with-on-board-wi-fi-and-bluetooth.html" target="_blank">pcworld</a>Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com2tag:blogger.com,1999:blog-7893783482093846455.post-53598774963434540142015-12-28T21:59:00.001-08:002015-12-28T21:59:41.536-08:003d elevation maps and me on ThingiverseIt has been a while since last time I update my blog. As I was extremely busy with my work and 2 years old, I haven't been able to find enough time playing with DIY hardware stuff. Instead, I start to do something more software.<br />
<br />
I have been converting some topographic maps into 3D STL models that are ready for 3d printer. Models I've made include a 6 million:1 Texas elevation map, France (and some west European area) topographic map, China topographic map and Rocky Mountain National Park in Colorado.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://thingiverse-production-new.s3.amazonaws.com/renders/a2/27/48/fa/e6/image_preview_featured.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://thingiverse-production-new.s3.amazonaws.com/renders/a2/27/48/fa/e6/image_preview_featured.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Texas</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://thingiverse-production-new.s3.amazonaws.com/renders/dd/3c/ec/d5/d0/Untitled_preview_featured.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://thingiverse-production-new.s3.amazonaws.com/renders/dd/3c/ec/d5/d0/Untitled_preview_featured.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
France</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://thingiverse-production-new.s3.amazonaws.com/renders/52/9e/74/42/98/Untitled_preview_featured.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://thingiverse-production-new.s3.amazonaws.com/renders/52/9e/74/42/98/Untitled_preview_featured.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://thingiverse-production-new.s3.amazonaws.com/renders/26/cb/dd/96/e1/image_preview_featured.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://thingiverse-production-new.s3.amazonaws.com/renders/26/cb/dd/96/e1/image_preview_featured.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
China</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<span id="goog_842261084"></span><span id="goog_842261085"></span><br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheMklBo6urAh5_JGH32T8AuStktM3pmarLyac51p3A8FVFjCOejA83QFLxtyRy7s_reDui0-MRcPssWbzGca8IwSmaAJGPLsZc1BmYtGlLWlALEQ-RPyVRyFLx0Xtiuq1Q4Xa623S9e6I/s1600/IMG_2454.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheMklBo6urAh5_JGH32T8AuStktM3pmarLyac51p3A8FVFjCOejA83QFLxtyRy7s_reDui0-MRcPssWbzGca8IwSmaAJGPLsZc1BmYtGlLWlALEQ-RPyVRyFLx0Xtiuq1Q4Xa623S9e6I/s400/IMG_2454.JPG" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Rocky Mountain National Park</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Please find those models under my Thingiverse account:<br />
<a href="http://www.thingiverse.com/DanielChai/designs" target="_blank">http://www.thingiverse.com/DanielChai/designs</a><br />
<br />
They are free to download.<br />
<br />
<br />
<br />
I found these 3d elevation maps pretty neat because I can touch and feel them and gain a much more intuitive understanding of geology.<br />
<br />
I am making more of these 3D elevation maps of course. And feel free to leave a comment if you would like to see some other place in 3D.<br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com3tag:blogger.com,1999:blog-7893783482093846455.post-84744043116691905832015-04-11T23:32:00.001-07:002015-04-11T23:32:11.585-07:00A 3D printer simulatorRecently I wrote a python code that reads G-code generated by <a href="http://slic3r.org/" target="_blank">Slic3r</a>, interprets the G-code, and creates a simple 3D plot that simulating a real 3D printer. It provides a nice preview of G-code.<br />
<br />
The code can by downloaded <a href="https://drive.google.com/folderview?id=0B8QP2HPTAprrVUdKMFZaQXJjRFk&usp=sharing" target="_blank">here </a>from my google drive.<br />
<br />
If the link doesn't work, copy the following url and paste to your browser<br />
<a href="https://drive.google.com/folderview?id=0B8QP2HPTAprrVUdKMFZaQXJjRFk&usp=sharing">https://drive.google.com/folderview?id=0B8QP2HPTAprrVUdKMFZaQXJjRFk&usp=sharing</a><br />
<br />
<br />
The folder contains:<br />
<h3>
<span style="font-size: small;">simulator_config.txt</span></h3>
This is the configuration file. The file should contain:<br />
<b>line 1:</b> G-code file name (including path). e.g., gcodes\squirrel_export.gcode<br />
<b>line 2:</b> nS. A positive integer. A new section will be plotted after
skipping (nS-1) sections. Minimal value is 1 (every section will be plotted). Smaller nS gives finner (and larger) plot.<br />
<b>line 3:</b> nP. A positive integer. A new point will be plotted after
skipping (nP-1) points. Minimal value is 1 (every point will be plotted). Smaller nP gives finner (and larger) plot.<br />
<b>line 4:</b> dx, dy, dz, de. Resolution of the 3D printer in x,y,z direction and resolution of filament extruder.<br />
<br />
<h3>
<span style="font-size: small;">Rapibot_simulator.py </span></h3>
<span style="font-size: small;">The main program that reads configuration from simulator_config.txt and calls Gcode_interpretation_functions.py and creates plot.</span><br />
<br />
<span style="font-size: small;">Simple run this code and get a 3D plot</span><br />
<br />
<h3>
<span style="font-size: small;">Gcode_interpretation_functions.py</span></h3>
<span style="font-size: small;">File that contains functions to interprete G-code</span><br />
<br />
<h3>
gcodes </h3>
A folder that contains some G-code examples.<br />
<br />
<br />
<h3>
<span style="font-size: large;">Example</span><span style="font-size: large;"> </span></h3>
<span style="font-size: large;"><span style="font-size: small;">Here is the example when running the "squirrel_export.gcode" file provided in the google drive folder.</span></span><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRh2Gj161L84ayuX_-ZI6fqnk8332DMeUnlyvRb0kI1ja-PmJ2wAN404QM8p9slJ_QxUB9-fUYr_RQndVS4819q1d1DgJnGZ6SopGvJTvGhPG24qgelBD_yPG4LNk9TSPmJCQaVmXOBc/s1600/squirrel_1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRh2Gj161L84ayuX_-ZI6fqnk8332DMeUnlyvRb0kI1ja-PmJ2wAN404QM8p9slJ_QxUB9-fUYr_RQndVS4819q1d1DgJnGZ6SopGvJTvGhPG24qgelBD_yPG4LNk9TSPmJCQaVmXOBc/s1600/squirrel_1.png" height="392" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>snapshot when code is runing</i></span></td></tr>
</tbody></table>
<span style="font-size: large;"><span style="font-size: small;"> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWWaHMP5r-rIoFT8z38JnI3fVe4up9rIFVVpxyQ1EzFr821MDFUk_SgoYhc8EgPABXXjUCrITqTt4jOnnSlw3iU7CDTmHM8rKnI7xHPTji5KHT_9Aau89QmHVJtjn6Ktebt5hpHQI7k0I/s1600/squirrel_2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWWaHMP5r-rIoFT8z38JnI3fVe4up9rIFVVpxyQ1EzFr821MDFUk_SgoYhc8EgPABXXjUCrITqTt4jOnnSlw3iU7CDTmHM8rKnI7xHPTji5KHT_9Aau89QmHVJtjn6Ktebt5hpHQI7k0I/s1600/squirrel_2.png" height="348" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Finished! You can rotate the view or zoom in/out</i></td></tr>
</tbody></table>
</span></span>Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com1tag:blogger.com,1999:blog-7893783482093846455.post-18741121878434739072015-02-25T09:22:00.001-08:002015-02-25T21:13:46.589-08:003D printer hot end temperature control system Version 2 [unfinished]Almost a years ago, I post the first version of a <a href="http://funofdiy.blogspot.com/2014/03/a-simple-temperature-control-system-for.html" target="_blank"><span style="color: blue;"><b>simple temperature control system</b></span> </a>ultilizing only a LM324 quard op-amp with some resistors and a MOSFET. The system is for 3D printer's hot end.<br />
<br />
The controller has two major functions: (a) turning a power resistor on and off automatically to maintain a constant temperature (adjustable manually); (b) showing the real time temperature in the range of 120-260 C. It is simple, low price, and efficient. The circuit board is shown below.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5U848828pTna5QhsTuULXuGzMSNXpD3ODjTeersJ5q08gXxaM8_31kRUyk0j1i_wuJUo4E3GxgGiqvs1l2aXtk4NsYoOAqsPFg85LncUxfjGL5ItuwhouLXfYLJJMvXYtxC3TiFl7L_k/s1600/ExpressSCH.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5U848828pTna5QhsTuULXuGzMSNXpD3ODjTeersJ5q08gXxaM8_31kRUyk0j1i_wuJUo4E3GxgGiqvs1l2aXtk4NsYoOAqsPFg85LncUxfjGL5ItuwhouLXfYLJJMvXYtxC3TiFl7L_k/s1600/ExpressSCH.png" height="576" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><span style="font-size: small;">Temperature control system Version 1. See <a href="http://funofdiy.blogspot.com/2014/03/a-simple-temperature-control-system-for.html" target="_blank">this post </a>for detail. The values of the resistors here are R0=600 ohm, R1=10k ohm, R2=3.9k ohm, R3=6.19k ohm, R4=2.4k ohm, R5=10k ohm.</span></i> </td></tr>
</tbody></table>
<br />
<br />
However, I realized later, also as reader epineh pointed out, the second function, displaying real time temperature, requires a constant +12V power supply. This could be problematic. Because most time people use low price ATX computer powersupply to power their 3D printer. And those powersupply DOES NOT output constant voltage. When there is a large current drain change, say once the power resistor is switched on and off, the power supply's output voltage can jump between 10 and 12V. As a matter of fact, the displayed voltage can be off by 20%!! The control system, on the other hand, works just fine because it relies only on the ratio of the resistance of thermistor and R0.<br />
<br />
One solution is to use a logic power supply that output constant 12V for the LM324 and ATX powersupply for the hot resistor R_hot. Or another way is to add a voltage regulator, which turns the unstable 12V to a stable 5V as the voltage reference for LM324. Only one power supply is required. The circuit diagram is shown below.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI6Acq92UZAMPrGRwoRPtZdzvnKqTv_ED4eDFBnUc_MSJdERtJTMFV1kdK1aB3Nlvslw1kHB7Vbaz38NhKBnAfSesGzMaXYaGI8nUKAgdDEWexvW7QxKYhmvTmJCA2JvGq6y1aQDbCr6A/s1600/hot_end_temperature_control_v3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI6Acq92UZAMPrGRwoRPtZdzvnKqTv_ED4eDFBnUc_MSJdERtJTMFV1kdK1aB3Nlvslw1kHB7Vbaz38NhKBnAfSesGzMaXYaGI8nUKAgdDEWexvW7QxKYhmvTmJCA2JvGq6y1aQDbCr6A/s1600/hot_end_temperature_control_v3.png" height="590" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><span style="font-size: small;">Temperature control system Version <b>2</b>. The values of the resistors here are R0=600 ohm, R1=10k ohm, R2=3.9k ohm, R3=6.19k ohm, R4=12.4k ohm, R5=10k ohm.</span></i></td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
There are two differences between version 1 and version 2.<br />
(a) In version 2, a LM340T5 +5V voltage regulator is used to convert 10~12V to a constant +5V. So the display will not be affected by the status of the hot resistor.<br />
(b) R4 is changed from 2.4k ohm to 12.4k ohm. This is important in order to correctly display the temperature. I will show why later.<br />
<br />
[this post is unfinished yet]<br />
<br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com4tag:blogger.com,1999:blog-7893783482093846455.post-76050201887373371712014-09-19T10:00:00.001-07:002015-02-25T08:50:19.077-08:00Change car charger's output voltageCar charger is a must-have today, thanks to smartphones' larger and larger screen. It is very cheap to get a car charger adapter, which converts 12V, voltage of car's socket, into 5V, voltage of USB standard. I have several of these too.<br />
<div>
<br /></div>
<div>
However, Now I am in need of 9V 1A power while driving, and I decide to convert one of my 5 V car charger into 9 V.</div>
<div>
<br /></div>
<div>
Initially I was thinking about using a 9 V voltage regulator, say, LM7809, to do this. I believe it will work, but I found the solution can be even simpler after I actually opened one 5 V car charger.</div>
<div>
<br /></div>
<div>
This is what it looks like inside the 5 V car charger.</div>
<div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXWmNh6fVvgQ2CRSL_DKUokrYsOiSGd9BT9bsInIyB4QJXTUv7rUFaBRH15QD2QMTFoTwuq9HhqvU1Sl0ezbxxyTpgxr0VzZNq6FA5kqY32rQxKLFGtsVajt1AZEsvMZgzGobhiYn_YYU/s640/blogger-image-1007908566.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXWmNh6fVvgQ2CRSL_DKUokrYsOiSGd9BT9bsInIyB4QJXTUv7rUFaBRH15QD2QMTFoTwuq9HhqvU1Sl0ezbxxyTpgxr0VzZNq6FA5kqY32rQxKLFGtsVajt1AZEsvMZgzGobhiYn_YYU/s640/blogger-image-1007908566.jpg" /></a></div>
<br />
<div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiEEKZgREdMw1hwSM1PEY07AWlazr2UfI_XMZd2fw9ghYHwAVbvYXRKkhMc5NQWYM9n4hT3HMCdyfO6JMV9UcLgE_VREg6PiTf-63rfFiIRAnmdK5ytuOaj1wI4Ja333M5-MUnYC2Vor4/s640/blogger-image--1543333766.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiEEKZgREdMw1hwSM1PEY07AWlazr2UfI_XMZd2fw9ghYHwAVbvYXRKkhMc5NQWYM9n4hT3HMCdyfO6JMV9UcLgE_VREg6PiTf-63rfFiIRAnmdK5ytuOaj1wI4Ja333M5-MUnYC2Vor4/s640/blogger-image--1543333766.jpg" /></a></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBjD6TmQBJB3yuvnyMLo_0SI3fEu6ixmLJy3DxcF8iUVTbPV9p51if88dpBO7DuuBbFkNku24N0a-2I0pi9nzGmAbdg3-6-94zz4zuHoYyxdRRb66BbzuTtll7gcC7STQ-EHW9WFXfw1U/s640/blogger-image-1329871224.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBjD6TmQBJB3yuvnyMLo_0SI3fEu6ixmLJy3DxcF8iUVTbPV9p51if88dpBO7DuuBbFkNku24N0a-2I0pi9nzGmAbdg3-6-94zz4zuHoYyxdRRb66BbzuTtll7gcC7STQ-EHW9WFXfw1U/s1600/blogger-image-1329871224.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBjD6TmQBJB3yuvnyMLo_0SI3fEu6ixmLJy3DxcF8iUVTbPV9p51if88dpBO7DuuBbFkNku24N0a-2I0pi9nzGmAbdg3-6-94zz4zuHoYyxdRRb66BbzuTtll7gcC7STQ-EHW9WFXfw1U/s640/blogger-image-1329871224.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
On the top is a 2 A fuse, which connects to the anode of the car charger (12V). The two thin metal sheets connect to the ground. The circuit at the bottom does the 12V-5V converting job.</div>
</div>
<div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08fSDlgPH-BCHqMk3KemOjDOupDuC1t4kHxuJUDe7xOkckzaVNWbMl0cHNZeGfPVxr0SkigiIGbH8z3TYUYovwrUpt8B8XCm10atPkf0a2FrUsYTubKWPK2Z3fSjkXDvErGiwzhiR4pc/s640/blogger-image-451129822.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08fSDlgPH-BCHqMk3KemOjDOupDuC1t4kHxuJUDe7xOkckzaVNWbMl0cHNZeGfPVxr0SkigiIGbH8z3TYUYovwrUpt8B8XCm10atPkf0a2FrUsYTubKWPK2Z3fSjkXDvErGiwzhiR4pc/s640/blogger-image-451129822.jpg" /></a></div>
<br /></div>
<div>
Although those larger aluminum capacitors at the bottom occupy most of the space, the most crucial part is the IC (integrated circuit) under the black wire.</div>
<div>
<br /></div>
<div>
Look carefully into the circuit I found the IC part number is MC34063A, which is a 1.5A step up/down/invert DC-DC voltage regulator. I found its specs online http://www.onsemi.com/pub_link/Collateral/MC34063A-D.PDF</div>
<div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcxCLwLUQD5h_QivpIWsy4pOEA6IQrNef3UDUpg3WidVg0tXIQn4RZ90zCrUs-XudWcL0iLMf8EADyOpsc9H14gU6TBJIts9Dom7bq4eisr1Hz8PQaL9TOPubI1pc2k4qEyyJtrRIv5M0/s640/blogger-image-1409498383.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" height="640" src="data:image/png;base64,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" width="460" /></a></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCMnbk-LlVVf5p-3pQhfbWdoRlZCVU4ojUUGGRkqIGYPNG-SDTdBc8rmEM8GYgknLV19fz7m8U0ZAx7LeK3uWNl_G-NfpJjqYma8L2gI4FbwIPcy0WDuhHpb-CIBWpSDyWGkkhO-fwfVc/s640/blogger-image--1200411371.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" height="393" src="data:image/png;base64,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" width="400" /></a></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVBFOQ6YfmQ5Ks7a10s17rQ7kXIT2MHSUVMGppg01BXW2DG02Btut46OljG6_ps0zfJaXX5YZtnLgt-4WSnATT3t8j_rmbx6CyNk4xwB6CqroAwD1s_hTVuMp9MsufX9IqYQ6h-lMrfZM/s640/blogger-image--765462193.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
</div>
<div>
<img alt="" height="204" src="data:image/png;base64,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" width="640" /></div>
<div>
<br />
Sounds promising. The regulator can theoretically output voltage from 1.25V to 40V, and it can output up to 1.5A. So it is possible to achieve my goal, 9V 1A, by simply modifying the circuit a little bit.<br />
<br />
The datasheet also provide a step-down circuit example, which outputs fixed 5V.</div>
<div>
<br />
<img alt="" height="640" src="data:image/png;base64,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" width="596" /></div>
<div>
<br />
The output pin of MC34063A is pin 2. Resistor R1 and R2 form a voltage divider so that the voltage of pin 5 is<br />
<span style="font-family: inherit;"><b><span style="font-size: small;"><i>V5 = Vout*R1/(R1+R2)</i>,</span></b></span><br />
which gives<br />
<i><b>Vout = V5*(R1+R2)/R1 = V5*(1+R2/R1).</b></i><br />
<br />
From the circuit we see that V5 is tight to a 1.25V reference by a voltage comparator, meaning that V5 must equal to 1.25V. Hence<br />
<i><b>Vout = 1.25V*(1+R2/R1)</b></i>. <br />
<br />
<br />
Given R1 = 1.2k and R2 = 3.6k = 3R1, there is<br />
<i><b>Vout = 1.25V*(1+3) = 5V</b></i>. <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08fSDlgPH-BCHqMk3KemOjDOupDuC1t4kHxuJUDe7xOkckzaVNWbMl0cHNZeGfPVxr0SkigiIGbH8z3TYUYovwrUpt8B8XCm10atPkf0a2FrUsYTubKWPK2Z3fSjkXDvErGiwzhiR4pc/s640/blogger-image-451129822.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08fSDlgPH-BCHqMk3KemOjDOupDuC1t4kHxuJUDe7xOkckzaVNWbMl0cHNZeGfPVxr0SkigiIGbH8z3TYUYovwrUpt8B8XCm10atPkf0a2FrUsYTubKWPK2Z3fSjkXDvErGiwzhiR4pc/s640/blogger-image-451129822.jpg" /></a><br />
<br />
Look carefully into the circuit I found that the blue resister on the right side of the IC is labeled R1, and the yellow resistor hidden beneath the large black capacitor is labeled R2. R1 links pin 5 with GND, and R2 links Pin 5 and output (the red wire). They match the above schematics perfectly!<br />
<br />
Using a multimeter I found that R1 = 1k ohm and R2 = 3k ohm. Hence Vout = 1.25*(1+3) = 5V.d<br />
<br />
Now the task is super easy! I removed R2 and replace it with a 6.2k ohm resistor so that<br />
Vout = 1.25V*(1+6.2k/1k) = 1.25V*7.2=9V.<br />
<br />
Guess what, after this simple modification, the voltage output of the car charger is 9V!</div>
<div>
<br /></div>
<br />
<br />
I opened several other car chargers I have and they all use MC34063A or identical chips. So looks like it is a pretty standard way to make inexpensive car chargers. Therefore the method I used here would work for those car charges as well.Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com6tag:blogger.com,1999:blog-7893783482093846455.post-5611941443165535342014-05-24T10:41:00.001-07:002015-02-25T08:50:42.422-08:00A French version! RPi Laser engraverFrançois translated the RPi laser engraver post into French! Thank you François.<br />
<br />
Find the French version in his great website:<br />
<br />
http://www.framboise314.fr/un-graveur-laser-a-commande-numerique-a-base-de-raspberry-pi/ <br />
<br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com1tag:blogger.com,1999:blog-7893783482093846455.post-67119140829546306872014-03-22T21:04:00.000-07:002015-02-25T11:08:06.207-08:00A simple temperature control system for 3D printer<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFmK4xoNpa3Rl8ST5fIryiY0iS40KjIHn7QneyKgu6MUf9S7VCwx6WHQWABqATmAALsf8hJQfNaxvD1Slb1DyS_j7z8JL-bLt4I12SY_CbbVDfTUUePlNSS30l2sHktoU7zVSBG5gJmfc/s1600/Temp_control_scaling.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><i>[Note: if you are using smartphone or portable device to browser this
post, some math formula might not appear properly. To see the math in
correct form, scroll down to the bottom and click "<b>View web version</b>"]</i><br />
<i> </i> <br />
After finishing the mini CNC laser engraver, the next thing in my mind is 3D printer. One of the most important part of a 3D printer is the plastic filament extruder, composed by a cold end constantly supplying plastic filament, and a hot end melting the plastic and feeding the liquid plastic through a small nozzle.<br />
<br />
For PLA or ABS plastic filaments (most common materials used in home-made 3D printers), the hot end needs to be at a temperature of about 200C (or 180C for PLA, 220C for ABS). It is important to keep this temperature (roughly) constant, so is the plastic melting speed and then a controllable plastic feeding rate.<br />
<br />
Therefore two components are essential: a heater, and a temperature sensor. The heater heats up the hot end nozzle, and the sensor monitors the temperature. The heater is on when the nozzle temperature is too low, and is switched off when the nozzle is too hot.<br />
<br />
<br />
I plan to build a home-made 3D printer controlled by my Raspberry Pi, which, unfortunately, does not have any analog data acquisition pin. Therefore I decide to build a stand-alone temperature control system.<br />
<br />
The idea is very simple. I use a power resistor as the heater and a thermistor as the temperature sensor. The system contains an LM324 quad op-amps chip. One op-amp is used as a comparator to compare the thermistor resistance with a nominal resistance and output LOW or HIGH as the comparison result. The other three op-amps inside the LM324 are used to perform some linear transformation and output a voltage that is proportional to the thermistor temperature. This voltage is applied to a 0-30V voltmeter so one can read the temperature. A N-Channel MOSFET transistor is used to control on/off of the heater.<br />
<br />
This is the controller<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimxYLqi_JPNvnVAC_A_WN1PRxDlPVMttbISAdNhGrtL49qWs5UFnBtkHUsBrsp4U5roPV8zVPXu9EnkCXS884ixnkPne5uQJ2ylhWV276zykyK_jE2q7NXZkos19n4Ndg6HxnzOKh7RR8/s1600/IMG_0587.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimxYLqi_JPNvnVAC_A_WN1PRxDlPVMttbISAdNhGrtL49qWs5UFnBtkHUsBrsp4U5roPV8zVPXu9EnkCXS884ixnkPne5uQJ2ylhWV276zykyK_jE2q7NXZkos19n4Ndg6HxnzOKh7RR8/s1600/IMG_0587.JPG" height="476" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><span style="font-size: small;">The finished controller box. About 8cm by 5cm by 4cm</span></i> </td></tr>
</tbody></table>
<br />
<br />
Here is the circuit diagram and some key parts used in the system.<br />
<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk-IUlnBxlBeIcEylmrJspsDTHzTozu9laQIFlVZbq4P83tpdu0Pqe9Jnz2tfhlqdcLbaDxH79qeXIGL_kvPKEMdlj7VWQ7Ea38IZHUI7VMM2fGx4_vuPQJJlyrEd-40dgHa0Bnr1N1wk/s1600/ExpressSCH.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk-IUlnBxlBeIcEylmrJspsDTHzTozu9laQIFlVZbq4P83tpdu0Pqe9Jnz2tfhlqdcLbaDxH79qeXIGL_kvPKEMdlj7VWQ7Ea38IZHUI7VMM2fGx4_vuPQJJlyrEd-40dgHa0Bnr1N1wk/s1600/ExpressSCH.png" height="578" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Schematics of the temperature control system</i></span></td></tr>
</tbody></table>
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBekjc8JAD-DXkKAI5rlzuWR3Y4sHviHvHgNeV_iF8yBDU7AbW-PkiruQMLc00b6Uhpt1OQ8OOswjFXf83H4s4cqQmEZs8IzAZGMBrB9Vw19tqnS_HIh244yF5Brpjl6H-Rs2YLmzd8ko/s1600/lm324_pl.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBekjc8JAD-DXkKAI5rlzuWR3Y4sHviHvHgNeV_iF8yBDU7AbW-PkiruQMLc00b6Uhpt1OQ8OOswjFXf83H4s4cqQmEZs8IzAZGMBrB9Vw19tqnS_HIh244yF5Brpjl6H-Rs2YLmzd8ko/s1600/lm324_pl.jpg" height="150" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><span style="font-size: small;">LM324 is 14-pin integrated circuit (IC) containing four identical low-profile low-power operational amplifiers (op-amp). The op-amps have a bandwidth of 1MHz, and can be powered by a single power supply</span></i><span style="font-size: small;"><i> with a wide range 3-32V. It is one of the most widely used and lowest cost op-amp ICs. The datasheet can be found <a href="http://www.ti.com/lit/ds/symlink/lm124-n.pdf" target="_blank">here</a></i></span><a href="http://www.ti.com/lit/ds/symlink/lm124-n.pdf" target="_blank"><br /></a><b><i><span style="font-size: small;">[Note: there is nothing too special about this chip except its compact size. It can be certainly replaced by essentially any other type of op-amps. For the task carried by pin 1, 2 and 3 of LM324 shown in the schematics above, a comparator, instead of an op-amp, is more suitable than LM324.]</span></i></b></td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivBBwSL4m8R-2iPgQlPlcX6ylfVBTHruTiRmFNHaw4r_VfLvUuv2W6qLXUA11KEBo9bTFviRau0cGNU3XX6qbI8Yk16Gp3tIRFHwxyPjaYhJNAgRcmjTjiVuyLH4-tWAexqB8Aad_3DTA/s1600/heater.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivBBwSL4m8R-2iPgQlPlcX6ylfVBTHruTiRmFNHaw4r_VfLvUuv2W6qLXUA11KEBo9bTFviRau0cGNU3XX6qbI8Yk16Gp3tIRFHwxyPjaYhJNAgRcmjTjiVuyLH4-tWAexqB8Aad_3DTA/s1600/heater.JPG" height="200" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>12V 40W ceramic cartridge heater resistor I used. It is the R_hot in the schematics. They are sold on ebay an other place at a price of about $2/each. For example, <a href="http://www.ebay.com/itm/UN3F-New-12V-40W-Ceramic-Cartridge-Heater-for-3D-Printer-Prusa-Mendel-1m-/291025730159?pt=LH_DefaultDomain_0&hash=item43c27c3a6f" target="_blank">here</a></i></span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCS7j5_kNPQn_j8k2Rq3eOrjB06vGFiL0mmPTPyUMotAnP9NqMb-uFtSpK2jdAFNXGTAdJH6VfxX5MkWThFSoaPkQt3m_WfGcMvx9TLutTW3_jjIXSjgA0R-fQNrTf2CiNpcqpsdUE57k/s1600/$_3.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCS7j5_kNPQn_j8k2Rq3eOrjB06vGFiL0mmPTPyUMotAnP9NqMb-uFtSpK2jdAFNXGTAdJH6VfxX5MkWThFSoaPkQt3m_WfGcMvx9TLutTW3_jjIXSjgA0R-fQNrTf2CiNpcqpsdUE57k/s1600/$_3.JPG" height="200" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>100k ohm NTC 3950 1% thermistor with glass enclosure. It is the R_T in the schematics. They have a wide temperature range from -50C to 260C. Perfect for 3D print (200C). The They cost about $1/each. E.g., <a href="http://www.ebay.com/itm/2X-100K-Ohm-NTC-3950-1-Thermistor-for-3D-Printer-Reprap-Mendel-HotEnd-Glass-New-/310871050301?pt=LH_DefaultDomain_2&hash=item48615bc83d" target="_blank">here</a></i></span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0XCHfOEBPTKOKCMGDAjtD32NmVGchdd-NKtdse_3tx6_9Q6EzgvtmTZzZwQac29Vq15d-EBLGpR2ZKLkYpYWo-2szjJpxjvF2mbjFCYWVk_p_gXG-vnqqO5fYK3OioePhSaECaEeFzEY/s1600/$_12.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0XCHfOEBPTKOKCMGDAjtD32NmVGchdd-NKtdse_3tx6_9Q6EzgvtmTZzZwQac29Vq15d-EBLGpR2ZKLkYpYWo-2szjJpxjvF2mbjFCYWVk_p_gXG-vnqqO5fYK3OioePhSaECaEeFzEY/s1600/$_12.JPG" height="118" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>0-30V digital voltmeter. The red lead is for power, black lead for ground, and the blue lead goes to the voltage to be measured. They are about $1.5 each (like this <a href="http://www.ebay.com/itm/1PCS-Red-LED-Panel-Meter-Digital-Voltmeter-DC-0-30V-High-Quality-Durable-Hotsale-/400679117071?pt=LH_DefaultDomain_0&hash=item5d4a56210f" target="_blank">one</a>). Make sure the meter has three wires. There are meters with only two wires (no blue wire) which are not suitable here.</i></span></td><td class="tr-caption" style="text-align: center;"></td></tr>
</tbody></table>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYpk5nviaijAD9mQWxJ6nRTrNNjc5VI7EKLIVH6gFsW23hvDqeLnLqfFBNzSEfKPPt-1yeMXrg5Fv3L73MA24bDdcrPr2O8sy0felNXdsTIhQGzUvwr4jpcIoBI1jJMyXSiAWYOmeMTe8/s1600/MOSFET.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYpk5nviaijAD9mQWxJ6nRTrNNjc5VI7EKLIVH6gFsW23hvDqeLnLqfFBNzSEfKPPt-1yeMXrg5Fv3L73MA24bDdcrPr2O8sy0felNXdsTIhQGzUvwr4jpcIoBI1jJMyXSiAWYOmeMTe8/s1600/MOSFET.JPG" height="200" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><span style="font-size: small;">IRFP150 N Channel MOSFET transistor. About $1.5/each (like <a href="http://www.ebay.com/itm/IRFP150-IRFP150N-Power-MOSFET-N-Channel-42A-100V-/260797381985?pt=LH_DefaultDomain_0&hash=item3cb8bc3d61" target="_blank">this one</a>). From left to right are the pins of G, D and S. Data sheet can be downloaded <a href="http://www.vishay.com/docs/91203/91203.pdf" target="_blank">here</a>. It can be replaced by similar high power N MOSFET transistors like IRFP140 or IRFZ24</span></i></td></tr>
</tbody></table>
<br />
<br />
<h3>
Choice of the resistors</h3>
The choice for the resistors R0, R1, R2, R3 and R4 are crucial. They need to be carefully calculated so that the meter can show correct temperature.<br />
<br />
I choose:<br />
R0=600 ohm<br />
R1=10k ohm<br />
R2=3.9k ohm<br />
R3=6.19k ohm<br />
R4=2.4k ohm<br />
R5=10k ohm <br />
<br />
I will show how these numbers come out.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<h3>
About the <a href="http://en.wikipedia.org/wiki/Thermistor" target="_blank">thermistor</a></h3>
The NTC thermistor I use has a beta value of 3950 and resistance of 100k ohm at room temperature (~25C, or rounghly 300Kelvin).<br />
<br />
NTC stands for Negative Temperature Coefficient, meaning that the resistance of the thermistor decreases as the temperature increases.<br />
<br />
The Steinhart Hart equation for NTC thermistor is<br />
<span style="font-size: small;">$$\frac{1}{T}=\frac{1}{T_0}+\frac{1}{B}ln\left(\frac{R}{R_0}\right)$$</span><br />
where <span style="font-size: x-small;">\(T_0\)</span> is room temperature in Kelvin (~300), B=3950 is the coefficient, <span style="font-size: x-small;">\(R_0\)</span> is the resistance of the thermistor in ohm at room temperature, i.e., 100000. Then given temperature <span style="font-size: x-small;">\(T\)</span> in Kelvin we can calculate the resistance of the thermistor, or given a resistance we can calculate the temperature.<br />
<br />
The S-H equation is a highly non-linear equation. It is, however, possible to use a simple linear function to approximate the S-H equation within some narrow temperature range.<br />
<br />
<br />
<h3>
How the temperature meter works</h3>
<span style="font-weight: normal;">The system has two modes: <b>normal working mode</b>, and <b>temperature setting mode</b>. The switch SW controls which mode is selected. When SW is at 1 (default), the system is at normal working mode. When SW is at 2 (temporal), the system allows you to set the desired temperature.</span><br />
<br />
<span style="font-weight: normal;">The LM324 has four op-amps.Pin 4 and 11 are the Vcc and Vee. I use a single 12V power supply to power the whole system so pin 4 is connected to +12V and 11 is connected to ground. Pin [1,2,3], [5,6,7],[8,9,10] and [12,13,14] are the four op-amps.</span><br />
<span style="font-weight: normal;"><br /></span>
<span style="font-weight: normal;">Op-amp [1,2,3] is used as a voltage comparator. I will discuss this later. </span><br />
<span style="font-weight: normal;"> (It is usually not recommended to use an op-amp as a comparator. But it does work here because LM324 accepts true differential input signals into its inverting and non-inverting inputs).</span><br />
<br />
<span style="font-weight: normal;">Op-amp [5,6,7] behaves simply as a voltage follower. Pin 6 and 7 repeats whatever voltage Pin 5 has without draining current from pin 5. In normal working mode (SW at 1), the voltage of Pin 5 is the voltage between the thermistor and R0. We define this voltage, the </span><span style="font-weight: normal;"><span style="font-weight: normal;">voltage of the junction of thermistor R_T and R0,</span> as<span style="font-size: small;"> \(Vin\).</span></span><br />
<span style="font-weight: normal;"><br /></span><span style="font-size: small;">
</span><span style="font-size: x-small; font-weight: normal;"><span style="font-size: small;">With R0, there is </span></span><br />
<span style="font-size: x-small; font-weight: normal;"><span style="font-size: small;">$$Vin=\frac{R0}{R0+R_T}12 V=Pin5=Pin6=Pin7$$</span> </span><br />
<span style="font-weight: normal;"></span><br />
<span style="font-weight: normal;"></span>
<span style="font-size: small; font-weight: normal;">Then let's move to resistor R1 and R2. Clearly, the voltage at pin 10 is</span><br />
<span style="font-size: small; font-weight: normal;">$$ \frac{R2}{R1+R2}\cdot12+\frac{R1}{R1+R2}\cdot Vin=\frac{R1}{R1+R2}\left(\frac{R2}{R1}\cdot12+Vin\right) $$</span><br />
<br />
<span style="font-weight: normal;"><span style="font-weight: normal;">Op-amp [8, 9, 10]</span> is another voltage follower. Hence Voltage of Pin 8 = Pin 9 = Pin 10.</span><br />
<span style="font-weight: normal;"><br /></span>
<span style="font-weight: normal;">Resistor R3 and R4 form a voltage divider. The voltage between R3 and R4 is </span><br />
<span style="font-size: x-small; font-weight: normal;"><span style="font-size: small;">$$\frac{R4}{R3+R4}\cdot Pin9=\frac{R4}{R3+R4}\frac{R1}{R1+R2}\left(\frac{R2}{R1}\cdot 12+Vin\right)$$</span></span><br />
<span style="font-size: x-small; font-weight: normal;"><span style="font-size: small;"> </span> </span><br />
<span style="font-weight: normal;">Op-amp [12,13,14] is another follower. There is Pin 14=Pin 13 = Pin 12= voltage between R3 and R4.</span><br />
<br />
<span style="font-size: small; font-weight: normal;">We define the voltage at Pin 14 is \(Vout\). Hence</span><br />
<span style="font-size: small; font-weight: normal;">$$Vout=\frac{R4}{R3+R4}\frac{R1}{R1+R2}\left(\frac{R2}{R1}\cdot 12 + Vin \right) $$</span><br />
<br />
<br />
<span style="font-size: small; font-weight: normal;">Now plug into the numbers:</span><span style="font-size: small;"> R1=10K ohm, R2=3.9k ohm, R3=6.19k ohm, R4=2.4k ohm, we get</span><br />
<span style="font-size: small; font-weight: normal;">$$Vout=0.279\times 0.719\times (0.39\times 12+Vin)=0.2(4.7+Vin) $$</span><br />
<br />
All the three op-amps do is to perform this linear scaling.<br />
<br />
Here is the <b>magic</b>. <b>I claim that, with R0=600ohm and \(Vin=600/(600+R_T)\times12\)V, there is</b><br />
<b>$$Vout=T/100$$</b><br />
<b>where T is the temperature of the thermistor in Celsius. This equation is true for a quite wide temperature range 120C-260C.</b><br />
<br />
The figure below is the proof. It is shown that with R0=600ohm, \(Vin\) is quite linear in the range of 120C to 260C. Therefore we can perform some linear transformation to map \(Vin\) linearly to T/100.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUvPUDkLUJJ80_ex_ksw4iG9_eD9lcZ2gZ2o4lC6wRX7IxiTBoVt4WJ8D05fb3XmaKoP-mUsi6fgaN9liiwx-Pmg7aCPm88iLIYDR585pNnqBz28-9JAgTULUqpR0OVifLC6ZcO0_j8AA/s1600/Temp_control_scaling.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUvPUDkLUJJ80_ex_ksw4iG9_eD9lcZ2gZ2o4lC6wRX7IxiTBoVt4WJ8D05fb3XmaKoP-mUsi6fgaN9liiwx-Pmg7aCPm88iLIYDR585pNnqBz28-9JAgTULUqpR0OVifLC6ZcO0_j8AA/s1600/Temp_control_scaling.png" height="492" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Top left: thermistor resistance at different
temperature. Top right: same as top left but with axes switched. Lower
left: with R0=600ohm, Vin as function of temperature from 90C to 280C.
Lower right: Vout as function of Temperature (blue) and T/100 (red, T in
Celsius)</i></span></td></tr>
</tbody></table>
<br />
<br />
To map Vin to T/100, we perform linear regression between Vin and T/100, and obtain<br />
$$\frac{T}{100}=0.2Vin+0.94=0.2(Vin+4.7)$$<br />
<br />
Recall that<br />
<span style="font-size: small; font-weight: normal;">$$Vout=\frac{R4}{R3+R4}\frac{R1}{R1+R2}\left(\frac{R2}{R1}\cdot 12 + Vin \right) $$</span><span style="font-weight: normal;"></span><br />
If we want to have \(T/100=Vout\), there must be<br />
<span style="font-size: small; font-weight: normal;">$$\frac{R2}{R1}=4.7/12=0.39$$</span><br />
and<br />
$$\frac{R4}{R3+R4}\frac{R1}{R1+R2}=0.2$$<br />
<br />
Since \(R2/R1=0.39\) gives \(R1/(R1+R2)=0.719\), the second requirement is reduced to<br />
$$\frac{R4}{R3+R4}=0.2/0.719=0.278$$<br />
<br />
Therefore [R1=10K ohm, R2=3.9k ohm, R3=6.19k ohm, R4=2.4k ohm] is an obvious solution (not the only one though).<br />
<br />
Here is a list for key parameters at different temperatures<br />
<br />
T(C) R_T(k ohm) Vin (V) Vout (V) <br />
<br />
120 4.0594 1.5453 1.2491<br />
140 2.4950 2.3263 1.4053<br />
160 1.6041 3.2667 1.5933<br />
180 1.0723 4.3055 1.8011<br />
200 0.7416 5.3666 2.0133<br />
220 0.5285 6.3801 2.2160<br />
240 0.3867 7.2969 2.3994<br />
260 0.2897 8.0928 2.5586<br />
<br />
Note that the \(Vout=T/100\) relation is preserved very good within the range of 140C to 240C. Detailed calculation shows that the averaged errors from 140C to 240C is less than 0.5%. Very good!<br />
<br />
We feed this Vout to a voltmeter so the voltmeter reading is T/100.<br />
<br />
<h3>
How the temperature control works</h3>
The temperature control is done by the op-amp [1,2,3]. Toggle the SW to position 2. The meter is reading a temperature assuming the potentiometer R is R_T and R0. We set the potentiometer R so that the meter reads the desired value, say 2V (corresponding to 200C). Then toggle the SW back to position 1.<br />
<br />
The voltage of Pin 3 is then a constant. The voltage of Pin 2 equals to Pin 3 when and only when the temperature is 200C.<br />
<br />
Below 200C, R_T is too large. So the Pin 2<Pin 3. The op-amp is trying to amplify the voltage difference between its non-inverting (pin 3) and inverting pins (pin 2) by hundreds of thousands times. But it can't output any voltage above the power supply voltage-1.5V Therefore it outputs 12-1.5=10.5V through pin 1. The Gate-Source voltage of the MOSFET transistor is then large enough and the D-S of the MOSFET become conductive. The heater is then switched on.<br />
<br />
When the temperature hits above 200C, R_T is too small. So the Pin 2>Pin 3. The op-amp outputs zero at Pin 1. The MOSFET is switched off and so is the heater.<br />
<br />
After the temperature drops below 200C again, the cycle repeats.<br />
<br />
So it is a negative feedback system. The temperature is maintained around 200C.<br />
<br />
Note that when Pin 1 outputs 10.5V, the LED is also switched on to indicate that the heater is working.<br />
<br />
<br />
<h3>
Some remark</h3>
The system accomplishes two major tasks: displaying the temperature correctly and maintaining a constant temperature at the location of thermistor.<br />
<br />
The first task is accomplished by using three op-amps. The limitation is that the system can only display temperature correctly within a certain range. Here, in our case, is 120C-260C. Below 120C or above 260C the system behaves very poor.<br />
<br />
Mathematically it is guaranteed that the op-amps idea will definitely work essentially for any system, but within some limited range. This is because in most times the Taylor-expansion of any smooth function \(f(x)=f(x_0)+(x-x_0)f'(x_0)+...\) always has a linear term \((x-x_0)f'(x_0)\). One can always use a linear function to approximate the real function. On the other hand, this approximation only works within a narrow range.<br />
<br />
I feel very lucky that the linear range in my case is so wide (120C-260C).<br />
<br />
To properly display the temperature in wider range, say, 0C to 300C, it is necessary to use some micro controller to perform the complicated T-R conversion calculation. But micro controller is is far more complicated and expensive than LM324.<br />
<br />
My idea can be easily extended to other system. For example, a constant temperature water-filling container (what does it for? Say, 45C Baby milk warmer). One need to linearize the system around 45C and find proper R0-R4.<br />
<br />
A note is that LM324 cannot output voltage below 0 or above power supply voltage-1.5V. So every step of the linearization shouldn't involve any voltage beyond this range.<br />
<br />
<br />
<script src="http://latex.codecogs.com/latexit.php?dynamic&div" type="text/javascript"></script> Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com3tag:blogger.com,1999:blog-7893783482093846455.post-68174329791405518162014-02-27T16:02:00.003-08:002015-02-25T08:50:42.426-08:00engravRIan Miller, a high school senior in Manhatten, Kansas, built his own version of the Pi-Powered Laser Engraver: engravR. Besides the great <a href="http://www.youtube.com/watch?v=xxQ33cNIXxU" target="_blank">YouTube video</a>, he also wrote an <a href="http://makezine.com/projects/engravr-a-pi-powered-laser-engraver/" target="_blank">excellent tutorial on Makezine</a>.<br />
<br />
In the tutorial, Ian included a great circuit schematics of the entire system, which I didn't have in my post. So everyone trying to make a similar project is strongly recommended to visit his tutorial and his blog <a href="http://pxlweavr.com/" target="_blank">pxlweavr</a>. He used different H-bridge drivers I believe.<br />
<br />
My writeup is here <a href="http://funofdiy.blogspot.com/2013/10/a-raspberry-pi-controlled-mini-laser.html">http://funofdiy.blogspot.com/2013/10/a-raspberry-pi-controlled-mini-laser.html</a><br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com0tag:blogger.com,1999:blog-7893783482093846455.post-90598991656676990912014-02-08T01:31:00.000-08:002015-02-25T08:51:03.640-08:00A simple analog proximity sensor with digital interface (for Raspberry Pi) [last update: Feb 7, 2014]<i>[Note: if you are using smartphone or portable device to browser this post, some math formula might not appear properly. To see the math in correct form, scroll down to the bottom and click "<b>View web version</b>"]</i><br />
<br />
Raspberry Pi has a <span class="st">Broadcom </span>BCM2835 chip, which controls 26 GPIO (general purpose input/output) pins. There are <a href="http://www.airspayce.com/mikem/bcm2835/" target="_blank">C library</a> or <a href="https://pypi.python.org/pypi/RPi.GPIO" target="_blank">RPi.GPIO</a> python package available online that can be used to control the pins. The RPi.GPIO package is by default included in most Raspberry Pi system, such as Raspbian, a RPi version of Debian linux system.<br />
<br />
One drawback of RPi, compared to arduino, is that it doesn't have any analog pin. All the GPIO pins are purely digital. For example, if pin A is an output pin, it can only output LOW (0V) or HIGH (3.3V), represented as 0 or 1. If pin A is an input pin, for any voltage below 0.8V applied on pin A, it takes it as LOW or 0; for any voltage above 1.3V (surprisingly low actually!), it takes it as HIGH or 1 [ref: <a href="http://www.scribd.com/doc/101830961/GPIO-Pads-Control2" target="_blank">RPi GPIO</a>].<br />
<br />
In real world, however, purely 0 or 1 rarely happens. We always get information that can have continuous value in its range. For example, temperature can be 10C or 50F, or 100C or 212F. These number contains more information than simply "cold" or "hot". A distance can be 2 cm or 10 m, and it is not enough to only know "close" or "far away".<br />
<br />
There are some methods to overcome this drawback. RPi does support SPI or I2C interface, so that we can use some external analog to digital converter (ADC) and use SPI or I2C interface to get quasi-analog signal through these ADCs, such as MCP3008, TLC549, MCP23017, etc. These chips usually cost several bucks. However, with additional commercial sensors, the whole part can cost more than $20 to $30, and it is difficult to make the system compact. For robotic project one usually need more than one sensor, and the cost can add up easily.<br />
<br />
In fact, in many situations, it is actually possible to avoid using these external devices, and still able to get <b>analog </b>signals through the <b>digital </b>pins!<br />
<br />
The key is to convert analog signal to time duration. Because time is always analog!<br />
<br />
I build a simple infrared proximity sensor using several infrared LEDs, one phototransistor, one 2N3904 NPN transistor, a 100nF ceramic capacitor and several low power resistors. And I am able to get some analog reading.<br />
<br />
Here is the circuit. <br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78ixdLj-sK5pGB5KaIVTn0Y4ozdfQ1EEl18WHSEsyoG-r0BZgar-tzY3rL9uyMNB94DtOJnUiPBWvRD1MJiez0Q3z9hbeo2Ds-qLXhOYepwHzuwkvaSRTKmgAg4UtSpy5gZAgPKtI8cI/s1600/proximity_sensor.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78ixdLj-sK5pGB5KaIVTn0Y4ozdfQ1EEl18WHSEsyoG-r0BZgar-tzY3rL9uyMNB94DtOJnUiPBWvRD1MJiez0Q3z9hbeo2Ds-qLXhOYepwHzuwkvaSRTKmgAg4UtSpy5gZAgPKtI8cI/s1600/proximity_sensor.png" height="456" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Infrared Proximity Sensor</i></span></td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
All the elements are among the cheapest in the electronic market. <br />
<br />
<br />
It doesn't really matter what LEDs, phototransistor or NPN transistors are being used. They are pretty much the same.<br />
<br />
The only thing that might matter a little bit is the 100nF (0.1uF) capacitor. I used a low profile ceramic one, which is probably not the best choice. A class 1 ceramic, or film capacitor, will be more suitable here.<br />
<br />
<br />
Here is the real image of the sensor. <br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbzKkfApcpvrXhrtnQUQR1fVRrYnzVTRwJ7dsobZ0fb9sBIO1RYk5li8lEuQv-plrFrnCuwHNvZsymkNmgWvOpkdm2vhjiCJmaNVeXLsgEvLFcemRtiGqlCXGvld9K84xN6foEB_piuPk/s1600/sensor_photo.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbzKkfApcpvrXhrtnQUQR1fVRrYnzVTRwJ7dsobZ0fb9sBIO1RYk5li8lEuQv-plrFrnCuwHNvZsymkNmgWvOpkdm2vhjiCJmaNVeXLsgEvLFcemRtiGqlCXGvld9K84xN6foEB_piuPk/s1600/sensor_photo.JPG" height="640" width="476" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>The infrared proximity sensor. The phototransistor is protected by a black rubber cylinder and surrounded by four infrared LEDs. You can also find the ceramic capacitor (upper left) and two resistors</i></span><span style="font-size: small;"><i>. A third one is on the other side. The sensor has four wires, +5V, GND, Trigger and OUT. The whole sensor is about 1.5cm by 2cm.</i></span></td></tr>
</tbody></table>
<br />
Connect the +5V and GND wires to an external 5V power supply, also connect the GND wire to the ground of the Raspberry Pi GPIO pins. Choose one GPIO pin, say, Pin A as the trigger and connect it to the Trigger wire. Choose another GPIO pin, say, Pin B, as the signal input/output and connect it to the OUT wire.<br />
<br />
<br />
To measure the distance of an object, we send a trigger signal to
activate the infrared LEDs. The light emitted by these LEDs are then
reflected by the object in front of the sensor. The phototransistor in
the middle collects the reflected light and generates a proportional
current. This current is used to integrate the voltage across the
capacitor (I=CdV/dt). By monitoring the time it takes the capacitor
voltage to reach some certain threshold, we have a sense of how much
current was generated by the phototransistor, or equivalently, how much
light got reflected. Apparently, closer the object is, more the
reflected light is. By carefully calibrating the timing of the sensor,
we should be able to get a pretty precise measurement of the distance.<br />
<br />
<br />
Here is the detailed sequential of operations.<br />
<br />
<h4>
<span style="font-size: small;">1. Zero the capacitor</span></h4>
First set Pin B to be an output pin and set it to be zero.<br />
<br />
<span style="background-color: #eeeeee;"><span style="font-family: "Courier New",Courier,monospace;"> GPIO.setup(PIN_B,GPIO.OUT)<br /> GPIO.output(PIN_B,0)</span></span><br />
<span style="background-color: #eeeeee;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="font-family: "Courier New",Courier,monospace;"> time.sleep(0.01)</span></span> </span></span><br />
<br />
<br />
This will discharge any residual voltage on the capacitor. Note that the RC time for discharging the capacitor is t=RC=500ohm * 100nF = 50 us = 0.00005 sec. By maintaining zero volt at pin B for 200RC time, we make sure the capacitor is fully discharged (the residual voltage should be \(e^{-200}=10^{-87}\) times the original residual voltage).<br />
<br />
<br />
<h4>
<span style="font-size: small;">2. Set Pin B as Input</span></h4>
Now we use Pin B as an input pin to get data from the phototransisto. <br />
<br />
<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="color: black;"><span style="background-color: #eeeeee;"> GPIO.setup(PIN,GPIO.IN)</span></span></span> </span><br />
<br />
<h4>
<span style="font-size: small;">3. Light up the LEDs</span></h4>
It's time to turn on the infrared LEDs.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"> GPIO.setup(PIN_A,GPIO.OUT)<br /> GPIO.output(PIN_A,1)</span></span><br />
<span style="color: #444444;"><br /></span>
This will set the voltage of trigger pin to be 3.3V. Since the BE node of 2N3904 drops 0.7V, the voltage across R1 is 2.6V. The current through R1 is then \(I=2.6V/4.3k \Omega=0.6 mA\). 2N3904 then amplifiers this current by ~150 times, resulting a ~ 100mA current from its collector to emitter. Each of the LEDs will conduct about 50mA for a short time period.<br />
<br />
<h4>
<span style="font-size: small;">4. Timing the duration of Pin B remaining LOW</span></h4>
Start to measure how long it takes the capacitor to reach RPi's threshold so Pin B becomes HIGH<br />
<br />
<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;"> counter=0</span></span></span></span><br />
<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;"> t1=time.clock()*1000</span></span></span></span><br />
<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;"> while(GPIO.input(PIN_B)==0)&(counter<1e4):<br /> counter = counter+1<br /> deltat=time.clock()*1000-t1</span></span></span></span><br />
<span style="color: #444444;"><br /></span>
<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span> is the time duration of Pin B remaining LOW. Since <span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span> is proportional to the <b>reciprocal of phototransistor current</b> (or <b>amount of reflected light</b>), and phototransistor current is roughly proportional to the <b>reciprocal of the distance</b>, <span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span> is roughly proportional to the <b>distance</b>.<br />
<br />
<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span>\(\propto \frac{1}{I}\propto \frac{1}{light}\propto distance\)<br />
<br />
<br />
The <span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">(counter<1e4)</span></span></span></span> term is to prevent the situation that it takes too long to integrate the capacitor due to extremely low phototransistor current, or equivalently, infinite distance.<br />
<br />
<br />
<h4>
<span style="font-size: small;">5. Turn off the LEDs</span></h4>
<span style="font-weight: normal;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"> GPIO.output(PIN_A,1)</span></span></span><br />
<br />
<br />
<br />
<br />
Before using the sensor practically, we can calibrate the sensor by establishing a table of 1-to-1 correspondence of deltat and distance. When using it, after getting deltat, we just need to check the 1-to-1 table obtained during the calibration.<br />
<br />
<br />
Now there is a clear flaw of the sensor. The amount of reflected light is not only affected by the distance, but also affected by the reflectivity of the object. A shinny mirror will definitely reflect more light compare to a sponge. I don't know if there is a simple solution to this issue. If we know what object the sensor might encounter, we can use that object to calibrate the sensor.<br />
<br />
<h4>
<span style="font-size: large;">Speed</span></h4>
<br />
What's the speed of the
sensor? It has something to do with the distance of the object, and the
capacitance of C. A shorter distance or smaller C will give a faster
measurement speed. I did some test with the configuration shown in the
circuit above, it generally takes no more than 0.05 sec to measure distance
from 0 to 10 cm (4in).<br />
<br />
<h4>
<span style="font-size: large;">Minimize the affect of ambient light</span></h4>
Another potential issue is the ambient light. If the ambient light is too strong, it will interference with the LED light and result in an unexpected large phototransistor current, and a shorter deltat. The sensor might think it is getting too close to an object, but in fact it is facing some bright light source.<br />
<br />
If the ambient light is fast varying, there isn't too much we can do about it, unfortunately. However, if the ambient light level remains roughly constant when measuring the distance, there is a simple solution to this issue. Since it takes about 0.05 sec to measure a distance, this requires the ambient light stays constant during this time period. Good enough for most everyday usage.<br />
<br />
<br />
<br />
We can first perform the above steps and get a <span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span> , denoted as \(\delta t_1\). Then keep the LEDs off, and redo step 1, 2, 4 to get a second <span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span> , denoted as \(\delta t_2\).<br />
<br />
\(\delta t_2\) is the time duration it takes the ambient light to charge the capacitor. \(\delta t_1\) is the time duration it takes both the ambient light and LED light to charge the capacitor.<br />
<br />
Since (1/<span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span>\(\propto light\)), we need to compute<br />
<br />
$$\delta t \equiv \frac{1}{1/\delta t_1-1/\delta t_2}=\frac{\delta t_1\delta t_2}{\delta t_2-\delta t_1}$$<br />
<br />
The ambient light effect is then removed.<br />
<br />
Or we can use pulse-width-modulation (PWM) to precisely control the amount the light emitted by the LEDs, and measure deltat several times with different LED brightness, and then perform <b>a linear regression</b> to get the true deltat given by pure LED light.<br />
<br />
For example, set the LED power to be 0% (off), 25% (0.25 on duty during each PWM duty cycle), 50%, 75%, 100% (solid on), and get the corresponding \(\delta t_1, \delta t_2, \delta t_3, \delta t_4, \delta t_5\)<b></b><br />
<b><br /></b>
Denote \(P\) to be the power of LED, \(P=0, 0.25, 0.5, 0.75, 1\).<br />
<br />
If both the distance and ambient light remain constant, there should be<br />
<br />
$$\frac{1}{\delta t}=\alpha P+\beta$$<br />
<br />
\(\frac{1}{\delta t}\) is proportional to the total light collected by the phototransistor. \(P\)<b></b> is proportional to the light emitted by the LEDs, \(\beta\) is the effect of constant ambient light.<br />
<br />
Obviously, coeffcient \(\alpha\)<b> </b>is determined purely by the distance. In fact, \(\frac{1}{\alpha}\)<b> </b><b> </b>is the true <span style="color: #444444;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #eeeeee;"><span style="color: black;">deltat</span></span></span></span> without any ambient light. Roughly speaking, \(\alpha\)<b> </b><b></b> is proportional to 1/distance.<br />
<br />
We perform a linear regression to \((P_i, 1/\delta t_i)\), where \(i=1,2,3,4,5\). The best fit coefficient \(\alpha\)<b> </b> is given by<br />
<br />
$$ \alpha \equiv \frac{<P_i/\delta t_i>-<P_i><1/\delta t_i>}{<P_i^2>-<P_i>^2} $$<br />
<br />
where \(<x_i>\equiv\sum(x_i)/N\) is the mean of all \(x_i\).<br />
<br />
<b> </b><br />
<b> </b><br />
<span style="font-size: large;"><b>Other thought</b></span><br />
<br />
<span style="font-size: small;">I got this idea from this <a href="http://www.rpiblog.com/2012/11/reading-analog-values-from-digital-pins.html" target="_blank">post</a><a href="https://www.blogger.com/null" target="_blank"></a></span><br />
<span style="font-size: small;">http://www.rpiblog.com/2012/11/reading-analog-values-from-digital-pins.html</span><br />
<span style="font-size: small;"> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGat83gabEezEjOobkgVZMX-vNTsx7_qGEXkPqyyEKZxxsDXPZkGM0km3Zhzad0c591M-AZg96eUGoKG0hiVKZbygzmSjKfJTmlh8Z7BRLIx3JoccqVXO5YAAlXW5PR1POkqT02RL7_Ixh/s1600/RC+analog.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGat83gabEezEjOobkgVZMX-vNTsx7_qGEXkPqyyEKZxxsDXPZkGM0km3Zhzad0c591M-AZg96eUGoKG0hiVKZbygzmSjKfJTmlh8Z7BRLIx3JoccqVXO5YAAlXW5PR1POkqT02RL7_Ixh/s1600/RC+analog.png" height="320" width="310" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><h1 class="title">
<span style="font-weight: normal;"><i><span style="font-size: small;">Reading analog values from Digital Pins of Raspberry Pi</span></i></span></h1>
</td></tr>
</tbody></table>
</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">The idea of converting analog signal to time duration is very neat. The original post claims</span><br />
<br />
<span style="font-size: small;"><i><span style="color: red;">The above technique will only work with
sensors that act like resistors like photocells, thermistors, flex
sensors, force-sensitive resistors, etc.</span></i><br />
<i><span style="color: red;"><br /></span></i>
<i><span style="color: red;">It cannot be used with sensors that have a pure analog output like IR distance sensors or analog accelerometers.</span></i></span><br />
<span style="font-size: small;"><i><span style="color: red;"> </span></i> </span><br />
<br />
<span style="font-size: small;">However we show that it is actually doable with devices like photodiode or so.</span><br />
<br />
<span style="font-size: small;">I am putting the python codes into a mature package now. I will keep updating this post and include the package.</span><br />
<br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com4tag:blogger.com,1999:blog-7893783482093846455.post-51883274775942176992013-10-20T13:17:00.001-07:002017-06-09T08:07:09.585-07:00A Raspberry Pi controlled mini CNC Laser engraver [last update June 6, 2017]<div class="separator" style="clear: both;">
<span style="font-size: small;">I recently made a mini CNC laser engraver using two DVD drives salvaged from old computers and <$10 extra parts bought on eBay. The controller of the CNC machine is a Raspberry Pi, a $35 credit card size computer. The engraver turns out to be pretty successful. So I am sharing it with everyone.</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">There have been a lot of examples people using Arduino to control CNCs. You can probably find tons of C programs available that run directly on Arduino to process G code. A famous one is grbl. Like this on <a href="http://www.instructables.com/id/Pocket-laser-engraver/" target="_blank">by Groover in instructable</a> A Chinese translation can be found <a href="http://www.guokr.com/article/18616/" target="_blank">here</a>. Also there are available CNC controller like MATH3 on the market that can be controlled by parallel or serial ports.</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">I am taking a different approach by using a RPi (<span style="font-family: ".helveticaneueui"; line-height: 19px; white-space: nowrap;">http://www.raspberrypi.org/)</span></span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigrAR7uj1we1VAuo1XMOMoE0iZ_7Bo3afV2gURYaSrWBZ_BS5tPndehtY_1lJw2FBA0ZJnBVgyxGp60e7cKj_5sC5sbuidR1h48HsXJANFVEbvoSNWePvRIojOwjcymWj6Y6FWyTnB1qs/s640/blogger-image-1777046652.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigrAR7uj1we1VAuo1XMOMoE0iZ_7Bo3afV2gURYaSrWBZ_BS5tPndehtY_1lJw2FBA0ZJnBVgyxGp60e7cKj_5sC5sbuidR1h48HsXJANFVEbvoSNWePvRIojOwjcymWj6Y6FWyTnB1qs/s400/blogger-image-1777046652.jpg" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>A Raspberry Pi mini computer. Raspberry Pi is a trademark of Raspberry Pi Foundation</i></span></td></tr>
</tbody></table>
<span style="font-size: small;">The reason why I choose Raspberry Pi is: it is a much more powerful device than Arduino; it supports complete OS; the GPIO pins can be controlled by python, a more intuitive and simpler language than C (the disadvantage of python would be the slow speed); I don't have to buy a separate controller for this project--I can use a single Raspberry Pi to do a lot of different things without reloading firmware. Most importantly, I have a Raspberry Pi but don't have an Arduino right now!</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">Also, there are projects people running LinuxCNC on Raspberry Pi and use an external PIC 32 board to control CNC. It's a great idea but I want to minimize the cost. Instead, I wrote my own python interpreter to execute G code directly. For 2D CNC laser engraver, it is actually very easy to control and doesn' require too much program techniques.</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">First, some pictures.</span></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPNFguXpZagPqza1Yff93aYX0Y9GirdGudPKOTzp6hh5PhrUYWtkOhE22dP8mB9zGq46ozCdmW85YcOvUUsG-PQhm3fgVcrtzZMsBdmCgBSXoSgZd3_0VixHDL06O1u38sXypjzftkgCo/s640/blogger-image-1422023181.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPNFguXpZagPqza1Yff93aYX0Y9GirdGudPKOTzp6hh5PhrUYWtkOhE22dP8mB9zGq46ozCdmW85YcOvUUsG-PQhm3fgVcrtzZMsBdmCgBSXoSgZd3_0VixHDL06O1u38sXypjzftkgCo/s400/blogger-image-1422023181.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Laser engraver is working</i></span></td></tr>
</tbody></table>
</div>
<div>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><div class="separator" style="clear: both;">
<span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlCx6VeOwP9kYjCZJfZyARJ18Fnq6mR-7STPHlRKb-bkWJRI6xQXj7SLujyXnyYhhKMuUg3AHTcDKgVxl2gotjMDbBaroLXzu9iMCfjavP3AdCiZNbrneP95Lqfrkmr9KaXwzbhZbHKG0/s640/blogger-image-1868552292.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlCx6VeOwP9kYjCZJfZyARJ18Fnq6mR-7STPHlRKb-bkWJRI6xQXj7SLujyXnyYhhKMuUg3AHTcDKgVxl2gotjMDbBaroLXzu9iMCfjavP3AdCiZNbrneP95Lqfrkmr9KaXwzbhZbHKG0/s400/blogger-image-1868552292.jpg" width="299" /></a></span></div>
<span style="font-size: small;"><br /></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>A coin size university icon on a plastic board</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<div class="separator" style="clear: both;">
<span style="font-size: small;"><br /></span></div>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWDpjvr7BYvV9cJ1ButdDe-HYuTXQiPBOz6CvBFHrqQLFk5gr5ClrITQBUPxacgMi7GRJqkYnibhpOkLHpci5-x_Z2-9cyEQLlxLDlf3wi9zUqJcP0P55epyRPJIU2o_mVDfUFWiyG7Dc/s640/blogger-image-1452605621.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWDpjvr7BYvV9cJ1ButdDe-HYuTXQiPBOz6CvBFHrqQLFk5gr5ClrITQBUPxacgMi7GRJqkYnibhpOkLHpci5-x_Z2-9cyEQLlxLDlf3wi9zUqJcP0P55epyRPJIU2o_mVDfUFWiyG7Dc/s400/blogger-image-1452605621.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div class="separator" style="clear: both;">
<span style="font-size: small;"><i>I messed up the direction for this one...</i></span></div>
</td></tr>
</tbody></table>
<div class="separator" style="clear: both;">
<span style="font-size: small;"><br /></span></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLGdRjhxN5n2ixeHCTZEkq4D00PppXzbyPnUMU_hR3jZLTYSjFaPbbeM1r2ooNqnU8Bg-XWzm4JxdwYoJQ94s9Tgoh_MRnbPsOEHMm5BV634UupVB4T6J6YuG6coSaQbQMK4hyphenhyphenvzjDOow/s640/blogger-image-1347168473.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLGdRjhxN5n2ixeHCTZEkq4D00PppXzbyPnUMU_hR3jZLTYSjFaPbbeM1r2ooNqnU8Bg-XWzm4JxdwYoJQ94s9Tgoh_MRnbPsOEHMm5BV634UupVB4T6J6YuG6coSaQbQMK4hyphenhyphenvzjDOow/s400/blogger-image-1347168473.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Some words..</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0SVt77QiMxXvwGk5MCiyuvapDk5R5kv2SsAPxQI5JlcvT_hNaDQNwGWLM4noTSca49nWSaWBGT5IhU3FunrTDHUCOKVC4WPZEQ-GS91J9JkpOURR_eLlWdfA_oncW1Qp2_hq2onl_SGg/s640/blogger-image-954034757.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0SVt77QiMxXvwGk5MCiyuvapDk5R5kv2SsAPxQI5JlcvT_hNaDQNwGWLM4noTSca49nWSaWBGT5IhU3FunrTDHUCOKVC4WPZEQ-GS91J9JkpOURR_eLlWdfA_oncW1Qp2_hq2onl_SGg/s400/blogger-image-954034757.jpg" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>The machine is not packaged yet. You can find: machine (top middle), controlling circuit (top left) and RPi (lower right)</i></span><br />
<span style="font-size: small;"><br /></span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd2Y66krGbsmUogLQjxUVF2tz7Nl2zeqKEuf4PV8-jm-J9OnU9Me-naEKPnBr3GdAMN1U8b0ZNdijBKXB_IvmZiVCmpdK0lZtrvANKAFlM2MWJwlSM9lCPpjR-It8-QmDYfePBUOX9uHo/s640/blogger-image-1433608126.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd2Y66krGbsmUogLQjxUVF2tz7Nl2zeqKEuf4PV8-jm-J9OnU9Me-naEKPnBr3GdAMN1U8b0ZNdijBKXB_IvmZiVCmpdK0lZtrvANKAFlM2MWJwlSM9lCPpjR-It8-QmDYfePBUOX9uHo/s400/blogger-image-1433608126.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>The controller and wires in a perfect chaos</i></span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1XmafnViQmqQXmqR4KABKME_AGn1-jV0g_OkUWa2MRTHlqxpvA1N_-_o2g_es1pYFhViu6a6JRYPcPTq4Z0qkQ5zUItbOpiFp9xd34u1NimODZYPKXLrqywiPtr2edTvqJUBEcHLUVWk/s1600/IMG_20150404_180618.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1XmafnViQmqQXmqR4KABKME_AGn1-jV0g_OkUWa2MRTHlqxpvA1N_-_o2g_es1pYFhViu6a6JRYPcPTq4Z0qkQ5zUItbOpiFp9xd34u1NimODZYPKXLrqywiPtr2edTvqJUBEcHLUVWk/s1600/IMG_20150404_180618.jpg" width="640" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Presentation in Caltech/JPL DIY day, April 4, 2015. Middle: laser engraver. Right: chasis that encloses H bridges, LM317 laser drivers, LM340T5 voltage regulators and a tiny dc fan. Right upper: Raspberry Pi.</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: large;"><b>Other version</b></span><br />
<span style="font-size: small;">D. Miller made his own version of laser engraver and posted a fabulous youtube video <a href="http://d.%20miller./" target="_blank">here</a></span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: small;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/xxQ33cNIXxU?feature=player_embedded' frameborder='0'></iframe></span></div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Please visit his website <a href="http://www.pxlweavr.com/" target="_blank">pxlweavr</a></span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">He made a couple of great improvements to my python codes, so that it is able to use G Code generated by the inkscape <a href="http://www.cnc-club.ru/forum/viewtopic.php?t=35" target="_blank">GCodeTools </a>extension, and also allows remote engraving via another small python script he wrote. The modified python package can by obtained from github</span><br />
<span style="font-size: small;"><a href="https://github.com/iandouglas96/engravR">https://github.com/iandouglas96/engravR</a></span><br />
<span style="font-size: small;"> </span><br />
<span style="font-size: large;"><b>Must read!!!</b></span></div>
<span style="font-size: small;">As everyone does, I feel crazy about laser. But it is extremely important to keep in mind that the laser used in this project could burn human eye retina in millisec before eyeball is capable to react. Even a random reflection beam during engraving could be >50 mW (for comparison, a regular laser pointer is 1 mW), and make permanent damage to your eyes, kids' eyes, or pets' eyes. ALWAYS WARE A LASER SAFE GOGGLES when you are close to the working engraver. A suitable one for 650 nm laser should be green color. MAKE SURE THE ENGRAVER IS NOT ACCESSIBLE TO KIDS OR PETS. I would suggest everyone planning to build this should enclose the whole thing inside a large box or cover (however, mounting a little computer fan on the box would be nice for venting). Some people suggest that there should be a master switch on the box, so that unless the box is closed, the laser won't switch on.</span><br />
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">AGAIN, think TWICE before you make it.</span></div>
<div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: large;"><b style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">About the capability of the engraver</b></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">Due to the size limit of DVD drives, the machine can only engrave within an area of 36 mm by 36 mm.. So it can do little pieces of wood, plastic board or part of iPhone cases, but not any larger.</span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;"><br /></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">The laser used here is 200 mW 650 mm red laser diode. It cuts letter paper fine. But It is not powerful enough to actually cut through anything thicker and tougher. In fact, the working surface is preferred to be black color so that it can absorb as much laser power as possible. To engrave on transparent plastic board, as shown above in the coin size university icon picture, I have to use a black marker to paint the surface and clean the ink after engraving. However, I believe for a thin black foam sheet (<3mm thick), and given enough engraving time, the laser should be able to cut it through, as Groover showed in instructable.</span></div>
<div>
<span style="font-size: small;"><b><br /></b></span></div>
<div>
<h2>
<span style="font-size: large;"><b>Now here is the instruction.</b></span></h2>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">
Things required:</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>1</b>. A raspberry pi (running Raspbian or what ever supports GPIO)</span></div>
<div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>2</b>. two DVD writable drives.</span><br />
<span style="font-size: small;">To be able to engrave, you need 200mW laser diode from DVD writer. A DVD R or CD R will do nothing. A CD writer might be OK in term of power (~100mW), but the laser diode of a CD writer is infrared, which can be super dangerous (you can't see it!).</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>3</b>. a TO-18 5.6mm laser housing</span><br />
<span style="font-size: small;">(like this one http://www.ebay.com/itm/251316903193?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649)</span><br />
<span style="font-size: small;">Make sure you get a 5.6mm one. There is another type 9mm.</span></div>
<div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>4</b>. Two dual channel H-bridges.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">A H bridge is a circuit containing four (effective) switches that can
apply a voltage across a load (DC motor or one coil of a stepper motor) in
either direction.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Stepper motors from DVDs are 4 wire 2
phase bipolar stepper motors. They require truly reversible voltage on each
pairs of the wire. You need two H bridges for each stepper motors. So total of four H bridges for two strepper motors. Some famous stepper motor controllers like ULN2003 are for the 5 wire stepper motors, so they cannot be used for controlling the DVD stepper motors.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">You can make your own H bridges by using 4 NPN and 4 PNP transistors and probably TTL converters (RPi's GPIO pin are 3.3V so logic TTL chips might be required). Or you can simply buy them. There are a lot of integrated H bridge circuits available in the market, such as L298. The ones I use are L9110s Dual H Bridge purchased on Ebay (like this one: http://www.ebay.com/itm/350877288713?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649). They are low cost (~$2 each), compact (.8"x1") and are powerful enough (~800mA). However, if you buy from a Chinese seller, shipping can cost 3 weeks.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">L9110s is also sometimes known as HG7881. </span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Regarding the H bridge, you need to make sure that the continuous current limit of the circuit is greater than 500mA. Usually the stepper motor in a DVD drive is rated at 5V and each coil has a resistance of 10ohm. So the current through each coil would be 500mA! A very large current!</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>5</b>. a LM317 regulator, a power NPN bipolar transistor (like E3055, should be able to handle continuous 200mA at least), some resistors, capacitors and a bundle of jumpers.</span><br />
<span style="font-size: small;">The LM317 is for the laser driver. The power NPN is for making a switch for the laser. My lab has tons of these components so I don't have buy them. If you don't want to solder a driver by your own, you can surely buy a laser driver for <$5. The laser driver need to be able to output at least 200mA at 2V and have the function of enable/disable.</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">If fact, it will be a better idea replacing the NPN bipolar with a MOSFET transistor. There are a lot of them available on the market and are very inexpensive. Just make sure that the continuous current supported by the MOSFET is above 200mA.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>6</b>. a solder gun, screw driver and some basic hard wares.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<br />
<h3>
<span style="font-size: large;"><b>STEP 1</b>: Disassemble DVD drives (writers)</span></h3>
<div>
<span style="font-size: small;">There are a lot of picture/video tutorials online for this step so I will keep it short.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6BG2kU2pwtjB3gPBBsLq2zmM4MYSqvV61iVixV5kI2QrT67VkhXaT45VUT0VM8FCqg9OvQyWHy0L2xjYnRuXjk9exeFy0QoKE5sBbkXTeXh1ZYB5nJGFtQsycawhr1V1trwYvMXMju48/s640/blogger-image--865966619.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6BG2kU2pwtjB3gPBBsLq2zmM4MYSqvV61iVixV5kI2QrT67VkhXaT45VUT0VM8FCqg9OvQyWHy0L2xjYnRuXjk9exeFy0QoKE5sBbkXTeXh1ZYB5nJGFtQsycawhr1V1trwYvMXMju48/s400/blogger-image--865966619.jpg" width="300" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Two DVD found in E-waste</i></span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe7WEhN3V-oVb5zCmeDVIsPcVeK5YAaGHLSXjJIoOa_GjhlhKHFdFhgzi40gZrY2dxgpJwRfIPpR5AtnBAXxJbjhP__mw-CR3VQgYGD7Fzdh0Zua0Y4eccdRuXmfo4hyFBp-8639pyw4w/s640/blogger-image--1290820048.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe7WEhN3V-oVb5zCmeDVIsPcVeK5YAaGHLSXjJIoOa_GjhlhKHFdFhgzi40gZrY2dxgpJwRfIPpR5AtnBAXxJbjhP__mw-CR3VQgYGD7Fzdh0Zua0Y4eccdRuXmfo4hyFBp-8639pyw4w/s400/blogger-image--1290820048.jpg" width="300" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>They are rewritable</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small; font-weight: normal;"><span style="font-family: "helveticaneueui";"><span style="line-height: 19px; white-space: nowrap;">All you need from the DVD are</span></span></span><br />
<span style="font-size: small; font-weight: normal;"><span style="font-family: "helveticaneueui";"><span style="line-height: 19px; white-space: nowrap;">1. stepper motor with the slider (lower right part in </span></span></span></div>
<div>
<span style="font-size: small; font-weight: normal;"><span style="font-family: "helveticaneueui";"><span style="line-height: 19px; white-space: nowrap;">the picture below)</span></span></span></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIaTSLLCmF16_OlGnJh6LOs3GAPJ-wDtZOefrOC2mjnoXW_DrGch3ydpxKVpggrB-KLXNrlPC8qZOjZGuTKM29YZl3q62LVPiW0miGCt7XNR741dHoxfo_5lvzYK2AvqdF1oqYEql4uJE/s640/blogger-image-675544038.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIaTSLLCmF16_OlGnJh6LOs3GAPJ-wDtZOefrOC2mjnoXW_DrGch3ydpxKVpggrB-KLXNrlPC8qZOjZGuTKM29YZl3q62LVPiW0miGCt7XNR741dHoxfo_5lvzYK2AvqdF1oqYEql4uJE/s400/blogger-image-675544038.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>tearing down a DVD</i></span></td></tr>
</tbody></table>
</div>
<span style="font-size: small;"><br /></span>
<br />
<div>
<span style="font-size: small; line-height: 19px; white-space: nowrap;">2. Laser diodes (see picture below). Be very careful</span></div>
<div>
<span style="font-size: small; line-height: 19px; white-space: nowrap;"> that the laser diodes on the DVD are very fragile.</span></div>
<div>
<span style="font-size: small; line-height: 19px; white-space: nowrap;"> Make sure you don't break them. </span></div>
<br />
<span style="font-size: small;"><i>
</i></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ76LNUWfImiqW_1qwGXNQZpB-ckxlA0BB8rN1GhFwN7H6bX2WZf7wg5QS4aXQklA4F3IZFSlP1Wl5fpSo16mfpku6a1qkenWl5ex0TcWiRR6dCgp_mBX4x0Qufab_Yvnbvs7GTARf0iE/s640/blogger-image-1858542639.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ76LNUWfImiqW_1qwGXNQZpB-ckxlA0BB8rN1GhFwN7H6bX2WZf7wg5QS4aXQklA4F3IZFSlP1Wl5fpSo16mfpku6a1qkenWl5ex0TcWiRR6dCgp_mBX4x0Qufab_Yvnbvs7GTARf0iE/s400/blogger-image-1858542639.jpg" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Two 5.6mm laser <b><span style="background-color: rgba(255, 255, 255, 0); font-weight: normal;">diodes (infrared and 650nm red) </span></b></i></span><br />
<span style="font-size: small;"><i><b><span style="background-color: rgba(255, 255, 255, 0); font-weight: normal;">compared with a USB connector.</span></b></i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><i><br />
</i></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtqkigThW-b2KYP0gDqIkVRms9t1PeypnFVfgprgEWK8_ixLzoWonpdxcThoaKVHDsDIziBXVgtbGFN5YamuYe2vmI1URHHm-QYCd4JKFuxveQw6KvGM8zKSzxJBgqQb_C4pefdEO3Zs/s640/blogger-image-1710620668.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtqkigThW-b2KYP0gDqIkVRms9t1PeypnFVfgprgEWK8_ixLzoWonpdxcThoaKVHDsDIziBXVgtbGFN5YamuYe2vmI1URHHm-QYCd4JKFuxveQw6KvGM8zKSzxJBgqQb_C4pefdEO3Zs/s400/blogger-image-1710620668.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><b>
</b><i><span style="background-color: rgba(255 , 255 , 255 , 0); font-size: xx-small;">Stepper motor (right) and linear slider. </span></i></span><br />
<span style="font-size: small;"><i><span style="background-color: rgba(255 , 255 , 255 , 0); font-size: xx-small;">I soldered four wires on the stepper motor.</span></i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<br />
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">There are other good things you can salvage from the DVD drive and keep for future projects, such as a 9 V dc motor near the gate, a brushless motor that spins the DVDs, some shock reducers and some miniature lens and optic parts. You can also find four strong magnets near the laser diode. Don't throw them away. They will turn out to be useful later.</span></div>
<span style="font-size: small;"><br /></span>
<br />
<h3>
<span style="font-size: large;"><b>STEP 2: Assemble Laser</b></span></h3>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">Now you have two laser diodes. One is infrared which we don't need. The other one is 650nm red diode (usually has a letter 'R' on it) and is the one we need. The diode normally has three pins forming a fat triangle. One is NC. You need a multimeter to figure out which two pins are cathode and anode. The forward voltage across anode and cathode should be around 1.4V and the forward resistance should be 20-40k ohm. If the forward resistance is too high then the laser diode is over used. </span><br />
<span style="font-size: small;"><br /></span>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdk9Hjx5D1uJGwVcLmmeiN993v2CJen2yL5vx3v-Bc3xzTcxrRyPDjTaqv3tT-tPaKsCgXNjWdtaUcf4MNw9rGwlTN8WhakDapCHIBaIF6RgsrYTcNGLEaabzXmUhhBN6nd8A_VQUBX_M/s1600/untitled.bmp" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdk9Hjx5D1uJGwVcLmmeiN993v2CJen2yL5vx3v-Bc3xzTcxrRyPDjTaqv3tT-tPaKsCgXNjWdtaUcf4MNw9rGwlTN8WhakDapCHIBaIF6RgsrYTcNGLEaabzXmUhhBN6nd8A_VQUBX_M/s1600/untitled.bmp" width="317" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>The laser diode housing</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<span style="font-size: small;"><br /></span>
<br />
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFrBSjakAWKFfagr9NUd4fZYwvVTUA0mIpxnkhm8JfrryxbkY79FBuxSLnUyNlM0zNDClQfx-32XnO2vFbbnfzNTerUejD4EDGn-EPuzTndH6iy9yGMT3B-n3iexN7kFteSGhMNvu2vgo/s640/blogger-image--801909403.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFrBSjakAWKFfagr9NUd4fZYwvVTUA0mIpxnkhm8JfrryxbkY79FBuxSLnUyNlM0zNDClQfx-32XnO2vFbbnfzNTerUejD4EDGn-EPuzTndH6iy9yGMT3B-n3iexN7kFteSGhMNvu2vgo/s400/blogger-image--801909403.jpg" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Laser diode (middle left) and laser housing </i></span></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i><br /></i></span></td><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><br /></span></td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcindksFLaZTBoiNQYfZxIbIytm2mEDU_yH30sVvqZ7pLrNAkUDvFSzEnYGMhq68LB91SwaL7yzbqEq1oFZ35vHAqLRyIz7Vobf18e2Ao8VD1Obs8eA0LOtUwWwXP4WMyUUdCLc_eg93w/s640/blogger-image-1938372409.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcindksFLaZTBoiNQYfZxIbIytm2mEDU_yH30sVvqZ7pLrNAkUDvFSzEnYGMhq68LB91SwaL7yzbqEq1oFZ35vHAqLRyIz7Vobf18e2Ao8VD1Obs8eA0LOtUwWwXP4WMyUUdCLc_eg93w/s400/blogger-image-1938372409.jpg" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Pushing the diode into the housing head</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLrpcK8HnNrNR5E1cW0USIrYKKZb8-mlUT2dY86LXKhNzvp-B9KWbOj5oBnOOs-N6ln3y9aam4TK-MUvmElXL7HtgaNSpVd_3ACeAcu31LZ8c0AEYmiB9Fer1IF5QVEQ8KfNKiBiLSSM8/s400/blogger-image-400252594.jpg" style="margin-left: auto; margin-right: auto;" width="299" /></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Laser diode in the housing head</i></span></td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDOCWCyB3YlrPJ13vqlnWjkReQ827nydlAYthFzwT9EKBXa8YjcTGQ-C56p_YA8fCXR8l4H56jcapHtCnV3aJFCkg0S0ZIeTsiiapQlYB6GYxa2mB-sKkmU1nrVJoOiZnHjNUPSBksdpY/s640/blogger-image-482774664.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDOCWCyB3YlrPJ13vqlnWjkReQ827nydlAYthFzwT9EKBXa8YjcTGQ-C56p_YA8fCXR8l4H56jcapHtCnV3aJFCkg0S0ZIeTsiiapQlYB6GYxa2mB-sKkmU1nrVJoOiZnHjNUPSBksdpY/s400/blogger-image-482774664.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Solder two wires on the diode</i></span></td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3wqQGWqcp4bU4YANPUzVbRPVJC4x0SPGOLsamzFiqD6AiX6M7Ju5y9BE0frly5qd_NxKk4d1QKV90Tmp-KSfqKfKn8JEYiH-8WT8uFW12Hlt5Bkn941lBk1woCl-9eD_dCDQZMxWaAoU/s640/blogger-image-1314658176.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3wqQGWqcp4bU4YANPUzVbRPVJC4x0SPGOLsamzFiqD6AiX6M7Ju5y9BE0frly5qd_NxKk4d1QKV90Tmp-KSfqKfKn8JEYiH-8WT8uFW12Hlt5Bkn941lBk1woCl-9eD_dCDQZMxWaAoU/s400/blogger-image-1314658176.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Use some heat shrink to increase the strength</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAjUvpWIsKCyfIXhYj7nl4o5GPXRTljvSLgovkgrdBRinU_6ItuicIcuzGqn67ei0VBl5zx4Jt60GTm9-DoFC2hxmzLHjMzARvuU-4a7wh36DPsAG3RmViHRoBP18QKhyphenhyphen-2TiwK2SS1_g/s640/blogger-image-1947563989.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAjUvpWIsKCyfIXhYj7nl4o5GPXRTljvSLgovkgrdBRinU_6ItuicIcuzGqn67ei0VBl5zx4Jt60GTm9-DoFC2hxmzLHjMzARvuU-4a7wh36DPsAG3RmViHRoBP18QKhyphenhyphen-2TiwK2SS1_g/s400/blogger-image-1947563989.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Getting there</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi88dKOxinLslb3lfZU3KsLVUp2X1rVgsymB_lXRKmsWERQh41fvgJYKtu9-dsSwN3ChdNf-ZYUFly1ru_XvaYlI6FRduNsFhnJ8ySw0_VGSLr4D86BKS-4GfKkgpSgwby0je2kHg0gAcE/s640/blogger-image--227150302.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi88dKOxinLslb3lfZU3KsLVUp2X1rVgsymB_lXRKmsWERQh41fvgJYKtu9-dsSwN3ChdNf-ZYUFly1ru_XvaYlI6FRduNsFhnJ8ySw0_VGSLr4D86BKS-4GfKkgpSgwby0je2kHg0gAcE/s400/blogger-image--227150302.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Done!</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br />
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: xx-small;"> </span></span><br />
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">Carefully put the laser diode into the head of the laser housing. You can use the laser housing body to help knock against the diode and push the diode into the housing head. The diode should fit perfectly into the head. Make sure the pins are still fine. Then s</span><span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">older two wires to the electrodes and assemble the housing together.</span></div>
<h3>
<span style="font-size: small;">
<b> </b></span></h3>
<h3>
<span style="font-size: large;"><b>STEP 3</b>: LM317 Laser drive </span></h3>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">A laser diode is like a photodiode but equipped with a resonant cavity. Laser diode is a huge current sink. Once the diode conducts, it generates a lot of heat, and the heat further lowers the diode impedance. So it is a unstable positive feedback system. If you simply put a 1.5 V battery across the diode, you will either get the diode burn or battery drained right away. We need a laser driver that can output a constant current to the diode.</span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;"><br /></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">There are numerous way to do this. One of the most popular and least frustrating way is to use a DC current regulator. LM317 is a good choice. By adding a resister R across the adjust pin and output pin, LM317 can output a constant current of ~1.25V/R.</span><br />
<span style="font-size: small;"><br /></span>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">[In fact, LM317 is mostly used as a voltage regulator. It maintains a 1.25V across the output pin (pin 2) and the adj pin (pin 1). Meanwhile, it controls the current output from the adj pin to be very low (usually <100 uA). Therefore by adding a resistor R across pin 2 and 3, we can have 1.25V/R current output from pin 2 to pin 1. We then add the laser diode across pin 1 and GND. </span><span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">Since pin 1 is forbidden to sink current, all the 1.25V/R current outputted by pin 2 will flow through R and laser diode to GND. The official datasheet of LM317 can be download <a href="http://www.fairchildsemi.com/ds/LM/LM317.pdf" target="_blank">here .</a></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;"><br /></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">Here is a good LM317 laser drive circuit I found here <a href="http://www.rog8811.com/laserdriver.htm" target="_blank">LM317 Laser Driver</a></span><span style="font-size: small;"> (this link is already expired...)</span></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQFX7OpkT0tLHH9PvnjAC1XuSRAT9v7DBotGUqlwYfdFFDsTGt2Wu8LtW00quEM9q11_N3IwhP5J-EGo2TVFaX0PCNJxosGMkk1YHxq79yOEwTbPfCcxQM-pRfM_ww5YSajOKOhhq8-Hc/s1600/DRIVER+FOR+250ma+OUT.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQFX7OpkT0tLHH9PvnjAC1XuSRAT9v7DBotGUqlwYfdFFDsTGt2Wu8LtW00quEM9q11_N3IwhP5J-EGo2TVFaX0PCNJxosGMkk1YHxq79yOEwTbPfCcxQM-pRfM_ww5YSajOKOhhq8-Hc/s1600/DRIVER+FOR+250ma+OUT.jpg" width="640" /></a></span></div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"> In my case, I replace the two parallel 10 ohm resistors by two .5 Watt 12 ohm resistors. The max current I am going to run through the diode is 200mA.</span></div>
<div>
<span style="font-size: small;">Make sure you don't mess up the adjust pin and the output pin. A heat sink would be necessary on the LM317.</span></div>
<div>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">You also need a switch that can be controlled by RPi. I used a power NPN E3055 transistor. You can choose what every you want, just make sure that the transistor can support continuous CE current >300mA and also put a heat sink on it.</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSgnuZ7xJ7OCHdlUKDSaJdn-fhhLfBH0Oq-O899M7NoYBAT_I4XiAkP_wj7_nVgXny5Fjm22noEGF1eRQOGF3f894jycfxl8qGyLEEIizC_8EjRRM5wU1qF0-bpBwpJDEPYl5tg-G0HVo/s1600/laser_driver.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSgnuZ7xJ7OCHdlUKDSaJdn-fhhLfBH0Oq-O899M7NoYBAT_I4XiAkP_wj7_nVgXny5Fjm22noEGF1eRQOGF3f894jycfxl8qGyLEEIizC_8EjRRM5wU1qF0-bpBwpJDEPYl5tg-G0HVo/s1600/laser_driver.png" width="640" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Schematics of the laser driver and the switch. Laser is on only when "Laser switch" port is logic high (>3V). Make sure you don't mess up the pin order of LM317</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span></div>
<h2>
</h2>
<h2>
<b><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGPZTKG_gE8pP1F8jTxfoxTHHNCZXFhoAjesHeCKzy4ImviXFhwRAPelcs7cFmImuVOW04rIojDRbG2NArpuBNGBZtmxbam0-xmNk-uTNVF9BQwlCmJcrPKCsOiEz78Q7HQhtcOYCP7Fk/s640/blogger-image--1341492090.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGPZTKG_gE8pP1F8jTxfoxTHHNCZXFhoAjesHeCKzy4ImviXFhwRAPelcs7cFmImuVOW04rIojDRbG2NArpuBNGBZtmxbam0-xmNk-uTNVF9BQwlCmJcrPKCsOiEz78Q7HQhtcOYCP7Fk/s400/blogger-image--1341492090.jpg" width="299" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>LM317 Laser driver<b><br /></b></i></td></tr>
</tbody></table>
</b><b><br /></b></h2>
<h2>
<b><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF4rJiRPN6ATB4gNPXJ2P9fbhanFdY2DmySAE55zQUGeZxFxSOKYfzoJKLkQSw4sGkrZXdPOB3bO7YIbxnyMyESKpgGZwyzumvRfw4lqciyMo4M9EqsAq-6ea60sh37Ezz7SO43FHqKUE/s640/blogger-image--482078108.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF4rJiRPN6ATB4gNPXJ2P9fbhanFdY2DmySAE55zQUGeZxFxSOKYfzoJKLkQSw4sGkrZXdPOB3bO7YIbxnyMyESKpgGZwyzumvRfw4lqciyMo4M9EqsAq-6ea60sh37Ezz7SO43FHqKUE/s400/blogger-image--482078108.jpg" width="299" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Laser driver (top) and the E3055 power NPN (bottom)</i><b><br /></b></td></tr>
</tbody></table>
</b></h2>
<h2>
</h2>
<h2>
</h2>
<span style="font-size: small;">Laser diodes are very delicate device. They are extremely vulnerable to the condition applied on them. Unstable voltage or current, excessive current/voltage (even for very very short time) could damage them permanently. So <b>always discharge yourself before holding the diode, and always use a constant current driver to power it</b>. As pointed out by one of the reader (thank you, J super), you might also damage the diode by connecting the driver to power supply first and then connecting the diode to the driver. The diode should always be connected to the driver before applying any power to it.<b><br /></b></span><br />
<h2>
</h2>
<h3>
<span style="font-size: small;">
<b> </b></span></h3>
<h3>
<span style="font-size: large;"><b>STEP 4</b>: Assemble the machine</span></h3>
<span style="font-size: small; font-weight: normal;"><span style="background-color: rgba(255, 255, 255, 0);">Now you have two identical linear stages and it is time to put them together! There are a lot of ways to do this. For 2 axes CNC machine, I think the best way is the one given by <a href="http://www.instructables.com/id/Pocket-laser-engraver/" target="_blank">Groover @ instructable</a>. In </span></span><span style="font-size: small; font-weight: normal;"><span style="background-color: rgba(255, 255, 255, 0);"><span style="font-weight: normal;"><span style="background-color: rgba(255, 255, 255, 0);">Groover's </span></span>configuration, the engraving sample is attached to x-axis so it only moves in x direction. The laser is attached to y axis so it only moves in y direction. This configuration minimizes the weight on each of the axes.</span></span><br />
<div>
<span style="font-size: small;"><br /></span>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs7iaCk2EXyHz0uK0Yj2TqdksMdR9D11ppbDdZXTLVu4zMhiW_rIhEiGX7Ip2Z4QtHdGvuTHEFm4sWzvjS8u7kDOEMzHzH0KgsWUvVNVZzZpyg5sRj-JGnRLwYothUyoERTuhVOKuo0Wo/s640/blogger-image-1694152089.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs7iaCk2EXyHz0uK0Yj2TqdksMdR9D11ppbDdZXTLVu4zMhiW_rIhEiGX7Ip2Z4QtHdGvuTHEFm4sWzvjS8u7kDOEMzHzH0KgsWUvVNVZzZpyg5sRj-JGnRLwYothUyoERTuhVOKuo0Wo/s400/blogger-image-1694152089.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Laser engraver I made</i></span></td></tr>
</tbody></table>
<div class="separator" style="clear: both;">
<span style="font-size: small;"><br /></span></div>
<div class="separator" style="clear: both;">
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">I cut a 2"x2" steel board out of the DVD case and glued it to the x-axis stage as the sample support base. Since the DVD case is made from iron, you can use the strong magnets salvaged from the laser optical system to help you stabilize the engraving sample on the base.</span></div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;"><br /></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">The laser diode will generate a lot of heat . And it is important to dissipate this heat. Otherwise the diode will die fast. I cut a 1inch cube heat sink from an old computer CPU heat sink and drilled a hole though it. The hole is perfectly large to hold the laser. I glue the heat sink on the y axis stages.</span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;"><br /></span></div>
<div>
<span style="background-color: rgba(255 , 255 , 255 , 0); font-size: small;">The most important issue is the x axis, y axis and body of laser have to be perpendicular to each other.</span></div>
<h3>
<span style="font-size: small;">
</span></h3>
<h3>
<span style="font-size: large;">STEP 5: Connect H-Bridge to the stepper motors</span></h3>
<div>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhJkvnyoOgdbPBPc344z3yBtY0uWVdBbIE4oSIfvQuOix6Swi5rKezRIMpp_V2ejEw0T4P4TImB4yLgydx6ZctqpGAguxjL6WrBIrOBLUUMX13qUg9K3aJxgl6ZfCYYpT75qJLm1izOfY/s640/blogger-image-975699712.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhJkvnyoOgdbPBPc344z3yBtY0uWVdBbIE4oSIfvQuOix6Swi5rKezRIMpp_V2ejEw0T4P4TImB4yLgydx6ZctqpGAguxjL6WrBIrOBLUUMX13qUg9K3aJxgl6ZfCYYpT75qJLm1izOfY/s640/blogger-image-975699712.jpg" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Four connect pins on a 4-wire-2-phase stepper motor. They are usually arranged in the following order: a1,a2,b1,b2. (a1 and a2 are the two leads of coil a; b1 and b2 are the two leads of coil b). Using a multimeter will help to verify this. </i></span></td></tr>
</tbody></table>
<div>
<span style="font-size: small;"><br /></span></div>
<span style="font-size: small;">The stepper motor in DVD is a 4-wire 2-phase bipolar motor. There are two independent coils inside. Each coil has a 10 Ohm resistance. Usually the DVD stepper motors are rated at 5V. Therefor the rated current through each coil is 500mA! The RPi GPIO pins can only output less than 20mA so RPi cannot control a stepper directly. H bridges are required.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Here is a very good tutorial on Bipolar stepper motor <a href="http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm" target="_blank">Bipolar Tutorial</a></span></div>
<div>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><img alt="" src="data:image/png;base64,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" style="margin-left: auto; margin-right: auto;" /></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Conceptual model of 4-wire 2-phase stepper motors, from </i><i><a href="http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm" target="_blank">Bipolar Tutorial</a>.I renamed the pins</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>It looks like I am using different names for pins of stepper motor. In writeups by most people, they define coil 1 and coil 2 and name 1a, 1b as the two leads of coil 1, and 2a, 2b as the two leads of coil 2. It doesn't matter, as long as we know what we are doing. At least in this post I will keep the terminology thing consistent.</b></span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">The central spinner of the bipolar stepper motor can be regarded as a bar magnet (actually it is circular). Obviously from the figure above that if we successively conduct current in coil a1, b2, a2 and b1, the spinner will spin in the desired sequence. To do this, we can apply a voltage sequence to a1, b2, a2, b1 as:1) high, low, low, low. So only a1 and a2 are activated. Since a1 a2 have same polarity (or opposite depending on how you define it), the spinner is pointing to a1</span><br />
<span style="font-size: small;">2)low, high, low, low. So only b2 and b1 are activated. Spinner is pointing to b2</span><br />
<span style="font-size: small;">3)low, low, high, low. So only a2 and a2 are activated. Spinner points to a2</span><br />
<span style="font-size: small;">4)low, low, low, high. Spinner points to b1.</span><br />
<span style="font-size: small;">go to 1).</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Denote high as 1 and low as 0. The sequence can be written as 1000,0100,0010,0001</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">The advantage of this configuration is that it is very easy to understand and usually the stepper motor moves very precisely. However, since in each step only one pair of coils is activated, the torque applied on the spinner is not very great.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">To achieve high torque, a more popular way is to apply the following sequence: 1100,0110,0011,1001. And the spinner will be pointing to middle of a1 and b2, middle of b2 and a2, middle of a2 and b1, middle of b1 and a1 consequentially. And the torque is doubled. This is called full-step mode or high torque mode or two phase mode.. and is usually the mode used.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">If the torque won't be a problem then we can use a 8-step sequence: 1000,1100,0100,0110,0010,0011,0001,1001. The spinner will turn 8 steps instead of 4 steps to turn same angle. This doubles the resolution. And the cost is the non-uniform torque being applied on the stepper motor. This is called half-step mode.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Usually for DVDs, the linear sliders moves about 0.15mm every full step stepper motor turn, corresponding to a resolution of ~170dpi. Good enough for home-made projects. If 8-step mode is implemented, then the resolution is 0.075mm/step or 340dp, similar to regular printer.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">For laser engraver, there isn't any serious load on the stepper motor so I choose the half-step mode or 8-step mode.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">As mentioned, RPi cannot drive the stepper motor directly because of the current limit. Actually, besides powering low power LEDs, the GPIO pins of a RPi usually serves as logic switches. In output mode, they are either logical High (3V) or logic low (<0.7V). A H bridges is a "translator" that translates these logic High or Low into power source that has high voltage or low voltage.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><img alt="File:H bridge.svg" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/H_bridge.svg/461px-H_bridge.svg.png" height="195" style="margin-left: auto; margin-right: auto;" width="320" /></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>A conceptual schematics of H bridge (from wiki)</i></span></td></tr>
</tbody></table>
<span style="font-family: inherit; font-size: small;">Above is a conceptual schematic graph of H bridge (has similar shape with letter "H"). One H bridge has two working mode: (S1 S4 close, S2 S3 open) and (S2 S3 open, S1 S4 close). In the first mode, current flows rightwards through the motor and in the second mode, current flows leftwards through the motor. In reality, this H bridge is never used. A common way is to use transistor as electric switches. See figure below.</span></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD2mjHq1xQwtuHCym0XQJmgJzfPg8nXqRXPNrAvM7NdxQWmeDOl8CMCUtnTLMFaKktwTHoMvaot1Ji70zgHw0ZbYZNIgwWRdEmoLUxVwntCvbvxdh3T2BDmmpN4-h-W97c-681_C_U968/s1600/Hbridge.bmp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD2mjHq1xQwtuHCym0XQJmgJzfPg8nXqRXPNrAvM7NdxQWmeDOl8CMCUtnTLMFaKktwTHoMvaot1Ji70zgHw0ZbYZNIgwWRdEmoLUxVwntCvbvxdh3T2BDmmpN4-h-W97c-681_C_U968/s1600/Hbridge.bmp" width="320" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>A <u><b>very very</b> </u>simplified conceptual schematics of NPN PNP H bridges. <b>NEVER build an H bridge based on this graph, because</b> You will probably burn the transistors or even the Pi. A practical H bridge requires current limiting resistors, reverse diodes and logic TTL chips. Please consult more from other sources if you would like to build a working H bridge from scratch.</i></span></td></tr>
</tbody></table>
</div>
<div>
<span style="font-size: small;">When A is logic low (0V) and B is logic high(+V), then transistor 1 and 4 are conducting while 2 and 3 are open; when A is logic high (+V) and B is logic low (0V), then transistor 1 and 4 are oepn while 2 and 3 are conducting. When both A and B are logic high, 2 and 4 are conducting, 1 and 3 are open, the motor stalls; when both A and B are low, 1 and 3 are conducting, 2 and 4 are open, the motor stalls.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Therefore by setting A and B high or low, we can control the current direction through a load. For each 4 wire 2 phase stepper motor, there are two independent coils we need to control. So a total of 4 H bridges are required to control the two stepper motors.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">There are a lot of integrated H bridge available on the market. For my case, I need 500mA through each H bridge so L9110S suffices (L9110S can afford 800mA through each H bridge). Each L9110S contains two H bridge so two of them are enough. There are L9110S modules for <$2 each on the market. Very convenient!</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">I am not exactly sure but I think sometimes people call it L9110 sometimes L9110S.. Datasheet can be found <a href="http://nvhs.files.wordpress.com/2013/02/datasheet-l9110.pdf" target="_blank">here</a>.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Also, L9110S has internal clamp diodes to conduct the reverse current generated by the sudden stop of the stepper motors. This protects the circuit. L9110S is TTL/CMOS output level compatible so it can be directly connected to RPi.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU-1_PQ7U9uWU1M-uVqqWpQPNSB0MuszL0UpetLKkm6sOKW3WRasgBmk-Hm71X3umt3TyR3JftOaQ8eUQdegwhYZ6qpqH0eHOFFDzB4QOooa07y2Y5ZPh3JajUhyyRBEBQfunFvtS7ql4/s640/blogger-image--1562055245.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU-1_PQ7U9uWU1M-uVqqWpQPNSB0MuszL0UpetLKkm6sOKW3WRasgBmk-Hm71X3umt3TyR3JftOaQ8eUQdegwhYZ6qpqH0eHOFFDzB4QOooa07y2Y5ZPh3JajUhyyRBEBQfunFvtS7ql4/s400/blogger-image--1562055245.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Two L9110 dual H bridges (also known as </i><i>HG7881). Each is 0.8 in by 1 in.</i></span><br />
<span style="font-size: small;"><i>Each dual-bridges controls a stepper motors. On the right hand side, there are a1, a2, b1, b2 connectors to the stepper motors (top to bottom). On the left hand side, there are logic control pins for a1, a2, b1, b2 (actually they are named as A-IA, A-IB, B-IA, B-IB) and VCC and GND.</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHMjyFJsaGEEWLfMioeMGMw0Zfgan60GJXZHLqAsvuAxgq8KWAbJ7S61qtP1RyM8Igs7ix1O7M9Qn9P-8ROsdpkxNfj_mNHMdaYZNZXEa3DwPsmF5BPOWEOfyVOcaTV5zRm0UNT0umQic/s640/blogger-image--492549739.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHMjyFJsaGEEWLfMioeMGMw0Zfgan60GJXZHLqAsvuAxgq8KWAbJ7S61qtP1RyM8Igs7ix1O7M9Qn9P-8ROsdpkxNfj_mNHMdaYZNZXEa3DwPsmF5BPOWEOfyVOcaTV5zRm0UNT0umQic/s400/blogger-image--492549739.jpg" width="299" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>When powered, the chips light up (The big circular thing is my ring. I don't have fat fingers..)</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span></div>
<h3>
<span style="font-size: small;">
<span style="font-size: large;">STEP 6: Controlling the machine using Raspberry Pi</span></span></h3>
<span style="font-size: small;">Now this is the key part. Because I am not using external stepper motor drivers so I have to incorporate the function of external stepper drivers in software. I choose python to do the job.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">People say that RPi is not a real time device because it has an entire OS on it and python is very slow. However, in my case, these issues didn't cause any trouble.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">The python code I wrote includes the following functions:</span><br />
<span style="font-size: small;">1. An <span class="st">encapsulated</span> bipolar stepper motor class. It enclosed information like phase and position. It has a .move(direction, steps) build-in function that converts movement commands into a sequence of GPIO.output() commands that spins the stepper motors. </span><br />
<span style="font-size: small;">2. A G code interpreter: read G code and send the corresponding commands to the bipolar stepper motor objects. For G02 and G03 commands (circular interpolation), the interpreter performs the interpolation and converts the commands into a sequence of straight motions.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">The most challenging part is how to control more than one stepper motor simultaneously. The idea is actually very simple and can be extended to any number of motors. We already know how to control one motor. Now suppose we have two motors: MX and MY, and we want to turn MX 12 steps and MY 15 steps simultaneously in 6 seconds. First find the least common multiplier (LCM) of 12 and 15, which is 60. Now divide 6 seconds by 60 we get dt=0.1sec. Set 60 loops. Before the end of each loop, we use time.sleep(0.1) commands. So it takes 6 sec to finish the loop. And we move MX one step every 5 loops and move MY one step every 4 loops. After 60 loops, MX moves 60/5=12 steps and MY moves 60/4=15 steps. And both MX and MY moved at constant speeds. </span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><a href="tel:0000100001" x-apple-data-detectors-result="6" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a><a href="tel:0000100001" x-apple-data-detectors-result="6" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a> <a href="tel:0000100001" x-apple-data-detectors-result="7" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a><a href="tel:0000100001" x-apple-data-detectors-result="7" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a> <a href="tel:0000100001" x-apple-data-detectors-result="8" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a><a href="tel:0000100001" x-apple-data-detectors-result="8" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a> <a href="tel:0000100001" x-apple-data-detectors-result="9" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a><a href="tel:0000100001" x-apple-data-detectors-result="9" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a> <a href="tel:0000100001" x-apple-data-detectors-result="10" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a><a href="tel:0000100001" x-apple-data-detectors-result="10" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a> <a href="tel:0000100001" x-apple-data-detectors-result="11" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a><a href="tel:0000100001" x-apple-data-detectors-result="11" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00001</a> (60 digits, 12 ones)</span><br />
<span style="font-size: small;"><a href="tel:0001000100" x-apple-data-detectors-result="12" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0001000100" x-apple-data-detectors-result="12" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0001000100" x-apple-data-detectors-result="12" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00</a> <a href="tel:0100010001" x-apple-data-detectors-result="13" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">01</a><a href="tel:0100010001" x-apple-data-detectors-result="13" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0100010001" x-apple-data-detectors-result="13" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a> <a href="tel:0001000100" x-apple-data-detectors-result="14" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0001000100" x-apple-data-detectors-result="14" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0001000100" x-apple-data-detectors-result="14" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00</a> <a href="tel:0100010001" x-apple-data-detectors-result="15" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">01</a><a href="tel:0100010001" x-apple-data-detectors-result="15" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0100010001" x-apple-data-detectors-result="15" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a> <a href="tel:0001000100" x-apple-data-detectors-result="16" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0001000100" x-apple-data-detectors-result="16" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0001000100" x-apple-data-detectors-result="16" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">00</a> <a href="tel:0100010001" x-apple-data-detectors-result="17" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">01</a><a href="tel:0100010001" x-apple-data-detectors-result="17" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a><a href="tel:0100010001" x-apple-data-detectors-result="17" x-apple-data-detectors-type="telephone" x-apple-data-detectors="true">0001</a> (60 digits, 15 ones)</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">For more than two stepper motors, just find the LCM of all the steps (ignore 0).</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: large;"><b>I uploaded the code to sourceforge in 2013 however it's no longer available there. I recently upload the code to GitHub so it is easier to download via different platform.</b></span><br />
<span style="font-size: large;"><b><br /></b></span>
<span style="font-size: large;"><b>The GitHub URL is</b></span><br />
<span style="font-size: large;"><a href="https://github.com/zxzhaixiang/Laser_engraver_system_RaspberryPI.git"><b>https://github.com/zxzhaixiang/Laser_engraver_system_RaspberryPI.git</b></a></span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">You can find three python codes:</span><br />
<span style="font-size: small;"><br /></span>
<br />
<h2 class="title">
<span style="color: #c35817; font-size: small;">Project: raspberrypi-cnc-laser-engraver</span></h2>
<table align="center" border="0" cellpadding="5" cellspacing="10" class="mytable" style="width: 100%px;"><thead>
<tr>
<th><span style="font-size: small;">Code</span></th><th><span style="font-size: small;">Uploaded by</span></th><th><span style="font-size: small;">Date</span></th><th><span style="font-size: small;">Language</span></th></tr>
</thead>
<tbody>
<tr style="background-color: #cccccc;">
<td><span style="font-size: small;"><b>Bipolar_Stepper_Motor_Class.py</b></span></td><td><span style="font-size: small;">Xiang Zhai</span></td><td></td><td><span style="font-size: small;">python</span></td></tr>
<tr>
<td><span style="font-size: small;"><b>Motor_control.py</b></span></td><td><span style="font-size: small;">Xiang Zhai</span></td><td></td><td><span style="font-size: small;">python</span></td></tr>
<tr style="background-color: #cccccc;">
<td><span style="font-size: small;"><b>Gcode_executer.py</b></span></td><td><span style="font-size: small;">Xiang Zhai</span></td><td></td><td><span style="font-size: small;">python</span></td></tr>
</tbody></table>
<table align="center" border="0" cellpadding="5" cellspacing="10" class="mytable" style="width: 100%px;"><tbody>
<tr><td><table align="center" border="0" cellpadding="5" cellspacing="10" class="mytable" style="width: 100%px;"><tbody>
<tr><td><span style="font-size: small;"><b>spiral.nc</b></span></td><td><span style="font-size: small;">Xiang Zhai</span></td><td></td><td><span style="font-size: small;">g-code</span></td></tr>
<tr style="background-color: #cccccc;">
<td><span style="font-size: small;"><b>grid.nc</b></span></td><td><span style="font-size: small;">Xiang Zhai</span></td><td></td><td><span style="font-size: small;">g-code</span></td></tr>
</tbody></table>
</td><td><span style="font-size: small;"><br /></span></td><td><span style="font-size: small;"><br /></span></td><td><span style="font-size: small;"><br /></span></td></tr>
</tbody></table>
<span style="font-size: small;">and many other g-code examples.</span><br />
<span style="font-size: small;"><br /></span>
<span style="color: purple; font-size: small;"><b><b>Bipolar_Stepper_Motor_Class.py</b> </b></span><span style="font-size: small;">defines the Bipolar_Stepper_Motor class. By default, line 5 is commented and line 7 is valid. This corresponds to a 8-step half-angle sequence. If maximum torque is desired, you can comment line 7 and uncomment line 5 to select 4-step full-angle sequence.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>Motor_control.py</b> defines a set of functions such as LCM (for calculating the lcm of two integers) and Motor_Step (for controlling two motors simultaneously). Usually you don't need to modify anything.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>Gcode_executer.py</b></span><br />
<span style="font-size: small;">This is the main program. You need to modify line 25 (G code file name), line 29 (pin numbers for stepper motor X), line 31 (pin numbers for stepper motor Y), line 32 (pin number for laser switch), line 35, 36 (resolution of the machine in unit of mm/step) and line 38 (engraving speed). The code read and interpret G code, and send corresponding commands to the motor control functions.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>spiral.nc</b></span><br />
<span style="font-size: small;">This is a simple G code which plots a small spiral. It can perfectly test whether the machine can process G code, especially the circular interpolation G02 and G03, correctly.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><b>grid.nc</b></span><br />
<span style="font-size: small;">A simple G code which plots several straight lines to make a grid. Perfect code to test the machine and make a coordinate system!</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Currently the Gcdoe_executer.py only accepts limited number of G commands: G90, G20, G21, M05, M03, M02, G01, G02, G03.</span><br />
<span style="font-size: small;">The code can recognize G1F commands (engraving speed) but simply ignore it. Engraving speed is set by line 38 in unit of mm/sec.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">As mentioned at the beginning of this post, D. Miller made some improvement to my code so that the code can work along with the inkscape <a href="http://www.cnc-club.ru/forum/viewtopic.php?t=35" target="_blank">GCodeTools </a>extension and allow remote engraving via another small python script he wrote. The modified version can be downloaded here <a href="https://github.com/iandouglas96/engravR">https://github.com/iandouglas96/engravR</a></span><br />
<h3>
<span style="font-size: small;">
<span style="font-size: large;"> </span></span></h3>
<h3>
<span style="font-size: small;"><span style="font-size: large;">STEP 7: Engraving!</span></span></h3>
<span style="font-size: small;">Following Groover (<a href="http://www.instructables.com/id/Pocket-laser-engraver/" target="_blank">by Groover in instructable</a>), I use Inkscape to make G code. <a href="http://inkscape.org/en/" target="_blank">Inkscape </a>is an open-source vector graphics editor and support various OS (windows, linux, Mac), which means that you should be able to install it on Raspbian! I didn't try that. I simply use my laptop and send my design to the RPi.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">You need a laser engraving extension to convert vector graph into G codes. There are several different G code extension. The one I use can be downloaded here <a href="http://www.slackersdelight.com/instructables/laserengraver.zip" target="_blank">Inkscape-Laser-Engraver-Extension</a></span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">[Note: I wrote my python G code interpreter based on the G code generated by this Inkscape extension. So the code can only deal with limited numbers of G commands, sufficient for laser engraving though, fortunately. For G codes given by other generator, my codes might not be able to handle all the commands. You might have to modify the python code on your own.]</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Here is the step-by-step instruction on how to generate G code that my python code can process.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<h4>
<span style="font-size: small;">
Step 7-1: Install Inkscape and Inkscape-Laser-Engraver-Extension</span></h4>
<span style="font-size: small;">Inkscape can be freely download here http://inkscape.org/en/</span><br />
<span style="font-size: small;">It runs on windows, mac and various linux OS. </span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Then download <a href="http://www.slackersdelight.com/instructables/laserengraver.zip" target="_blank">Inkscape-Laser-Engraver-Extension</a> here.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">To install the extension, simply unzip the file and copy everything into the Inkscape installation folder. For example, in Windows 7, if Inkscape is installed under</span><br />
<span style="font-size: small;">C:\Program Files\Inkscape</span><br />
<span style="font-size: small;">, then just copy everything from Inkscape-Laser-Engraver-Extension to C:\Program Files\Inkscape\share\extensions</span><br />
<span style="font-size: small;">and then restart Inkscape, the extension should be already installed. To verify this, run Inkscape and check for "Laser Engraver" item under "Extension" on the manu bar.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAmkXDX1MXvBmhocdYePRSpZT5kNzG4hHwEL2-CetBIcEpCOoQjvZ7VzLzpANa66JAREC8BYdQVxzGTqSf98vdVfBAsefwbrIN35n45XQUj3Y5yafe5khaUnGxYkWzPyeUCDDgvKMtepM/s1600/extension.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="460" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAmkXDX1MXvBmhocdYePRSpZT5kNzG4hHwEL2-CetBIcEpCOoQjvZ7VzLzpANa66JAREC8BYdQVxzGTqSf98vdVfBAsefwbrIN35n45XQUj3Y5yafe5khaUnGxYkWzPyeUCDDgvKMtepM/s1600/extension.png" width="640" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>The Laserengraver extension is successfully installed</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Note: <b>Some people report that the Laserengraver extension does not work in Inkscape of the latest version. If that happens to you, use Inkscape 0.48. The windows installer can be found at the bottom of <a href="https://inkscape.org/en/download/windows/" target="_blank">this page.</a></b></span><br />
<h4>
<span style="font-size: small;">
Step 7-2: change page size</span></h4>
<span style="font-size: small;">Open Inkscape, goes to "File" => "Document properties" => "Page", under the "Custom Size" box, change the "Units" to "mm" (millimeter) and then put 36 and 36 in both "Width" and "Height". Then close the dialog.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">You will see the blank page becomes a small square box. Zoom into that box.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<h4>
<span style="font-size: small;">
Step 7-3: plot, text, create, a lot of fun~</span></h4>
<span style="font-size: small;">You can type texts, plot graphs, or even paste png/bmp in the box.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Press "Ctrl" and "A" to select everything plotted, under "Path", click "Object to Path". Or simply press "Shift" + "Ctrl" +"C". This steps is required if you have text or other external objects.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitoJ-qYhlROZrTx5CpSoh0rHU8_O4iI2iKXQazMht1mdMofjJf8cQkRMscxJXxcZfUuqlSjpmzwsbD-QoPZkStSXsFpice34BmUcMPT_Z7e2QPbUbjZWyuzmNUA9LdCheVATgyyHxjd0M/s1600/object_to_path.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitoJ-qYhlROZrTx5CpSoh0rHU8_O4iI2iKXQazMht1mdMofjJf8cQkRMscxJXxcZfUuqlSjpmzwsbD-QoPZkStSXsFpice34BmUcMPT_Z7e2QPbUbjZWyuzmNUA9LdCheVATgyyHxjd0M/s1600/object_to_path.png" width="640" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Convert objects to path</i></span></td></tr>
</tbody></table>
<h4>
<span style="font-size: small;">
Step 7-4: Generate G code</span></h4>
<span style="font-size: small;">Goes to "Extensions" => "Laserengraver" and click "Laser...". A dialog box will jump up. You can select "Directory", "Unites" and modify other preference under "Preference". Under "Laser", type the file name (should appended by .nc extension). Then click "Apply".</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTr9GwZ5fsVoAC7WGEPuRWc5KhDGWDNYjqnyL-2aIEqWqlQveV7KtIkOML8sIq4p9Pg8_aZOT78N6Y2NCAULPYhjuyfionC6KNYdgoTRnvOkAafKfZHWY42gTTzbRFmTkBlS7YMTnYUCY/s1600/path_to_nc.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTr9GwZ5fsVoAC7WGEPuRWc5KhDGWDNYjqnyL-2aIEqWqlQveV7KtIkOML8sIq4p9Pg8_aZOT78N6Y2NCAULPYhjuyfionC6KNYdgoTRnvOkAafKfZHWY42gTTzbRFmTkBlS7YMTnYUCY/s1600/path_to_nc.png" width="640" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>Convert the object to G code</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">A dialog box will say "laser working, please wait..".</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">If "Draw additional graphics to debug engraving path" is checked under "Preferences" before clicking "Apply", Inkscape will plot a lot of arrows on top of the plot, showing the moves given by the generated G code.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitas0wpU72RLyb7nEypvF_4okoH-h9YbC6-Njwhyphenhyphen4HqY9iZHx519sYNYaIYJvTYuI40ZpmkEhnpvnKvQMIkmFmITIHPmwYUkvP65UsRQ8i9fCch4eg2Lm-sp4mzeuXcIExWK4yV3xW8Js/s1600/g_cde.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitas0wpU72RLyb7nEypvF_4okoH-h9YbC6-Njwhyphenhyphen4HqY9iZHx519sYNYaIYJvTYuI40ZpmkEhnpvnKvQMIkmFmITIHPmwYUkvP65UsRQ8i9fCch4eg2Lm-sp4mzeuXcIExWK4yV3xW8Js/s1600/g_cde.png" width="640" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small;"><i>G code is successfully generated! A lot of arrows.</i></span></td></tr>
</tbody></table>
<span style="font-size: small;"><br /></span>
<br />
<h4>
<span style="font-size: small;">
Step 7-5: Pass the G code to RPi</span></h4>
<span style="font-size: small;">If you use a laptop/desktop to generate the G code, then you have to pass the G code to RPi using ssh or other tools. The G code should be placed under the same folder together with the python routines.</span><br />
<span style="font-size: small;"><br /></span>
<br />
<h4>
<span style="font-size: small;">
Step 7-6: Make necessary modification to the python code and then engrave!</span></h4>
<span style="font-size: small;">At least you want to change the G code file name in <a href="http://hostcode.sourceforge.net/view/1086"><b>Gcode_executer.py</b></a> (line 25). Some other changes, say, pin numbers (line 29, 31, 32), resolution (line 35, 36), engraving speed (38), can be changed if you understand them.</span><br />
<span style="font-size: small;"><br /></span>
<span style="font-size: small;">Type "sudo python Gcode_executer.py" in terminal to run the python routines and have fun!</span><br />
<span style="font-size: small;"><br /></span></div>
Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com15tag:blogger.com,1999:blog-7893783482093846455.post-45077549630280505622013-10-16T16:50:00.000-07:002015-02-25T08:51:11.611-08:00As a DIYerBesides making lightening everyday in a scientific institute for fundamental research, I enjoy a life of being creative.<br />
<br />
Do-It-Yourself is a fabulous idea. People usually don't realize that there are tons of stuff you don't have to buy, or even you can't buy one from the market. From upgrading a desktop to making a personalized robot, there are plenty of things that you can do simply by yourself (and maybe with some help found by Google). Most importantly, there is a lot of fun in DIY.<br />
<br />
Some projects I have already done are converting an old laptop into HTPC, function amplifier for home karaoke (my wife's favorite), parabola wifi antenna, and various projects involving using a Raspberry Pi (RPi) micro-computer such as self-navigation robot and CNC laser engraver.<br />
<br />
<br />
I am starting this blog today and hopefully I can find
enough time to maintain this site and keep uploading some of my DIY
projects. And hopefully I can use this blog to help myself keep track on the things I am doing.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg79odYKlA2qjzaXhgpSeOvxxOxKvOVkc5DaUOq4nZjQogu5rg56me6b0PG_P4pvdUZTsqt-LVG7jbggWlW7hWK4HTBpRJEIvykhfrRczbU_Q5WB8ZvLGUOSBujvz9xE-0xcaG9B00JiY8/s1600/vacuum.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg79odYKlA2qjzaXhgpSeOvxxOxKvOVkc5DaUOq4nZjQogu5rg56me6b0PG_P4pvdUZTsqt-LVG7jbggWlW7hWK4HTBpRJEIvykhfrRczbU_Q5WB8ZvLGUOSBujvz9xE-0xcaG9B00JiY8/s1600/vacuum.JPG" height="298" width="400" /></a></div>
Here is a little portable vacuum that can be powered by battery. The main part come from a very old server computer fan (a blower type). The blower fan is only 5W. The static pressure is 0.5in H2O, which is very low, but is good enough for sucking little dust on the ground. I am trying to mount it in a self-navigation car I built so the car will become a vacuum robot. Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com2tag:blogger.com,1999:blog-7893783482093846455.post-12055074044097075782013-10-16T13:22:00.000-07:002015-02-25T08:51:11.608-08:00Something about plasma..First here is something irrelevant to DIY.. <br />
<br />
Being an experimental plasma physicist, I spend most of my time on designing circuit board, making bolts and parts, building experimental facilities and diagnostics, and, of course, doing experiments by shorting 5000V across a filament of innocent neutral gas.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQLR_suScSFCDSlvJJDLTWggIrpxRRYvd6VgeuqmwWkVCTH28UdauDFSyvrsIA4cgnVZViGfIx94JIyXJBLv0m4jczGhWE-FT6WeZrMq0eV1eJKOFG3lgSrf3ItNyMIzeZaQClR-XgYrc/s1600/imacon15331_frame2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQLR_suScSFCDSlvJJDLTWggIrpxRRYvd6VgeuqmwWkVCTH28UdauDFSyvrsIA4cgnVZViGfIx94JIyXJBLv0m4jczGhWE-FT6WeZrMq0eV1eJKOFG3lgSrf3ItNyMIzeZaQClR-XgYrc/s320/imacon15331_frame2.bmp" width="320" /></a></div>
<div style="text-align: center;">
plasma jet at 8 microseconds after high voltage discharge</div>
<div style="text-align: center;">
<br /></div>
<br />
The transient power flows into the gas is >500MW, larger than the total power consumption of the entire Pasadena city. Fortunately the experiment only run for several microseconds (1sec=1 million microsecond) so we do spend huge amount of money on power. Within that several microseconds, the neutral gas is being broken down into charged gas (plasma). The temperature can be as high as 20000 Degree Celsius. Yes, we make lightening in lab. <br />
<br />Xiang Zhaihttp://www.blogger.com/profile/14762340071487543051noreply@blogger.com0