Commits

Luke Cyca committed 5645c09

G35 RF Remote

Comments (0)

Files changed (7)

root/2013/g35-rf-remote.html.mako

+<%!
+    __meta__ = {
+        'title': "G35 RF Remote",
+        'date': "2013-12-21",
+        'description': "Using the whole animal",
+        'time_spent': "8 hours",
+    }
+%>
+<%inherit file="/templates/article.mako"/>
+
+<div class="row">
+    <div class="col_12">
+        <h1>${meta.title}</h1>
+    </div>
+</div>
+<div class="row">
+    <div class="col_6">
+        <p>I bought two strings of the wonderfully hackable <a href="http://www.geholidaylighting.com/color-effects/us/">General Electric G35 Christmas Lights</a>. These strings each have fifty "bulbs" containing RGB LEDs and a microcontroller capable of responding to commands sent over a single data line. Each bulb is uniquely addressable and can be set to a 12-bit colour (plus an additional 8-bit brightness). Amazing.</p>
+        <p>The strings have a controller on one end that has a dozen canned sequences, and an RF remote control to advance between them and power the string on and off. Of course, the main reason to buy these lights is for the <a href="http://www.toddfun.com/2011/11/27/g35-led-christmas-light-review-and-teardown/">hacking opportunities</a>. You just splice the data line onto an Arduino pin and start programming. There is an <a href="https://github.com/sowbug/G35Arduino">excellent library</a> that makes it ridiculously easy, and an <a href="https://github.com/MarkEMarkEMark/G35-MEO-Programs">excellent fork</a> with the most tasteful Christmas light patterns you've ever seen.</p>
+
+        <h2>Using the Whole Animal</h2>
+        <p>After repurposing the lights, I was left with the controllers and nice little generic remotes. It turns out that the RF receiver for the remote is on its own tiny circuit board, and can easily be harvested from the controller. You could connect it to the Arduino and continue to use it to control your lights, or you can use it to add a remote control to any other project.</p>
+
+        <p>The only readable markings are <code>RGB-RX-RF 70-900020-03R REV07</code> and <code>SHX 13.573255</code>, so spec sheets I have not. <a href="http://www.deepdarc.com/2010/11/27/hacking-christmas-lights/">Robert Quattlebaum's blog</a> is the only place I found any mention of hacking the <i>remote</i> from the G35. I tried to implement a receiver based off his protocol analysis, but found that mine was a bit different. I guess there are multiple revision of this remote.</p>
+
+    </div>
+    <div class="col_6">
+        <img src="g35-rf-remote/IMG_0882.jpg">
+        <div class="col_3">
+            <img src="g35-rf-remote/IMG_0875.jpg">
+        </div>
+        <div class="col_3">
+            <img src="g35-rf-remote/IMG_0877.jpg">
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col_6">
+        <p>I had to yak-shave a logic analyzer by using an Arduino, <a href="https://github.com/gillham/logic_analyzer">this Arduino sketch</a>, and <a href="http://www.lxtreme.nl/ols/">this OLS client</a>. I've never used a logic analyzer before so this in and of itself was a revelation. Here's what I got:</p>
+
+    </div>
+</div>
+<div class="row">
+    <div class="col_12">
+        <img src="g35-rf-remote/trace.png">
+        <p class="muted">TOP: Remote control's TX pin; BOTTOM: Receiver's RX pin</p>
+    </div>
+</div>
+<div class="row">
+    <div class="col_6">
+        <h2>G35RF Arduino Library</h2>
+        <p>So from that trace, I made an Arduino library that you can drop into your project, and start taking commands from one of these remotes.</p>
+        <p><a href="https://github.com/lukecyca/G35RF/">Get it on Github</a>. I barely know what I'm doing with microcontroller interrupts so your feedback is, uh, welcome.</p>
+    </div>
+</div>

root/2013/g35-rf-remote/IMG_0875.jpg

Added
New image

root/2013/g35-rf-remote/IMG_0877.jpg

Added
New image

root/2013/g35-rf-remote/IMG_0882.jpg

Added
New image

root/2013/g35-rf-remote/trace.png

Added
New image

root/css/main.css

     background: rgba(0, 0, 0, 0.1);
     padding: 1em;
 }
+.muted {
+    color: rgba(0, 0, 0, 0.4);
+}
 .asimg {
     margin-bottom: 20px !important;
 }
     width: auto;
     height: 340px;
     background: black;
+    background-repeat: no-repeat;
+    background-size: cover;
 }
 #lead_article .title {
     display: inline-block;

root/index.html.mako

     '2008/algorithmic-mirror.html',
     '2008/tokyo-convention-centre.html',
     '2012/bkpr-studio-video.html',
+    '2012/piano-workbench.html',
     '2013/solari-sign.html',
     '2013/brain-books.html',
     '2013/pacific-rim-national-park.html',
-    '2013/stop-motion-with-ffmpeg.html',
     '2013/secret-chanterelle-spot.html',
     '2013/pickled-things.html',
 ]
 def filter_featured(articles):
     return [a for a in reversed(articles) if a['build_path'] in featured]
 
-cover_path = '2012/piano-workbench.html'
+cover_path = '2013/g35-rf-remote.html'
 cover_article = [a for a in articles if a.build_path == cover_path][0]
 
 def get_number(build_path):
         <h2>${get_number(cover_path)}</h2>
     </div>
     <div class="col_7 to-edges">
-        <a id="lead_article" style="background-image: url(images/fronts/workbench.jpg)" href="${cover_article.build_path}" name="lead_article">
+        <a id="lead_article" style="background-image: url(2013/g35-rf-remote/IMG_0882.jpg)" href="${cover_article.build_path}" name="lead_article">
         <div class="title">${cover_article.title}</div>
         </a>
     </div>