Testing wekinator
Experimenting with Max
Experimentation
In my research, I'm currently exploring the concept of harnessing energy generated by living organisms and examining our relationship with them. Through this exploration, I aim to develop interactive installations that diffuse knowledge about their capabilities and explore passive methods of interaction with them. Thanks to a seminar I attended, I became interested in experimenting with the transmission of data from soil to Arduino, effectively using soil as a trigger mechanism. Drawing inspiration from YouTube tutorials, I tried to adapt techniques employed to turn vegetables into functional buttons for use with soil. When implementing this circuit, I observed that the data indeed fluctuated when the soil was touched, indicating a possible setup for a trigger mechanism. Subsequently, I integrated this setup with Processing to generate abstract shapes in response to soil touch events.
The creation of this installation marks the start of a larger installation project aimed at responding to microbial activity and human touch. One intriguing aspect of the circuit setup is its usage of the human body for conductivity, effectively closing the circuit. This conceptualises the human body as an integral part of the device rather than an external interaction component.
Looking ahead, I envision connecting multiple soil cells to music software to explore the possibility of creating a soil drum instrument that can be utilised by multiple individuals simultaneously. While the specifics of this project are still under consideration, I find the idea intriguing.
This is the explanation of the processing code:
+-----------------------+
| Setup() |
| - Initialize sketch |
| - Set window size |
| - Set background |
| - Open serial port |
+-----------+-----------+
|
v
+-----------------------+
| Draw() |
| - Check for data |
| availability |
| - Read data |
| - Convert to integer |
| - Draw bacteria |
+-----------+-----------+
|
v
+-----------------------+
| drawBacteria() |
| - Draw green shapes |
| based on sensor |
| values |
+-----------------------+
Processing code creating abstract representation of bacteria when soil is touched
Codes
Arduino code:
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the sensor value:
Serial.println(sensorValue);
delay(500); // delay in between reads for stability
Processing code: Code green bacteria:
import processing.serial.*;
Serial serialPort; // Create a Serial object
void setup() {
size(400, 300); // Set the size of the window
background(0); // Black background
// Open the serial port - change "/dev/cu.usbmodem1441401" to the appropriate port name for your system
serialPort = new Serial(this, "/dev/cu.usbmodem1441401", 9600);
}
void draw() {
if (serialPort.available() > 0) { // If data is available to read
String data = serialPort.readStringUntil('\n'); // Read the data until newline character
if (data != null) {
println(data); // Print the data to the console
// Convert data to integer
int sensorValue = Integer.parseInt(data.trim());
// Check if sensor value is under 1023
if (sensorValue < 1023) {
// Draw a green bacteria at a random position
float x = random(width);
float y = random(height);
float size = random(10, 30); // Random size for the bacteria
drawBacteria(x, y, size);
}
}
}
}
// Function to draw a bacteria shape
void drawBacteria(float x, float y, float size) {
int numVertices = 20; // Number of vertices
float angleIncrement = TWO_PI / numVertices; // Angle increment between vertices
fill(0, 255, 0); // Green fill color
beginShape();
for (int i = 0; i < numVertices; i++) {
// Calculate vertex position
float theta = i * angleIncrement;
float offsetX = cos(theta) * size * random(0.8, 1.2);
float offsetY = sin(theta) * size * random(0.8, 1.2);
// Quantize vertex position to create pixelization effect
offsetX = floor(offsetX / 5) * 5; // Round to nearest multiple of 5
offsetY = floor(offsetY / 5) * 5; // Round to nearest multiple of 5
// Add vertex to shape
vertex(x + offsetX, y + offsetY);
}
endShape(CLOSE);
}
Free AI Website Software