26 foot 1967 Boat: Massive Update pt1

20140604_165449

A few months ago Cappie (co-founder of NarwhalEdu) and I bought a boat off  craigslist for a very small amount of money and have since been working on attaching pieces and getting her shipshape again.

We actually could have gotten her in the water much sooner if it weren’t for several mishaps with the registration and titling office until finally we got on the phone with the right person.

Here’s a summary of our trials and tribulations with the boat. I’ve been keeping it under wraps (har har… it has actually been under a tarp for weeks now), but over the last few months have gently broken the news to my parents that I will be living on this boat. So now I’m free to blog about it!

First Impressions

IMG_0673

Cappie found the boat on craiglist in February while looking for a dinghy. It was listed for $500. Wow! What was up with that — a 26 foot boat for that much? Was it falling into pieces? After some conversations back and forth that went roughly like this:

Cappie: So, how do you feel about twenty-six foot boat.

Nancy: Lol wat? …seems lulzy.

Nancy: …wait, are we actually serious about this?

Cappie: I dunno.

Nancy: … … I dunno either. Lol! Boat!

Cappie: Boat!

we decided to investigate right away. We weren’t sure why someone would sell it for this price. Cappie theorized that maybe some older guy just wanted the boat to be in good hands with some youngsters. I was very skeptical of this, but it turned out to be the case!

We got some input from our friends who said things like:

“Boat stands for Bring Out Another Thousand” and “The happiest days of a boat owner’s life are the day she buys the boat and the day she sells it.” One person said simply “Don’t do it” and refused to talk to us further. Well. One thing everyone agreed on was that the woodwork inside was beautiful. The owner at the time was a carpenter and had spent many years working on this boat.

After some consideration we decided to go for it. The money would only be $100 up-front and we could at any stage decide to abandon the project.

Initial Work

  1. Lightly sanded the whole keel while wearing respirators. Lead paint yay! Orbital sanders were used
  2. Lightly sanded the deck down to prepare for a new deck paint job. Sandpaper was used
  3. Removed a lot of junk from inside the boat and vacuumed the whole place.
  4. Scrubbed mildew off the roof and other places

On the bureaucracy side, mostly we just got really angry and frustrated because it sounded like they wanted us to pay 20 years of excise taxes on a boat that was never used. As recent college graduates working on startup, a few hundred dollars is a significant chunk of change.

Trailering

At that point, we needed to move the boat out of the Worcester warehouse it was stored in since the warehouse was scheduled to be torn down.

We asked around and finally learned that marinas in Boston all wanted insurance, which we couldn’t get without a hull ID number, which we didn’t have because our boat was so old. However, we found a marina that was kind enough to put us up. We found them through a trailering service they advertised on their website. Turns out, they drove all the way down only to learn that their trailer was too big to fit inside the warehouse between the warehouse pillars!

20140530_155343

Sad. But they were able to recommend to us someone else who had a smaller trailer.  And man, seeing the hydraulic lifters in action was pretty sweet (the big trailer even had wireless controls for one), as well as just how awesome the drivers were at driving geometry and precise maneuvers, and seeing the drivers confidently pull out the stands and “jenga” out the blocks was impressive.

IMG_20140604_133856

Well, $500 later (and a bunch of effort securing the mast down and bringing it on top of the boat) the boat was in Fairhaven. We wrapped it up in a tarp and left it there.

A few weeks later, we return to find a flood inside… we hadn’t noticed because after it rained it would dry out and drip out over a few days. The beautiful woodwork warped even. We puzzled over what was going on and where the water was coming from for a while, before realizing that there were several holes we didn’t tape over in the bow and also

20140718_130146

there was a valve that we hadn’t opened to let all the rainwater coming in through the deck drains out. DERP. It actually poured out water for several minutes like that and formed a small lake.

Next update: Janky watt-hour testers for boat batteries, honeycomb nest discovery, HIN dremeling, EPO inspection and detective work (what is the boat actually?), registration and titling issues, troubleshooting an old outboard motor, and attaching the gunnels and trim, costs of living in a marina (liveaboard) vs paying rent.

Python -> Adafruit nrf8001 bluetooth low energy breakout in 20 minutes (Ubuntu 14.04)

As part of my work on Swarmbuddies (robots that dance to music and create formations)

we decided to use bluetooth low energy for smartphone support, but also needed it to work on the desktop side for our computer vision software to work.
Here are the steps we needed to take to get it working.

