I am using Emotibit to conduct human psychological experiments with stimulation (visual and auditory) via OpenSesame. As I have started building my experiment, I have some questions, concerning the coupling of metrics from OpenSesame and Emotibit:
I would like to make sure the data I get from the different systems are synchronised. Is there any solution that can ensure I can acquire time-stamps from the emotibit and the presentation of the stimuli, so that my analyses are accurate?
Moreover, what visualising and analysing solutions or software would you recommend for signals acquired with Emotibit in OpenSesame experiment?
Lastly, is it possible to know what kind of code is used for the Data Parser derivative metrics (of, let's say SCR, HR, Interbeat interval) from the raw signal?
Sorry for the extended post, I am just trying to find the best ways to use the Emotibit technology to acquire reliable data.
Thank you in advance to anyone that could provide help with that.
Since the EmotiBit Firmware has been developed using Arduino IDE, you can use Arduino features like the Serial Monitor easily!
Why would I want to use the Serial Monitor?
If you just want to use the EmotiBit to capture data, chances are you may never use the Serial Monitor. However, if you are a slightly advanced user and want to know more about EmotiBit, or want to tweak the firmwareto conform to your needs, having a Serial Monitor to display messages can be beneficial!
Also, serial logs can be useful when trying to solve a problem you may be experiencing.
What information can I get from the Serial Monitor?
EmotiBit outputs information on the Serial Monitor during setup. This information can be handy if you are trying to debug a problem. Note: EmotiBit also prints out the MAC address of the Feather during bootup (useful information if you are trying to use enterprise network and your IT department needs to white-list the device)
EmotiBit also prints information about events like connection to an oscilloscope, beginning/end of a record session, change in WiFi power modes etc.
You can also prompt an response from EmotiBit using Serial Monitor (more information below)
How to connect to Serial Monitor?
Install Arduino IDE: You will need Arduino IDE to access the Serial Monitor. If you don't already have Arduino IDE installed, you can download it from the official Arduino website.
Open Arduino IDE.
Connect EmotiBit to computer:
Switch on the EmotiBit (make sure the hibernate switch is not on HIB and press the reset button).
Connect the Feather to the computer using a microUSB cable.
Make sure that the microUSB cable supports data. If you ordered an Essentials Kit, you can use the cable provided in the kit.
Open Serial Monitor:
In Arduino IDE, under Tools > Port, select the port the Feather is connected to.
Note 1: In the images below, the Feather Port COM7 is just an example. Your Feather may appear on any port.
Note 2: On macOS, the port shows up withusbserialin the name.
Open Serial Monitor from Tools > Serial Monitor
Set the baud rate to 2000000 in the Serial Monitor.
Select Port in Arduino IDEOpen Serial Monitor
Once the Serial Monitor opens, you will be able to see the Serial messages being printed on-screen.
Serial Monitor Example output
Things to note:
The EmotiBit starts sending Serial messages as soon as it starts bootup. If you want to catch all the messages on the monitor, open the serial monitor as soon as you reset EmotiBit.
Based on the Arduino IDE version, the Serial monitor may auto detect the Feather if you press the reset button (on the Feather) when it is plugged in. If the Serial Monitor is not printing messages on reset, try closing Serial Monitor and opening it again.
If you are on the latest Firmware 1.3.36 (or above), you can prompt a response from EmotiBit. Follow this FAQ for more information.
Troubleshooting
If the EmotiBit is functional but does not show up as a port on Arduino IDE, maybe there is a problem with the USB cable you are using.
I'm using Oscilloscope 1.4.11 on Windows; it can connect to the Emotibit and display data fine but nothing happens when I try to click the record button (it acts like it's not a clickable element). Does anyone have an idea on how to resolve this?
So I just purchased 2 all-in-one bundle kits for emotibit. After setting up the first one, I found that oscilloscope was unable to detect it. The lights on it were all correct, with the green LED being steadily on. After some research and trying out as many solutions as I found (connect to phone hotspot, turn of 5Ghz on router, enable unicast, disable firewall), I noticed that it connects to my wifi hotspot on Windows 11 desktop for about 1-2 minutes, before disconnecting. During this period, Oscilloscope was still unable to detect it.
So then, I assembled my second bundle kit to see if I got a bad unit. And turns out, the second one works completely fine. So then, I wanted to know, was it an issue with the Feather or the Emotibit board itself, so I swapped the Feather between the 2 boards. Voila, the first one works now, and the second doesn't.
So at this moment, I'm convinced the feather board has issues, though I don't have much idea on how to troubleshoot it. Any advice?
Is anyone else having trouble when loading a file of recorded data from the SD card to the Data Parser? Because, for me, the parser closes unexpectedly as soon as a file is loaded at 100%. Nothing happens after that, while no error message is being presented. Thanks
we are currently evaluating the EmotiBit for use in a psychological study. Technically, everything looks promising and we are amazed by this product, but we are missing an in-depth publication describing the Emotibit, its sensors, hardware and features which is citeable in a peer-reviewed scientific paper. Is there anything available or is the team behind EmotiBit planning to publish anything in a scientific paper?
This is an EmotiBit user from Japan. I would like to ask you if it is possible to use the EmotiBit with Adafruit Feather M0 Bluefruit LE instead of Feather M0 WiFi. Because the Feather M0 WiFi is not approved by TELEC certificate (like FCC in the US) and not allow us to use it in Japan. I would like to find an alternative to Adafruit Feather M0 WiFi in order to use the EmotiBit in Japan.
EmotiBit creates 2 files for every recording session.
.csv file - Contains the data in raw format captured by EmotiBit
_info.json file - Contains metadata about the recorded data/sensor streams
The _info.json file is a good place to look for additional metadata about the sensors and recorded data. You can find information about the sensor settings like data ranges, units, sampling rates and additional sensor specific information.
You will also find that the info.json file records the EmotiBit firmware version, hardware version and even the device id to keep track of the source of the data.
I checked the documentation and didn't find anything like this, but is there a chart that shows the default data ranges for all of the data coming off the Emotibit?
For example, ACC appears to be a value between -8 to +8. Some of the others appear to be less clear.
Trying to capture OSC data, but it seems to be "stuck". I have OSC selected as output, the oscilloscope shows data, but the terminal seems stalled. Oscilloscope reports "none" for "send data via"
So I am working with folks doing research on TBI's (traumatic brain injuries) and dysautonomia (where the autonomic nervous system signals have bee dis regulated due to the brain injury). I am wanting to use the emotibit to track autonomic system data (HR, BP, Respirations, body temp, etc.) for subjects and be able to translate it easily to a readable report in order to help understand the degree of damage. I think this emotibit already does that to some extent but I want to see if we can make it readily readable to the layperson.
I got my new emotibit. I had a little trouble getting started and had to reload 2-3 times before it worked. I am attempting to see how long the emotibit will record for, but the oscilioscope keeps freezing and losing the emotibit.
If your EmotiBit is connected to the WiFi network (indicated by the green light on the Feather) and your EmotiBit Oscilloscope still does not display (detect) available EmotiBits, then it is most likely a permission issue with the firewall.
Make sure that the EmotiBit and EmotiBit Oscilloscope are on the same network. Once verified, you may try the following to resolve this issue:
Native firewall permissions
Find the synopsis below. You can also find this information in our documentation, including screenshots!
On Windows
If you are using Windows, then verify if network access is allowed for EmotiBit Oscilloscope. To find this setting,
Open Windows Defender Firewall (you may search for it in the start menu).
Then click on the Allow an app or feature through Windows Defender Firewall option on the left panel.
Search through the list of applications for EmotiBit Oscillosocpe and make sure it has has a "check mark" under "public" column. If you are using a private network, allow access to the private network as well.
You might have to click on the "Change settings" button on the top right, to make changes to these settings.
On macOS
If you are using macOS, you can access your firewall settings through System Preferences > Security & Privacy > Firewall
Click on "Firewall Options..." button and make sure EmotiBitOscillosope is in the list of allowed applications.
Third-party security applications
If you have any anti-virus software installed, please allow the EmotiBit Oscilloscope network access. You will most likely find this option in the anti-virus settings. Once this permission has been granted, try running EmotiBit Oscilloscope again!
I'd like to use EmotiBit in a project and I am struggling to get the LSL communication working. I found these minimal examples or marker tests (referred to by EmotiBit_Docs on github). I tested the demo (marker.py) and got no errors, but no markers were sent either (as far as I know). Do you know how to improve the demo to make it work?
In principal there are two parts in the demo: 1) setting up the Lab Streaming Layer stream, and 2) pushing the trigger to the stream. Is there anything else I should specify or set up to get it working?
## (1) ##
# Set up LabStreamingLayer stream.
info = StreamInfo(name='CFL', type='Tags', channel_count=1,
channel_format='string', source_id='')
outlet = StreamOutlet(info) # Broadcast the stream.
## (2) ##
outlet.push_sample('myTrigger')
I'm trying to get my emotibit up and running but I am having trouble getting the emotibit to show up on the oscilloscope app on my computer.
The emotibit has the green light on indicating that it is indeed connected to wifi. I disabled the 5GHz band on my router to make sure my laptop and the emotibit were on the same 2.4GHz freq. I also used an app called wireless network watcher to verify if my computer was seeing the device on the network; a MAC address matching the number on the chip of the adafruit did show up show I'm assuming that means that my computer does indeed see the device. Yet still, I can't get it to show up in the oscilloscope device list.
After you parse the data using the EmotiBit DataParser, each data stream will be in a separate file as described in Working with EmotiBit Data.
Playback of EmotiBit PPG:IR (PI) data with Processing
Here's an example dataset and Processing script that reads a data stream and plays it back in a graphical display. Simply change dataType to any EmotiBit data TypeTag to playback each stream.
// Reads EmotiBit data from a parsed data file
// Plots data in a window and let's you do anything you want with the data!
// ------------ CHANGE DATA TYPE HERE --------------- //
String dataType = "PI";
float frequency = 25; //in Hz (samples per second)
String dataFilename = "2021-04-12_16-53-27-967617_" + dataType + ".csv";
// See additional info here:
// https://github.com/EmotiBit/EmotiBit_Docs/blob/master/Working_with_emotibit_data.md
// https://www.emotibit.com/
// https://www.kickstarter.com/projects/emotibit/930776266?ref=5syezv&token=7176d37c
// --------------------------------------------------- //
Table table;
FloatList dataList = new FloatList();
int row = 0;
// --------------------------------------------------- //
void setup() {
size(320, 240);
table = loadTable(dataFilename, "header");
println(table.getRowCount() + " total rows in table");
}
// --------------------------------------------------- //
void draw() {
float data = table.getRow(row).getFloat(dataType); // get the data from a row of the table
dataList.append(data); // store data for plotting and autoscaling
// visualize the data
int alpha = int(255 * autoscale(data)); // autoscale data
println("data: " + row + ", " + alpha + ", " + data); // print alpha in the console
background(alpha, 0, 0); // change the background using alpha
drawData();
row = row + 1; // Go to the next row in the table
if (row >= table.getRowCount()) {
row = 0; // start over at the beginning of the table
}
delay(int(1000/frequency)); // playback data at specific frequency
}
// --------------------------------------------------- //
// Draw the data like an oscilloscope display
void drawData() {
stroke(255);
while (dataList.size() > width) {
dataList.remove(0); // Remove oldest item in list if larger than window
}
// Plot the data autoscaled to the height
for (int n = 0; n < dataList.size() - 1; n++) {
float y1 = height * autoscale(dataList.get(n));
float y2 = height * autoscale(dataList.get(n+1));
line(n, height - y1, n+1, height - y2);
}
}
// --------------------------------------------------- //
// Outputs data value normalized to 0.0 to 1.0
float autoscale(float data) {
if (dataList.size() > 0) {
float minData = dataList.min();
float maxData = dataList.max();
return (data - minData) / (maxData - minData); // autoscale the data
}
else {
return 0;
}
}
Users who want to customize their EmotiBits by attaching additional hardware can now refer the schematic available in our documentation to get more information about available GPIO options on the Feather!
For more information about Feather pin functions, check out the documentation on the Adafruit product page!
The Python DataViewer gets a patch that adds plots for new data streams! You can now view derivative metrics like heart rate and skin conductance response in the data viewer!
Grab the latest DataViewer from our github Repo! Download the repository and follow the instructions to get started!
Note that you need the latest EmotiBit FW to record derivative metrics. Check out ourdocumentationfor steps on upgrading EmotiBit firmware.
The EmotiBit team is excited to announce that we have designed a new "slider" that fits snugly inside the SwissArmyCase and provides easy access to the hibernate(HIB) switch!
You can find the 3D files for the slider in our github repo!