Public Domain Review new website

* microblog*

Public Domain review has a new website full of treasures..

Founded in 2011, The Public Domain Review is an online journal and not-for-profit project dedicated to promoting and celebrating the public domain in all its richness and variety.
All works eventually fall out of copyright – from classics works of art to absentminded doodles – and in doing so they enter the public domain, a vast commons of material that everyone is free to enjoy, share and build upon without restriction. Our aim is to help our readers explore this rich terrain – like a small exhibition gallery at the entrance to an immense network of archives and storage rooms that lie beyond.

With a focus on the surprising, the strange, and the beautiful, we hope to provide an ever-growing cabinet of curiosities for the digital age, a kind of hyperlinked Wunderkammer – an archive of materials which truly celebrates the breadth and variety of our shared cultural commons and the minds that have made it.

Posted in About a website | Tagged | Leave a comment

RGB Colour LCD Screen

How to make a narrative on an LCD screen:

-> the colours have to change
-> you have two times 16 characters
-> every time you print a text on the screen, it has to be reset to it’s initial position

Here’s a video of the first narrative I made for the “Big Fat Failed Beginnings” performance for the Belluard Bollwerk Festival.

My code for the Arduino & the screen worked, but it was not very elegant, so I asked for some help on the Belgian hackerspaces “universal knowledge list”. I added some functions.
Thanks everyone!

#include

// Create a software serial port!
SoftwareSerial lcd = SoftwareSerial(0,2);

// Create a function to easily determine colour
// To determine colour, use: setColour(&lcd, 1, 1, 255)
void setColour(SoftwareSerial* lcd, char r, char g, char b) {
lcd->write(0xFE);
lcd->write(0xD0);
lcd->write(r);
lcd->write(g);
lcd->write(b);
delay(10);
}

// Elegantly clear screen
// Use setClear
void setClear(){
lcd.write(0xFE);
lcd.write(0×58);
delay(10);
}

// go ‘home’
// Use setHome
void setHome(){
lcd.write(0xFE);
lcd.write(0×48);
delay(10);
}

void setup() {
lcd.begin(9600);

// set the size of the display if it isn’t 16×2 (you only have to do this once)
lcd.write(0xFE);
lcd.write(0xD1);
lcd.write(16); // 16 columns
lcd.write(2); // 2 rows
delay(10);
// we suggest putting delays after each command to make sure the data
// is sent and the LCD is updated.

// set the contrast, 200 is a good place to start, adjust as desired
lcd.write(0xFE);
lcd.write(0×50);
lcd.write(200);
delay(10);

// set the brightness – we’ll max it (255 is max brightness)
lcd.write(0xFE);
lcd.write(0×99);
lcd.write(255);
delay(10);

// turn off cursors
lcd.write(0xFE);
lcd.write(0x4B);
lcd.write(0xFE);
lcd.write(0×54);

// clear screen
setClear();

// go ‘home’
setHome();

}

