Beispiele zur Verwendung verschiedener Sensoren mit einem Arduino-Micro
(EN google-translate)
(PL google-translate)

Bild 0-1: Simple scheme for an interactive installation.
Durch die Verwendung von Sensoren kann eine langweilige Sache plötzlich sehr interessant werden. Jetzt ist der Mensch nicht mehr nur passiver Betrachter, sondern kann selber in die Installation eingreifen. Wir betreten das Gebiet der Mensch - Maschine - Schnittstellen. Hier ist ein Beispiel, bei man selber spielerisch komponieren kann:

Im folgenden werden kleine Sensor - Aktuator - Varianten auf der Basis des Arduino Micro vorgestellt. Hierbei werden auch die im vorangehenden Kapitel aufgezeigten Ideen für die Klangerzeugung aufgegriffen.
Sound Installation 1
Diese Klanginstallation imitiert den Rhythmus vom Händeklatschen Man klatscht während die LED leuchtet. Der Rhythmus wird wiederholt während die LED aus ist.

Bild 0-2: sheme of sound installation 1

Bild 0-3: foto of sound installation 1
#define MEMORY 1000 int mic = 0; bool REC = false; unsigned long time=0; bool arr[MEMORY]; int i=0; void setup() { pinMode(12,OUTPUT); for(i=0;i<MEMORY;i++) arr[i]=false; } void loop() { time = millis()%(2*MEMORY); if(time<MEMORY) { digitalWrite(12,HIGH); mic = analogRead(0); if(mic<50) arr[time]=true; } else { digitalWrite(12,LOW); if(arr[time-MEMORY]==true) { arr[time-MEMORY]=false; tone(13,440,20); } } delay(1); }
Code 0-1: sound_installation_01

Sound Installation 2
Eine Rassel wird abhängig von den Werten eines Abstandssensors schneller oder langsamer geschüttelt.

Bild 0-4: sheme of sound installation 1

Bild 0-5: foto of sound installation 1
//See also: File ... Examples ... Servo #include <Servo.h> Servo myservo; // create servo object to control a servo int sensor=0; int inkrement = 1; int angle = 0; int direction = 1; void setup() { myservo.attach(13); // attaches the servo on pin 13 to the servo object Serial.begin(9600); } void loop() { sensor = analogRead(0); inkrement = sensor/5; if(inkrement>180) inkrement=180; if(inkrement<5) inkrement=0; angle+=direction*inkrement; if(angle>=180) { direction=-1; } if(angle<=0) { direction=1; } myservo.write(angle); delay(60); }
Code 0-2: sound_installation_02

Sound Installation 3
Ein Sensor vom Typ MPU6050 wird verwendet, um die zwei orthogonalen Richtungen die Beschleunigung zu messen. Der erste Wert steuert den Grad an Chaos in einer Chaos-Funktion. Der andere Wert kontrolliert die Geschwindigkeit der Tonabfolge, die mit den Chaoswerten gespielt wird.

Bild 0-6: sheme of sound installation 1

Bild 0-7: foto of sound installation 1
//Mittelwert omega=0.0348 //0.0485 //-0.0063 #include<math.h> #include<Wire.h> #define GYROSCALE 131.0 #define GYROOFFSET 2.71 //korrigierter Gyrooffset //4.294.967.295 unsigned long // 1.000.000 == 1s //4.000.000.000 == 4000s //1s == 1000ms == 1.000.000us const int MPU=0x68; // I2C address of the MPU-6050 int16_t AcX,AcY,AcZ; double ax,ay,az; double stellgroesse; double m=0.0; bool SERIELL = false; //CHAOS FUNCTION double y_old = 0.56; double y_new = 0.0; int value=0; int i; double r=3.5; void setup() { // put your setup code here, to run once: Wire.begin(); Wire.beginTransmission(MPU); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(true); if(SERIAL==true) Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Wire.beginTransmission(MPU); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); Wire.requestFrom(MPU,6,true); // request a total of 14 registers AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) ax = (double)AcX; ay = (double)AcY; az = (double)AcZ; if(ax>15000.0) //limitate ax=15000.0; if(ax<-15000.0) ax=-15000.0; if(ay>15000.0) //scale ay=15000.0; if(ay<-15000.0) ay=-15000.0; ax+=15000.0; ay+=15000.0; ax/=30000.0; //scale to [0,1] ay/=30000.0; r = 3.0 + ax; y_new = r*y_old*(1.0 - y_old); value = (int)(100.0*y_new); y_old = y_new; tone(13, 200 + 2*value); delay(10 + (int)(100.0*ay)); if(SERIELL) { Serial.print(" arx = "); Serial.print(ax,DEC); Serial.print(" ary = "); Serial.println(ay,DEC); delay(333); } }
Code 0-3: sound_installation_03

Sound Installation 4
Indem ein digitaler Eingang ohne pull up Widerstand konfiguriert wird, entsteht ein sehr empflindlicher Eingang. Die Anzahl der Einser über ein festes Zeitintervall wird gezählt und als Grundlage für die Tonhöhe verwendet.

Bild 0-8: sheme of sound installation 4

Bild 0-9: foto of sound installation 4
bool SERIELL = false; int x=0; int y=0; void setup() { DDRB &= 0b01111111; PORTB &= 0b01111111; if(SERIELL==true) Serial.begin(9600); } void loop() { if(y<1000) { if( (PINB & 0b10000000) == 0 ) { x++; } } else { y=0; if(SERIELL==true) Serial.println(x); x=0; } y++; tone(13,x); if(SERIELL==true) delay(1); }
Code 0-4: sound_installation_04

Verwendung besonderer Mittel für die Datenverarbeitung
Aber nicht nur auf Seiten von Sensor und Aktuator kann man über Alternativen nachdenken. Es existieren auch Beispiele dafür, wo zur Datenverarbeitung statt eines Computers etwas anderes verwendet wurde:


