Stress maakt kunst: galvanische Skin Response en visuele generatie (2 / 3 stap)

Stap 2: Code


Voor de codering van dit project, ik genoemde deel aan de twee bronnen hieronder. U hoeft niet te kijken naar deze bronnen tenzij je wilt begrijpen hen in hun oorspronkelijke vorm. Als je gewoon kopiëren wilt/plakken code die werkt, gaat u naar 3) mijn Code.

1) GSR broncode
De eerste was http://cwwang.com/2008/04/13/gsr-reader/ , waarin de code van de Arduino (voor Arduino en verwerking te communiceren) en de code van de verwerking te gebruiken van de responsgegevens van galvanische huid van de geconstrueerde sensoren. Wang's code grafieken in principe van iemands galvanische huid-responswaarde in een bewegende lijndiagram, dat een beetje lijkt op een EKG visueel lezen. Ik wilde een meer abstracte visualisatie van de code zo gebruikte gegevens uit een andere bron voor het genereren van de visuals.

2) visuele broncode
De code waarmee de visuals is uit: http://www.generative-gestaltung.de/P_2_2_1_01

3) mijn Code

A) ARDUINO ONDERSTAANDE CODE

VOID Setup {}
Serial.begin(9600);
}

void loop {}
int a=analogRead(0);
Als (Serial.available() > 0)
{

byte inbyte=Serial.read();
if(inbyte=='A')
{
Serial.write(a);

}
}
}

---------------------------------------------
B) PROCESSING ONDERSTAANDE CODE

u kunt kopiëren/plakken deze code in een nieuwe Processing Schets
Visuele broncode van: http://www.generative-gestaltung.de/P_2_2_1_01
GSR broncode van: http://cwwang.com/2008/04/13/gsr-reader/

importeren van processing.pdf.*;
importeren van java.util.Calendar;

Boole recordPDF = false;

importeren van processing.serial.*;
Seriële myPort;

int hPosition = 1;
float currentReading;
float lastReading;
int count = 0;
int zeroLinePos = 0;

float gsrAverage, prevGsrAverage;
float basislijn = 0;
lange lastFlatLine = 0;
int baselineTimer = 10000; //10 sec
int gsrValue;
int gsrZeroCount = 0;
zweven gsrRange = 0;
int downhillCount = 0;
int uphillCount = 0;
Booleaanse afdaling;
Boolean piek = false;
float peak, vallei;
int de snelheid;
int Noord = 0;
int ten NOORDOOSTEN = 1;
int EAST = 2;
int ten ZUIDOOSTEN = 3;
int zuiden = 4;
int ten ZUIDWESTEN = 5;
int WEST = 6;
int ten NOORDWESTEN = 7;

zweven stepSize = 1;
float diameter = 1;

int richting;
posX, zweven posY;
int minCurrentReading = 1000;
int maxCurrentReading = 0;

VOID Setup {}
grootte (800, 800); //size van venster voor afbeelding
Background(255);
Smooth();
noStroke();
posX = breedte/2;
posY = hoogte/2;
println(Serial.List());
currentReading = 0;
lastReading = 0;
gsrAverage = 0;

vinden van de juiste seriële poort voor uw computer en voer het aantal binnen]
myPort = nieuwe Serial (dit, Serial.list() [8], 9600);
}

VOID serialEvent (seriële myPort) {}
int inByte=myPort.read();
0-255
gsrValue = inByte; //taking waarde verzonden van Arduino
}

VOID draw() {}

calculateGSR();

println ("currentReading =" + currentReading);

kaart van de currentReading te versnellen
Als (currentReading < = 50)
{
currentReading = minCurrentReading;
} else if (currentReading > 1000)
{
currentReading = maxCurrentReading;
}
anders / / geldige zone
{

Als (currentReading < minCurrentReading)
{
minCurrentReading = int (currentReading);
}

Als (currentReading > maxCurrentReading)
{
maxCurrentReading = int(currentReading);
}}

println ("currentReading =" + currentReading + "minCurrentReading =" + minCurrentReading + "maxCurrentReading =" + maxCurrentReading);
currentReading = kaart (currentReading, minCurrentReading, maxCurrentReading, 10, 15000);
snelheid = int (currentReading);

println ("toegewezen waarde =" + snelheid);
vertraging (50), //delay voor stabiliteit