void loop() {

// adjust colors and define RGB values
// Colour as neutral as possible
setColour(&lcd, 255, 220, 200);

lcd.println(“When does an”); //println gives new line for the next sentence
lcd.print(“incident “);
delay(3000);
setClear();
setHome();

lcd.println(“become”); //println gives new line for the next sentence
lcd.print(“a disaster?”);
delay(3000);
setClear();
setHome();

lcd.println(“It’s a question”); //println gives new line for the next sentence
lcd.print(” of scale.”);
delay(3000);
setClear();
setHome();

lcd.println(“**INCIDENT”); //println gives new line for the next sentence
lcd.print(” OCCURS**”);
delay(3000);
setClear();
setHome();

// adjust colors and define RGB values
// Colour Blue
setColour(&lcd, 1, 1, 255);
lcd.println(“The BLUE LIGHTS”); //println gives new line for the next sentence
lcd.print(” come in.”);//Text written in colour
delay(3000);
setClear();
setHome();

lcd.print(“Police-Ambulance”); //println gives new line for the next sentence
lcd.print(” Firebrigade”);//Text written in colour
delay(3000);
setClear();
setHome();

lcd.println(“They judge, act”); //println gives new line for the next sentence
lcd.print(” communicate”);
delay(3000);
setClear();
setHome();

lcd.println(“When they need”); //println gives new line for the next sentence
lcd.print(“extra force”);
delay(3000);
setClear();
setHome();

// adjust colors and define RGB values
// Colour orange

setColour(&lcd, 255, 20, 1);
lcd.println(“CODE ORANGE”); //println gives new line for the next sentence
lcd.print(” is activated”);
delay(3000);
setClear();
setHome();

lcd.print(“Civil Protection”); //println gives new line for the next sentence
lcd.print(” “);
delay(3000);
setClear();
setHome();

lcd.println(“and Technical”); //println gives new line for the next sentence
lcd.print(“Services”);
delay(3000);
setClear();
setHome();

lcd.println(“join the”); //println gives new line for the next sentence
lcd.print(“Blue Lights”);
delay(3500);
setClear();
setHome();

lcd.println(“In case of a “); //println gives new line for the next sentence
lcd.print(“MAJOR DISTASTER”);
delay(3500);
setClear();
setHome();

// adjust colors and define RGB values
// Colour RED

setColour(&lcd, 255, 1, 1);
lcd.println(” CODE RED”); //println gives new line for the next sentence
lcd.print(” is triggered”);
delay(3500);
setClear();
setHome();

lcd.println(“If necessary”); //println gives new line for the next sentence
lcd.print(“the army comes”);
delay(3500);
setClear();
setHome();

lcd.println(“For every”); //println gives new line for the next sentence
lcd.print(“catastrophy,”);
delay(3500);
setClear();
setHome();

lcd.println(“plans have been”); //println gives new line for the next sentence
lcd.print(“made..”);
delay(4000);
setClear();
setHome();

lcd.println(” “); //println gives new line for the next sentence
lcd.print(” “);
delay(3000);
setClear();
setHome();

}

Posted in Hardware, Open Hardware, Software | Tagged , , , | Leave a comment

Just a machine working…

–> See here about the what and how..

Posted in Uncategorized | Leave a comment

Raspberry Pi and touch

rasberry pi and makey makey

Not the greatest picture —> today I tried to combine the Rapsberry Pi with Makey Makey (basically a microcontroller that enables you to turn almost all conductive material into Keyboard input: left click, arrows or space).

It works out of the box with the Raspberry Pi default Linux distribution called Rasbian.

This opens up quite some possiblities: a tiny computer with a microcontroller –> with ethernet and a sound card —->

….
(fill in blanks with potential)

Posted in Hardware, Open Hardware | Tagged , | Leave a comment

A paper, vinyl and fabric cutter

A new machine has arrived in Variable: a paper, vinyl and fabric cutter. The budget was limited, so we had to look in depth for machines that were not too expensive and that worked with Linux. The ideal scenario was to find a second hand (semi-)professional machine. Alas, none were available for our budget. A pity, because the lower level machines tend to work with sticky mats, and other potentially proprietary bits and bobs. I was 85% percent sure that the Graphtec Silhouette Cameo SD worked on Linux. However I was not sure how hard or easy this would be.
These were the links and references I had before buying it.

The blogpost by Alexandre Prokoudhine gives a nice overview about the possibilities:

http://www.libregraphicsworld.org/blog/entry/vinyl-cutting-on-linux-the-real-deal

The sofware and drivers provided for the vinylcutters do not work with cups, they work differently. They all start with vectordrawings and SVG’s. So Inkscape is a potential starting point for what you want to be cut.
Inkcut = Fail
Some of the proposed software should work directly within Inkscape, such as Inkcut, which should be a kind of plugin. I installed Inkcut, because it looked the most promising interface-wise.
However, the software Inkcut is no longer being developed. After installing it, nothing appeared..

Next!

Robocut = Initial fail BUT!!
https://gitorious.org/robocut
https://launchpad.net/robocut

