Initial draft

Esse commit está contido em:
Alex Castillo
2016-04-08 15:21:29 -04:00
commit f9ea2ad105
3 arquivos alterados com 116 adições e 0 exclusões
+18
Ver Arquivo
@@ -0,0 +1,18 @@
# OpenBCI Experimenter
Node.js app for recording experiments based on OpenBCI Data samples
This project is under development, this is just a first draft.
## Setup
* npm install
* Plug in OpenBCI dongle
* Turn on OpenBCI board
* Run:
``` bash
node experimenter with [subject_name] about [keyword] for [time_milliseconds]
```
The recorded JSON data for experiments can be found at ./data/[keyword].json
+77
Ver Arquivo
@@ -0,0 +1,77 @@
var path = require('path');
var fs = require('fs');
var argv = require('yargs').argv;
var jsonfile = require('jsonfile');
var OpenBCIBoard = require('openbci-sdk');
// Experiment Model
var experiment = {
name: argv._[3],
subject: argv._[1],
duration: argv._[5],
filePath: path.join(__dirname, 'data', argv._[3] + '-' + argv._[1] + '.json'),
patternsTotal: 0,
patterns: []
};
console.log(experiment);
// OpenBCI
const board = new OpenBCIBoard.OpenBCIBoard();
board.autoFindOpenBCIBoard()
.then(onBoardFind);
// Board find handler
function onBoardFind (portName) {
if (portName) {
console.log('board found', portName);
board.connect(portName)
.then(onBoardConnect);
}
}
// Board connect handler
function onBoardConnect () {
board.on('ready', onBoardReady);
}
// Board ready handler
function onBoardReady () {
console.log(experiment.name + ' experiment started');
board.streamStart();
board.on('sample', addPattern);
setTimeout(endExperiment, experiment.duration);
}
// Add pattern
function addPattern (sample) {
var pattern = {
input: {},
output: {}
};
sample.channelData.forEach(function (channel, index) {
pattern.input[index + 1] = channel;
});
pattern.output[experiment.name] = 1;
experiment.patternsTotal++;
experiment.patterns.push(pattern);
console.log('pattern', pattern);
}
// End Experiment
function endExperiment () {
board.streamStop()
.then(board.disconnect());
jsonfile.writeFile(experiment.filePath, experiment, { spaces: 2 }, function (error) {
if (!error) {
console.log(experiment.name + ' experiment finished with ' + experiment.patternsTotal + ' patterns');
console.log('Experiment path: ' + experiment.filePath);
} else {
console.log(experiment.name + ' experiment failed. sucks to be you.');
}
});
}
+21
Ver Arquivo
@@ -0,0 +1,21 @@
{
"name": "openbci-experimenter",
"private": false,
"version": "0.0.1",
"description": "Node.js app for recording experiments based on OpenBCI data samples",
"main": "experimenter.js",
"license": "MIT",
"keywords": [
"openbci",
"experiment",
"machine-learning"
],
"author": "Alex Castillo",
"scripts": {
},
"dependencies": {
"jsonfile": "^2.2.3",
"openbci-sdk": "^0.2.0",
"yargs": "^4.3.2"
}
}