de GSR lezing toe te passen op de snelheid van die de biologische tekening "groeit" station
for (int i = 0; ik < = snelheid; i ++) {}
richting = (int) willekeurige (0, 8);

Als (richting noorden ==) {}
posY-= stepSize;
}
anders als (richting == ten NOORDOOSTEN) {}
posX += stepSize;
posY-= stepSize;
}
anders als (richting Oosten ==) {}
posX += stepSize;
}
anders als (richting == ten ZUIDOOSTEN) {}
posX += stepSize;
posY += stepSize;
}
anders als (richting zuiden ==) {}
posY += stepSize;
}
anders als (richting == ten ZUIDWESTEN) {}
posX-= stepSize;
posY += stepSize;
}
anders als (richting WEST ==) {}
posX-= stepSize;
}
anders als (richting == ten NOORDWESTEN) {}
posX-= stepSize;
posY-= stepSize;
}

Als (posX > breedte) posX = 0;
Als (posX < 0) posX = breedte;
Als (posY < 0) posY = hoogte;
Als (posY > hoogte) posY = 0;

vulling (0, 40);
ellips (posX + stepSize/2, posY + stepSize/2, doorsnede, diameter);
Stuur voor meer bytes ' a'
}
}

VOID calculateGSR () {}
beste vertraging instelling voor gsr lezingen
println(gsrValue);
delay(50);
afbeelding (linkageName, 0, 0);

Als (gsrValue < 15 & & gsrValue > -15) {/ / iets tussen -15 en + 15 wordt beschouwd als nul
Als iemand vingers gedurende 10 seconden presenteert, wat resulteert in 10 0s, gewoon reset

Als (gsrZeroCount > 10) {}
currentReading = 0; //flatline
gsrAverage = 0;
Basislijn = 0;
lastFlatLine=millis();
gsrZeroCount = 0;
println("Reset");
}

gsrZeroCount ++;
} / / einde van de test voor dicht bij nul

else {/ / ggood lezen
currentReading = gsrValue-basislijn;
gsrZeroCount = 0;
}

Als (millis ()-lastFlatLine > baselineTimer) {}
Basislijn = gsrAverage; //if we ten minste 10 seconden lezing sinds de laatste flatline kregen
}

gsrRange = piek-vallei;

gsrAverage=smooth(currentReading,.99,gsrAverage);

int Bovenstebeoordelings = 7;

Als (currentReading-Bovenstebeoordelings > lastReading & & piek == true) {}
bergafwaarts = false;
println(downhillCount);
uphillCount ++;
downhillCount = 0;
punt (hPosition-1, hoogte/2.0-lastReading);
vallei = lastReading;
piek = false;

}
Als (currentReading + Bovenstebeoordelings < lastReading & & piek == false) {}
println(uphillCount);
bergafwaarts = true;
uphillCount = 0;
downhillCount ++;
punt (hPosition-1, hoogte/2.0-lastReading);
piek = lastReading;
piek = true;
}

prevGsrAverage = gsrAverage;
lastReading = currentReading;
Stuur voor meer bytes ' a'
myPort.write('a');

}

int glad (zweven gegevens, filterVal drijven, zweven smoothedVal) {}
Als (filterVal > 1) {/ / check te maken zeker param zijn binnen bereik
filterVal =. 99;
}
else if (filterVal < = 0) {}
filterVal = 0;
}
smoothedVal = (gegevens * (1 - filterVal)) + (smoothedVal * filterVal);
keren smoothedVal (int);
}

Gerelateerde Artikelen

Maken van galvanische Skin Response vinger elektroden

Maken van galvanische Skin Response vinger elektroden

Galvanische Skin Response of GSR is een fysiologische effect gebruikt in Biofeedback en leugen detectoren. Ik heb een Android App die een smartphone in een GSR sensor verandert ontwikkeld. Nochtans, vereist het maken van speciale vinger elektroden te
Galvanische skin response computermuis

Galvanische skin response computermuis

een huidige tendens in mens-machine interactie onderzoek is het gebruik van fysiologische metingen voor het verzamelen van gegevens, terwijl gebruikers zijn betrokken bij de software of de website die wordt getest.Een groot probleem, echter, is dat d
Excitement(stress) Meter - galvanische reactie van de huid met de IPhone

Excitement(stress) Meter - galvanische reactie van de huid met de IPhone