On Gitorious and Launchpad – Lanchpad directs you to Gitorious..

https://translate.googleusercontent.com/translate_c?act=url&depth=1&hl=en&ie=UTF8&prev=_t&rurl=translate.google.com&sl=auto&tl=en&u=http://custom.ultramini.net/ritagliare-parti-modellismo-silhouette-cameo/&usg=ALkJrhhlIN0Ee83pSqu2U5Y_-VX6r9WwEw
This post seemed really promising. The Ultramini blog in Italian confirmed the compatability of the cutter with Ubuntu (I run Mint, which is also a Debian/Ubuntu based distribution of Linux). He uses Robocut, but he did some modifications. As he indicated, Robocut does not work out of the box. It did run, but the vinylcutter was invisible. I e-mailed Ultramini and very quickly he sent me his modified version of Robocut. I tried it after installing the next software: Graptecprint, as the mail came after I started out with this driver.
————–> Scroll to read more about Robocut..

Graphtecprint = Succes with initial confusion!
http://vidar.botfu.org/graphtecprint
https://github.com/jnweiger/graphtecprint

There is a blog and a github page for Graphtecprint. The confusing part comes in the instructions: on the Github page they indicate you should download the .tar – however, there is no tarball (.tar.gz) on this page. So I used a bit of personal experience to deduct what the instructions should be for the github page. Afterwards I saw it was available on the blog page. The code on Github is more complete. You also need to run it from the commandline and it uses.ps files you can make in Inkscape when you print to file. This is a bit clumsy.
Install, run.. Fail.. Darn!
Luckily the commandline tells me what is going wrong: it is looking for a particular file –> this seems to be a python script, which is also in the downloaded software folder. I had to copy both .py scripts to my usr/local/bin folder. This is not very elegant, but.. It worked!

screenshot

 

 

 

 

 

 

Now what to cut!!

Very quickly I made an Inkscape test, with the Cricks font (based on vinyl letters – nice loop!), a circle and a word in Inkscape calligraphy. I only had paper, no vinyl.

First mistake: where should the paper be:

Not all was cut on the paper itself.

Next mistake, the caligraphy letters create too many cutting lines, so they fail. Cricks comes out nicely, the P does lose it’s inner shape. and the circle was round.

still on the mat 1 still on the mat 2 still on the mat 3 result 2

 

 

 

 

 

 

 

 

 

 

 

 

 

result 1 good cut waste letters the setup

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Next step: fabric! I chose felt. Textile has it’s own knife, different from the paper and vinyl knives. Alas this was a big failure. The felt was too thick, or too flaky. On top of that, it ruins the sticky mat.. And it just did not work. Ouch!

Robocut revisited = No Success !! yet— perhaps with a little more help

I unzipped Ultramini!’s altered version of Robocut. In the zip you have a install.txt, which basically tells you how to install the program. Of course, I did not go to Gitorious, because my code came from Ultramini!

For the moment it does not want to compile. I will update this post when it does! Robocut is worth the effort, because they provide you with reg marks (reference marks) and you cut directly from SVG. There is also a sweet animation function. Hopefully more news soon!

It feels good to strikethrough :-)

In the meantime, he wrote a blogpost in English explaining what he did including the code in a zip file.

Grazie per la spiegazione!

Posted in Building, Hardware, Software | Tagged , , | 4 Responses

Report on CourtCircuitCourt

Last summer I went to Nantes to CourtCircuitCourt:

From 23 July 10:00 to 28 July 18:00
Court Circuit Court – Short Circuit / Short Process
PiNG 38 rue du Breil – 44100 Nantes – France

What links a digital hacker who designs projects in a lab, a member of a CSA (Community Supported Agriculture) who believes in sustainable local produce and supports a farmer, and citizens who share experience and knowledge online? Perhaps it is the desire to redefine the relationship between production and consumption, the need to be an empowered citizen rather than passive consumer. To create, grow, reconfigure and question – to ‘hack’ society and transform it.

Short Circuit / Short Process is the first edition of PiNG’s Summer Lab. A 6 day-workshop where hackers, open source geeks and DIY (Do It Yourself) advocates come together with community activists to collaborate, co-create and co-produce through workshops, experiments, discussions and performance.

Court Circuit Court: Social fabrics: on protocols, textile and salutations.

Constant member Wendy Van Wynsberghe hosts an atelier on salutations and greeting rituals. Make textile sensors that initiate new ways of greeting each other with Arduino, sound and conductive thread.

This meeting is supported by the Grundtvig’s Life Long Learning Program: http://ec.europa.eu/education/lifel…

http://www.courtcircuitcourt.net/

summerlab2012 —> from asso PiNG on Vimeo.

This is a small ensemble of links, pictures and a lot more..
The nice thing about Ping! is their care for documentation – so basically my work here is very limited!

- Ping’s list of press articles, linked blogposts, radio interviews etc
- A post on the Summerlab and a small contextualisation in French
- A fun fanzine was made during the Summerlab
- Ping’s pictures
- Constant’s pictures
- List of participants
- The pictures of the participants
- The impressive wiki where all resources were posted
- Some links on networks and security – many more on the Wiki and pads
https://safermobile.org/the-mobile-security-survival-toolkit-for-activists-and-journalist/
http://greatfirewallofchina.org/index.php?siteurl=http%3A%2F%2Fwww.drmomma.org%2F2010%2F10%2Fchicken-nuggets-other-pink-meat.html
https://en.wikipedia.org/wiki/Tahoe-LAFS

- Group Picture!

- A detail image of my workshop

- The Kissing Protocol – Nantes version

- Post-event: a small questionnaire

Thanks everyone – it’s one of these events that resonate some months after!

(We made a Pirate Box!! Thanks Labomedia!!)

This meeting is supported by the Grundtvig’s Life Long Learning Program

Posted in Hack, Hardware, interview, Organization, Report, Softwearables | Tagged , | Leave a comment

Ultrasonic City

For the last three months I have been working on urban audio environments, called “Ultrasonic City”. The first public shape this took on was in the form of an interactive installation. Here’s a short description:

“What do you hear in the city? What sounds are only perceptible in the ultrasonic realm, where bats and crickets communicate? Sounds which are so high, our human ears cannot perceive them. This acoustic world becomes audible and it slowly fades into the more familiar sounds of the city.”

Auditory
The urban sound world is quite dense. By extracting the ultrasound I wanted to reveal a sonic universe or even add another layer to the field recordings. When you hear only the ultrasonic layer of the city, you hear a place devoid of human voices. They simply do not reach that high. Some very quiet sounds get enhanced, such as rubbing your fingers together, frottements in French. In a parc at sunset you hear the foraging bats, whilst at the same time, our human ears only register ducks, planes and other humans. A swimming pool gets reduced to splashes, you do not hear the children shriek nor play. Plastic, metal, water all produce ultasounds.
With the help of ACSR, I was able to record the same place in the city ultrasonically and with high quality “normal” microphones. This revealing/unravelling/hiding of layers of sound I want to present in this installation.

Visual
The interaction happens on the moment you trigger the sound by touching the embroidery. The hand embroidered images visually represent the places in the city you are listening too. The embroidery was designed and mostly made by Dennis Marien.
Here are some images of the embroidery. All areas delineated by fluorescent yellow are active zones, so are all punched with grey loopy conductive yarn.

This started out as a solo project, I started from the sound and was thinking about how to represent the sound “spaces” in simplified embroidered images. By coincidence I met Dennis, a comic artist who realised a beautiful small graphic novel where all drawings were hand sewn. Dennis’s enthusiasm was contageous and I let him freewheel on the imagery. Go with the flow.
We all embroidered (Dennis, his mum, my partner and me) – this is a very slow and labour intensive way of illustrating. The electronics and sound part ended up on my plate.

Here is a video of the installation in it’s current form. You can play it with Firefox or another html5 compatible browser or with VLC.

It’s a bit strange to make a video of an installation – we had to do it in one take, in half an hour, with no external microphone.

