tag:blogger.com,1999:blog-8605750049291977342024-03-15T18:09:25.563-07:00TrackuinoThe Arduino APRS trackerJavihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-860575004929197734.post-87550766289483870192014-12-03T13:39:00.000-08:002014-12-03T13:39:42.914-08:00Flashing GL865-QUAD's firmwareIf you bought a <a href="http://www.mikroe.com/click/gsm/">GSM Click</a> board from MikroElektronika, chances are that the GL865-QUAD modem comes with older firmware. That might work for you, but my board came with version 10.00.144, which doesn't support SSL.<br />
<br />
The GL865-QUAD chip can be easily upgraded via its AUX serial interface. Note that the AUX port is not the same serial port we use to operate the modem normally via AT commands, and it's actually not broken out to external pins so a bit of soldering is required.<br />
<br />
<h3>
Set up</h3>
<br />
A quick look at the <a href="http://www.telit.com/products/product-service-selector/product-service-selector/show/product/gl865-quad/">datasheet</a> reveals the location of the TX/RX pins:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhByMOkGbYRc7ogudtcmVajmxUEcZXEoQQM2qNdY0tL42-08zSur9d1TjIduhr_81xeiKNOKP0yaxclJ8APHbbXaDb0JalO6w0J76Jp_qKZK_XD5YZlcNgaabb7jM2z3rb9AkTua1jCkI7e/s1600/gl865-pinout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhByMOkGbYRc7ogudtcmVajmxUEcZXEoQQM2qNdY0tL42-08zSur9d1TjIduhr_81xeiKNOKP0yaxclJ8APHbbXaDb0JalO6w0J76Jp_qKZK_XD5YZlcNgaabb7jM2z3rb9AkTua1jCkI7e/s1600/gl865-pinout.png" height="396" width="400" /></a></div>
<br />
I used a couple of breadboard jumper cables soldered directly to those pins:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkGL42Eh9ftxE9-g07qHsxh9K6QmOPGdx_ZpQJSk63MCO3plswBs7DjRlKKAKWDwN5Gc4YljwwMsTFKD6VF4ATUdan23qv2W3G0voHTTl0gyxWzDUUi-mYpw1xdG_OuMKxxKA4kC5v58Eh/s1600/gl865-txrx.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkGL42Eh9ftxE9-g07qHsxh9K6QmOPGdx_ZpQJSk63MCO3plswBs7DjRlKKAKWDwN5Gc4YljwwMsTFKD6VF4ATUdan23qv2W3G0voHTTl0gyxWzDUUi-mYpw1xdG_OuMKxxKA4kC5v58Eh/s1600/gl865-txrx.jpg" height="278" width="400" /></a></div>
<br />
To communicate with the GL865-QUAD I used this <a href="https://www.sparkfun.com/products/9873">FTDI USB-serial converter</a> from Sparkfun. According to Telit's datasheet, the AUX port is 2.8V CMOS logic, so I bridged across the two pads next to the 3.3V mark on the FTDI board with a bit of solder:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOJrqJsf2jH_OsT7gO1YV5a9f-E8O2winBbSS7PL6zpMrcYAPyEjsTfaC5A2fBC0naDHCcEXRkxt-KvC9dt_q_VDmHxIHMn65qAQs2D7KWBiiqejWaRwLPbNPjkA_xXK4c63eJnvNliP5O/s1600/ftdi-33v.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOJrqJsf2jH_OsT7gO1YV5a9f-E8O2winBbSS7PL6zpMrcYAPyEjsTfaC5A2fBC0naDHCcEXRkxt-KvC9dt_q_VDmHxIHMn65qAQs2D7KWBiiqejWaRwLPbNPjkA_xXK4c63eJnvNliP5O/s1600/ftdi-33v.jpg" height="400" width="335" /></a></div>
<br />
<br />
The GL865 hardware guide states that the absolute maximum input on 2.8V CMOS pins is 3.1V. I found the output of the FTDI chip was slightly over 3.1V, so I simply tied the TX/RX pairs together and hoped for the best. It turned out okay, but if you want to be extra careful, I suggest you use a simple level converter like this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">GL865 pin 45 (TXD_AUX) -------------- FTDI RXD</span><br />
<span style="font-family: Courier New, Courier, monospace;">GL865 pin 44 (RXD_AUX) ----+---|<|--- FTDI TXD</span><br />
<span style="font-family: Courier New, Courier, monospace;"> | </span><span style="font-family: 'Courier New', Courier, monospace;">1N4148</span><br />
<span style="font-family: Courier New, Courier, monospace;"> /</span><br />
<div>
<span style="font-family: Courier New, Courier, monospace;"> \ 4K7</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> /</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> |</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">GL865 any GND pin ----+--------- FTDI GND</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br />
</span></div>
<div>
The diode will provide the necessary ~0.6V drop so that the FTDI output is within safe levels while the resistor pulls the CMOS input down to 0V when the FTDI TXD outputs a logic 0.<br />
<br />
My whole setup looked like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYcVwvKVGUpXz-s10LWID8OMNb1cQvWTVgRYBIsozhk2jgh3vqubFco374JcC5UCW5DAcAlOGfu7gz0kAK1odQiDqYLssWQ81a4nkw7cc3XZG9kYqN1BdimRp7MDi4gJBFEI0zXggPwWBu/s1600/gl865-ftdi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYcVwvKVGUpXz-s10LWID8OMNb1cQvWTVgRYBIsozhk2jgh3vqubFco374JcC5UCW5DAcAlOGfu7gz0kAK1odQiDqYLssWQ81a4nkw7cc3XZG9kYqN1BdimRp7MDi4gJBFEI0zXggPwWBu/s1600/gl865-ftdi.jpg" height="396" width="400" /></a></div>
<br />
Besides the RX/TX cables, I tied both the GL865 and FTDI grounds together (blue cable), and of course you need a 3.3V source to power the whole board. I used some batteries and a 3.3V regulator for this (not shown in the picture above).<br />
<br />
<h3>
Get the firmware</h3>
<br />
As of today, the latest firmware version is 10.01.140. It's not publicly available neither on Telit nor MikroE's websites, but you can request it directly through MikroE's <a href="http://www.mikroe.com/visitor_contacts/">contact page</a>. Ask them for the XFP tool, too. They answer within 24 hours. The XFP tool runs on Windows, if you are on Linux or OS X you can run it from a Windows virtual machine.<br />
<br />
<h3>
Flash the firmware</h3>
<br />
With the GSM Click powered off, load up Xfp, select the firmware and hit program. As soon as Xfp says "Linking", power on the GSM Click. It has to be done in that very order. If you hit the program button after the Click has booted, Xfp will stay in a never ending "Linking" loop. It takes about 10 minutes to finish:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUS-2sIfhDTb6kksmEUXGpl1Mz9lBJIHUVRZe3JX9pzUHdNlWD36TquMxMDykkI5wfly8G6JUHf1Z2auva6waaRqyPAydfb67jtxgGzkYm_OUk_r9MpA0fXbXPSLPAJtEP0TjKSk6gI7wq/s1600/Screen+Shot+2014-11-30+at+18.57.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUS-2sIfhDTb6kksmEUXGpl1Mz9lBJIHUVRZe3JX9pzUHdNlWD36TquMxMDykkI5wfly8G6JUHf1Z2auva6waaRqyPAydfb67jtxgGzkYm_OUk_r9MpA0fXbXPSLPAJtEP0TjKSk6gI7wq/s1600/Screen+Shot+2014-11-30+at+18.57.46.png" height="400" width="360" /></a></div>
<br />
<br />
Test it!<br />
<br />
To check the firmware version you can use the AT+CGMR command, which should output something like this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">--> AT+CGMR</span><br />
<span style="font-family: Courier New, Courier, monospace;"><-- 10.01.140\r\n</span><br />
<br />
And... done!</div>
Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com35tag:blogger.com,1999:blog-860575004929197734.post-48281946681715660792014-08-08T08:56:00.000-07:002014-08-09T15:39:51.692-07:00GSM Click + Arduino<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_I_VF6JHrAzEFkMkd2WIfi4uwYe97kClSVK_oAKfPxDsC42Iq902Ideofgy4i1lvxeIaSea8JJlqNTQGorEM9JXTEK8RT43JuXSx2ygjUZt5ubjeb9UfH5IYs5uV1m27FL4AVnPUVA8tg/s1600/gsm_click_02.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_I_VF6JHrAzEFkMkd2WIfi4uwYe97kClSVK_oAKfPxDsC42Iq902Ideofgy4i1lvxeIaSea8JJlqNTQGorEM9JXTEK8RT43JuXSx2ygjUZt5ubjeb9UfH5IYs5uV1m27FL4AVnPUVA8tg/s1600/gsm_click_02.jpg" height="320" width="133" /></a>I'm working on a hobby project that involves sensing environmental data and uploading it to the Internet using Arduino and a GSM/GPRS receiver. There is a range of GSM shields and standalone modules to choose from. For this particular project I went for the <a href="http://www.mikroe.com/click/gsm/">GSM Click</a> module from Mikroelektronika. It's probably not the most affordable GSM module out there but I like it because it has a nice protoboard friendly layout and a smallish footprint. It's also widely available (I've got it from <a href="http://canada.newark.com/">Newark CA</a>).<br />
<br />
Mikrolelektronika actually has two modules that are similar, the <a href="http://www.mikroe.com/click/gsm/">GSM Click</a> and the <a href="http://www.mikroe.com/click/gsm2/">GSM2 Click</a>. Each one is based on a different GSM chipset (Telit on the GSM, Quectel on the GSM2), but both are quad-band and support GPRS.<br />
<br />
The interesting thing about these modules is that they have a full TCP/IP stack built-in, and they even support high level protocols such as HTTP and DNS. Imagine implementing all that in an Arduino with 32K of flash and 2K of RAM... So the workflow for an HTTP request in these modules is actually very simple:<br />
<br />
<ol>
<li>Unlock the SIM via PIN</li>
<li>Wait for network registration</li>
<li>Start a GPRS connection</li>
<li>Open up a connection to your server:port (ie. google.com:80)</li>
<li>Send / receive data</li>
<li>Close the GPRS connection</li>
</ol>
<div>
Steps 1 and 2 are done during initialization, and as long as the module stays registered, new requests would only require 3..6. Most of the steps can be done with single AT commands.</div>
<div>
<br /></div>
<div>
Electrically, I/O pins in the GSM Click support both 3.3/5V levels, but <b>it does require a 3.3V power source</b>. It took me an hour of frustration before I realized this. According to the <a href="http://teleorigin.com/download/Telit/GL865-DUAL-V3/Telit_GL865-DUAL_QUAD_V3_Hardware_User_Guide_r7.pdf">datasheet</a> of the GL-865 chip, the module can draw a maximum average ranging 140-330 mA (depending on the band and GPRS class), however they state the power supply must be designed to withstand a peak demand of 2A. This means you can't use the 3.3V source from most Arduinos because they are rated for much lower current, you need to provide your own 3.3V regulator.</div>
<div>
<br /></div>
<div>
The module comes preconfigured for 3.3V I/O operation. If you want to connect it to 5V devices you need to unsolder an SMD jumper and then resolder it across the 5V label.</div>
<div>
<br /></div>
<div>
In addition to the 3.3V power source you also need 5V (you can take this from the Arduino, it's used just for level conversion), GND and TX/RX. The module's TX goes to the Arduino RX and viceversa.</div>
<div>
<br /></div>
<div>
I've used SoftwareSerial on pins 2/3 to talk to the module so that I have the hardware UART free for debugging. However, when using both ports at the same time, incoming data from the GSM module gets massively corrupted. I believe either of them alone would work fine, but it's still early to say.</div>
<div>
<br /></div>
<div>
In the next post I'll show a more detailed connection schematic and some test code to do basic HTTP communication.</div>
Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com8tag:blogger.com,1999:blog-860575004929197734.post-5273499675213308042014-04-07T02:04:00.000-07:002014-08-08T07:44:00.705-07:00Changes in firmware 1.5Version 1.5 of the Trackuino firmware is out! It fixes some bugs reported mainly through email and the <a href="http://hab-ham.org/forum/">hab-ham forums</a>.<br />
<br />
One of the longest-standing issues was compilation with Arduino 1.0+. This has been fixed in many forks out there, so it was about time it made it to the official code. The 1.5 firmware has been tested with the following IDEs:<br />
<ul>
<li>Arduino 1.0.5 (build tested on an Arduino Duemilanove)</li>
<li>Arduino 0023 (build tested on an Arduino Duemilanove)</li>
<li>Mpide 0023-20130715 (build tested on a Chipkit Uno32)</li>
</ul>
<br />
Another issue was regarding readability of the signal. You can read <a href="http://hab-ham.org/forum/viewtopic.php?f=11&t=332">this thread</a> for background, but in essence some TNCs have problems decoding the signal when there is a significant amount of imbalance between the 1200 and 2200 Hz tones, no matter how clean the signal is in SNR terms. This problem has been thoroughly described by <a href="http://www.febo.com/packet/layer-one/transmit.html">John Ackermann N8UR in this article</a>.<br />
<br />
The problem boils down to the following: usually FM transmitters emphasize the high frequencies of the base band. They do so to improve the immunity to noise and overall SNR of the signal. To counteract this effect, receivers, in turn, de-emphasize the received signal so that the end result is a spectrogram that closely resembles the original.<br />
<br />
HX1 modules, however, don't have such a pre-emphasis network. Thus, the power of the 1200 and 2200 Hz tones is distributed equally over the air, but receivers will attenuate the 2200 Hz tone largely, resulting in a signal that some TNCs can't decode. Here is a an example of a Trackuino transmission received by an Icom IC-229H, then fed to my poor man's oscilloscope (Audacity). See the amplitude difference between the two tones?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbVga6keUrIJiAuyrzS-WPWXOWzvvuCUSgq44EOBE5H57F3f9j5qSXWAh15W-LjsRZDjNUhRqSx1UN4IDMemZYYZGlv2c1iaplNR_WJdYtIulaOjJEG-DZEsGUazYHXjHNYIHdNvZX6JrM/s1600/a-pelo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbVga6keUrIJiAuyrzS-WPWXOWzvvuCUSgq44EOBE5H57F3f9j5qSXWAh15W-LjsRZDjNUhRqSx1UN4IDMemZYYZGlv2c1iaplNR_WJdYtIulaOjJEG-DZEsGUazYHXjHNYIHdNvZX6JrM/s1600/a-pelo.png" /></a></div>
<br />
Now, when you transmit from a balloon, the coverage area will be huge even for 300 mW, so chances are that some receiver or another will successfully decode the signal. On the ground, however, your packets might struggle with local receivers.<br />
<br />
The solution is to de-emphasize the 1200 tone, which translates into an emphasis of the 2200 one in relative terms... It's impossible to boost the 2200 either in circuitry or in software because the HX1 is already being driven through its full 0..5V range. This will bring other issues like FM undermodulation (the received amplitude will be lower), but it should improve the overall equalization of the signal.<br />
<br />
The same transmission with relative emphasis of the 2200 tone:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBMcSrgkUbDwloy27mqC7YG4rclic8E0sXjKVdYw9vv7DE1XWrvsW90HyEt54R214d6uTUJpBhFTkfMD6ZmIVjkxOFt-7dBzDMy5yec3rDR2ZSTq2GIKfoFFgHTTgo92VtgStPW1V1xM27/s1600/pre-emphasis.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBMcSrgkUbDwloy27mqC7YG4rclic8E0sXjKVdYw9vv7DE1XWrvsW90HyEt54R214d6uTUJpBhFTkfMD6ZmIVjkxOFt-7dBzDMy5yec3rDR2ZSTq2GIKfoFFgHTTgo92VtgStPW1V1xM27/s1600/pre-emphasis.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Pre-emphasis can be turned on in <i>config.h</i> by setting the <i>PRE_EMPHASIS</i> flag to 1, and is now the default setting.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The other issues addressed by this version are:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Baud rate accuracy</b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Due to accumulation of rounding errors in the modem code, the baud rate was actually 1201.92 bps on 16 MHz Arduinos. This is within the tolerance of all the receivers I've tried, but it could get worse depending on the actual CPU clock. Version 1.5 uses fixed point arithmetic to achieve a baud rate that is consistently closer to the nominal 1200 bps regardless of the clock speed (1200.03 bps @ 16 MHz).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Simpler modem ISR</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
I've slimmed down the modem ISR so that the chances of interrupt overrun are lower. The AFSK code now runs asynchronously in the main loop and the samples are fed to the ISR via a FIFO queue. This makes the AFSK code easier to debug, too.<br />
<div>
<br /></div>
<div>
If you have any question or bug report, you are welcome to post it in the <a href="http://hab-ham.org/forum/">hab-ham forums</a>.</div>
Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com32tag:blogger.com,1999:blog-860575004929197734.post-88957635154662957532012-08-28T11:38:00.001-07:002014-08-08T07:44:00.747-07:00New shield (2.2 BETA) and firmware (1.4) are up<p>If you have tried to build a Trackuino board, you will have noticed that the Venus GPS part from Sparkfun <a href="https://www.sparkfun.com/products/9133">(GPS-09133)</a> has been retired and replaced with <a href="https://www.sparkfun.com/products/10921">GPS-10921</a>, which has in turn been replaced with <a href="https://www.sparkfun.com/products/11058">GPS-11058</a>.</p>
<p>Unfortunately, the engineers at Sparkfun have deemed necessary to reshuffle the pinout and make the newer board <strong>incompatible with existing designs that used the older boards, including Trackuino</strong>. I'm still puzzled at this decision, this is like the 7805 reversing in and out just because it "makes more sense".</p>
<p>If you already have a board designed for <a href="https://www.sparkfun.com/products/9133">GPS-09133</a> or <a href="https://www.sparkfun.com/products/10921">GPS-10921</a> and want to use <a href="https://www.sparkfun.com/products/11058">GPS-11058</a>, there are two solutions: either run small cables instead of pin headers, or build a small adapter board to rearrange the messed-up pins.</p>
<p>The GPS chip has also been replaced (634FLPx becomes 638FLPx), but this should not be a problem.</p>
<p>Although I plan to run away from this problematic part, I have uploaded the Eagle files of a new design that is compatible with <a href="https://www.sparkfun.com/products/11058">GPS-11058</a>. Look for trackuino-shield-2.2.zip in the <a href="http://code.google.com/p/trackuino/downloads/list">downloads area</a>.</p>
<p>I have <strong>not</strong> tested this design yet. I will remove the "BETA" label as soon as I get some boards tested.</p>
<p>Since I haven't built any 2.2 board yet, all I can show is this nice 3D rendering from <a href="http://mayhewlabs.com/3dpcb">mayhem labs</a>:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://wiki.trackuino.googlecode.com/hg/img/trackuino-shield-2.2-bot.png" alt="" /></p>
<p>The complete feature set of the Trackuino Shield 2.2 is:</p>
<ul>
<li>Replaced Venus GPS 634FLPx (sparkfun #9133) with newer 638FLPx (sparkfun #11058).</li>
<li>Auto 3.3/5.0v operation for Chipkit Uno32 compatibility</li>
<li>Eagle files converted to 6.x format.</li>
<li>Use Arduino's own 5V regulator to power the HX1.</li>
<li>Replaced TO220 3.3V regulator with SMT + board sink.</li>
<li>Added bleeder resistor for passive piezo speakers.</li>
<li style="text-align: left;">Battery (V<sub>in</sub>) sensing (through a resistive voltage divider).</li>
</ul>
<p>Matching this new shield, there is also a new firmware version: trackuino-firmware-1.4.zip in the downloads area. The new features are:</p>
<ul>
<li>NEW: Support for PIC32 / Chipkit Uno32 platform</li>
<li>NEW: Support for active or passive buzzers (DC or PWM driven)</li>
<li>NEW: Battery voltage sensing</li>
<li>NEW: Slotted transmissions for multilaunch events</li>
<li>REMOVED: Support for the MX146 radio</li>
</ul>
<p>Find more information in the <a href="http://code.google.com/p/trackuino">project page at google code</a>, and enjoy!</p>
<ul>
</ul>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com12tag:blogger.com,1999:blog-860575004929197734.post-48603397859539544862011-12-17T03:28:00.001-08:002014-08-08T07:44:00.699-07:00The amazing flight of K6RPT-11<p><strong>Wow!</strong></p>
<p>This was about 3 days ago. The California Near Space Project (CNSP) team launched 4 balloons. Two of them were short-duration, high-altitude flights. The other two were long-duration floaters (K6RPT-11 and K6RPT-12). First, the announcement:</p>
<p><a href="http://www.tapr.org/pipermail/aprssig/2011-December/038028.html">http://www.tapr.org/pipermail/aprssig/2011-December/038028.html</a></p>
<p>Quote:</p>
<blockquote>
<p style="color: #333333; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; background-color: #ffffff;">Our goal is to reach neutral buoyancy at a very high altitude and fly as far across the United States as possible.</p>
</blockquote>
<p>Well...</p>
<p>The balloon not only made it through north america. It completely <strong>crossed the Atlantic</strong>, entered Spain through Jerez de la Frontera and exited towards Italy. After a 57 hours flight, it eventually descended on the Mediterranean sea <strong>off the coast of Algeria</strong>.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="Captura de pantalla 2011-12-16 a las 09.33.40.png" src="http://lh4.ggpht.com/-xrbA3cj8Rqo/Tux3h6No8HI/AAAAAAAAAck/irmnCAVIvJ0/Captura%252520de%252520pantalla%2525202011-12-16%252520a%252520las%25252009.33.40.png?imgmax=800" border="0" alt="Captura de pantalla 2011 12 16 a las 09 33 40" width="600" height="208" /></p>
<p>Look at the green portion of the trajectory after the balloon passed New Jersey. These were quiet hours of uncertainty until the signal was picked up again from the <strong>Azores:</strong></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="Captura de pantalla 2011-12-16 a las 09.35.37.png" src="http://lh6.ggpht.com/-A2HU749ox0o/Tux4n4eCkEI/AAAAAAAAAc0/x60BirK1x1g/Captura%252520de%252520pantalla%2525202011-12-16%252520a%252520las%25252009.35.37.png?imgmax=800" border="0" alt="Captura de pantalla 2011 12 16 a las 09 35 37" width="600" height="299" /></p>
<p>Launch time was 2011-12-12 00:40:31z. The last packet was heard on 2011-12-14 09:46:30z:</p>
<p><strong><img style="display: block; margin-left: auto; margin-right: auto;" title="Captura de pantalla 2011-12-16 a las 09.34.29.png" src="http://lh6.ggpht.com/-F2or3pZwpwg/Tux4jc6EFZI/AAAAAAAAAcs/eJ3K2vjqE8E/Captura%252520de%252520pantalla%2525202011-12-16%252520a%252520las%25252009.34.29.png?imgmax=800" border="0" alt="Captura de pantalla 2011 12 16 a las 09 34 29" width="600" height="309" /></strong></p>
<p>You can see the full trajectory on aprs.fi while it's recent:</p>
<p><a href="http://aprs.fi/?call=K6RPT-11">http://aprs.fi/?call=K6RPT-11</a></p>
<p>Update: Below is a video of the launch:</p>
<p> <iframe width="560" height="315" src="http://www.youtube.com/embed/3I9T7zDZaFQ" frameborder="0" allowfullscreen></iframe></p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com14tag:blogger.com,1999:blog-860575004929197734.post-28278511537315222792011-09-25T09:32:00.001-07:002014-08-08T07:44:00.684-07:00OSHWCON 2011<p>¡Gracias a todos los asistentes a mi charla sobre fotografía espacial en la conferencia <a href="http://oshwcon.org/">OSHWCON 2011</a> y sobre todo a los organizadores por darme la oportunidad de exponer el proyecto! Espero que se repita y nos podemos ver con más proyectos el año que viene. Para cualquier duda me podéis localizar en el correo javi en trackuino punto org. ¡Un saludo!</p>
<p>(ENG: Thanks to all who attended my talk at <a href="http://oshwcon.org/">OSHWCON 2011</a> and especially to the organizers for the opportunity to present my project! Keep it up and hope we'll see more projects coming next year!)</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com3tag:blogger.com,1999:blog-860575004929197734.post-55065916366183062032011-08-02T03:33:00.001-07:002014-08-08T07:44:00.710-07:00Important fix in version 1.31<p>Version 1.3 of the Trackuino firmware had a bug by which altitudes over 32767 feet would be rolled over to negative values. A new version fixing this issue is available in the <a href="http://code.google.com/p/trackuino/downloads/list">downloads area</a>. No extra features have been added, so your "config.h" from previous version 1.3 can be reutilized verbatim.</p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com1tag:blogger.com,1999:blog-860575004929197734.post-75103190695007008112011-07-30T12:41:00.001-07:002014-08-08T07:44:00.730-07:00How NOT to launch a balloon<p><iframe src="http://www.youtube.com/embed/4USw4VrtXtc" width="480" height="390" frameborder="0"></iframe></p>
<p>The neck snapped when the balloon turned upside down. We were planning to release the load line slowly so that the strings would not rip through the payload box, completely oblivious that the weakest point was the neck of the balloon :(</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com2tag:blogger.com,1999:blog-860575004929197734.post-81026093718589135462011-07-05T19:02:00.001-07:002014-08-08T07:44:00.736-07:00Trackuino Shield<p>This is really exciting! <a href="http://crocketteng.com/blog/">Kyle Crockett</a> has designed a new <strong>Trackuino shield</strong>. Just plug it on top of an Arduino board to turn it into an APRS tracker complete with GPS, a <a href="http://www.radiometrix.com/content/hx1">Radiometrix HX1 FM transmitter</a> and a temperature sensor!</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="trackuino-shield-1.0.jpg" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimSqmMrnCxT4m_FPaK77DaTkoB6xIoDp_1XldTMgr1J_evJLlISAG0OtMwJVv02_cVabNppKzTm7dGz704ysm45GoXcF-eDQZeUtz8D9OiKkW9XpRzP0DXSHH59s8iz6RdIun4RYAQrI_a/s800/trackuino-shield-1.0.jpg" border="0" alt="" width="600" height="420" /></p>
<p>The whole thing is powered through the Arduino jack (7-12V), and the only external components needed are the GPS and radio antennas. The total footprint is much smaller than the previous board, so its price is also cut by more than half. And because all the Atmega pins are broken out to female headers, It can be easily extended by stacking more shields on top of it.</p>
<p>For now, you'll have to figure out the bill of materials from the Eagle schematic, but we'll post a proper BOM shortly. The SCH and BRD files can be downloaded from the <a href="http://code.google.com/p/trackuino/downloads/list">project page</a>.</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com52tag:blogger.com,1999:blog-860575004929197734.post-67212186260274321692011-07-04T20:46:00.001-07:002014-08-08T07:44:00.717-07:00Version 1.3 of the firmware is up!<p><img style="float: left; margin: 0 15px 15px 0;" title="trackuino_logo.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDwic-xh-NqXCqWNLG-tn4s_ZO30cw-RK_piCFh4jV1AcUyHLR2boJ8h_SqldAG_hEoSS6iKdm9lLTqjpSYzj7x0moeFJKUtcxKp2Ub9oWq2dqkBn8RuaTNxvxoN5znxatNxt2pyVxagFn/s800/trackuino_logo.png" border="0" alt="Trackuino logo" />Version 1.3 of of the Trackuino firmware is up in the <a href="http://code.google.com/p/trackuino/downloads/list">downloads area</a>! There are lots of improvements and fixes. Here is a summary:</p>
<h2>Improved GPS compatibility</h2>
<p>The previous GPS code made too many risky assumptions about the NMEA format, so it failed miserably on certain versions of the Venus 634FLPx (which, ironically, was the only supported GPS). Now the parsing routines are more tolerant to variations in the numeric formats, so compatibility with other units should be greater.</p>
<h2>Signal quality (enter real-time computing)</h2>
<p>In Packet Radio, the maximum bandwidth used by the AFSK carrier is 2,200 Hz. Nyquist tells us that we need at least 4,400 samples per second to properly rebuild the signal at the receiver, but that requires an ideal low-pass filter with a cutoff frequency of 2,200 Hz, which is neither physically achievable nor realistic in FM radios where the cutoff is usually higher, around 3,000 Hz. For those two reasons, oversampling is usually desirable (even if not <strong>mathematically</strong> necessary) if we want to avoid annoying harmonics that distort the signal and waste our scarce power.</p>
<p>The Trackuino firmware uses a 62,500 KHz sample rate, which is well away from the audible spectrum. Oversampling improves the quality of the signal at the receiver, but it requires pushing samples at a rate of <strong>1 sample every 256 clock cycles</strong> (16 MHz clock rate / 256 = 62.5 KHz), so it's really taxing on the CPU. To make things worse, the Arduino is also busy doing a lot of equally important things, such as staying up to date with the GPS, keeping track of time so that <em>millis()</em> and <em>delay()</em> keep working as expected, and handling the buzzer (more on the buzzer later). All these tasks are<strong> interrupt-driven</strong>, which means they happen asynchronously without regard of one another or the normal program flow. The interrupts can be queued, but only one of each kind at a time. If an interrupt comes without having served the previous one, the second interrupt will be lost. So, not only has our modulator a meager 256 cycles to do its job, but it also has to struggle over the CPU with other interrupts... When some task needs to be done under a deadline constraint such as this, it's called a <strong>real-time system</strong>. Efforts to ensure real-time operation are geared towards three goals:</p>
<ol>
<li>Priorizing the real-time task over not-so-important tasks. In the AVR architecture, interrupt priorities are fixed, so we can't do that.</li>
<li>Keeping our real-time task short, so that it can meet its deadline.</li>
<li>Keeping non-important tasks short, so that they don't hog the CPU while the important task is waiting.</li>
</ol>
<p>There are a number of improvements in version 1.3 on those regards:</p>
<ul>
<li><strong>Serial (GPS) interrupt</strong>: The selfish implementation of this interrupt in the Arduino library spent an abusive 330 cycles on every received byte. It means that, for every received character from the GPS, chances are that one modem interrupt is lost altogether. Arduino version 22 has an optimization that cuts this time down to 80 cycles, so the code now enforces compilation under Arduino version 22 or later.</li>
<li><strong>Modem interrupt</strong>: Some optimizations have been done to shave off a few cycles here and there. The modem interrupt should take 150 cycles max, average is less than that.</li>
<li><strong>Debug information</strong>: By uncommenting a flag in <em>config.h</em> you can get useful information on overrun conditions.</li>
</ul>
<p>Previous versions of had interrupt overrun issues, which translated into small variations from the nominal baud rate (1200 bps). Luckily receivers have some tolerance to baud rate deviations, so it's not <em>that</em> big a deal. In any case, the new version should improve the rate of successfully decoded packets.</p>
<h2>SRAM usage optimization</h2>
<p>The Atmega328P has 2 KB of SRAM, of which about 512 bytes were taken up by a huge sine table in <em>modem.cpp</em>. This table has been moved to the much more spacious program memory (32 KB). There are a few other candidates that scream to be moved to PROGMEM too, such as the APRS comment, callsigns and such, but these haven't been moved (yet).</p>
<h2>Buzzer support</h2>
<p>This should help in acoustically locating the payload. The buzzer is handled by timer 1 using PWM. Piezoelectric buzzers demand very little current, so they can be driven directly with pins 9 or 10. The tone frequency can be configured in <em>config.h</em> as well as the duty cycle in seconds. It doesn't make sense to have a payload beeping at 100,000 ft. since there is no air to begin with, so the maximum operating altitude can also be programmed.</p>
<h2>CPU usage LED indication</h2>
<p>This might look just cosmetic or geeky, but it's actually quite useful. The idea is that the LED will glow increasingly brighter as the CPU gets busier. For example:</p>
<ul>
<li>If the AVR is idle, the light will be very dim. Tthe AVR is never really idle for long periods of time, since timers 0 (millis) and 1 (buzzer) are going off periodically.</li>
<li>When receiving data on the serial port, the LED will turn slightly brighter because it takes extra CPU to process the incoming bytes. This is a way of checking for GPS activity at a glance.</li>
<li>APRS transmission takes the most CPU, so the LED will be almost fully bright.</li>
</ul>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com39tag:blogger.com,1999:blog-860575004929197734.post-84432299526824390582011-06-27T17:17:00.001-07:002014-08-08T07:44:00.739-07:00Intervalometer with CHDK<p>I wrote a script for Canon cameras with <a href="http://chdk.wikia.com/wiki/CHDK">CHDK</a> that works as an <strong>intervalometer</strong>. The script can take photos <strong>and</strong> videos alternately. The interval between photos, the number of pictures between videos, and the length of the videos in seconds can all be configured from the CHDK interface. It has other handy features like switching the LCD off to save power, or pre-focusing at the infinity so that the AF doesn't have to struggle with low contrast exposures at high altitudes.</p>
<p>CHDK is a firmware addition that enhances the camera functionality by giving more control over exposure, raw capture and display options, but most importantly for us, it allows <strong>scripted</strong> control of the camera. The scripts can be written in a derivative of BASIC called uBASIC, or Lua. You can control almost every aspect of the camera from a script, including filesystem manipulation, timed shooting, adjusting the flash or the exposure parameters, timed shots and even switching dial modes programatically. It's perfect for high altitude balloons because the camera can operate autonomously without any extra circuitry and does not require any attention from the tracker. Check out their web page for installation details. The firmware is fully reversible, you can remove CHDK by just reformatting the SD card and the camera will be back to normal.</p>
<p>The intervalometer script works quite nicely! I went to a fireworks display earlier today and captured 390 photos about 0.5 seconds apart from one another. The camera I used is a Canon A570IS set to manual mode, 0.4 seconds exposure, f/2.6 aperture, ISO 100, no zoom and pre-focused at the infinity with the intervalometer script. I assembled all the pictures together in a sort of time-lapse video and here is the result:</p>
<p style="text-align: center;">
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/iO56zdU90wk?hl=es&fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/iO56zdU90wk?hl=es&fs=1" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
</p>
<p>More on the intervalometer at the <a href="http://code.google.com/p/trackuino/wiki/TrackuinoIntervalometer">trackuino project's wiki</a>. You can download the script (trackuino.lua) from the <a href="http://code.google.com/p/trackuino/downloads/list">downloads area</a>.</p>
<p>The script is largely based on CHDK's <a href="http://chdk.wikia.com/wiki/LUA/Scripts:_Accurate_Intervalometer_with_power-saving_and_pre-focus">Accurate intervalometer with power saving and pre-focus</a> and <a href="http://softwarelivre.sapo.pt/projects/spacebits/browser/trunk/chdk/spacebits100.lua?rev=104">the Spacebits team's intervalometer</a>. Most of the code is actually taken from them. I tried to make it compatible with other Digic III/IV cameras, but If the trackuino intervalometer doesn't work for you, make sure you check these out!</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com6tag:blogger.com,1999:blog-860575004929197734.post-54757430265522174742011-04-18T03:56:00.001-07:002014-08-08T07:44:00.707-07:00KJ6KUV-11 flight and successful recovery!<p>KJ6KUV-11 was launched yesterday from Ojai, California at 0820 PDT and successfully recovered 84 minutes later near Oak Park, 53.6 Km to the south-east! Check <a href="http://crocketteng.com/blog/">Kyle's blog</a> for details, but I think all the efforts can be summarized with one single picture:</p>
<p><img title="tierra3.JPG" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKyDfsX6Lg0y2-OU3fv7ZvZevmDcuUDzAeWFkurPBAdM7RiOYWPaAPq8sn_ymPVb9il0Bvkl668k3_gpQT8SZuAKSLD-aZ-aprJ8WESpZ7KNRwgf9XX-rZnwfzEbBWamW1vtsWGqbp38Fj/s800/tierra3.JPG" border="0" alt="Earth" width="600" height="450" /></p>
<p>During the whole flight, the balloon was able to steadily report its position via APRS and the trajectory could be followed at <a href="http://aprs.fi">aprs.fi</a>. Between 12-16 Km altitude, the balloon caught the jet stream and sped up quite a lot as you can tell by the more spread-out points on the map!</p>
<p><img title="kj6kuv-11 trajectory.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZiDZY8tEMxLFeTHhdinX8HCg-MsTKrSru4xJCBmAmIhrA30HZHb3dqz5QVlFE6Uj0n2nUGSELW_2Hv2mHdy4CR1LbIuc_EBhWKpeUKXgLCnKp08o4vojTAl3A9jbNKtR4pJk0rfkwecyL/s800/kj6kuv-11%252520trajectory.png" border="0" alt="kj6kuv-11 trajectory" width="600" height="413" /></p>
<p>The tracker was a Trackuino board with a Venus 634FLPx GPS and a Radiometrix HX1 300 mW radio transmitter. We were not sure the HX1 was going to deliver enough power to reach any digipeater from that high up. Well, sure it did... At its peak altitude (20 Km), the signal could be heard from Phoenix, Arizona, which is... <strong>597 Km away</strong>!</p>
<p><img title="kj6kuv-11 hx1 range.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIQQ9_LQTDXIjcrrgk0mckk3rsul0118ibSO8s3YBj60jg14qsJh7du6Cj0VOryBNrzv5oHEJydKu1aXXDASG2kEMAgmIaO1BzptJANzE4UuPz-9XDt7hxHv2ARZv3eRtc83loLjZE5qh/s800/kj6kuv-11%252520hx1%252520range.png" border="0" alt="kj6kuv-11 hx1 range" width="600" height="238" /></p>
<p>We were also not sure the Venus 634FLPx would report its position above 18 Km high, since many manufacturers seem to get the CoCom limits all wrong. But then again, the above picture proves how the GPS worked perfectly at 20036 meters.</p>
<p>Here are some flight stats I gathered with WBALTRAK. This is a plot of altitude versus time:</p>
<p><img title="kj6kuv-11 altitude vs time.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpgT_HLqT8jS_F-shOnuRcB4F4C907Zr-wB_TdJDfi2Ji5mK5QT3s0nIhnMXCtLNKSXYkPrgrqWY_tg8qNpCSApaOrDnBu_k09ZrFwZLn1OjYhlsoi0QOplMQmHzcSUyPAgHpxjfV_IiTC/s800/kj6kuv-11%252520altitude%252520vs%252520time.png" border="0" alt="kj6kuv-11 altitude vs time" width="600" height="454" /></p>
<p>The ascent rate was smooth and constant at about 500 meters/minute. After the balloon popped, the payload fell at a vertiginous 1000 meters/min and steadily slowed down as the air density allowed the parachute to deploy. The payload landed smoothly at 294 meters/min:</p>
<p><img title="kj6kuv-11 vertical rates.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmpjIP6AVNUYFCLTI-luIo8TuZerFU9smD7EkaeEEb36BQ-sw8A__q64QE4wu6AOxp-97xS8tEr7CyujKTKUONZnxdmejxvErv1vRzllZUTqjKkpyn16KyFooQr0sN1BZP8hztjwLsDEwR/s800/kj6kuv-11%252520vertical%252520rates.png" border="0" alt="kj6kuv-11 vertical rates" width="379" height="291" /></p>
<p>The speed was about 38 Km/h average and it reached peaks of 100 Km/h (about 60 mph) while the balloon was caught by the jet stream:</p>
<p><img title="kj6kuv-11 speed.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTHBuoKUdxqbRuZVGxT0ZJ0JWPYObdF3ExW_7Q-QTEG1LnGi2qhKWI4LdhOUekcg1VOI7We8KKyJ7FK862iNZz9Wo_xjxoT5PrgnC5vWK78nUp2rLpOgQhh2-KMcIVqS4MQLjtOIO7jU7W/s800/kj6kuv-11%252520speed.png" border="0" alt="kj6kuv-11 speed" width="376" height="289" /></p>
<p>This was a lot of fun to track :)</p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com3tag:blogger.com,1999:blog-860575004929197734.post-41312211242609290332011-04-09T16:48:00.001-07:002014-08-08T07:44:00.690-07:00First Flight<p>I'm really excited to announce that Kyle (KJ6KUV), a great contributor to this project, is launching a balloon and he'll be using a Trackuino board to track its payload. He'll be launching from the Oxnard airport (California) on sunday april 17 around 8:00 am pacific time.</p>
<p>To track the balloon online go to this page. It will have the most recent position as well as the previous positions reported: <a style="color: #074d8f;" href="http://aprs.fi/?call=KJ6KUV-11" target="_blank">http://aprs.fi/?call=KJ6KUV-11</a></p>
<p>Best of luck with the chase!</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com1tag:blogger.com,1999:blog-860575004929197734.post-68798199503926446442011-04-09T16:44:00.001-07:002014-08-08T07:44:00.720-07:004 things<p>A few random updates:</p>
<p>1. I'll be giving a speed talk on Trackuino, high altitude balloons and near space photography at <a href="http://oshwcon.org/">OSHWCON 2011</a>! Quoting their web site:</p>
<blockquote>
<p>The <a style="text-decoration: none; color: #c07c54;" href="http://oshwcon.org/en">Open Source Hardware, Electronics and Robotics Convention</a> is a 3-day event organized by the Synusia collective in an effort to extend the <a style="text-decoration: none; color: #c07c54;" href="http://en.wikipedia.org/wiki/Open-source_hardware">Open Source Software</a> and to promote electronics and the philosophy of "<a style="text-decoration: none; color: #c07c54;" href="http://en.wikipedia.org/wiki/DIY">do it yourself</a>". The event will take place in Madrid at the <a style="text-decoration: underline; color: #c07c54;" href="http://www.padrepiquer.com/">Centro de Formación Padre Piquer</a>, from the <strong>23 to 25 September 2011</strong>.</p>
</blockquote>
<p>2. This blog is becoming a bit chaotic, with bits of information here and there. So, I'm giving the <a href="http://code.google.com/p/trackuino/">Trackuino project's site</a> a facelift. From now on, technical articles will go to the <a href="http://code.google.com/p/trackuino/wiki/Index?tm=6">wiki</a>, while news and event updates will stay in this blog.</p>
<p>3. Even though the wiki is pretty much empty right now, I just posted an article on <a href="http://code.google.com/p/trackuino/wiki/FlightPrediction">flight prediction</a> based on Rick von Glahn (NØKKZ) great <a href="http://www.eoss.org/wbaltrak/index.html">WBALTRAK</a> software. Unlike on-line prediction sites, this program uses actual inflight data to predict the touchdown point with higher accuracy. Check it out, I think flight prediction is a key step prior to and during the flight of high altitude balloons!</p>
<p>4. Last, but not least, we're having our first Trackuino flight next sunday! But this deserves a dedicated post, so stay tuned!</p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com0tag:blogger.com,1999:blog-860575004929197734.post-12972124496701628442011-01-08T11:45:00.001-08:002014-08-08T07:44:00.678-07:00How to build your own Trackuino board<p><strong>Update: the latest information on building the Trackuino board (with slight variations from the process described here) is on the </strong><a href="http://code.google.com/p/trackuino/"><strong>google code project's main page</strong></a><strong>.</strong></p>
<p>Here is how to build your own DYI tracker solution based on the Trackuino firmware and Kyle's PCB. Building the tracker involves a bit of hackery at some points, but I'll try to make it as straight-forward as possible. This is how the finished board looks like:</p>
<p><img title="trackuino_board_640.jpg" src="http://trackuino.googlecode.com/svn/wiki/img/trackuino_board_640.jpg" border="0" alt="trackuino_board_640.jpg" width="600"/></p>
<h2>Features:</h2>
<p>This is a summary of older posts, in case you just landed:</p>
<ul>
<li>GPS: Venus 634FLPx. Supports > 18 Km according to their tech support (to be confirmed empirically)</li>
<li>Radio: The board supports Radiometrix's HX1 (300 mW) as well as Argentdata's MX146-8v (500 mw).</li>
<li>1200 bauds AFSK using 8-bit PWM</li>
<li>Sends out standard APRS position messages (latitude, longitude, altitude, course, speed and time).</li>
<li>Internal/external temperature sensors (LM60) to read temperature in and outside the payload</li>
<li>Support for 1 capacitive humidity sensor</li>
<li>Cut-down "aka suicide" mechanism: you can hook up a nicrom wire and cut the payload line if your balloon gets stuck aloft for a long time.</li>
<li>ICSP header for in-circuit programming</li>
<li>2 x SMA female plugs (1 x GPS in + 1 x radio out)</li>
<li>Open source (GPLv2 license), both software and hardware. In other words, do whatever you want with it: modify it, add it to your project, etc. as long as you opensource your modifications as well.</li>
</ul>
<h2>Which radio to pick?</h2>
<p><img title="hx1_or_mx146.jpg" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRlMUhgD1oV3TipGWHJcCB1pEBy4Bs_FRYfNEfd88yYE0Si44VwzqCvhjh7SR5eb2jZgizSYd_Qf_eb37w3lkwIgpXOtuUa8dwt2MyuvqPIMeaHcn890cGwz69kHp3ohR0o759mebiKdEP/s800/hx1_or_mx146.jpg" border="0" alt="hx1_or_mx146.jpg" width="591" height="160" /></p>
<p>Radiometrix's HX1 is cheaper, but Argentdata's MX146-8V is more powerful and thus has a better range. On the other hand, the HX1 version requires fewer components to buy and solder. My take? <a href="http://www.radiometrix.com/content/hx1">The HX1 is good enough</a>.</p>
<h2>How to build the board?</h2>
<p>Both Eagle's <a href="http://code.google.com/p/trackuino/source/browse/#svn%2Ftrunk%2Feagle">schematic and PCB source files are here</a>. You can do the exposure/development/etching process yourself, but I suggest sending it to a PCB house. I made the project public at BatchPCB, so anyone can go and <a href="http://batchpcb.com/index.php/Products/50481">order one</a>. Their prices are not bad, but please comment if you find a better deal.</p>
<h2>Components</h2>
<p>Here is the bill of materials for the <a href="https://spreadsheets.google.com/pub?key=0AqW-6zh51rr8dGNDVUZXV2l1Y2NOU2pZaElrcFUycXc&single=true&gid=0&output=html">HX1 version</a> and the <a href="https://spreadsheets.google.com/pub?key=0AqW-6zh51rr8dGNDVUZXV2l1Y2NOU2pZaElrcFUycXc&single=true&gid=1&output=html">MX146 version</a>. See what I mean about the HX1 requiring fewer components? Also, <a href="https://spreadsheets.google.com/pub?key=0AqW-6zh51rr8dGNDVUZXV2l1Y2NOU2pZaElrcFUycXc&single=true&gid=2&output=html">these parts</a> are in the schematic, but haven't found a clear purpose for them yet, so don't buy them.</p>
<h2>How to build the firmware?</h2>
<p>The easiest way is with the <a href="http://www.arduino.cc/en/Main/Software">Arduino IDE</a>. Download the latest <a href="http://code.google.com/p/trackuino/downloads/list">"trackuino-ide-xxxxxxxx.zip" from here</a>. Unzip it in your sketches directory.</p>
<p>Now, you'll have to change some settings. Open the "config.h" tab and:</p>
<ul>
<li>Put your own callsign and SSID here. By default it's nonsense, something like "MYCALL". SSID 11 is good for balloons.</li>
<li>Select your type of radio here (HX1 or MX146)</li>
<li>Optionally, add some custom comment to the APRS messages, set a different TXDELAY, change the APRS update period (default = 61 seconds), etc.</li>
</ul>
<p>Now open the trackuino.pde sketch, compile and flash.</p>
<p>If you're comfortable with command line tools, there is also a "trackuino-gcc-xxxxxxxx.tgz" version with Makefiles that you can compile with the gcc-avr toolchain. I like to develop using the gcc-avr toolchain because the IDE doesn't support multi-file projects quite well.</p>
<h2>Testing!</h2>
<p>Time to test the board! Plug the GPS and TX antennas and power the board. You need at least 6 volts for the HX1 version, and 9 volts for the MX146 version.</p>
<p>I have tested the HX1 version. If someone tries with the MX146, feedback will be very welcome!</p>
<p>And since a picture is worth a thousand words, take a look at this screenshot from APRS.FI and see how far this little HX1 can get. I'm successfully being digipeated by EA5ERC-15, which is an unbelievable <strong>144.5 kilometers away</strong>! And I'm at sea level!</p>
<p><img title="Captura de pantalla 2011-01-08 a las 20.29.54.png" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYkQZw6FIGmUDNmuCI6pjPx0dru7hnQTrqaJlsC34TPzk1vsaS6VTM-FZAOkZRGl5_rUg1EAvsXelrQZmy5tTqI9rCEfRSf9wWfWXANcLfT4pHYUn2piM857mkbJRcZgWpjl9Ovma2RXEU/s800/Captura%252520de%252520pantalla%2525202011-01-08%252520a%252520las%25252020.29.54.jpg" border="0" alt="Captura de pantalla 2011-01-08 a las 20.29.54.png" width="500" height="600" /></p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com56tag:blogger.com,1999:blog-860575004929197734.post-45223223184157815642011-01-08T09:20:00.001-08:002014-08-08T07:44:00.693-07:00Thoughts on on-line collaboration<p>On my last entry, I blogged about a schematic diagram to help those DIYers build their own tracker using the Trackuino firmware. Well, <a href="http://crocketteng.com/">Kyle Crockett</a> picked it up and generously built a nice PCB out of it. It blows me away how we're alive during the time when you can post the most vertical stuff on-line, reach out to those with the same interests as you, and find people across the globe willing to collaborate towards the same goal without ever having met in person... It <strong>really</strong> does.</p>
<p><img style="border: 0px initial initial;" title="IMAG0027.jpg" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg69C8PgttqxG91E37HYuGMmYgnOiQg9cRwbhsYL0FLbqFH4LfHQxFb_E5f5qEKg4fToDsc92KI7A6hGqQ-DEYmS8yjyVaE1pIEEwDS2gVZlNKgC4K_-OOqjuYgZEY0kRCVHYQ1jtly3oZM/s800/IMAG0027.jpg" border="0" alt="IMAG0027.jpg" width="600" height="359" /></p>
<p>I'll be posting soon with details on how to get one of these boards manufactured and the bill of materials so that you can assemble it yourself.</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com0tag:blogger.com,1999:blog-860575004929197734.post-87453709849665178562010-10-14T07:25:00.000-07:002014-08-08T07:44:00.744-07:00Schematic (II)<p>Hello! This is a second iteration over my previous schematic.</p>
<p><a href="https://picasaweb.google.com/lh/photo/E7Fu--iXAgxYUizE54ADfZnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwOLT12eoG86GVWO5W8rdJWqovnV_nA3xNzviI5uzfpaFFvUwntpJEzTH_NvZap4yZZw19wEl8yqJb8EDxDdFSA69eFjACtvv8Wl6LbWWHrTeCel2DZgR7x654V6BApVUbcuECUO6OCk81/s400/trackuino.png" height="273" width="400" /></a></p>
<p>There are some additions:</p>
<ul>
<li>A reset pushbutton</li>
<li>An ICSP header. I'm giving due credit to <a href="http://www.kerrywong.com/2010/04/24/an-arduino-icsp-board/">Kerry D. Wong, from whom I copied this idea</a>. He used the same layout as in the Arduino board, so that he could use the bit-bang method and the <a href="http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html">same cable described here</a>.</li>
<li>An LED. It's connected to pin 19 (Arduino pin 13), so it will blink after flashing a default bootloader.</li>
</ul>
<p>Click on the picture to enlarge it, or just <a href="http://code.google.com/p/trackuino/source/browse/#svn/trunk/eagle">download the EAGLE .sch and libraries from my repository</a>.</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com3tag:blogger.com,1999:blog-860575004929197734.post-39411364219133646632010-07-02T12:25:00.000-07:002014-08-08T07:44:00.687-07:00Using two balloons for controlled descent instead of a parachute?<p>It has always come to mind that using 2 balloons would provide a slow and controlled descent of the payload. Parachutes won't open at high altitudes because the atmosphere is too thin. So usually, after the balloon pops, the payload starts plummeting and spinning like crazy until it reaches an altitude where the pressure allows the parachute to open. During its crazy nose-dive, the payload, the load line and the parachute itself are very likely become an entangled mess with the whole thing hitting the ground at free-fall speed. Plus I fear the antenna will break as well.</p><p>How to prevent this?</p><p>Well, <a href="http://zeckalpha.org/winona-field-day">Kyle has reported his experience using 3 balloons</a>. The theory is that when 2 of them pop, the 3rd one doesn't have enough lift and starts going down smoothly. I'm really looking forward to him elaborating more on his blog.</p><p>Also check out <a href="http://www.toddfun.com/2010/04/10/ansr-balloon-launch-55/">Todd's write up</a>. He used a parachute and a ring to prevent the parachute lines from tangling during descent.</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com6tag:blogger.com,1999:blog-860575004929197734.post-51562446129868329882010-06-09T16:11:00.000-07:002014-08-08T07:44:00.702-07:00Schematic<p>This is my first attempt at designing the tracker board. It basically consists of a barebones Atmega328P, a GPS, a radio, temperature sensors and a cut-down (aka the "suicide") mechanism. Click to enlarge:</p>
<p><a href="https://picasaweb.google.com/lh/photo/sMtX99Lb3UWsF2uqRkfMVpnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg_znTquot7M1WESKVw-XB3owg6SsEhPT3fhd2axBQitvXS0XX1YIWTGM2cNR-46Z1YC4W1BJKzCg6b8xDfQ-rZbZTnkUWAnpYQ4IrrweM9qsav_tCxwUKpI6pI7cKfWyi3QB12KxG4WuO/s400/trackuino-avr.png" height="283" width="400" /></a></p>
<p>Also check out this <a href="http://www.arduino.cc/en/Hacking/PinMapping">pin mapping reference between the Arduino and the Atmega328P</a>.</p>
<p>I wanted the option to use both the Radiometrix HX1 and SRB MX146 radios, so I wired them both, but <strong>only one can be really used at a time</strong>.</p>
<p>As you can see, the connection from the AVR chip to the HX1 is straight-forward, just wires and no additional components.</p>
<p>The MX146, however, requires a couple of BS170 mosfets to translate I2C's TTL 3.3 <-> 5v levels, a transistor to drive the PTT and a voltage divider to convert the audio input down to 500 mV peak-to-peak. The MX146 also has its own 8V regulator, since I've got the 8V version. You can absolutely leave these components out if you're only going to use the HX1.</p>
<p>The GPS is a Venus 634FLPx. I bought it from <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9133">Sparkfun</a>. Since this is a 3.3V device, it needs some level conversion (via the <a href="http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=65">diode method described here</a>) and its own 3.3V regulator.</p>
<p>I also added a couple of LM60 sensors, since I want to measure both on-board and external temperatures. The external sensor can be connected via a terminal block (X2). I also planned for a capacitive humidity sensor (X3), but I don't think I'll use it on my first flight.</p>
<p>A MOSFET 22nf031 controls the "suicide" mechanism that cuts the rope if the balloon somehow refuses to burst. It has its own power source (X5) to avoid draining the main Vcc, and the nicrom wire goes to yet another terminal block (X6).</p>
<p>Lastly, X7 is the main Vcc source, coming from a pack of lithium AA batteries.</p>
<p>I have the Eagle .sch file and libraries for the MX146, the Venus GPS and the HX1 if anyone is interested.</p>
<p>Next step: create the .brd file for a PCB house. I'm really struggling with this, since it must match the PCB house specs (I'm thinking <a href="http://www.olimex.com/pcb/index.html">Olimex</a>).</p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com64tag:blogger.com,1999:blog-860575004929197734.post-78178081426261434452010-05-09T08:38:00.000-07:002014-08-08T07:44:00.733-07:00How I built my cheap 2m Yagi antenna<p>I wanted to build a Yagi antenna so that I could point it at the balloon and track it from the ground. Apparently, VHF propagation improves hugely with height so, if the balloon is high enough, even a low-gain omni antenna will pick it up. I did, however, not want to leave anything to chance, so I built the yagi even though I might not need it.</p>
<p>The antenna described here has a 8.8 dBd gain, ie. it has a 8.8 dB gain over a dipole, which in turn means the power of the signal will look 7.6 times stronger than if I were to use a regular dipole. This is what it looks like:</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/swcCu4gaq20IfaChvwmdDpnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK-pBsLry-wY3hjdnAcDgqF0ptF6T3oMFjyCY7B9gz8FpNm23YO8t5sNPauDieMXjrWWGFhMy0NQQFDLaLeYfq776paLc011hwcLlkDV3e6BgA2ShkuJZkHKye5625gTLQpkFHPCYNNeOd/s400/08042010369.jpg" alt="" width="400" height="300" /></a></td>
</tr>
</tbody>
</table>
<p>I used <a href="http://vk5dj.mountgambier.org/Yagi/Yagi.html">this great Yagi Calculator by John VK5DJ</a> to design the antenna. The author says that the program is meant for long antennas (over 10 directors), but mine has 4 directors and it works great.</p>
<p>Here are the ingredients. This shouldn't be more than 10€ provided you have basic tools.</p>
<ul>
<li><strong>5 square aluminum rods</strong> (1m long, 8x8 mm section) for the directors and the reflector. The cross section looks something like this: <strong>|_|</strong> (ie, one of the sides of the square is missing). I guess I could use fully squared rods, but they would be heavier.</li>
<li><strong>1 rectangular rod</strong> (2m long, 16x8 mm section) for the boom. I attached the elements to the long (16mm) side for stability. The cross section looks like this: <strong>|_|_|</strong></li>
<li><strong>2 round, hollow rods</strong> (1m long, <strong>6 mm</strong> thick) for the radiator. I think hollow ones are easier to bend, and lighter too.</li>
<li><strong>1 round, hollow rod</strong> (1m long, <strong>8mm</strong> thick). The 6mm rod must fit into the 8mm rod.</li>
<li><strong>3 mm machine screws</strong> of different lengths to hold everything in place, <strong>bolts</strong> and <strong>washers</strong>.</li>
<li><strong>RG-58 cable</strong> for the balun</li>
<li>1 <strong>SO-239 female connector</strong> (aka PL connector).</li>
<li>1 plastic / prototyping <strong>box</strong>. This will contain the SO-239 connector, the balun and the connections with the dipole.</li>
<li><strong>Drill</strong> and <strong>bits</strong> (at least <strong>3 and 6 mm</strong>)</li>
<li><strong>Any bottle</strong> that is 50mm across. Any aerosol can, deodorant spray, sun-tan lotion bottle, etc will work. I used it to bend the rod.</li>
</ul>
<p>First, I tried to bend the rods. I feared they would collapse or they'd be too stiff, but they bent just fine. I just put the rod on the kitchen counter, right next to the wall. I held the aerosol can firmly, pushing down and against the wall, and bent the overhanging end of the rod around the can. The wall keeps the other end still, so you only need to focus on holding the aerosol with one hand and bending the rod with the other. It works pretty well, of course there are <a href="http://www.ifwtech.co.uk/g3sek/diy-yagi/dipoles.htm#Jig">more sophisticated methods</a>.</p>
<p>At 144,8 MHz, the total length of the unfolded dipole is 2043 mm. I could only get 1m long rods, so my dipole is actually made of two 1m rods, plus a small piece of a 8mm rod to "close" the loop. You can see it here, with a preview of the box that will hold everything together:</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/tS4p-6ccGI7BJgLGFTORTpnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinaGZdxiw8ummWxibjGU9fXtRzDaLUJmn-6OxLdzTQQQTTtnVIROXQ03BqblUXd3R1AwbPcd2TEbBZRZsL1wm_sp8zREjQ7s5_p0SHictFcwyNPysrrXt0NaYqe1O0srw66jG2rwO1mS5G/s400/05042010339.jpg" height="400" width="300" /></a></td>
</tr>
</tbody>
</table>
<p>Next, I cut the square rods to their lengths. I labeled them D1, D2, D3, D4 and R. I used one of the leftover pieces and drilled two holes 8mm apart on it, so that I could use it as a pattern. Then, I used that pattern to drill the holes on the boom, the directors and the reflector. I actually had to build a couple more patterns, since after a few drillings, the holes grew wider. Anyhow, this is the hardest part since the holes on the boom and the elements must match.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/fn97JiBEW3x1PDWcb0h1o5nq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjShLYwNjelbm6pKH8nHA0zZROumbIju39faEeGIiJmZ0OOsfu6GqSJ-krjSr-xfOx6bo3eWDIaZ0iuOmDe5LrL-E5w3FM820cjKwuSXl0LO3tje_8fqUBuJDlfkaVV03Bpc1bJ_IjxYcnA/s400/06042010368.jpg" height="300" width="400" /></a></td>
</tr>
</tbody>
</table>
<p>After drilling the holes, I put all the elements in place. I like this part since the former bunch of scrap starts to look like an actual antenna!</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/mX0Ia-jzgCIQaHXN2anymJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYmiyBmI7rIFEpe5Sw9P7nJSq4JjpO1ppEmCc1ausdqRAWMGBnY7SYd8cBZbkHNPkTu8wT1OnApvPxO-a6cCBt8zInoucTwS8xrElkPhp5ZWxhUgGH6TNsZ_xtzU0uhzOO-BETQUCbx75S/s288/05042010355.jpg" height="288" width="216" /></a></td>
<td><a href="https://picasaweb.google.com/lh/photo/eLxuATeFK3At29WtJeWLWJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuOPbsj-aJWxV7uVHpLqN5Nzx7eZ1UrMwioYQ69b1t-znI6Egd17bFt3CUFEs6rI9fmWbXZBc-oLONwWBButJJCp9Dz7aRTYJFVcryFiZeYTyoDr2L1q-HltW5yvnit_wA4HNbK3I1JIGX/s288/05042010343.jpg" height="288" width="216" /></a></td>
</tr>
</tbody>
</table>
<p>Back to the dipole. We left it at the point where we just had two 6mm rods hooked together by an 8mm rod. Now is the time to build the box that will hold all the connections and the rods together. Again, I followed <a href="http://www.ifwtech.co.uk/g3sek/diy-yagi/dipoles.htm#Junction">this excellent article</a> (I'd be happy to give credit to whomever wrote it, but I can't find its author). This is the basic idea:</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/h0E7XTU1T65cD_uh9fOxm5nq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhar-BIbua4ssuycit9YrrKFvWUBqGdWVzXcN45BWDY6glPDpstsNFnnHLup3SGg8h7Zy2b5qhIABqmiZGUYu-Y9L5dBk-NdHX1JybNY1S_vIh9NWnqL7ly3JPTJ1aXz2oF1WsLZsBmvMYA/s400/rc1718.gif" height="291" width="400" /></a></td>
</tr>
</tbody>
</table>
<p>First, I drilled two 6mm holes on the sides of a plastic box I had around. Then, I flattened the ends of the dipole that go inside the box, and drilled 3mm holes through them (it's much easier when the rod is flat). Now the flat part won't fit in the 6mm holes of the box, so you'll have to mount them the other way around, ie. introducing the round end from the <strong>inner side</strong> of the hole and pulling all the way. It's kind of hard to explain, but it will become obvious when you face the problem.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/7KdSDr_VRZDkP73aBuxA3pnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfL6pNQi6xWiubyOnJ1Ewuv963TitAp3eO0X2RLyv8KEkDlbCvL7uuxz5zXlGCuHoKt05vFj-qANGsDLmKphHKisgZJU2pb-uAUdNkOXmsklL8ZL0TFKVDRN3X5ll23WxQuL7CZ7LVGGSG/s400/13042010392.jpg" height="300" width="400" /></a></td>
</tr>
</tbody>
</table>
<p>Next, I mounted the SO-239 connector. This needs 4 x 3mm holes, plus one bigger hole in the middle. I chose to put the SO-239 plug on the outside so as to not clutter the inside of the box too much. And finally, the <strong>balun</strong>. The balun is just a piece of RG-58 coax cable. The yagi program will give you the exact length and the proper way to connect it. I drilled two more holes, since most of the balun will be left hanging outside. Click on the picture to zoom in:</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/RtqDJNSnpAjIX_qCZUeDe5nq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH1ps1yZ1BpEDs2flx0QMl5DcWx831U8HeBbPDMZpP3kqkIP7YzAwAjZ0tI8z2Z6JfDgh4TEJTNZaEhyaq_6Gk0oPuXLUyRot8XVfb0IcGIPRKy4blvU6wVPXNaIFfL9khqBwTedA4L20s/s400/05042010338.jpg" height="300" width="400" /></a></td>
</tr>
</tbody>
</table>
<p>As you can see in the picture above, the dipole ends are hooked to a couple of two long 3 mm screws. The cables are clamped with washers and bolts, so I didn't use any solder except on the pin of the SO-239 connector. The whole thing looks like: bolt, washer, cable, washer, bolt, flattened rod, bolt. To keep the box in place, I drilled two more holes. I used the same 8 mm pattern above. I just took care of not shorting the boom with the radiator by making sure the mounting screws don't touch anything else in the box.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/z-WWpby7sO_6QzV3jpBTlpnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtT9RTizaf3iwmPaokEmajJiXxCsLGAwXgAgqFRv_1QVG9rcAtV85u4sbmr5tKSLZHCDYQ6W0VpMNBv4GSQwcuk8gv6PUQzaPHUKnGKlsBLE2d7avZZDNF6erqDcqa6sxAjQoW5bZyY5z2/s400/05042010345.jpg" height="300" width="400" /></a></td>
</tr>
</tbody>
</table>
<p>You can zip tie the balun along the boom, but it's not really necessary and it won't affect the performance of the antenna anyway. I just left it hanging. The two zip ties at the far end are my cheap and dirty mast mount. And that's it. Here is the end result, happily tanning in the sun:</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/XWCSDCluVddeafaVZiSI-Znq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhmWfx_FvoKsC5Tx6FnbeA9bcxQfwQc_J409Y6bFiOsfJJnZIem94fVHz-WxgewsJ22GNZMqq0rXkhlZTLILxZKa6Tj7s8Bhk4mjyVOShQ7Z7O3mePkzgBpiEVD0ZNXX3hxURTpLlwvp9w/s400/05042010344.jpg" height="400" width="300" /></a></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com7tag:blogger.com,1999:blog-860575004929197734.post-47776016787729079002010-04-13T17:19:00.000-07:002014-08-08T07:44:00.696-07:00Hot wire polystyrene cutter for perfectly straight edges<p>I'm building the box that will contain the balloon's payload out of a polystyrene sheet. Polystyrene can be bought in construction supply stores such as Leroy Merlin in Europe, maybe Home Depot in the US. I've got a 160 x 60 cm sheet for about 2€ from Leroy Merlin (you have to go to the construction supply area, not the main shop).</p>
<p>You can cut polystyrene with a regular knife, but the easiest way is using a hot wire. At the right temperature, the wire melts the foam like butter, leaving the cleanest cut behind. And best of all, with no fumes!</p>
<p>There are some <a href="http://club.cycom.co.uk/hotwire/Hot_wire_cutter_for_polystyrene_foam.html">cool solutions out there</a> based on soldering irons, these are ideal to cut small pieces of foam in shapes, but I want perfectly straight edges because I need to glue the box sides together. This is what I did:</p>
<p>Ingredients:</p>
<ul>
<li><strong>Nicrom wire</strong>. This is the cutting wire. Get it from a hairdryer or an electric heater. You can go to a recycling center and dig for one among the electronics garbage. That's how I've got mine, every time I go to the recycling place I bring more trash home than I drop off there :)</li>
<li><strong>Car battery</strong>, or something capable of delivering 3-4 amps at 9-12 volts. I used my car's old battery. It won't power the starter, but it definitely melts the polystyrene.</li>
<li><strong>A couple of battery cables with clamps</strong>.</li>
<li><strong>2 aluminum rods</strong>. 1 m long, 6-8 mm thick is enough. Hollow ones are cheaper, lighter and better. I've got them from a local hardware store for ~1.50€ each.</li>
<li><strong>Small machine screws</strong> and <strong>bolts</strong>. I used 3mm across, 12mm long screws.</li>
<li><strong>Two vises</strong>. Mine are small, the ones that will hold on to the bench with a clamp, rather than screws.</li>
<li><strong>Drill</strong> or dremel tool. And a <strong>3mm bit</strong>.</li>
</ul>
<p>First, clamp the vises to the bench, one facing up and the other facing down. These will hold the rods.</p>
<p>Use one of the vises to clamp and flatten the tip of the rods. Just flatten the last 1-2 cm, this will make it easier to drill through it.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/6oH7CaCOkSd6D_z3nLgscZnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1NOjKOA1IqsCWQAJxYXhyphenhyphen5sYrXn_SyFZHpHf88k8zmqPZfGpznMXonBiwVZRXCK1IeuNUMg1hJ3iEQ0QpCaJ3xsRgtMT4PaYuQdK3dUoSoVLdV00m0cIFy8BSjpDs1xJx-5TpuAYjv91r/s400/13042010391.jpg" alt="" width="400" height="300" /></a></td>
</tr>
</tbody>
</table>
<p> </p>
<p>Cut the nicrom wire. The wire acts as a resistor, and the shorter you cut it, the hotter it will get. Hotter will cut the foam faster, but it does <strong>not</strong> have to be incandescent. In fact, if it's too hot, it can break. So it's better to err on the generous side, and if it doesn't get hot enough, you can cut it shorter later. I used about 50cm. My wire looked like a spring, so I decided to straighten just 15-20 cm and leave the rest coiled up.</p>
<p>Drill two holes with the 3mm bit on the rod's tips. Insert a screw through the hole and secure the nicrom wire to the rod with a bolt. Do it with both rods. The total length of the wire between the rods is 15-20 cm, so I have some coiled-up wire overhanging.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/JF_cSKekxGXwLRV4A8tOnpnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMPGqspPinIewvoJMiKz7dnFoz3SJX9AICRoCW67pA2IYDdS0psfV1uhyFCfB1hQSzT3nAy88kVvZRmSRRg5WK9LqJQc1O8yf6gB4zGtvFSr6MdQvg4zvopbQZeAoIhPfGsSCLNdMtWMNJ/s400/13042010392.jpg" alt="" width="400" height="300" /></a></td>
</tr>
</tbody>
</table>
<p> </p>
<p>Clamp the two rods, one with each vise. Make sure the wire is tight. The aluminum rods are very flexible, so just tighten the wire until the rods bend a little. Also, make sure the wire is at a right angle with the bench. Try to straighten the wire as much as you can (at least the stretch that will cut through the polystyrene). Just press it between two fingers and slide the fingers down repeatedly.</p>
<p><strong>Make sure the rods or the vises don't touch each other</strong>, or they will short the battery!</p>
<p>Now, hook up the cable clamps to the battery. You can try connecting the clamps directly to the rods, but the stretch of wire between them will probably be too short and the wire will get glowing hot in seconds. So I chose to hook up one clamp to a rod, then the other clamp to the overhanging wire. Just remember the closer the clamps are on the wire, the hotter it will get.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/Vpd4yvzO1vLHWYatI8TBb5nq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY9jvTen2oLNSlpGcpnYBkrCRf7jbYycHhCCIa3Q3eYr220m0vgwRlgtQgvfhUZ7FJT7dQpWiwPI6mvNDGXkm7VDZpo0EFUw4a4IddJInCXqhsJnX_Zn-Ziwsuikb7vmy7yhWz0VM_I6AQ/s288/13042010398.jpg" alt="" width="288" height="216" /></a></td>
</tr>
</tbody>
</table>
<p> </p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/nxPdDRMBu8RbytW9xjudi5nq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_ZJ4cXmvChea_1Xaj_w5OIk88H6EF44sou7ANmgaSXFJj0Ctp3fbB8a8kQprhcekpTuJEwTxuriX_fi0L5Q427CevHoQa4bPclp0hLZqy8QVNDfFWMesaZiYP4ExYAHzIq1wVboyiwNyW/s288/13042010401.jpg" alt="" width="216" height="288" /></a></td>
<td><a href="https://picasaweb.google.com/lh/photo/36MjsyF32D2VoJ8v3ySz6Znq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikBrY7jv36_j5ZbbQuldUaJ4TyDPi8FwXIDQepEe7KHGn3z73Zy2a6XymVv5Hx8QwqA62-ZwxLAXRrcvqGB8P1vUAT4wwkDvhU0UgTyWU5tDfZXpXsWD80EOtvdsnkz99l2kZ9grOhr_QI/s288/13042010399.jpg" alt="" width="216" height="288" /></a></td>
</tr>
</tbody>
</table>
<p> </p>
<p>That's it... Use a plank as a guide (sort of like a T-square) if you need parallel edges. You can clamp the plank to the bench, so that you don't have to hold it and can focus on the cutting. Try not to stop as you cut, or you'll start melting a hole around the wire (check the fourth picture below, can you see the dents?). Just keep constant speed. You'll be surprised how extremely clean the cut is!</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/91YQ30ljd-twu740fd7fwJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4COtQUkr4xpr_7zbiBDaogkAIUC-SeRfPX7F8WHDs4m8kYYVsVZXUovMwtr2QkqPB2Xom6DOuVzFLvSa-8KU1kZ19B_1mI8dDHqoiVhzE9lYMhl5RA2U8SqD52McBQgGUCGfqY10UoJT0/s288/13042010397.jpg" alt="" width="288" height="216" /></a></td>
</tr>
</tbody>
</table>
<p> </p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/dTe375HpecfMjlvWq-jiFJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWSDyOthFBqq8-gUYpUd-7OGKi3V7z1731IIz-X1W1ALgR1Yh0nY6hadG55dafTyZws0wpX5IOObQCPwdVUXn3hYmwxYV3MPJH8ulXXk8exw89frKOfzBmFLMPr48MoAaNEslQrHsyRShG/s288/13042010396.jpg" alt="" width="216" height="288" /></a></td>
<td><a href="https://picasaweb.google.com/lh/photo/gpVNGgYbGRFX8qsJIeuGkJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6xN2fExzNadLF_pwwzmBXn6qGTF64R47LWlHi1hn1JNGleqPUJrFnyW4lrOIdIPKkTgUWoO1aRF64F8353eB-vKsoFWGIhNi5unn5e4y_XlYMDWX_vP7roc2JuP_q5uzsQKMtKbfipL3E/s288/13042010395.jpg" alt="" width="216" height="288" /></a></td>
<td><a href="https://picasaweb.google.com/lh/photo/X5Eix20Hc5AC2pxsDxjZcJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVoeoPkiCB_9HBm2bGzVEU8KllgCV6zM90yZIrS9OMGsew-ppN_2HNyXOu0fjgRYRl_szLceg77yHDekYTADtpbMBFmMLqTW8z4oyFzSLrI9Nxcd2moNR1eTOOadfNEeeSCHc8doaAaI3I/s288/13042010402.jpg" alt="" width="216" height="288" /></a></td>
</tr>
</tbody>
</table>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com7tag:blogger.com,1999:blog-860575004929197734.post-71951964944865843682010-04-10T10:01:00.000-07:002014-08-08T07:44:00.725-07:00Audio with an Arduino and PWM<p>The Arduino doesn't come with a DAC (digital-to-analog converter), so the two options to generate an analog signal are a resistor ladder (remember the <a href="http://en.wikipedia.org/wiki/Covox_Speech_Thing">Covox Speech Thing</a>?), or PWM. Some commercial trackers, like the TinyTrack, use a 4-bit resistor ladder, but I thought it would be more fun to use PWM. It gets more complicated on the programming side but it takes less external components and only one output pin.</p>
<p>The Arduino has 3 timers capable of doing PWM. Some timing functions in the Arduino library (<em>delay</em> and <em>millis</em>) use Timer 0, so we don't want to disturb them. Timer 1 and 2 both have about the same capabilities, but Timer 1 can count up to 16 bits and Timer 2 only goes up to 8 bits. There is a great write-up by Michael Smith on <a href="http://www.arduino.cc/playground/Code/PCMAudio">generating PWM with Arduino and two timers</a>. It uses Timer 1 to feed samples (at whatever the sample rate is) and Timer 2 to do the actual PWM (at the maximum rate possible, 16 MHz / 256 = 62500 Hz). But, by keeping the playback interrupt short enough, it is possible to do away with just one timer and simplify the code a bit. All it takes is telling the AVR to trigger an interrupt when the PWM timer overflows and feed samples from the interrupt service routine. The ISR will be called every 256 clock cycles, but that's long enough for a couple of table look-ups. A code excerpt:</p>
<pre><br />void modem_setup()<br />{<br /> // Configure pins<br /> pinMode(SPEAKER_PIN, OUTPUT);<br /><br /> // Set up Timer 2 to do pulse width modulation on the speaker<br /> // pin.<br /><br /> // Source timer2 from clkIO (datasheet p.164)<br /> ASSR &= ~(_BV(EXCLK) | _BV(AS2));<br /><br /> // Set fast PWM mode with TOP = 0xff: WGM22:0 = 3 (p.150)<br /> TCCR2A |= _BV(WGM21) | _BV(WGM20);<br /> TCCR2B &= ~_BV(WGM22);<br /><br /> // Do non-inverting PWM on pin OC2B (arduino pin 3) (p.159).<br /> // OC2A (arduino pin 11) stays in normal port operation:<br /> // COM2B1=1, COM2B0=0, COM2A1=0, COM2A0=0<br /> TCCR2A = (TCCR2A | _BV(COM2B1)) & ~(_BV(COM2B0) | _BV(COM2A1) | _BV(COM2A0));<br /><br /> // No prescaler (p.162)<br /> TCCR2B = (TCCR2B & ~(_BV(CS22) | _BV(CS21))) | _BV(CS20);<br />}<br /><br />void modem_start()<br />{<br /> // Key the radio<br /> radio.ptt_on();<br /><br /> // Enable interrupt when TCNT2 reaches TOP (0xFF) (p.151, 163)<br /> TIMSK2 |= _BV(TOIE2);<br />}<br /><br />void modem_stop()<br />{<br /> // Release PTT<br /> radio.ptt_off();<br /><br /> // Disable playback per-sample interrupt.<br /> TIMSK2 &= ~_BV(TOIE2);<br />}<br /><br />// Service routine for TIMER2's overflow interrupt.<br />// This is called at PLAYBACK_RATE Hz to load the next sample.<br />ISR(TIMER2_OVF_vect) {<br /> // [...] load the next sample<br /> OCR2B = next_sample;<br />}<br /></pre>
<p><br />And that's it. We call <em>modem_setup()</em> once at the beginning to set Timer 2 to the proper mode. Then we call <em>modem_start()</em> to transmit and <em>modem_stop()</em> to stop. <a href="http://code.google.com/p/trackuino/source/browse/trunk/src/modem.cpp">You can see the real implementation here</a>. These are the results:</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/PmUNu_DYhCFOzwYe1F19VZnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhstfwiu09X8ISowJj0Mehj6-olByUGzlMmpMhce_cUjAN_Hcvxghyphenhyphenw5SbE2HsoH2vjMCoxwuFycYvU8R0WJoBbyiM_hwfXkynA6DJBtgPv6uXkKYomHMhGhSgWRejqtyRtTYTCSgbyiNyL/s288/mx146%252520rc%2525208k2%2525200u1.PNG" alt="" width="288" height="238" /></a><br />
<div style="text-align: center;"><em>PWM filtered/unfiltered</em></div>
</td>
</tr>
</tbody>
</table>
<p> </p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/ZcMup0TFVZ6t46ZJk8RfYJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizDRD_y2n7zuaEaPLdc3l3ik8TMG2VyzhMiRhX_2Vi8oOcpzBkeBiyj2O7WSQH8_r_dPF1XH1tRi28NPFKRLl7P79yEb8WBVABqfQvQiY9Gdx5rPtOfkJ8f0Dl7eM0PgnV2rO-5tQVuhGk/s288/mx146%252520rc%2525208k2%2525200u1%252520icom%252520229h.PNG" alt="" width="288" height="192" /></a><br />
<div style="text-align: center;"><em>Received signal (MX146)</em></div>
</td>
<td><a href="https://picasaweb.google.com/lh/photo/pPV_PMddqu9eGmpsBWef6pnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKa3pUCz21YJiJaitqQzcYQrdfOOXbXfgaTv0af9aBNp8RKg2WUTer-Z2uu-Od5P8TPdSHRNr0H4TSPfYp8Wo4V3UJxbm-S8B9wV6R2f6IhLG5lxCs6a6ILW_t7TKvmKJrfJaQY8E75bLL/s288/hx1%252520icom229h.PNG" alt="" width="288" height="192" /></a><br />
<div style="text-align: center;"><em>Received signal (HX1)</em></div>
</td>
</tr>
</tbody>
</table>
<p><br />On the first image you can see the PWM output (below) and the same PWM signal filtered by an RC low-pass filter with cut-off frequency = 2800 Hz (above). Can you see the phase offset between the two signals? That's a consequence of the RC filter. There is some ripple at 62.5 KHz resulting from the PWM itself, but the transmitter and receiver's own filters took care of it as you can see in the the other two pictures. One thing I noticed is a bigger gain of the signal transmitted with the MX146 compared to that of the HX1. Perhaps I am overmodulating the MX146?</p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com4tag:blogger.com,1999:blog-860575004929197734.post-203046958825514872010-04-10T07:18:00.000-07:002014-08-08T07:44:00.681-07:00Testing a Radiometrix HX1 radio<p>I've got these 3 modules from Radiometrix. Look how nicely packed these came!</p>
<ul>
<li><a href="http://www.radiometrix.com/content/hx1">HX1</a>: VHF transmitter, hard-tuned to 144.8 MHz, outputs 300mW. Consumes 120mA at full RF.</li>
<li><a href="http://www.radiometrix.com/content/nrx1">NRX1</a>: VHF receiver, hard-tuned to 144.8 MHz</li>
<li><a href="http://www.radiometrix.com/content/uhx1">UHX1</a>: VHF transceiver, can operate on any frequency in a 2 MHz range, outputs 500mW (adjustable).</li>
</ul>
<p>I've tried the HX1. It outputs 200mW according to my power meter. The 100mW loss might be due to the dirty connection I made from the breadboard to the SO-239 connector, bad shielding or the meter itself but I still haven't figured it out completely.</p>
<p>I've got the HX1 partly inspired by <a href="http://www.sbszoo.com/bear/construction/traker/utrak1.3/utrak-V1-3.htm">VE6SBS Barry's page</a>. He successfully tracked a balloon using an HX1 radio from 600 km away. Not bad for 300 mw! I have been able to reach digipeaters in the ~35 Km range with ~50% success rate using the HX1 and a DIY 6 elements yagi antenna. With my <a href="http://trackuino.blogspot.com/2010/04/trash-digging-at-its-finest-111-swr-vhf.html">trash-dug omni antenna</a>, though, the success rate goes down to ~0.01% (success rate with the <a href="http://trackuino.blogspot.com/2010/04/testing-srb-mx146.html">SRB MX146 @500mW</a> and the omni was ~4%) , even though I have direct line of sight with the remote digipeater. I fear losing the ballon after it goes a few kilometers high, but apparently altitude has a huge impact in VHF propagation, and Barry's experience is a good proof of it.</p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/35zf5EKVV2cybzcporgmjJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0q5arRBds1ewhsxH2lA5VcALHk-j-J9ovu1Cki0NMy8RF_NeGVD1s9tJ9Zs_jn5-qoFPcvC5NOCbJFzOE8hQrzk9hwaQg3E21OWnIlarxEaUlcArjRG1yIxl8D8aXx_uR9unpdcm7x7A6/s288/05042010361.jpg" alt="" width="216" height="288" /></a></td>
<td><a href="https://picasaweb.google.com/lh/photo/eAmL5vsfHn32UIDloqthvZnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj63GDxR4hjo_CDt95xFazw0oRn0q3o8x9x81n00tvmYoH3OhluuaK5iLSol0XgPEX-sgFMrK8qrrdlYohuFlCLPSwRd89sLowqeMTdhSbF8dTgrHtgmfLkFTY21ZSCr7OOzs8MHhBigRXh/s288/08042010371.jpg" alt="" width="288" height="216" /></a></td>
</tr>
</tbody>
</table>
<p>The other issue Barry was worried about is the high frequency drift this device experiences with temperature. I think there is little to do here except taking care of good thermal insulation. I'm actually thinking of using the HX1 as a heat sink for the voltage regulator...</p>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com10tag:blogger.com,1999:blog-860575004929197734.post-6904782104430459402010-04-05T12:46:00.000-07:002014-08-08T07:44:00.722-07:00Source code is up!You can find the source code of the APRS tracker here: <a href="http://code.google.com/p/trackuino/downloads/list">http://code.google.com/p/trackuino/downloads/list</a><div><br /></div><div>Current functionalty:</div><div><ul><li>Reads GPS NMEA messages from Arduino pins 0 and 1 (serial RX/TX)</li><li>Outputs APRS position messages including latitude, longitude, altitude, course, speed and GPS time</li><li>Can connect to an SRB MX146 via pins 3/4 using I2C and interface with its controller to change frequency or read the temperature sensor.</li><li>Generates an AX.25 standard AFSK 1200 baud signal. The Arduino doesn't include a DAC, so analog signals must be generated by either using a resistor ladder or PWM. I chose the latter, since it involves less additional electronics.</li></ul></div>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com0tag:blogger.com,1999:blog-860575004929197734.post-74882996035748280292010-04-05T05:37:00.000-07:002014-08-08T07:44:00.728-07:00Testing the SRB MX146<p>I just got an <a href="https://www.argentdata.com/catalog/product_info.php?products_id=81">SRB MX146 module</a>! It puts out 0.5 watts and operates on any frequency from 144 to 148 MHz. The frequency can be chosen from among a set of pre-programmed memories, or interfacing directly with the controller using I2C. Changing frequencies on-flight would allow transmitting position messages on the APRS frequency, then switch to a different frequency and send non-APRS data (real-time photos, for example).<br /><br />This is my current set-up:<br /><br /></p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td><a href="https://picasaweb.google.com/lh/photo/m4dNDtyz8uqHs1sj92LZzZnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht3AUe2MEylkk4bX5LH3l_fEVRJIlEiiRrdCXmEZJnrJ3EDH5MsloXYfobX7Ysxpvp6pzvmUNFuKIpuiDGrcnk3dNHmuiVzUpYicf5o65TwlB3CWuIiNOxdAoyygi_Evf1CJjcNksRV0oI/s288/05042010337.jpg" height="216" width="288" /></a><br />
<div style="text-align: center;"><em><span style="font-size: small;">The rig</span></em></div>
</td>
</tr>
</tbody>
</table>
<p></p>
<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000080">
<tbody>
<tr>
<td>
<div style="text-align: center;"><a href="https://picasaweb.google.com/lh/photo/ftNRU8YgM_HSCj3iPhKLGJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjka2Y3Yo0mXwCIStgvtOY8gAVoIm4FZc5VkqQnOh_US3q3dK8OMn8rwKmGD0gTQlT0aFRBNLO6j4Bsgw6vi5ha3b4GnYMc6ZqSeCh481sATAn-wFn7e07gOpFyVGQvea89D61Je7rhpb2Y/s288/05042010349.jpg" height="216" width="288" /></a></div>
<em>
<div style="text-align: center;"><span style="font-style: normal;"><em><span style="font-size: small;">MX146 outputting 1/2W</span></em></span></div>
</em></td>
<td><a href="https://picasaweb.google.com/lh/photo/pTtDCYwpg2zBR-4LK9o5CJnq9lVfPF5iMGe3GtrhdJM?feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTm3DUggMAJFbeZsVa-rrSNeT65bq535uWNmILDibB3KVgs5UBUTphxHpbCypLa6kKTD-bBbLNYtz74a70m_VOVx-ww8Ruele46tJBvLAqRCt4YxZaNGqfeU1EI0_fhqXkAUHPH4hW-a_8/s288/05042010358.jpg" height="216" width="288" /></a><br />
<div style="text-align: center;"><em><span style="font-size: small;">LDO regulators</span></em></div>
</td>
</tr>
</tbody>
</table>
<p><br />On the first picture:</p>
<ul>
<li>An Arduino, the "brain" of the system. I use the internal UART to interface with the GPS and four pins for the radio, one carries an AFSK 1200 baud signal modulated with PWM, another controls the PTT, and two more for I2C.</li>
<li>The GPS (the little red board) is a Venus <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9171">634FLPx I got from here</a>. It is supposed to work above 18 Km according to their datasheet. Plus, they have a very responsive tech support (I actually confirmed the CoCom limits with them). It fixes the position 5-30 seconds after a cold start, but you can feed it the ephemerides of the next 7 days and it will then fix in less than 5 secs. This is a 3.3 volts device, so it needs some kind of voltage conversion. The easiest and safest way to convert 5v to 3.3v is <a href="http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=65">by using a diode as explained in this nice tutorial</a>. The 3.3 volts don't need conversion back up to 5, since 3.3 volts is enough for the AVR chip to consider it a logical high.</li>
<li>On the breadboard, there is also a low-pass filter to get rid of the PWM high-pitch frequencies. PWM is done at the maximum rate allowed by the AVR's timer 2, ie. 62.5 KHz (16 MHz / 256), so this is probably not needed anyway.</li>
<li>The MX146 module is connected to the output of the LPF via a coupling capacitor and a voltage divider to bring the 5 volts off of the Arduino down to the 500mV peak-to-peak required by this device. The PTT is internally pulled-up to 3.3v by the MX146, so an open-collector transistor justs shorts it to ground on transmission.</li>
<li>Finally, I had to use three different regulators, since all 3 devices take different input voltages. In order to save some power, I used LDO regulators rather than the classic 78xx family. The LDOs usually require around 1-1.5 volts less than the matching 78xx, which means one less battery cell to lift!</li>
</ul>
<p> </p>Javihttp://www.blogger.com/profile/16272655712298110840noreply@blogger.com1