Research

Installation of Boattr on Quintessence

Anton and Adnan installed the boattr microcomputer on Quintessence. Now there are two boattr boxes on the UK Waterways (Blue Morn & Quintessence). boattr runs on a beagle bone black.

The Construction of a Boattr Box

 

Powered Usb Hub for Beagle Bone Black

Another long term todo item ticked today. Adding a powered usb hub to brains , having only one port which was permanent taken by the 4g modem was not very helpful.

Now we can have 4g modem, 3g phone, usb interface for permanently connected stereo hydrophone, wireless and an external hard disk.

Our previous attempt to do so ended up with a fried hub , beaglebone and wireless dongle when accidentally wired the usb hub power to 12v instead of 5V.

Yesterday Anton popped to maplins and got a 4 port cerulian usb hub. Plugged it in and it didn’t work. Anton was very suprised that something as simple as a usb hub would not work. After searching on the internet Anton found that this is a known issue.

The solution is to open the hub and cut the red cable therefore stopping the hub from providing power to the beaglebone.

All working now it seems. Great stuff.

And the installation of the boattr box on Quintessence (using a beagle bone micromputer and a 4G phone, all connected over a USB hub and WiFi access point):

One Wire Network

With boattr we use Dallas 1-wire microlan for a network of temperature sensors. With this post we will make an attempt to document it. Not trying to explain what 1-wire is as it is documented elsewhere on the internet.

1-wire is a very simple communications protocol for sensors. The beaglebone black has two i2c devices ( /dev/i2c-0 and /dev/i2c-1 ) and we are using ‘/dev/i2c-1’. In order to get it to work we will have to add a custom device tree. We did this by reading this very helpfull blog post

For debian the dtc -O dtb -o BB-W1-00A0.dtbo -b 0 -@ BB-W1-00A0.dts command fails because a patch is missing. The easiest way to get around this is to download a patched version from here and use that instead.

  • Copy paste the code in the dts file
  • Compile with dtc command above
  • Copy resulting dtbo file to /lib/firmware
  • Add ‘’‘echo BB-W1:00A0 > /sys/devices/bone_capemgr.9/slots’‘’ to /etc/rc.local
  • Restart

( All the above should be done by puppet for boattr)

The information from the sensors appear in special files under /sys/bus/w1/devices/$ID/w1_slave. Reading /sys/bus/w1/devices/$ID/w1_slave gives as the temperature value in C.

Each sensor has a unique 64bit id that we can use to address it :

 

1
2
3
4
5
sensors.temperature('out','10-000802964c0d'),
sensors.temperature('in','10-0008029674ee'),
sensors.temperature('cylinder','10-000802961f0d'),
sensors.temperature('stove','10-00080296978d'),
sensors.temperature('canal','28-000004ee99a8'),

The temperature method looks like this :

1
2
3
4
5
6
7
8
9
10
11
12
def temperature(name,address)
  @name     = name
  @address  = address
  @basedir  = '/sys/bus/w1/devices/'
  if @@OWdevices.include?(@address) then
    file = File.open("#{@basedir}/#{address}/w1_slave",'r')
    if file.readline().include?('YES') then ## Is CRC valid in the first line? lets read the second and extract the temp
      @temp = file.readline().split()[-1].split('=')[-1].to_i/1000.0
      return { 'name' => @name, 'address' => @address, 'type' => 'temp', 'value' => @temp.round(3) }
    end
  end
end

Hardware

The sensor used is the DS18S20 datasheet.

Standard