- Video of the installation made by a regular camera
- Video of the installation made by smartphone

This summer I will delve deeper into the audio part, in the studio running Ardour in ACSR. I will try to make a radiophonic narrative with this material.
Thanks C & V & C!

Posted in Building, Hardware, Softwearables | Tagged , , , | 2 Responses

Domestic Science Club @ INVITRO – Thursday 31/5/2012 from 19h

Domestic Science Club welcomes you Thursday 31/5/2012 at Recyclart/INVITRO.

20:30h Wendy Van Wynsberghe – The Kissing Protocol
Wendy Van Wynsberghe will demonstrate some greeting protocols, re-enacted by the public. How can a group greet each other? Can we make new future greetings? By means of current, conductive textile, threads and sensors, cheeks will be dressed up, and make contact.

21: 30h David Elchardus and Gosie Vervloessem – Gravity
David and Gosie will try to fly to the moon and back, with the help of a little black hole.

Ongoing : Marthe Van Dessel, the one and only DJette, will cycle around
with her boom box bike
.
A boom box bike is a bicycle ghettoblaster to play recorded music in public space. This one has an extra effect: speed of the music is set by the speed of biking. Sound documentaries and promotional melodies will linger in the Marolles air.

Domestic Science Workshop is open during the event. We organize a miniature sandbag throwing lowland game.

Hope to see you there.
Wendy, Naomi, Marthe and Gosie
http://www.domesticscienceclub.be

Posted in Softwearables | Tagged , | Leave a comment

Interpunctie & Talking posters

As many other human beings who once apon a time were present in the bolwerK realm, I received an invitation to come to Kasterlee, to the Frans Masereelcentrum. The object was clear: work with the bolwerK archive. The form, size, way in which to deal with this archive was open. As Masereel is the place to print (silk screen, letterpress and lots of other stuff I don’t even know the name of), I decided that the way of dealing with the archive should be through print, a topic I know nothing about.
I do feel comfortable around electronics and physical computing. So I started thinking about a meeting point between these two with the *archive archive archive* mantra repeating in the back of my head.
So, after some thinking I stumbled upon the existence of conductive paint. http://www.bareconductive.com/
And I ordered a jar.

And then what…


Posters!
Posters as interfaces!
Talking posters, playing soundfiles related to the bolwerK archive!
Capacitive interactive posters, playing soundfiles related to the bolwerK archive!

I had cracked it.
The idea was there.
In my head.
In Kasterlee it was the challenge to see whether the reality in my head could/would correspond with the physical realm, including one microcontroller (Arduino), a waveshield for playing sound, some resistors, paper, conductive thread and somebody who masters screenprinting. And the code for the Arduino. And the soundfiles. Hmm. Not there yet…

With the added sauce of stress concerning a misplaced laptop power supply (mine), I managed to get the painted prototype (not silkscreened) working, it gave me data, numbers in the serial port as you can see on the pictures.

Interpunctie_posters_00.jpgInterpunctie_posters_000.jpg

I was very lucky that Bare Conductive had just put up a manual on working with the paint entitled: “Building a Capacitive Proximity Sensor using Bare Paint”. Translated for non-techies this means that when you hover your hand over the conductive surface, something can happen.
http://www.bareconductive.com/capacitance-sensor

Then came these serious tasks: make an image for the silkscreen installation, screenprint it, sew a conductive thread in the conductive printed surface, make the capacitive sensor work with sound. Then, multiply the amount of posters by three…

I chose two images for the posters: a hand and a circle. A hand because this part of the body is quite central in the bolwerK projects I was involved with (handshakes, greetings, excercises for hand and wrist…). The hand is like a shadow stuck to the paper. The image of a circle has multiple meanings: a circle can be a “bol” in Dutch, a circle can be a full stop (part of interpunction), as it is very black it could even be a black hole, a gateway to another universe, a vortex in which the archive may be evaporated or redefined…

From this part of the text onwards, I will guide you to through some images.

