Small Sensoria 3

finished sensoriumHere’s a finished board, with the LEDs that are used as senses attached to wires made more rigid with heat shrink (this hides the resistors as well). The peculiar colour cast of the image is due to a coloured light being on in the background.

finished visualizationAnd here’s a plot of the light levels detected by each sense as I shone a light at them and shaded them with my hands.

I’d love to make a group of these and hang them up to experience their environment. I think I’ll port the code to Processing.js so they can run online as well.
Small Sensoria 2

bluetooth small sensorium
That’s a Bluetooth wireless small sensorium. The code to support this is a bit hacky as rxtx doesn’t seem to want to play with Bluetooth serial ports, but it works.

The code is in the repository:

https://gitorious.org/robmyers/small-sensoria

Next I need to wired up the LEDs directly.

Then a WiFi Arduino that could work with Thingspeak directly. And multiple sensoria could interact.

Small Sensoria 1

The electronics

This is the test setup for “Small Sensoria”. It is several LEDs being (mis-used) as light sensors connected to an Arduino. The USB cable connects them to a computer running a Processing sketch that renders the light intensities.

The values can be plotted linearly:

linearOr radially:
radialNext I am going to make the Arduino unit more independent by adding a Bluetooth shield, battery power, and wiring the LEDs up to it.

You can get the Arduino and Processing source code here:

https://gitorious.org/robmyers/small-sensoria

Projects From 2011
Urinal:
http://robmyers.wpengine.com/art/urinal/
Balloon Dog:
http://www.furtherfield.org/projects/balloon-dog-rob-myers
Exploring Art Data:
https://encrypted.google.com/search?q=site%3Arobmyers.wpengine.com+%22exploring+art+data%22
Art Open Data:
http://blog.okfn.org/2011/02/01/art-open-data/
The Colours In My Studio:
http://robmyers.wpengine.com/art/studio-colours/
Streaming Aesthetics (Shape):
http://robmyers.wpengine.com/weblog/2011/08/27/streaming-aesthetics-shape/
Send Values:
http://robmyers.wpengine.com/weblog/2011/09/09/sendvalues/
Baldessarinator:
http://robmyers.wpengine.com/weblog/2011/09/25/baldessarinator/
Uploads:
http://gitorious.org/robmyers/uploads
The R Cultural Analytics Library:
https://r-forge.r-project.org/projects/rca/
Psychogeodata:
http://robmyers.wpengine.com/weblog/2011/12/31/psychogeodata-33/
Mona Lisa Of Disapproval:
http://gitorious.org/robmyers/mona-lisa-of-disapproval
Reviews:
http://www.furtherfield.org/user/rob-myers
2011 Links

Since last April I’ve been posting collections of links to Netbehaviour . These are links that I’ve found during my web browsing that are on the subject of art, technology and society. I try to arrange them to create associations or narratives wherever possible.

I’ve written a script to convert a calendar year’s worth of links from emails to an HTML page for browsing.

Here it is:

#!/usr/bin/env python
# Copyright 2012 Rob Myers <[email protected]>
# Licenced GPLv3 or later
################################################################################
# Imports
################################################################################
import cgi
import email
import mailbox
import re
import sys
import time
################################################################################
# Configuration
################################################################################
links_year = "2011"
mailbox_path = "/home/rob/.thunderbird/tq4afdtc.default/ImapMail/imap.robmyers.wpengine.com/INBOX.sbd/Archives-1.sbd/2011"
################################################################################
# The messages
################################################################################
messages = [message for message in mailbox.mbox(mailbox_path).itervalues() \
if message['subject'] \
and message['subject'].startswith('[NetBehaviour] Links') \
and links_year in message['date']]
# Sort messages by date. As they may have been files out of order
# Wasteful as we parse it again later
messages.sort(key=lambda m: time.mktime(email.utils.parsedate(m['Date'])))
################################################################################
# Reformat and print the links with their commentary
################################################################################
print "<html><head><title>Links For %s</title></head><body>" % links_year
print "<h1>Links For %s</h1><hr />" % links_year
for message in messages:
# Keep track of whether the last line was commentary (or links/whitespace)
last_line_was_commentary = False
# Print a YYYY-MM-DD date as the title
date = email.utils.parsedate(message['Date'])
print '<h2>%s-%s-%s</h2><br />' % (date[0], date[1], date[2])
# Email structure is...interesting...
for part in message.walk():
if part.get_content_type() == "text/plain":
body = part.get_payload(decode=True)
break
elif part.get_content_type() == "text/html":
body = part.get_payload(decode=True)
# Strip html tags to give plain text
body = re.sub(r'<.*?>', '', body)
# Keep trying to find text
# Strip footer
try:
body = body.split('_______________________')[0]
except:
print >> sys.stderr, "Can't get body for %s %s" % (message['date'],
message['subject'])
pass
# Regularize leading and trailing whitespace
body = body.strip()
for line in body.split('\n'):
stripped = line.strip()
if '://' in stripped:
print '<br /><br /><br />'
print '<a href="%s">%s</a>' % (stripped, stripped)
print '<br /><br /><br />'
last_line_was_commentary = False
elif stripped != '':
# Join multi-line commentary into single line
if last_line_was_commentary:
print ' ',
print '%s' % cgi.escape(line)
last_line_was_commentary = True
else:
last_line_was_commentary = False
print '<hr />'
print 'Links curated by <a href="http://robmyers.wpengine.com/">Rob Myers.</a><hr />'
print '</body></html>'

And you can download an archive of the links here: links-2011.html.gz

There are a couple of glitches in the file as a result of the ad-hoc nature of the original emails. Finding them is left as an exercise for the reader.