1) Install Ubuntu 14.04

This is the easiest path. Really recommended, since bluez-5.20 wants some new version of dbus which can be installed on 12.04, but which will crash your computer incredibly hard when you reboot.

2) Install the latest version of bluez, bluez v 5.20 (or check http://www.kernel.org/pub/linux/bluetooth/ for the latest version), and uninstall your current version. Major help from jaredwolff.com/blog/get-started-with-bluetooth-low-energy for this step!

sudo apt-get remove bluez
sudo apt-get remove bluez-cups
sudo apt-get remove bluez-hcidump
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.20.tar.xz
 tar -xvf bluez-5.20.tar.xz
 cd bluez-5.20/
 sudo apt-get install libudev-dev libical-dev libreadline-dev libdbus-1-dev
 ./configure --enable-library --disable-systemd
 make
 make check
 sudo make install
 sudo cp attrib/gatttool /usr/bin/

3) On the hardware side, your arduino should be hooked up and programmed as per Adafruit’s tutorial.

Let’s test your connection. Plugin your CSR 4.0 dongle ($6 on ebay) if your laptop doesn’t support bluetooth 4.0 (or even if it does, we’ve found the dongle to be more reliable):

sudo hcitool lescan

If this succeeds you should see a bunch of scrolling information, including the MAC address of the nrf8001 breakout, which should be something like “EF:FC:D3:56:41:B7”. If it says file descriptor not found or otherwise exits immediately, use

$ dmesg | tail

to check that your dongle is being recognized by your computer.

4) Open Arduino and the serial monitor. Now try writing wirelessly to the Arduino with gatttool

$ sudo gatttool -b EF:FC:D3:56:41:B7 -I -t random
> connect

The white characters should turn blue. Now try writing to the UART service:

char-write-cmd 0xb FF00FF

5) You should see “3 bytes received” and your command on the Arduino.

6) Now to script it!

a) We need to change the Arduino code to do what we want. Here is an example of how to take the . A small explanation: If you don’t cast it to byte, the buffer is an array of characters which go to 128 instead of 255. I haven’t figured out how to check if it’s from the desktop or the smartphone, so once you cast to byte you lose compatibility with the default nRF UART application on Android and your Arduino will only process computer commands correctly.

https://gist.github.com/nouyang/2a6a733d8facd23115a4

Insert the arduino.ino code there or similar code into your Arduino IDE and upload it.

b) Create a folder and download the files at  https://gist.github.com/nouyang/2a6a733d8facd23115a4 somewhere. Modify NUMBOTS in constants.py to the number of breakouts you want to connect to.

If you’re looking at the btle-server.py code, please note that reading the pipe and setting the pexpect delay to 0 are critical for your bluetooth connection to not lag or take a while between commands.

self.con = pexpect.spawn('gatttool -b ' + self.ble_adr + ' -I -t random')
self.con.delaybeforesend = 0 #THIS LINE IS SUPER IMPORTANT
self.con.read_nonblocking(2048,0) #flush the read pipe!! SUPER IMPORTANT

c) Look at the processing or else the python code.  Modify it to your use.

Usage

Tab 1

$ sudo python btle-server.py

(hit “y” if your dongle doesn’t show up the first time, I only wait a second so sometimes the dongle doesn’t catch your device. If you try a few times and it doesn’t work, check sudo hcitool lescan to make sure your device is advertising. Try hitting reset on it.)

Tab 2

$ python python-client.py

Tada! That’s it! Here it is working on the computer:

I had to simplify the code a lot from our current structure, so let me know if it makes sense or doesn’t run.

For more information about how I figured all of this stuff out, see:

https://forums.adafruit.com/viewtopic.php?f=19&t=56332&sid=1423cb2d05389f479c2d5dd164d14e35

http://stackoverflow.com/questions/24564587/communicate-between-a-processing-sketch-and-a-python-program/24565160?noredirect=1#comment38049611_24565160

Like this tutorial? Want to take a class on programming your very own swarm of robots or have future tutorials like it? Back us on kickstarter!

Bluetooth Low Energy (4.0) on Ubuntu 13.10: Advertisements, Sending and Receiving

Here is a quick tutorial on how to send and receive data without pairing with ubuntu 13.10 and two CSR 4.0 BTLE dongles ($12 including shipping from ebay for both dongles). Surprisingly straightforward.

  • install things

$ sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev bluez wireshark

  • plug in the first dongle (it should show up in hciconfig as “hci0”)
  • start LE scan capture

$ sudo hcitool lescan (you’ll see it spit out things such as “00:1A:7D:DA:71:0D (unknown)”)

  • start wireshark as root

$ sudo wireshark

  • In wireshark, start capture on bluetooth0
  • plug in the second dongle, should show up as hci1
  • program hci1 with hciconfig

$ sudo hciconfig hci1 noleadv (sometimes you can skip this step, sometimes the next step, leadv, will throw up “LE set advertise enable on hci1 returned status 12” if you don’t do noleadv first)

$ sudo hciconfig hci1 leadv

$ sudo hciconfig hci1 noscan

$ sudo hcitool -i hci1 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00

  • you’ll see the terminal spit out:

< HCI Command: ogf 0x08, ocf 0x0008, plen 32 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00

> HCI Event: 0x0e plen 4 01 08 20 00

  • On Wireshark, you should now get a packet and see the above data in it.

 

Screenshot from 2014-06-29 02:16:20

Python

Right now, I have only figured out how to read the advertisement data, not set it.

This is using code on stackoverflow: http://stackoverflow.com/questions/23788176/finding-bluetooth-low-energy-with-python which I saved as ble-python.py. If you add this line, it will print out the payload:

print(':'.join("{0:02x}".format(x) for x in data[44:13:-1]))

$ sudo python3 ble-python.py

00:1a:7d:da:71:09 c8:00:00:00:00:61:a9:07:ad:d1:17:2f:a1:c4:4b:f5:73:f4:39:0a:e2:15:02:00:4c:ff:1a:1a:01:02

You can see that both the manufacturer ID and the advertising payload is now printed out.

UPDATE 30 June 2014

Here is how to write data using the second CSR4.0 dongle and python:

