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

<channel>
	<title>PARTS Projects &#187; Group Projects</title>
	<atom:link href="http://colab.portlandrobotics.org/category/group-projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://colab.portlandrobotics.org</link>
	<description>Collaborative Space for PARTS</description>
	<lastBuildDate>Sun, 03 Jul 2011 07:04:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Geographic Center of Zipcodes</title>
		<link>http://colab.portlandrobotics.org/2011/04/16/geographic-center-of-zipcodes/</link>
		<comments>http://colab.portlandrobotics.org/2011/04/16/geographic-center-of-zipcodes/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 00:08:33 +0000</pubDate>
		<dc:creator>plskeggs</dc:creator>
				<category><![CDATA[Group Projects]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=344</guid>
		<description><![CDATA[At the last meeting I took down everyone&#8217;s zipcodes, in order to  determine the geographic center of the members present. The goal was to determine (roughly!) where a better group project meeting site would need to be located if we move away from bRainSilo. There were only 14 people present, though many regular members were [...]]]></description>
			<content:encoded><![CDATA[<p>At the last meeting I took down everyone&#8217;s zipcodes, in order to  determine the geographic center of the members present. The goal was to determine (roughly!) where a better group project meeting site would need to be located if we move away from <a href="http://www.brainsilo.org">bRainSilo</a>.</p>
<p><span id="more-344"></span></p>
<p>There were only 14 people present, though many regular members were there. I added Fred to the list, even though he was not present.  I could not easily find an online tool that would determine the  center of a set of zipcodes, so I wrote my own using a combination of a geonames.org api and a google maps api and Python.  I basically find the latitude and longitude of each address or centroid of each zipcode; average them all, ignoring spherical distortion since this is a pretty small patch of the  Earth; then convert that back into an address.</p>
<p>(Turns out the google maps api does not give the official census  bureau zipcode centroid, so I use geonames&#8217; api when all I have is a  zipcode.  If I had a full address, I used the google maps api.)</p>
<p>Anyway, the center is surprisingly central east-west but further  south than I expected. It&#8217;s within 2 miles of PCC Sylvania and also 2  miles north of the I-5 and Hwy217 interchange.</p>
<p><a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=10911+SW+61st+Ave,+Portland,+OR+97219&amp;aq=&amp;sll=45.446674,-122.73988&amp;sspn=0.006835,0.01929&amp;ie=UTF8&amp;hq=&amp;hnear=10911+SW+61st+Ave,+Portland,+Oregon+97219&amp;ll=45.446644,-122.73958&amp;spn=0.006835,0.01929&amp;z=16"></a>Also interesting is that even though google map&#8217;s idea of the  center of each zipcode is different from the official center in most cases,  the errors all seem to average out, so the address I get just using google&#8217;s api is within 0.1 miles of the more accurate one.</p>

<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># center_of_zipcodes.py</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># find address corresponding to center of a set of zipcodes using google maps api</span>
<span style="color: #808080; font-style: italic;"># written by Pete Skeggs, 4/5/2011, for PARTS</span>
<span style="color: #808080; font-style: italic;"># updated 4/13/2011 to use geonames.org API to get true census bureau centroids when just given a zipcode; also, use an address when known and look that up with the google maps api</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">httplib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> json
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># define functions</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> ztoll<span style="color: black;">&#40;</span>z<span style="color: black;">&#41;</span>:
   conn <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPConnection</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;api.geonames.org&quot;</span><span style="color: black;">&#41;</span>
   <span style="color: #808080; font-style: italic;"># note: you need to replace 'demo' below with a valid username; I decided not</span>
   <span style="color: #808080; font-style: italic;"># to share mine</span>
   url <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;/postalCodeLookupJSON?postalcode=%s&amp;country=US&amp;username=demo&quot;</span> % z
   conn.<span style="color: black;">request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;GET&quot;</span><span style="color: #66cc66;">,</span> url<span style="color: black;">&#41;</span>
   r <span style="color: #66cc66;">=</span> conn.<span style="color: black;">getresponse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   o <span style="color: #66cc66;">=</span> json.<span style="color: black;">load</span><span style="color: black;">&#40;</span>r<span style="color: black;">&#41;</span>
   c <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'lat'</span> : <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'lng'</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
   <span style="color: #808080; font-style: italic;"># format returned:</span>
   <span style="color: #808080; font-style: italic;">#{&quot;postalcodes&quot;:[{&quot;adminName2&quot;:&quot;Multnomah&quot;,&quot;adminCode2&quot;:&quot;051&quot;,&quot;postalcode&quot;:&quot;97210&quot;,&quot;adminCode1&quot;:&quot;OR&quot;,&quot;countryCode&quot;:&quot;US&quot;,</span>
   <span style="color: #808080; font-style: italic;"># &quot;lng&quot;:-122.703348,&quot;placeName&quot;:&quot;Portland&quot;,&quot;lat&quot;:45.530318,&quot;adminName1&quot;:&quot;Oregon&quot;}]}</span>
   c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lat'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> o<span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'postalcodes'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'lat'</span><span style="color: black;">&#93;</span>
   c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lng'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> o<span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'postalcodes'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'lng'</span><span style="color: black;">&#93;</span>
   c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'addr'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> z
   <span style="color: #ff7700;font-weight:bold;">return</span> c
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> addrtoll<span style="color: black;">&#40;</span>addr<span style="color: black;">&#41;</span>:
   conn <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPConnection</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;maps.googleapis.com&quot;</span><span style="color: black;">&#41;</span>
   url <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;/maps/api/geocode/json?address=%s&amp;sensor=false&quot;</span> % <span style="color: #dc143c;">urllib</span>.<span style="color: black;">quote_plus</span><span style="color: black;">&#40;</span>addr<span style="color: black;">&#41;</span>
   conn.<span style="color: black;">request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;GET&quot;</span><span style="color: #66cc66;">,</span> url<span style="color: black;">&#41;</span>
   r <span style="color: #66cc66;">=</span> conn.<span style="color: black;">getresponse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   o <span style="color: #66cc66;">=</span> json.<span style="color: black;">load</span><span style="color: black;">&#40;</span>r<span style="color: black;">&#41;</span>
   c <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'lat'</span> : <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'lng'</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
   <span style="color: #808080; font-style: italic;"># format returned:</span>
   <span style="color: #808080; font-style: italic;"># { &quot;status&quot;: &quot;OK&quot;, &quot;results&quot;: [{&quot;types&quot;:[&quot;postal_code&quot;],&quot;formatted_address&quot;:&quot;Portland, OR 97210, USA&quot;,</span>
   <span style="color: #808080; font-style: italic;"># &quot;address_components&quot;:[{&quot;long_name&quot;:&quot;97210&quot;,&quot;short_name&quot;:&quot;97210&quot;,&quot;types&quot;:[&quot;postal_code&quot;]},</span>
   <span style="color: #808080; font-style: italic;"># {&quot;long_name&quot;:&quot;Portland&quot;,&quot;short_name&quot;:&quot;Portland&quot;,&quot;types&quot;:[&quot;locality&quot;,&quot;political&quot;]},</span>
   <span style="color: #808080; font-style: italic;"># {&quot;long_name&quot;:&quot;Oregon&quot;,&quot;short_name&quot;:&quot;OR&quot;,&quot;types&quot;:[&quot;administrative_area_level_1&quot;,&quot;political&quot;]},</span>
   <span style="color: #808080; font-style: italic;"># {&quot;long_name&quot;:&quot;UnitedStates&quot;,&quot;short_name&quot;:&quot;US&quot;,&quot;types&quot;:[&quot;country&quot;,&quot;political&quot;]}],</span>
   <span style="color: #808080; font-style: italic;">#&quot;geometry&quot;:{&quot;location&quot;:{&quot;lat&quot;:45.5552753,&quot;lng&quot;:-122.7384041},&quot;location_type&quot;:&quot;APPROXIMATE&quot;,</span>
   <span style="color: #808080; font-style: italic;">#&quot;viewport&quot;:{&quot;southwest&quot;:{&quot;lat&quot;:45.5158719,&quot;lng&quot;:-122.7897450},&quot;northeast&quot;:{&quot;lat&quot;:45.5858230,&quot;lng&quot;:-122.6920030}},</span>
   <span style="color: #808080; font-style: italic;">#&quot;bounds&quot;:{&quot;southwest&quot;:{&quot;lat&quot;:45.5158719,&quot;lng&quot;:-122.7897450},&quot;northeast&quot;:{&quot;lat&quot;:45.5858230,&quot;lng&quot;:-122.6920030}}}}]}</span>
   c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lat'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> o<span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'results'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'geometry'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'location'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'lat'</span><span style="color: black;">&#93;</span>
   c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lng'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> o<span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'results'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'geometry'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'location'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'lng'</span><span style="color: black;">&#93;</span>
   c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'addr'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> o<span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'results'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'formatted_address'</span><span style="color: black;">&#93;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> c
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> lltoz<span style="color: black;">&#40;</span>lat<span style="color: #66cc66;">,</span> lng<span style="color: black;">&#41;</span>:
   conn <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPConnection</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;maps.googleapis.com&quot;</span><span style="color: black;">&#41;</span>
   url <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;/maps/api/geocode/json?latlng=%f,%f&amp;sensor=false&quot;</span> % <span style="color: black;">&#40;</span>lat<span style="color: #66cc66;">,</span> lng<span style="color: black;">&#41;</span>
   conn.<span style="color: black;">request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;GET&quot;</span><span style="color: #66cc66;">,</span> url<span style="color: black;">&#41;</span>
   r <span style="color: #66cc66;">=</span> conn.<span style="color: black;">getresponse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   o <span style="color: #66cc66;">=</span> json.<span style="color: black;">load</span><span style="color: black;">&#40;</span>r<span style="color: black;">&#41;</span>
   addr <span style="color: #66cc66;">=</span> o<span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'results'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>u<span style="color: #483d8b;">'formatted_address'</span><span style="color: black;">&#93;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> addr
&nbsp;
<span style="color: #808080; font-style: italic;"># define variables</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># list of zipcodes for PARTS members at April 2011 meeting</span>
addresses <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
<span style="color: #483d8b;">&quot;97007&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97210&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97223&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97034&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97202&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97232&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97224&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97071&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97219&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97086&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97224&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97211&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97006&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97224&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97225&quot;</span><span style="color: #66cc66;">,</span>
<span style="color: #483d8b;">&quot;97229&quot;</span><span style="color: black;">&#93;</span>
lat <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span>
lng <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span>
count <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># main code</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> a <span style="color: #ff7700;font-weight:bold;">in</span> addresses:
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">5</span>:
      c <span style="color: #66cc66;">=</span> ztoll<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">else</span>:
      c <span style="color: #66cc66;">=</span> addrtoll<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;%d. %s: %f, %f&quot;</span> % <span style="color: black;">&#40;</span>count+<span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span> c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'addr'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lat'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lng'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
   lat <span style="color: #66cc66;">=</span> lat + c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lat'</span><span style="color: black;">&#93;</span>
   lng <span style="color: #66cc66;">=</span> lng + c<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lng'</span><span style="color: black;">&#93;</span>
   count <span style="color: #66cc66;">=</span> count + <span style="color: #ff4500;">1</span>
&nbsp;
lat <span style="color: #66cc66;">=</span> lat / count
lng <span style="color: #66cc66;">=</span> lng / count
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;average of %d zipcodes: lat %f, lng %f&quot;</span> % <span style="color: black;">&#40;</span>count<span style="color: #66cc66;">,</span> lat<span style="color: #66cc66;">,</span> lng<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;address at center: %s&quot;</span> % lltoz<span style="color: black;">&#40;</span>lat<span style="color: #66cc66;">,</span> lng<span style="color: black;">&#41;</span></pre></td></tr></table></div></div>

<p>This yields the following output (using a valid geonames.org username &#8212; you need to register for one of your own):</p>
<pre>~$ python center_of_zipcodes.py
1. 97007: 45.450489, -122.865171
2. 97210: 45.530318, -122.703348
3. 97223: 45.447390, -122.795294
4. 97034: 45.409263, -122.684721
5. 97202: 45.484007, -122.636534
6. 97232: 45.528712, -122.636310
7. 97224: 45.409448, -122.801400
8. 97071: 45.144617, -122.858342
9. 97219: 45.457956, -122.707380
10. 97086: 45.444600, -122.537200
11. 97224: 45.409448, -122.801400
12. 97211: 45.565259, -122.644815
13. 97006: 45.520130, -122.860376
14. 97224: 45.409448, -122.801400
15. 97225: 45.498473, -122.778659
16. 97229: 45.548317, -122.827561
average of 16 zipcodes: lat 45.453617, lng -122.746244
address at center: 6655 SW Kingsview Ct, Tigard, OR 97223, USA
~$
</pre>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2011/04/16/geographic-center-of-zipcodes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BrushBot board build Monday 1/10</title>
		<link>http://colab.portlandrobotics.org/2011/01/09/brushbot-board-build-monday-110/</link>
		<comments>http://colab.portlandrobotics.org/2011/01/09/brushbot-board-build-monday-110/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 05:20:31 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[PARTS Swarm]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=322</guid>
		<description><![CDATA[There&#8217;s still a number of BrushBotComm boards that people want to build up, and at Saturday&#8217;s meeting we decided to try for a somewhat impromptu board build at this Monday&#8217;s (1/10) group project meeting.  I realize this is short notice, but at the meeting enough people expressed interest to make it worthwhile.  We can have [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s still a number of BrushBotComm boards that people want to build up, and at Saturday&#8217;s meeting we decided to try for a somewhat impromptu board build at this Monday&#8217;s (1/10) group project meeting.  I realize this is short notice, but at the meeting enough people expressed interest to make it worthwhile.  We can have another small build session later for those who can&#8217;t make it.</p>
<p>Scott&#8217;s bringing the hot-plate reflow system and I&#8217;m bringing the parts.  You bring whatever parts you might have already gotten from me, some magnifying device if needed, a soldering iron (if you have one) and some cash if you haven&#8217;t paid for parts yet.</p>
<p>We&#8217;ll be at the bRainSilo:<br />
bRainSilo.  7pm.</p>
<p>http://brainsilo.org/wiki/Location</p>
<p>See you there!</p>
<p>Monty</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2011/01/09/brushbot-board-build-monday-110/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bot Build Night Oct 18</title>
		<link>http://colab.portlandrobotics.org/2010/10/18/bot-build-night-oct-18/</link>
		<comments>http://colab.portlandrobotics.org/2010/10/18/bot-build-night-oct-18/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 08:17:10 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[Group Projects]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=307</guid>
		<description><![CDATA[A small group of us have been regularly getting together every other Monday night at the bRainSilo to work on swarm bots.  We&#8217;d love to have more people come join us &#8212; especially if you built one of the BrushBotComm boards a while back!  We&#8217;re at the point where we have bidirectional IR comm code [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>A small group of us have been regularly getting together every other Monday night at the bRainSilo to work on swarm bots.  We&#8217;d love to have more people come join us &#8212; especially if you built one of the BrushBotComm boards a while back!  We&#8217;re at the point where we have bidirectional IR comm code working and want to try it out w/ larger swarms.</p>
<p>This get together is not just about swarm bots though &#8212; rather than toiling away alone in the basement on that killer new robot, why not bring it down and work on it in the company of other robot enthusiasts?</p>
<p>7pm, bRainSilo:<a href="http://brainsilo.org/wiki/Location" target="_blank"> http://brainsilo.org/wiki/Location</a></p>
<p>Hope to see you there!</p>
<p>Monty</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/10/18/bot-build-night-oct-18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No 9/6 project meeting</title>
		<link>http://colab.portlandrobotics.org/2010/09/06/no-96-project-meeting/</link>
		<comments>http://colab.portlandrobotics.org/2010/09/06/no-96-project-meeting/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 20:32:09 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[Group Projects]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=301</guid>
		<description><![CDATA[Not enough of the regulars can make it tonight so I&#8217;m going to cancel the BrainSilo build session. Have a great Labor Day! Monty﻿]]></description>
			<content:encoded><![CDATA[<p>Not enough of the regulars can make it tonight so I&#8217;m going to cancel the BrainSilo build session.</p>
<p>Have a great Labor Day!</p>
<p>Monty﻿</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/09/06/no-96-project-meeting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bot Build Night Aug 23</title>
		<link>http://colab.portlandrobotics.org/2010/08/23/bot-build-night-aug-23/</link>
		<comments>http://colab.portlandrobotics.org/2010/08/23/bot-build-night-aug-23/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 07:09:51 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[Group Projects]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=298</guid>
		<description><![CDATA[Ditto below! See you there, Monty]]></description>
			<content:encoded><![CDATA[<p>Ditto <a href="bot-build-night-aug-9" target="_self">below</a>!</p>
<p>See you there,</p>
<p>Monty</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/08/23/bot-build-night-aug-23/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bot Build night Aug 9</title>
		<link>http://colab.portlandrobotics.org/2010/08/09/bot-build-night-aug-9/</link>
		<comments>http://colab.portlandrobotics.org/2010/08/09/bot-build-night-aug-9/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 08:07:25 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[Group Projects]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=293</guid>
		<description><![CDATA[We&#8217;ve been getting together every other Monday night at the silo to work on group projects, but really what we want to see is more robots being built, be it by individuals or groups.  So even if you&#8217;re not interested in the current swarm robot project, feel free to bring your own robot-to-be on down [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been getting together every other Monday night at the silo to work on group projects, but really what we want to see is more robots being built, be it by individuals or groups.  So even if you&#8217;re not interested in the current swarm robot project, feel free to bring your own robot-to-be on down to share in the excitement of mashing together mechanical bits, hard bits, and soft bits to do cool stuff.</p>
<p>And if you DO have brushbots, bring them down and let&#8217;s get them talking!</p>
<p>7pm, bRainSilo:<br />
<a href="http://brainsilo.org/wiki/Location" target="_blank"> http://brainsilo.org/wiki/Location</a></p>
<p>Hope to see you there!</p>
<p>Monty</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/08/09/bot-build-night-aug-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project Meeting July 26</title>
		<link>http://colab.portlandrobotics.org/2010/07/25/project-meeting-july-26/</link>
		<comments>http://colab.portlandrobotics.org/2010/07/25/project-meeting-july-26/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 06:16:49 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[PARTS Swarm]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=290</guid>
		<description><![CDATA[Pete, Tim, Scott and myself will be there.  Will you?  Bring your Brush Bot on down and let&#8217;s get them talking! 7pm, bRainSilo: http://brainsilo.org/wiki/Location Monty]]></description>
			<content:encoded><![CDATA[<p>Pete, Tim, Scott and myself will be there.   Will you?   Bring your Brush Bot on down and let&#8217;s get them talking!</p>
<p>7pm, bRainSilo:<br />
<a href="http://brainsilo.org/wiki/Location" target="_blank"> http://brainsilo.org/wiki/Location</a></p>
<p>Monty</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/07/25/project-meeting-july-26/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project meeting July 12</title>
		<link>http://colab.portlandrobotics.org/2010/07/12/project-meeting-july-12/</link>
		<comments>http://colab.portlandrobotics.org/2010/07/12/project-meeting-july-12/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 22:54:13 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[PARTS Swarm]]></category>

		<guid isPermaLink="false">http://colab.portlandrobotics.org/?p=287</guid>
		<description><![CDATA[Last time Scott and I got four or five BrushBots running around in an arena with comm boards attached &#8212; one configured as a transmitter and the others as receivers. We only had simple RX and TX code running, but the receivers were picking up messages quite frequently; much better than we were expecting, actually. [...]]]></description>
			<content:encoded><![CDATA[<p>Last time Scott and I got four or five BrushBots running around in an arena with comm boards attached &#8212; one configured as a transmitter and the others as receivers.  We only had simple RX and TX code running, but the receivers were picking up messages quite frequently; much better than we were expecting, actually.<br />
But just five bots isn&#8217;t too exciting.  It&#8217;s time to get a bigger swarm together and develop better message passing code!  Bring your brushbots, bring your comm boards and let&#8217;s swarm!</p>
<p>While Scott and I hearded bots around, Tim got his steering control of the brushbots (a homemade toothbrush-head based bot in his case) working.  The really cool thing is that he&#8217;s only using a single vibrating motor, yet still getting steerability!  Come on Tim&#8230; Hurry up and upload the details on how you&#8217;re doing this!</p>
<p>Hope to see you all tonight,</p>
<p>7pm, bRainSilo:<br />
<a href="http://brainsilo.org/wiki/Location">http://brainsilo.org/wiki/Location</a></p>
<p>Monty</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/07/12/project-meeting-july-12/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BrushBotComm board build follow-up Monday</title>
		<link>http://colab.portlandrobotics.org/2010/04/05/brushbotcomm-board-build-follow-up-monday-2/</link>
		<comments>http://colab.portlandrobotics.org/2010/04/05/brushbotcomm-board-build-follow-up-monday-2/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 00:12:48 +0000</pubDate>
		<dc:creator>montyg</dc:creator>
				<category><![CDATA[Group Projects]]></category>
		<category><![CDATA[PARTS Swarm]]></category>
		<category><![CDATA[BrushBotComm]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://parts.laen.org/?p=250</guid>
		<description><![CDATA[Yes, there is another PARTS Project meeting tonight! Time: Monday 4/5, 7:00pm Location: bRainSilo: http://brainsilo.org/wiki/Location We will be continuing with the BrushBotComm boards &#8212; soldering on the final components, including the missing IR LED resistors and the IR LED&#8217;s themselves; making programming cables; and learning how to load code onto them. As I mentioned in [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, there is another PARTS Project meeting tonight!</p>
<p>Time: Monday 4/5, 7:00pm<br />
Location: bRainSilo: http://brainsilo.org/wiki/Location</p>
<p>We will be continuing with the BrushBotComm boards &#8212; soldering on the final components, including the missing IR LED resistors and the IR<br />
LED&#8217;s themselves; making programming cables; and learning how to load code onto them.</p>
<p>As I mentioned in <a href="brushbot-comm-board-isp-programming" target="_self">this blog entry</a> the ArdunioISP should work well for a programmer, and hopefully as a serial link for debugging.  So, if you have a spare Arduino that you can use for a programmer, bring it.  Or, I have a handful of cosmetically defective (but fully functional) Teensy2.0&#8242;s available for really cheap.</p>
<p>Bring:<br />
*BrushBotComm boards and extra parts you&#8217;ve received.<br />
*Soldering iron &#8212; if you have a decent one with a fine tip.  This is especially important this meeting as we have a fair amount of hand soldering to do.<br />
*Desk lamp if you can &#8212; we didn&#8217;t really have enough light last time<br />
*Vision enhancement devices &#8212; I&#8217;ll bring my stereo-microscope and what magnifiers I have, but I think we could have used more last time<br />
*Money for Arduinos if you need one for programming.<br />
*Laptop if you have one to use for programming.</p>
<p>Monty</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/04/05/brushbotcomm-board-build-follow-up-monday-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BrushBot Comm board IR communications</title>
		<link>http://colab.portlandrobotics.org/2010/04/02/brushbot-comm-board-ir-communications/</link>
		<comments>http://colab.portlandrobotics.org/2010/04/02/brushbot-comm-board-ir-communications/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 07:00:50 +0000</pubDate>
		<dc:creator>Scott Dixon</dc:creator>
				<category><![CDATA[PARTS Swarm]]></category>
		<category><![CDATA[BrushBotComm]]></category>
		<category><![CDATA[IR]]></category>
		<category><![CDATA[tiny44]]></category>

		<guid isPermaLink="false">http://parts.laen.org/?p=225</guid>
		<description><![CDATA[I&#8217;ve been doing some experiments with the IR transmitters and receivers used on the comm board.  One outstanding question is what the value of the series resistors (R1 and R2) for the transmitter should be.  We want the message passing distance to be fairly short in order to keep the communications mainly between pairs of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing some experiments with the IR transmitters and receivers used on the comm board.  One outstanding question is what the value of the series resistors (R1 and R2) for the transmitter should be.  We want the message passing distance to be fairly short in order to keep the communications mainly between pairs of bots.  But the IR power should still be sufficient to give reliable communications. Another question is whether or not the voltage from the batteries we are using will be sufficient for the IR receiver.</p>
<p>I made up the following test setup:  For the receiver side, I took one of the IR receivers that we are using on the comma boards and mounted it in a solderless breadboard to make it easy to try resistor values.  I also hooked up a variable power supply and used an ATMega328 LillyPad Arduino to drive the IR LED.  The LillyPad was the only thing I had handy which would run at 8MHz and low voltage.  The power supply was set to 2.75VDC which is pretty much as low as you can go with a 328 running at 8MHz and is around the voltage that the batteries can put out.  I used a test program from the IRremote library (<a href="http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html">http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html</a>) to repeatedly send out 0XD10 which is the Sony code for the ENTER key.</p>
<p>On the receiver side, I used a comm board hooked up to a variable power supply to test how the receiver coped with different voltages.   Monty had written a test program for the receiver side which recognizes Sony ENTER and blinks the LEDs in a particular pattern (although the key codes in irrx.h need to all be decremented by one to be correct).  With this program it is possible to move the comm board around and watch the LEDs to see where successful IR transmission occurs.</p>
<p>As a baseline test, I put in a 100 ohm resister into the IR transmitter circuit which gives about 20ma drive to the IR LED.  Using 5VDC for the receiver, the IR transmission works successfully at quite a long distance (probably across a room).</p>
<p>However, lowering the receiver voltage to 2.85VDC or below results in a failure of the IR receiver to work.  It still registers that an IR transmission is occurring but is unable to recognize the code.  Since the batteries put out more like 2.72VDC, this is a big problem.  After discussing it with Monty, we decided to short out R5, the resistor on the Vcc line into the IR receiver to try to get as much voltage into the receiver as possible.  Fortunately, this seems to work and allows the receiver to work down to 2.53VDC.  So I then hooked up the battery board to the comm board and (with R5 shorted) the receiver works.  The rest of the result below are all done with battery power for the receiver.</p>
<p>I then examined how changing the transmittter series resistor affected the range:</p>
<p>1K ohm            18 inches<br />
4.7K ohm        5 inches<br />
10K ohm         2.5 inches</p>
<p>These distances are for on-axis communications.  I&#8217;ll do some more experiments to see how the off-axis accuracy breaks down and update the table.</p>
]]></content:encoded>
			<wfw:commentRss>http://colab.portlandrobotics.org/2010/04/02/brushbot-comm-board-ir-communications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

