Filtering out outliers in Arduino ultrasonic distance sensor data

A friend of mine asked me how he could remove invalid data points from the measurements made by the ultrasonic range finder in his Arduino project. A quick search got me to this page, but some of the links were dead and there was no complete example on the page anyway, so I decided to roll my own.

Here’s my take, written in Python since I didn’t have an Arduino handy for testing. This is based on dropping outliers from recent measurements to come up with a “fixed average”:

#!/usr/bin/env python

# Example on filtering out invalid data points in a stream, coming in from for
# example an ultrasonic distance sensor.

# This test data has two invalid data points; 310 and 210
data = [40, 41, 40, 39, 42, 45, 310, 43, 41, 44, 38, 120, 121, 117, 120, 120, 210, 110, 112, 114, 117, 113, 78, 80, 78, 74, 60, 70, 76]
raw_values = [];

while data :
  # Read a raw value
  raw_value = data.pop()

  # Keep last 5 values stored in an array
  raw_values.append(raw_value)
  if len(raw_values) > 5:
    raw_values.reverse()
    raw_values.pop()
    raw_values.reverse()
  
  # For debugging only; Print out current stored raw values
  for raw_value in raw_values:
    print raw_value,
  
  # Calculate the raw average of all the stored values; This value will be
  # thrown off by invalid values.
  avg = round(sum(raw_values) / len(raw_values))
  print ":",
  print avg,

  # Drop the highest and lowest stored value if we have enough values.
  sorted = list(raw_values);
  if len(raw_values) >= 3:
    sorted.sort()
    sorted.pop()
    sorted.reverse()
    sorted.pop()

  # And calculate an average based on the remaining three values. This is
  # closer to correct, but will be thrown off if there is more than one
  # invalid value currently stored.
  fixed_avg = round(sum(sorted) / len(sorted));

  print ":",
  print fixed_avg,
  
  # Print the difference between the raw average and the fixed average:
  print "(",
  print abs(avg - fixed_avg),
  print ")"


Posted in IT, Making stuff | Leave a comment

Amount of content in The Lord of the Rings vs. The Hobbit

While cleaning up my desktop, I stumbled upon a calculation I did after the Hobbit movies came out. What I wanted to find out was how many words in the book would be used for each minute of the movie. Seeing as The Hobbit is a much shorter book than the LOTR trilogy, it would seem that there would need to be a fair amount of padding to make three feature length movies out of it. So, let’s see: Continue reading

Posted in Books | Leave a comment

Making a composite material from ABS slurry

Since I do a fair bit of 3D-printing, there’s always plenty of scrap ABS available. Some of the scraps go into the acetone / ABS slurry that I use to coat the build platform before each print, but there’s still plenty more to go around.

So, this got me thinking: “If I make something out paper, from a pepakura design or something, can I use ABS slurry instead of a resin to turn the paper into a composite material?”

TL;DR: No, it doesn’t really work.
Continue reading

Posted in Making stuff | Tagged , , , , | Leave a comment

3D-printed buildings and military units for King of New York

Here’s a project I recently finished: 3-printed buildings and military units for the board game King of New York:

Overview

Overview of a “game in progress”

Continue reading

Posted in Games, Making stuff | Leave a comment

Nginx as origin for S3 with authentication, with CDN on top

We recently had a small problem with our content delivery system. The setup is as follows:

– AWS S3 bucket that requires authentication
– EC2 instance, running Nginx with ngx_aws_auth
– ELB load balancer in front of the EC2 instance
– CDN configured to use the ELB as the origin

The problem was that the content could be loaded directly from the Nginx, or from the load balancer, but when trying to load the content through the CDN, we’d get an AWS error message about a mismatching signature:

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
<AWSAccessKeyId>REDACTED</AWSAccessKeyId>
<StringToSign>
GET x-amz-date:Tue, 05 Apr 2016 12:15:35 GMT /REDACTED_URL_TO_ASSET
</StringToSign>
<SignatureProvided>xHLCuT9r7sAUbONvHaDeWDigCGs=</SignatureProvided>
<StringToSignBytes>
REDACTED
</StringToSignBytes>
<RequestId>AACF04EB41AB61DC</RequestId>
<HostId>
REDACTED
</HostId>
</Error>

Continue reading

Posted in IT | Tagged , , , , | Leave a comment

Nginx: Reject request if header is not present

It was surprisingly difficult to find a full working example of this, so here’s my take on “How to make Nginx require that a certain header is present with a certain value in the incoming request”:

nginx.conf:

http {
  map $http_x_mycustomheader $is_mycustomheader_not_ok {
      default "1";
      MyApprovedValue "0";
  }
  
  ... 
}

mysite.conf:

server {
  ...
    location / {
      if ($is_mycustomheader_not_ok) {
        return 403;
      }
    }
  ...
}

To allow requests that contain the header with any value except an empty value, all you need is:

mysite.conf:

server {
  ...
    location / {
      if ($http_x_mycustomheader = "") {
        return 403;
      }
    }
  ...
}

I don’t know how to accept requests where the header is set to any value including an empty value. If anyone has an example, please leave a comment.

Posted in IT | Leave a comment

Obi-Wan Kenobi’s flashlightsaber

Obi-Wan's flashlightsaber

Obi-Wan’s flashlightsaber

I happened to find this 3D-printable model of Obi-Wan Kenobi’s lightsaber, so I decided to see if me and my 3D-printer were up to the task. There’s also an article about designing the lightsaber model in the Ultimaker blog.
Continue reading

Posted in Electronics, Making stuff | Leave a comment

Inns and Cathedrals added to the tile counter

The Carcassonne tile counter I made a year ago has now been extended with tiles from the Inns and Cathedrals extension: Tile counter incl. Inns and Cathedrals.

Posted in Games | Leave a comment

Wooden Tsuro tiles

Well, plywood, really. With printed paper glued on top to make the paths. What I actually want is a set of tiles where the paths and the background are made of different coloured wood veneer, but that would require investing in some new tools and spending a lot of time cutting the pieces. So, for now, I’ll settle for the plywood tiles so I can start playing.

IMG_1120-tsuro-full-set-top

Making the tiles

I started with a piece of cheap hardware store-grade 6,5mm plywood, which I cut into 44mm squares.

IMG_1091-tsuro-cut-pieces

Continue reading

Posted in Games, Making stuff | 1 Comment

The number of uses of the word “fuck” in Tim Minchin’s “The Pope Song”

This is a breakdown of how many times Tim Minchin uses the word “fuck” or some derivative thereof during the performance of “The Pope Song”, as performed in the Royal Albert Hall with The Heritage Orchestra.

fuck-count

The lyrics have 454 words in total.

“motherfucker” is used 42 times (9%)
“motherfucking” is used 11 times (2%)
“fucker” is used 4 times, 3 of which as part of “kiddie fucker”
“fucking” is used 17 times (4%)
“fuck” by itself is used 33 times (7%)

Other words comprise 76% of the words in the song (347).

Posted in Language | Leave a comment