import subprocess
dev = 'hci1'
adr = '0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 05 06 07 08 C8 00'
cmd_cc = "hcitool -i %s cmd %s" % ( dev, adr )
subprocess.Popen(cmd_cc.split(),stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()

and if you want to convert strings to hex,

s = 'some data'
" ".join("{:02x}".format(ord(c)) for c in s)

References

http://www.warski.org/blog/2014/01/how-ibeacons-work/ http://en.wikipedia.org/wiki/IBeacon http://hackaday.com/2013/12/05/turning-a-pi-into-an-ibeacon/ https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/adding-ibeacon-data http://stackoverflow.com/questions/22568232/how-to-retrieve-advertising-payload-from-ibeacon-ble
http://stackoverflow.com/questions/23788176/finding-bluetooth-low-energy-with-python
https://www.bluetooth.org/en-us/specification/adopted-specifications, Core_v4.1.pdf, pg 2023 (Bluetooth 4.0 Core Spec. Volume 3, Part C, Section 11.1.4 or 11.1.10)

How do I become a sink for STEM education research, like I am a sink for engineering information?

How do I find the right circles to be as “in” in STEM education as I am in engineering?

Today I want to discuss something that’s been frustrating me for a while: the disparity in my information sources for engineering questions and for STEM education questions.

Here’s what a contrived day looks like (these things have all happened, but not all in one day):

  • Wake up, check my email. Oh, there’s a cool robotics conference coming up soon. And someone sent me a link to the latest hexapod (six-legged robot).
  • Check facebook. Charles posted pictures. “Catalyzed Destruction of a Poly(lactic acid) 3D Printed Bunny (15 photos)”. Huh, I didn’t realize PLA melted like that.
  • Go to work. Work on engineering most of the day with three other engineers. Why aren’t the stepper motors working?? So glad we bought an oscilloscope. After checking stackoverflow, still have no idea how to implement bluetooth low-energy (BLE). Ask friends on google talk and the MITERS mailing list for help. Earlier asked on the Artisan’s discuss and putz-course-6 (the hall I lived on during undergrad’s CS majors list) for BLE help. Crap, no FTDI cable. Facebook chat Charles and get permission borrow one.
  • Chill, read a few friends’ blog posts about their latest technical accomplishment. Oh look, one of my friends is on Hackaday.
  • Grab a snack with a friend after work so that he can help me with our PCB layout software, Diptrace
  • Go to a meeting for contract engineering work. Talk about the latest quadcopters and their costs and how this impacts STEM workshops for high schoolers.
  • Go to MITERS. Rant with my friends about the need for a usable open-source CAD program, and also debate ways we could make a local printed circuit board same-day turnaround manufacturing service.
  • Oh, it’s dinner time, walk with friends over to H-mart and discuss the latest crazy idea we have and bemoan the startups invading our space
  • Meet my friends who stay up until 3 am helping me figure out how to implement bluetooth low energy on our robot.
  • Go home and sleep.

As you can see, if I need engineering help, even just to borrow tools, I have several options:

  • Chat friends a few years older than me or who are more specialized in the field. I have at least ten people I gchat periodically with engineering questions and feel comfortable doing so
  • Email out to engineering lists I’m on, such as MITERS and Artisan’s Asylum discuss and putz-course-2/6, for help
  • Meet people in person for help

I’m also a sink for engineering information. If I do nothing, I still receive tons of information about the latest engineering doodads.

I wish this were the same way regarding information and available resources in STEM education, specifically diversity in STEM education. I want to be a sink for this information. Right now, if I have questions about what’s an effective way to teach pulse-width-modulation, I have no one to gchat. If I have questions about whether my theory that having people creatively build their own things is a good idea and whether it’s worked in the past, I have no one to email. If I need a lengthy strategic session to figure out how I can best help diversify STEM education, there is no one to have lunch with. When I check facebook, I’m not inundated with information or links to videos of the latest STEM education research.

Instead, I have to expend effort and time trying to find all these resources.

My question to you, dear reader, is how can I change this? How do I find the right circles to be as “in” in STEM education as I am in engineering?

Sea Kayaking! Hingham Hull to Peddocks Island (Boston Harbor)

20140615_121420

This Friday, I learned that the PCBs I’d ordered from 4pcb and expected to arrive Saturday weren’t arriving until Monday (silly shipping services that don’t work on weekends). Thus, I decided to join an impromptu camping trip!

I know, I know, after my first time backpacking  a few weeks ago I promised to never do outdoors things again and instead vegetate in bed and watch movies. Oops.

Okay, wait, actually there was kayaking involved. Well, it seems like there were other inexperienced kayakers, a lot of people, and some experienced kayakers, so I went full-speed ahead. 😀

The plan was to go with the tide out on a calm-ish sea to some tiny island 3 km out from hingham hull, to Lovell’s Island I believe. Alright. After some shenanigans, I am approved to go along the trip with some MITOC gear rented by Molly, who is actually boathouse-approved.

20140614_171108

Since MITERS is in the same building as the MITOC boathouse, I had often seen people unloading and loading kayaks from cars, but I never thought I’d be one of those people. Hurray for infiltrating new friend circles! This time, it was through the coworking space NarwhalEdu works out of, the pirateship. In total there were nine of us, over half of who were from Iceland and who happened to be in Boston for a month.

The first ordeal was figuring out how to strap the kayaks to the car. I was pretty dubious about the light foam pads (blocks) and straps we used, and the whole tieing it through the car deal.

20140614_173809

Off we went, a little nervously. We shoved the boats toward the center, but they tended to move outwards as we travelled. I read up on kayaking on the internet on the way while eyeing the kayaks frequently to see if they were looking shaky.

Probably I should have just asked Molly about how a sea kayak works.  I, not being vocal enough about the fact that I had never been kayaking before, let alone sea kayaking, rather drastically changed the course of our trip. See you some other time Lovell’s Island 🙂 I still had an absolutely awesome time though.

20140614_200447

Here are the results of our food pit stop at Whole Foods. I would like to thank Cappie and Sheep for introducing me to pickled pepperocini peppers. Sooo delicious. We also grabbed toilet paper, gallon ziplock bags, and instant coffee

Our packing list was recommended by Erik as:

– Food
— Water (1 gallon aka 4 liters a person)
— Clothes that can get wet (running shorts or swim trunks are a
good idea)
— Clothes that keep you from getting wet (if it rains)
— Shoes or sandals that can get wet, and shoes that can stay dry
— Tent/shelter
— Sleeping bag
— Headlamp/flashlight
— Knife, utensils
— Lighter
— Bandaids, tape, basic first aid kit (I can bring)
— Medium-sized dry bag to hold some clothes and valuables that can’t get wet

The amount of water was a bit surprising to me, since while backpacking in Virginia I consumed at most 2L of water a day. Then I realized there weren’t any water sources on the island, so this included water for oral hygiene and cooking and coffee, as well as an emergency amount of water.

All in all I ended up with a 55F sleeping bag, sleeping pad, my giant winter coat (super happy I brought it), long synthetic pants, long rain pants, synthetic full-sleeve jacket, three shirts, short pants, two pairs of underwear, socks, flip flops,  and velcro sandals. Headlamp was critical, of course. A lot of this was borrowed from Molly — thanks Molly! Instead of a dry bag, I used a large trash bag, and that was okay. Sunscreen was critical.

If I did this over again, I would have packed some comfortable closed-toed shoes (there are actually shoes called boat shoes!), since with the flip flops and sandals I just kept getting dirt and rocks in them. Luckily it didn’t rain at all.

Anyway, we eventually set out around when the sun is setting. It’s dark by the time we get going, but the moon is nearly full (albeit behind clouds) so there’s plenty of light. The headlamps help us identify each other and hopefully keep night-time boats from crashing into us.

This is where I get a crash course in kayaking.

  1. These kayaks have steerable rudders which can be pulled up or down from the water by ropes near you when you are sitting in the kayak. These rudders are turned left or right by pedals. Me: “I wonder why I am drifting right, it sure is hard to paddle straight like everyone else.”
    There was this really classic moment where someone asked me to test my pedals, and I really had no idea what they were talking about.
  2. Be sure to pull the pedals up to where you can comfortably reach them without leaning back. This will help a lot with fatigue.
  3. You can use both hands when pulling a stroke. One push, one pull.
  4. The skirts are used to prevent water from the paddles from soaking you all the time.
  5. You will get wet.
  6. Pedal on the same side you want to turn, paddle on the opposite side.
  7. Fighting the current will make you fairly sad. Having the wind and current in opposite directions will make you fairly sad too.
  8. Point your kayak into waves, e.g. from a passing powerboat.
  9. Give a good distance from shore to avoid crashing into it. If you do crash into it, the only solution may be to get out of the kayak and relaunch.
  10. Life jacket is required, bailer, water, and snacks go behind your seat.
  11. Small things go in first into the tip of the canoe and then larger things.
  12. Be sure to beach your boat above high tide if it will be there for a while.

Eventually after the experienced kayakers, who are staying behind to help me, realize I am making no progress at all against the current, we abort the plan and decide to go to the nearby Peddocks Island and make the best of it.

20140615_003510

20140614_232110

We reach the island, which in the daytime turns out to be super close by. We set up a fire and cook awesome jumbo marshmellows and other food and set up a campsite.

Screenshot from 2014-06-16 01:05:36

(click to enlarge)

Anyway, pro-tip, if you’re going kayaking for the first time probably best not to do it out on the sea in the dark against the current with a group of people who you don’t really know that well and are more experienced / stronger than you are.

As the tide comes up, our campsite gets flooded! Luckily the tents were rescued, but turns out the large flat area that seemed perfect for a campground was large and flat because at high tide it becomes a pool. Here it is at low tide:

20140615_065524

Sarah found some antlers, there was a large horseshoe  crab shell lying around, and I learned about razorback clams, which look like rectangles!

I really liked the beaches on this island because of the rich purple rocks and seashells, which I didn’t take a picture of. At low tide there were also lots of hermit crabs wandering around, and Molly said she saw crabs.

Also, there were flat rocks that were great from skipping, and almost everyone demonstrated some amazing skills at stone skipping shortly before we left on the return trip. I’m talking 10 skips here, where the stone doesn’t just plop and sink but skips along so fast that eventually it disappears into the water.

Molly collected water samples to play around with at BOSSLAB.

20140615_125823

That was pretty much it. Some walking around, some kayaking, a lot of food eating and talking, some running fully clothed into the ocean to cool down on my part (it was so hot during the day! almost everyone got sunburned despite liberal application of sunscreen). We went back at high tide at 1:55 and crossed carefully, since during the day there were a TON of boats, some of them speedboats going incredibly fast.

No pictures of us kayaking because my phone was tucked inside two or three layers of plastic bags.

nectarine

picture thanks to sarah. nectarines are so great

groupphoto

group photo thanks to erik, not pictured because he is taking the picture

Thanks to all the people who put up with me joining their trip, i think everyone had fun despite change of islands. I wonder if I will ever go sea kayaking again. That feeling of going to an island and camping whenever you want to, of reaching places you didn’t think you could reach, was pretty cool. And I do owe Lovell’s Island a visit… ^^