In this project I am searching for repeating decimal numbers to be used as rhythmic patterns. To do so an algorithm finds a repeating pattern in the result of 1 divided by prime numbers. These patterns are then used as input to a rhythm machine.
Rational numbers are numbers that can be written as a ratio of two integers: e.g.: 1/3. Some rational numbers are decimal numbers either ending after a number of digits: e.g.: 5/4 = 1.25, or repeat e.g.: 1/3 = 0.3333…, 1/37 = 0.027027…, 1/7 = 0.142857142857…
I use prime numbers because it seems that 1 divided by a prime number produces a repeating pattern more often.
This project was first presented at PIFCamp 2024.
To generate a rhythm from a pattern of digits the pattern equals the length of one bar where each digit defines the delay to the next trigger-event. A specific BPM then defines the length of these delays and long patterns are split into several bars.
Each trigger contains the value of the digit (0 to 9) and drives one of the 10 solenoids to knock the KUbUS at different spots in the rhythm of the repeating pattern.
The strength of the solenoids slowly fades out as the sequence progresses into insignificance.
Thanks to Stefan Voglsinger who made the performance on the KUbUS possible and recorded the session with several microphones on the metal structure.
1 / 4649 = 0.00021510002151…
Pattern: 0 0 0 2 1 5 1
1 / 73 = 0.0136986301369863…
Pattern: 0 1 3 6 9 8 6 3
1 / 9091 = 0.0001099989
Pattern: 0 0 0 1 0 9 9 9 8 9
1 / 53 = 0.01886792452830188679245283…
Pattern: 0 1 8 8 6 7 9 2 4 5 2 8 3
1 / 3541 = 0.0002824060999717593900028240609997175939…
Pattern: 0 0 0 2 8 2 4 0 6 0 9 9 9 7 1 7 5 9 3 9
1 / 103 = 0.00970873786407766990291262135922330097087378640776699029126213592233…
Pattern: 0 0 9 7 0 8 7 3 7 8 6 4 0 7 7 6 6 9 9 0 2 9 1 2 6 2 1 3 5 9 2 2 3 3
1 / 4013 = 0.00024919013207076999750809867929230002491901320707699975080986792923
Pattern: 0 0 0 2 4 9 1 9 0 1 3 2 0 7 0 7 6 9 9 9 7 5 0 8 0 9 8 6 7 9 2 9 2 3
1 / 71 = 0.0140845070422535211267605633802816901408450704225352112676056338028169…
Pattern: 0 1 4 0 8 4 5 0 7 0 4 2 2 5 3 5 2 1 1 2 6 7 6 0 5 6 3 3 8 0 2 8 1 6 9
1 / 83 = 0.01204819277108433734939759036144578313253…
Pattern: 0 1 2 0 4 8 1 9 2 7 7 1 0 8 4 3 3 7 3 4 9 3 9 7 5 9 0 3 6 1 4 4 5 7 8 3 1 3 2 5 3
1 / 1231 = 0.00081234768480909829406986190089358245329…
Pattern: 0 0 0 8 1 2 3 4 7 6 8 4 8 0 9 0 9 8 2 9 4 0 6 9 8 6 1 9 0 0 8 9 3 5 8 2 4 5 3 2 9
1 / 127 = 0.007874015748031496062992125984251968503937…
Pattern: 0 0 7 8 7 4 0 1 5 7 4 8 0 3 1 4 9 6 0 6 2 9 9 2 1 2 5 9 8 4 2 5 1 9 6 8 5 0 3 9 3 7
1 / 2689 = 0.000371885459278542208999628114540721457791…
Pattern: 0 0 0 3 7 1 8 8 5 4 5 9 2 7 8 5 4 2 2 0 8 9 9 9 6 2 8 1 1 4 5 4 0 7 2 1 4 5 7 7 9 1
1 / 173 = 0.0057803468208092485549132947976878612716763…
Pattern: 0 0 5 7 8 0 3 4 6 8 2 0 8 0 9 2 4 8 5 5 4 9 1 3 2 9 4 7 9 7 6 8 7 8 6 1 2 7 1 6 7 6 3
1 / 89 = 0.01123595505617977528089887640449438202247191…
Pattern: 0 1 1 2 3 5 9 5 5 0 5 6 1 7 9 7 7 5 2 8 0 8 9 8 8 7 6 4 0 4 4 9 4 3 8 2 0 2 2 4 7 1 9 1
1 / 47 = 0.0212765957446808510638297872340425531914893617…
Pattern: 0 2 1 2 7 6 5 9 5 7 4 4 6 8 0 8 5 1 0 6 3 8 2 9 7 8 7 2 3 4 0 4 2 5 5 3 1 9 1 4 8 9 3 6 1 7
1 / 139 = 0.0071942446043165467625899280575539568345323741…
Pattern: 0 0 7 1 9 4 2 4 4 6 0 4 3 1 6 5 4 6 7 6 2 5 8 9 9 2 8 0 5 7 5 5 3 9 5 6 8 3 4 5 3 2 3 7 4 1
1 / 2531 = 0.0003951007506914263137099960489924930857368629…
Pattern: 0 0 0 3 9 5 1 0 0 7 5 0 6 9 1 4 2 6 3 1 3 7 0 9 9 9 6 0 4 8 9 9 2 4 9 3 0 8 5 7 3 6 8 6 2 9
1 / 251 = 0.00398406374501992031872509960159362549800796812749…
Pattern: 0 0 3 9 8 4 0 6 3 7 4 5 0 1 9 9 2 0 3 1 8 7 2 5 0 9 9 6 0 1 5 9 3 6 2 5 4 9 8 0 0 7 9 6 8 1 2 7 4 9
1 / 5051 = 0.00019798059790140566224509998020194020985943377549…
Pattern: 0 0 0 1 9 7 9 8 0 5 9 7 9 0 1 4 0 5 6 6 2 2 4 5 0 9 9 9 8 0 2 0 1 9 4 0 2 0 9 8 5 9 4 3 3 7 7 5 4 9
1 / 613 = 0.001631321370309951060358890701468189233278955954323…
Pattern: 0 0 1 6 3 1 3 2 1 3 7 0 3 0 9 9 5 1 0 6 0 3 5 8 8 9 0 7 0 1 4 6 8 1 8 9 2 3 3 2 7 8 9 5 5 9 5 4 3 2 3
1 / 521 = 0.0019193857965451055662188099808061420345489443378119…
Pattern: 0 0 1 9 1 9 3 8 5 7 9 6 5 4 5 1 0 5 5 6 6 2 1 8 8 0 9 9 8 0 8 0 6 1 4 2 0 3 4 5 4 8 9 4 4 3 3 7 8 1 1 9
Exhibiting urban needle together with Ceren Oykut, Ibrahim Quraishi, Johannes Vogl and Kobakant at “Es war einmal in einer unbekannten Zukunft” (curated by Özgür Erkök Moroder, Kristina Kramer) – 48h Neukölln.
urban needle is kindly supported by pepperl+fuchs
At dinacon i was interested in experimenting with a near-field communication device in the wild to send data over a tree, or in the best case to send data from one tree to another tree. Is it possible to send data from one side of the jungle to the other? The jungle as a network. I wanted to tackle this question by starting out using a near-field communication device on a single tree to see if it is possible to send data over a tree at all.
Read the full article here:
https://www.dinacon.org/2018/09/30/tree-area-network-tan-a-private-network-for-trees-and-humans/
Also read about the near-field intra-body communication device here:
https://ingorandolf.info/building-a-near-field-intra-body-communication-device/
Thrilled by the idea mentioned in “When Things start to think” by Neil Gershenfeld i started to build a near-field intra-body communication device to transmit data through a body by capacitive coupling.
Everything written down in this post is based on the original paper by Thomas Guthrie Zimmerman “Personal Area Networks (PAN): Near-Field Intra-Body Communication” – published at the MIT in 1995.
Original paper by Thomas Guthrie Zimmerman: http://www.cba.mit.edu/docs/theses/95.09.zimmerman.pdf
Using the body as a communication channel is an interesting approach to send sensor-data from one part of the body to another part of the body – or to another body. This may be very useful for e-textile projects. Especially when it is not possible to use conductive material to transmit data.
The outcome of this project was presented in a workshop at the etextile-springbreak 2018: http://etextilespringbreak.org/
And at the etextile-summercamp 2018: http://etextile-summercamp.org/2018/
The goal of the workshop was to come up with a simple circuit to demonstrate the principle of a capacitively coupled data-channel involving as less parts as possible.
Disclaimer: While the project suggests to carry a transmitter close to the body, the project presented here does not allow this. When the transmitter-circuit is too close to the body the signal gets disturbed and transmission may fail. Shielding the transmitter-circuit may help. An updated version of the circuit may solve this problem.
You can find the presentation here: PAN workshop
In general terms a PAN transmitter perturbs the electrical potential of the environment and the receiver detects these perturbations. Another way to state the communication mechanism is to say the transmitter is capacitively coupled to the receiver.
The current return path is provided by the air (dielectric) and earth ground (dielectric and conductor)
Left side: transmitter
Right side: receiver
To transmit data we use On-Off-Keying (OOK) with a carrier wave of ~333kHz which is turned on/off for high/low bits respectively. To perturb the electric potential nicely we drive the electrode with an amplified square-wave using an oscillating circuit. The oscillating circuit consists of a coil and a capacitor in series which is driven with the circuits resonance frequency. To calculate the resonance frequency of the circuit you can use this webpage: http://www.1728.org/resfreq.htm
This generates a higher-voltage sine-wave out of the input low-voltage signal.
Make sure to electrically isolate the electrodes to avoid resistive coupling, we only want to couple capacitively. Dependent on the components used, direct contact to the human skin may draw to too much current from the receiver and break it.
For our purpose we are driving the oscillator directly from a micro-controller pin. The input voltage of ~3.7V from a lipo-battery is amplified to ~35,6 V peak-to-peak:
The disturbed square-wave (yellow) is expected, we are only interested in the sine-wave on the output.
For a more detailed information about resonator circuits, please have a look here: http://hyperphysics.phy-astr.gsu.edu/hbase/electric/serres.html
Using a switched version to drive the oscillator circuit shows a cleaner square-wave and gives a bit more amplification (39.5 peak-to-peak):
If you want to drive the oscillator with higher voltage to get a even higher output voltage you can use a circuit like this:
Be aware of too high voltage which is unsafe to use!
(48V GND-to-peak might be a maximum you want to use on your body)
Find general information and formulas about oscillator circuits: http://hyperphysics.phy-astr.gsu.edu/hbase/electric/serres.html
Frequency calculator: http://www.1728.org/resfreq.htm
The receiver needs to pick-up the signal. For this we need to filter, amplify and clean (threshold) the signal. The circuit is using two envelope followers to smooth out the signal and to avoid breaks in the bits.
Make sure to isolate the electrode to avoid resistive coupling, we only want to couple capacitively.
The complete receiver circuit looks like this:
We are using a Rail-to-Rail, Single-supply op-amp: MCP6292
Connecting data output to a device directly may change the earth-ground coupling of the circuit and therefore the sensitivity of the receiver.
In order to read data from the receiver we are using an opto-coupler to decouple the grounds:
e.g.: reading data-output with an Arduino connected via USB to a computer adds a big capacitive-plate to the circuit. If the computer is connected to earth-ground (connected charger) the circuit directly grounds to earth and therefore changes its behavior (usually it becomes more sensitive)
The opto-coupler may be skipped when reading data-output directly with a micro-controller (e.g. Attiny).
In any way, decoupling the receiver circuit i a good idea.
(take care if you want to measure the circuit itself to use the correct ground)
Data is encoded using On-Off-Keying (OOK) where a Logic 1 turns the carrier-wave on and a Logic 0 turns the carrier-wave off. For the workshop we are using a period of 200 microseconds for one bit. Using a carrier frequency of 333kHz a logic 1 contains ~66 cycles of the carrier wave, enough time to be sure we got a high-bit. This allows a data-rate of about 5000 bit per seconds. To identify the start of incoming data we send a 8-bit preamble in the form of 10101010. Only when this preamble is detected the decoder accepts bits as data.
We are using a simple serial protocol to transmit the data similar to RS232 with one parity-bit and one stop-bit. (In another version of this project the timings and protocol could be aligned to RS232 to spare the use of a hand-written decoder/encoder.)
Manchester Encoding would be another strategy. This would allow transmitting the data-clock, the receiver would not need to know the exact timing of the data.
Decoding strategy is like follows:
The decoder starts with being in preamble-mode. Only if a preamble was detected the decoder accepts data in data-mode.
Whenever the decoder detects a rising-edge on its input-pin a logic 1-bit is detected and pushed into either preamble-data or data. It also starts a timer with a short offset for the next expected bit. When the timer is executed a ~300 micro seconds later we can read the next bit (0 or 1) on the input pin and start another timer with exactly 200 microseconds. If the incoming bit was a 0-bit and the next bit is a 1-bit, the rising-edge will happen before the next timer-interrupt and starting over the procedure. If the next bit would be the same as the last bit, the timer would fire after 200 microseconds to read the next bit.
This strategy avoids timing-shifts, as it re-calibrates the timing every time a high-bit is detected. Slight shifts in timing may happen if the same-bit value is transmitted more often.
This could be fixed by using Manchester encoding.
Please find the kicad-project, code for a attiny-transmitter and an Arduino-recevier here: https://github.com/i-n-g-o/intrabody-PAN
Muzak Architectures is a work by Ingo Randolf and based on an adaption of his installation urban needle. How does it sound if the needle of a record-player is not put on a record, but plays back a room? Instead of a rotating record it would be the needle spinning in the room, turning the principles of a record player inside out. The room carries all the informations of the sounds which are usually played in the wellness spa Hummelhof and is a wave-shaper at the same time. The room is a muzak territory which is sounded out by a hard listening scanbot.
more information on [H:UMMMM].
Muzak Architectures is kindly supported by pepperl+fuchs
Exhibiting urban needle together with Aravinth Panchadcharam, So Kanno and Thomas O’Reilly at HUMAN ♥ ROBOT – spektrum-berlin.
urban needle is kindly supported by pepperl+fuchs
In his book Hiroshi Sugimoto writes about his photographic series “Theaters”:
“I am a habitual self-interlocutor. One evening while taking photographs at the American Museum of Natural History I had a near-hallucinatory vision. My internal question-and-answer session leading up to this vision went something like this: “Suppose you shoot a whole movie in a single frame?” The answer: “You get a shining screen.” Immediately I began experimenting in order to realize this vision. One afternoon I walked into a cheap cinema in the East Village with a large-format camera. As soon as the movie started, I fixed the shutter at a wide-open aperture. When the movie finished two hours later, I clicked the shutter closed. That evening I developed the film, and my vision exploded before my eyes.”
Hiroshi Sugimoto – Cabot Street Cinema – Massachusetts – 1978
While his photos are a great series about movie theaters photographed between 1975 and 2001, he is missing a point. To get a shining screen when doing long exposure photography in cinemas is due to the fact of a “correct” exposure-time setting for the theater itself. While focusing on documenting cinema-halls he looses the information on the cinema screens. The screens are overexposed and therefore “shining”. If the film-sensitivity and aperture would have been set according to the movies content the screens would not have been overexposed and shining, but would contain all the frames of the projected movie.
I used a digital method combining all frames for cover-images of strata-series in 2006. At that time i was unaware of Hiroshi Sugimoto’s “Theater” project. Just after using the algorithm again on movies in 2014 i remembered seeing Sugimoto’s photographs and found his work. The next step would be to research the films Sugimoto shot when creating his photos and recover the “forgotten images of Hiroshi Sugimoto”.
Here are some of the images as a random selection calculated in 2014:
Sergei Eisenstein: Battleship Potemkin, 1925
Addon for openFrameworks for the R2000 Laser Rangefinder by pepperl+fuchs:
urban needle scans rooms and urban spaces in an automated process, transforming the shape of the room into sound.
like a record needle, it plays back a room producing room-based noise. the room is the reel.
urban needle is kindly supported by pepperl+fuchs