The hand has been cut out in a red foil, because everything which is red will become the positive image when you screenprint.
Interpunctie_posters_01.jpg

The Wikipedia page on silkscreen & screenprinting has some great animated gifs:

Making the screen
Interpunctie_posters_02.jpg

Screen machinery (and Lieven and Wauter)
Interpunctie_posters_03.jpg

The screen is ready for printing
Interpunctie_posters_04.jpg

A close-up
Interpunctie_posters_05.jpg

Screenprinting – the movie


If the player does not work, click here.

The result: a hand and a sphere silkscreened with conductive paint, three layers on top of each other
Interpunctie_posters_06.jpg

A close-up of the conductive thread in the poster. I had to add conductive paint by hand with a paintbrush, in between printing the layers. Quite stressy and this requires clear instructions by the screenprinter and the “retouche” person.
Interpunctie_posters_07.jpg

The backside of the poster, showing the conductive thread
Interpunctie_posters_08.jpg

Another close-up of the conductive thread in the poster: the black conductive surface needs to be as smooth as possible. The ink quickly logs up the pores of the screen. It’s quite hard to make nice surfaces…
Interpunctie_posters_09.jpg

A colourful intervention in the poster by bolwerK: a cursor
Interpunctie_posters_10.jpg

Asking two nice graphic designers advice on how you place an image in a poster (the cursor). Apparently, it’s all about ratio’s.
Interpunctie_posters_11.jpg

Finalizing, hooking up electronics to the posters
Interpunctie_posters_12.jpg

The posters, ready and waiting for some electronic input
Interpunctie_posters_13.png

It works! The code needs some tweeking by e-mail afterwards.
Interpunctie_posters_14.jpg

When you hover your hand above one of the dots or the hand, a sound or a story will be played. I chose:
- An audio rendition of “Stops, or How To Punctuate” by Paul Allardyce (1855-1895), the part on the Full Stop. (Thanks F)
- A sound work by an invited artist, made in Kasterlee.
- And a Hello from Vorst, Brussels.

Interpunctie_posters_15.png

As you can see, the posters are connected with a cable to an Arduino and a waveshield. The waveshield is connected to a speaker.
Here is the final Arduino code. It is a Frankenscript of the code for capacitive sensors and the code for the djette (a bolwerK project). You need the waveshield library (AF_Wave) and the capacitive sensor library (CapSense).

Interpunctie03-111025a Arduino Code Zip

#include
#include
#include "util.h"
#include "wave.h"
#include
CapSense cs_9_7 = CapSense(9,7); // 10 megohm resistor between pins 4 & 2, pin 2 is sensor pin, add Bare Paint
CapSense cs_9_6 = CapSense(9,6); // OPTIONAL: for sensor 2, 10 megohm resistor between pins 9 & 6, pin 6 is sensor pin, add Bare Paint
CapSense cs_9_8 = CapSense(9,8); // OPTIONAL: for sensor 3, 10 megohm resistor between pins 9 & 8, pin 8 is sensor pin, add Bare Paint

/////////////////////////////////////////////////////////////////////////////// WAVESTUFF

AF_Wave card;
File f;

Wavefile wave; // only one!
uint32_t wavsamplerate = 22050;

char * wavname; // filename WAV file
uint8_t tracknum = 0;

void settrack(uint8_t num){
switch (num){
case 0:
wavname = “SOUND1.WAV”;
break;
/* case 1:
wavname = “TRACK1.WAV”;
break;
case 2:
wavname = “TRACK2.WAV”;
break;
case 3:
wavname = “TRACK3.WAV”;
break;
case 4:
wavname = “TRACK4.WAV”;
break;
case 5:
wavname = “TRACK5.WAV”;
break;
case 6:
wavname = “TRACK6.WAV”;
break;
case 7:
wavname = “TRACK7.WAV”;
break;
case 8:
wavname = “TRACK8.WAV”;
break;
case 9:
wavname = “TRACK9.WAV”;
break;
case 10:
wavname = “TRACK10.WAV”;
break;
case 11:
wavname = “TRACK11.WAV”;
break;
case 12:
wavname = “TRACK12.WAV”;
break;
case 13:
wavname = “TRACK13.WAV”;
break;
case 14:
wavname = “TRACK14.WAV”;
break;
case 15:
wavname = “TRACK15.WAV”;
break;
case 16:
wavname = “TRACK16.WAV”;
break;
case 17:
wavname = “TRACK17.WAV”;
break;
case 18:
wavname = “TRACK18.WAV”;
break;
case 19:
wavname = “TRACK19.WAV”;
break;
case 20:
wavname = “TRACK20.WAV”;
break;
case 21:
wavname = “TRACK21.WAV”;
break;
case 22:
wavname = “TRACK22.WAV”;
break;
case 23:
wavname = “TRACK23.WAV”;
break; */
}
card.reset_dir();
}

void ls() {
char fname[13];
int ret;

card.reset_dir();
putstring_nl(“Listing:”);
while (1) {
ret = card.get_next_name_in_dir(fname);
if (!ret) {
card.reset_dir();
return;
}
Serial.println(fname);
}
}

bool active_file = false;

void playfile(char *name) {

while (wave.isplaying) {
wave.stop();
}

card.reset_dir();

if(active_file) {
Serial.println(“closing previous file”);
card.close_file(f);
}

card.reset_dir();

f = card.open_file(name);
Serial.print(“opening new file “);
Serial.println(name);

if (!f) {
putstring_nl(” Couldn’t open file”);
return;
}

active_file = true;

if (!wave.create(f)) {
putstring_nl(” Not a valid WAV”);
return;
}
// ok time to play!

wave.play();
}

/////////////////////////////////////////////////////////////////////////////////////////// SETUP

void setup() {
cs_9_7.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 – just as an example
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println(“Talky Poster!”);

// Set the output pins for the DAC control. This pins are defined in the library
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

if (!card.init_card()) {
putstring_nl(“Card init. failed!”);
return;
}
if (!card.open_partition()) {
putstring_nl(“No partition!”);
return;
}
if (!card.open_filesys()) {
putstring_nl(“Couldn’t open filesys”);
return;
}

if (!card.open_rootdir()) {
putstring_nl(“Couldn’t open dir”);
return;
}
/*
pinMode(buttons[B_REED_SWITCH], INPUT); // reed switch
pinMode(buttons[B_NEXT], INPUT); // button next
pinMode(buttons[B_NORMAL], INPUT); // button normal

TCCR2A = 0;
TCCR2B = 1<

//Timer2 Overflow Interrupt Enable
TIMSK2 |= 1< */

ls();

}

/*
SIGNAL(TIMER2_OVF_vect) {
check_switches();
}
*/

/*void check_switches()
{
static byte previousstate[NUMBUTTONS];
static byte currentstate[NUMBUTTONS];
byte index;

for (index = 0; index < NUMBUTTONS; index++) { currentstate[index] = digitalRead(buttons[index]); // read the button if (currentstate[index] == previousstate[index]) { if ((pressed[index] == LOW) && (currentstate[index] == LOW)) { // just pressed justpressed[index] = 1; } else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) { // just released justreleased[index] = 1; } pressed[index] = !currentstate[index]; // remember, digital HIGH means NOT pressed } //Serial.println(pressed[index], DEC); previousstate[index] = currentstate[index]; // keep a running tally of the buttons } } bool normal_mode = false; float avgSpeed = 0.0f; float curSpeed = 0.0f; unsigned long curTime, prevTime;*/ /////////////////////////////////////////////////////////////////////////////////////////// LOOP //boolean samplerate_changed = false; uint32_t lastReedRead = 0; void loop() { char c; long start = millis(); long total1 = cs_9_7.capSense(30); long total2 = cs_9_6.capSense(30); // OPTIONAL for sensor 2 long total3 = cs_9_8.capSense(30); // OPTIONAL for sensor 3 // Serial.print(millis() – start); // OPTIONAL: check on performance in milliseconds Serial.print(“t”); // OPTIONAL: tab character for debug windown spacing Serial.println(total1); // OPTIONAL: To use additional sensors,change Serial.println to Serial.print for proper window spacing Serial.print(“t2″); // OPTIONAL: tab character for window spacing for sensor output 2 Serial.print(total2); // OPTIONAL: print sensor output 2 Serial.print(“t3″); // OPTIONAL: tab character character for sensor output 3 Serial.println(total3); // print sensor output 3 if (total1>350) {
//if (!wave.isplaying) {
playfile(“SOUND1.WAV”);
//}
}