Galvanische Skin Response of Electrodermal activiteit is gebruikt sinds de jaren 1920 in politie leugendetector, en onlangs heeft genoten van een beetje meer van de schijnwerpers als een opwinding en stress meter. Sommige ontzagwekkende mensen bij MI
Arduino Stress Detector

Arduino Stress Detector

Van EE122B, inleiding tot Biomedische Elektronika, Universiteit van StanfordOnderwezen door Professor Greg Kovacs, voorjaar 2014Het probleem:Stress is een alomtegenwoordige deel van de moderne snelle leven. Daarnaast is er een groeiende hoeveelheid w
De Blister-vrije prothetische

De Blister-vrije prothetische

Amputees met prothetische benen, boven de knie, of onder de knie, ontwikkelen vaak blaren van irritatie van de prothetische wrijven overdreven tegen de resterende ledemaat. Deze blaren zijn zeer pijnlijk en belemmeren een geamputeerde de mogelijkheid
Arduino Tutorials (deel 4-21 Tutorial Pack)

Arduino Tutorials (deel 4-21 Tutorial Pack)

Dit is de Arduino Tutorial Pack deel 4.Het 1ste deel is hier beschikbaar:Het 2e deel is hier beschikbaar:Het 3e deel is hier beschikbaar:In tegenstelling tot andere tutorials hier geven niet ik elke achtergrond in theorie hoe het werkt. Het is hoe te
Arduino polygraaf maken

Arduino polygraaf maken

Is het mogelijk om met de Arduino polygraaf? Ten eerste, laten we praten over hoe de polygraaf werken Mantgum werken. Wanneer vertel je mensen liggen diep in de elektrische geleidbaarheid is afhankelijk van de opwinding. We zullen de basis vormen van
Eenvoudige polygraaf met Arduino

Eenvoudige polygraaf met Arduino

Een polygraaf is algemeen bekend als een leugendetector. Echt, het detecteert hoe enthousiast een persoon is. Ze zijn niet waterdicht (en niet van de beroepschriften in de rechtszaal in de Verenigde Staten), maar ze zijn leuk en een goede manier om t
SNELLE Polymer Clay Push Mold venster kunst

SNELLE Polymer Clay Push Mold venster kunst

hier in Maine de ambachtelijke Toon circuit krijgt rolling wanneer het weer begint te warm. Ik maakte meerdere polymeer klei afgietsels in mijn ComposiMold en dit project gewijd aan alle mijn collega hobbyisten. Dit project is bedoeld om aan te tonen
Prullenbak naar artistieke schat met huis verf!

Prullenbak naar artistieke schat met huis verf!

Dit is echt een geweldige manier te ontdoen van een klein beetje overgebleven binnen huis verf, overeenkomen met uw decor en laat de kinderen plezier hebben als je geneigd.Het betere nieuws is dat het kan worden toegepast op zowat alles hebt u de jui
Procedureel gegenereerde bomen

Procedureel gegenereerde bomen

Als je games zoals Minecraft ooit gespeeld hebt, heb je gezien procedureel gegenereerde terrein. Een oneindige matrix van rivieren, bergen en bomen kan worden gegenereerd vanuit eenvoudige wiskundige formules.In dit Instructable ga ik u onderwijzen h
De buitenverlichting op een landrover defender upgraden naar NAS. (Deel 1 van 3)

De buitenverlichting op een landrover defender upgraden naar NAS. (Deel 1 van 3)

Heb ik besloten dat ik vond het idee van de verlichting op mijn 1990 landrover defender provincie die waren makkelijker te onderhouden en gaf een beter licht dan de originelen.Dit instructable toont hoe ik ging erover. Dit is stap 1 van 3 die voornam
Terugdringen van uw eetlust voor voedsel

Terugdringen van uw eetlust voor voedsel

dit is een foto van mij voordat ik heb opgedaan wat gewicht in de winter. Mensen in mijn familie lijken op een druif meer dan een potlood. Ik heb gebruikt een aantal keren diëten. Het is altijd een strijd met mijn wilskracht als snack eten voor mij r
Stof portret van een paard quilt blok

Stof portret van een paard quilt blok

dit toont de stappen die ik ging door te monteren een stoffen quilt blok van het hoofd van een paard voor een vriend.Stap 1: Print het patroon ik de originele foto uitgeprint na met behulp van photoshop te scheiden van kleuren en vormen en knip het u