if (total2>130) {
//if (!wave.isplaying) {
playfile(“SOUND2.WAV”);
//}
}

if (total3>130) {
//if (!wave.isplaying) {
playfile(“SOUND3.WAV”);
//}
}

delay(200);

/* check_switches();

if(pressed[B_NEXT] && pressed[B_NORMAL]) {

justpressed[B_NEXT]=0;
justpressed[B_NORMAL]=0;

Serial.println(“two buttons pushed”);

}
else if( justpressed[B_NEXT] ) {
justpressed[B_NEXT]=0;
Serial.println(“B_NEXT pushed”);

settrack(tracknum);
Serial.println(wavname);
playfile(wavname);
tracknum++;

}
else if( justpressed[B_NORMAL] ) {
justpressed[B_NORMAL]=0;
Serial.println(“B_NORMAL pushed”);

normal_mode =!normal_mode;
if(normal_mode) {
Serial.print(“playing a fixed bitrate”);
wave.setSampleRate(wave.dwSamplesPerSec);
}
else {
Serial.print(“playing a dynamic bitrate”);
}
}

if(justpressed[B_REED_SWITCH])
{
justpressed[B_REED_SWITCH] = 0;

prevTime = curTime;
curTime = millis();

lastReedRead = curTime;

curSpeed = float(curTime – prevTime);

// cumulative average
const float alpha = 0.5f;
avgSpeed = avgSpeed * (1.0f – alpha) + curSpeed * alpha;

Serial.print(“curSpeed: “);
Serial.print(curSpeed);
Serial.print(” avgSpeed: “);
Serial.println(avgSpeed);

// TIMING constantes
//
const float x1 = 1000.0f; // slow sensor timing
const float x2 = 150.0f; // fast sensor timing

const float y1 = 5000.0f;
const float y2 = 25000.0f;

const float m = (y2-y1) / (x2-x1);

float fsamplerate = (avgSpeed * m ) – m * x1 + y1;
if (fsamplerate > 0.0f) wavsamplerate = fsamplerate;
else
wavsamplerate = 0.0;

samplerate_changed = true;

Serial.print(“fsamplerate: “);
Serial.println(fsamplerate);
Serial.print(” wavsamplerate: “);
Serial.println(wavsamplerate);
}

if (millis() – lastReedRead > 700) {
if(wavsamplerate>100) wavsamplerate -= 100;
samplerate_changed = true;
// lastReedRead = millis();
}

if(samplerate_changed && wave.isplaying && !normal_mode) {
if (wavsamplerate>25000) wavsamplerate= 25000;
wave.setSampleRate(wavsamplerate);
samplerate_changed = false;*/
}

 

I was lucky to get caught in the gravity pull of bolwerK. All collaborations were wonderful, crazy, sharp, complex, heavy, light at the same time. So, I guess, thanks, bolwerK! is quite appropriate.

Lieven – huge thanks for your patience with the stubborn conductive ink and putting up with the lack of time.

(slight warning, inviting artists to work on archive generates more data and bigger archive – end of warning)

Posted in Building, Hardware | Comments closed

Interactive posters

I’m at the Masereelcentrum – in the framework of Interpunctie, organized by Bolwerk. These are some images of a set-up of an interactive talking poster.

The black hand has been painted with conductive paint and functions well as a capacitive sensor.

The trick now is to link this physical proximity to trigger sound. It sounds easier than it is…

Posted in Softwearables | Tagged , , , , | Comments closed