From d9e710879460ac6b2e4069fb8551248deb7f18d7 Mon Sep 17 00:00:00 2001
From: Anes Belfodil
Date: Sat, 31 Oct 2020 17:58:45 -0400
Subject: [PATCH 01/34] Commit pas rapport
---
.../{analysis_in_progress.js => analysis_in_progress}/index.js | 0
web/src/views/analyze_sleep/index.js | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename web/src/views/analyze_sleep/{analysis_in_progress.js => analysis_in_progress}/index.js (100%)
diff --git a/web/src/views/analyze_sleep/analysis_in_progress.js/index.js b/web/src/views/analyze_sleep/analysis_in_progress/index.js
similarity index 100%
rename from web/src/views/analyze_sleep/analysis_in_progress.js/index.js
rename to web/src/views/analyze_sleep/analysis_in_progress/index.js
diff --git a/web/src/views/analyze_sleep/index.js b/web/src/views/analyze_sleep/index.js
index 854cfedc..84690a58 100644
--- a/web/src/views/analyze_sleep/index.js
+++ b/web/src/views/analyze_sleep/index.js
@@ -8,7 +8,7 @@ import { periodicPingServer } from 'requests/ping_server';
import WaitingForServer from './waiting_for_server';
import UploadForm from './upload_form';
import { PING_PERIOD } from './constants';
-import AnalysisInProgress from './analysis_in_progress.js';
+import AnalysisInProgress from './analysis_in_progress';
import text from './text.json';
From 116439d509a73cc506245533ca0a98db2c7d77fb Mon Sep 17 00:00:00 2001
From: Anes Belfodil
Date: Sat, 31 Oct 2020 18:55:48 -0400
Subject: [PATCH 02/34] First pass adding content
---
web/src/index.js | 3 +-
web/src/views/record_my_sleep/index.js | 326 ++++++++++++++++++++++++
web/src/views/record_my_sleep/text.json | 5 +
3 files changed, 333 insertions(+), 1 deletion(-)
create mode 100644 web/src/views/record_my_sleep/index.js
create mode 100644 web/src/views/record_my_sleep/text.json
diff --git a/web/src/index.js b/web/src/index.js
index c3f9dd2e..a0b3ec68 100644
--- a/web/src/index.js
+++ b/web/src/index.js
@@ -11,6 +11,7 @@ import Navbar from 'components/navbar';
import SleepAnalysisResults from 'views/sleep_analysis_results';
import Performance from 'views/performance';
import AnalyzeSleep from 'views/analyze_sleep';
+import RecordMySleep from 'views/record_my_sleep';
import ScrollToTop from 'components/scroll_to_top';
import Emoji from 'components/emoji';
@@ -46,7 +47,7 @@ ReactDOM.render(
-
+ } />
} />
} />
} />
diff --git a/web/src/views/record_my_sleep/index.js b/web/src/views/record_my_sleep/index.js
new file mode 100644
index 00000000..980cc327
--- /dev/null
+++ b/web/src/views/record_my_sleep/index.js
@@ -0,0 +1,326 @@
+import React from 'react';
+import { Container, Table, Row } from 'reactstrap';
+
+import Header from 'components/header';
+
+import text from './text.json';
+import WIPWarning from 'components/wip_warning';
+
+const RecordMySleep = () => {
+ return (
+
+
+
+
+ Create your own sleep lab
+
+ Here are some explanations about how to get your own EEG data in order to score your sleep using this
+ website. If you already own an OpenBCI board, you could have very little (see nothing) to buy.
+
+
+ If you don’t have the time or the resources to create your own sleep lab, we have pre-recorded one of our
+ members' night's sleep. You can take a look at the end result right here:
+
+
+
+
+ What you need
+
+
+
+
+ Where to place the electrodes
+
+ You may want to ask a friend for some help. It will be easier to locate the site where to place your
+ electrodes and to place them with the help of someone else.
+
+
+ First, you need to know where to place the electrodes. Our channels are Fpz-Cz and Pz-Oz to which we add a
+ driven ground electrode placed at A2 (on your right ear lobe).
+
+
+
+
Fpz
+
+ Fpz is used as one of our active electrodes. To identify the Fpz location, just measure the distance
+ starting from your nasion (the easily identifiable depressed area between your eyes) to your inion using
+ your flexible measuring tape.
+
+
+
Fpz is located at 10 % of the distance along the midline between your nasion and your inion.
+
+
+
+
Cz
+
+ We’re measuring a potential difference between Fpz and that point. Cz is located at 50% of the distance
+ along the midline starting from your nasion to your inion.
+
+
+
+
+
Pz
+
+ This is our other active electrode. It is located at 70% of the distance between your nasion and your
+ inion.
+
+
+
+
+
Oz
+
+ This is the point at which Pz is referenced. It is located at 90% of the distance between your nasion and
+ your inion.
+
+
+
+
+
A2
+
+ This is the electrode that serves as driven ground between your and your OpenBCI board. Simply place it on
+ your right earlobe.
+
+
+
+
+
+
+ How to place the electrodes
+
+ 🌙
+
+
+
+
+
Apply Abrasive paste
+
+ Now that you marked all these locations, you can clean the areas with abrasive paste. Exfoliate the skin
+ with a cotton swab until it begins to turn pink, and then wash the skin using some rubbing alcohol and a
+ cotton pad.
+
+
+
+
+
Place your electrodes
+
Make sure your electrodes are clean.
+
+ For Cz, Pz and Oz (electrodes placed over your scalp): Squeeze some EC2 over a gauze pad, take an
+ electrode and apply a good amount of Ten20 paste into the cup, and then set the electrode down on the EC2.
+ Finally, take the gauze pad with the electrode and place it on the marked area.
+
+
+ For Fpz and A2 (electrodes directly placed over skin): Apply a good amount of Ten20 paste into the
+ cup, place it on the marked area and fix it with a small cutoff of Hypafix. If you do not have Ten20
+ paste, just use EC2 paste as above.
+
+
+ Please note: A good amount of Ten20 paste means filling the cup until it slightly overflows with paste.
+
+
+
+
+
+
Ensure good skin contact
+
+ To ensure that skin contact is good, it is important to measure the impedance between the electrodes.
+ Start by measuring the impedance between your active electrode and its reference (e.g.: Fpz and Cz). Also,
+ check the impedance between the reference electrodes of each channel (Cz and Oz) and the ground electrode
+ (A2). As a rule of thumb, low impedance (10 KOhms) is good and high ones are bad (let’s say 150 KOhms).
+
+
+
+
+
Wire the electrodes to the OpenBCI device
+
Here’s is how you need to wire your electrodes to the OpenBCI board you are using:
+
+
+
+ Location |
+ Pin on Cyton |
+ Pin on Ganglion |
+
+
+
+
+ Fpz |
+ P1 |
+ +1 |
+
+
+ Cz |
+ N1 |
+ -1 |
+
+
+ Pz |
+ P2 |
+ +2 |
+
+
+ Oz |
+ N2 |
+ -2 |
+
+
+ A2 |
+ BIAS (Any pin) |
+ D_G (Any pin) |
+
+
+
+
+
+
+
+ How to use OpenBCI GUI
+
+ First thing you need is the OpenBCI GUI in order to use the hardware. Therefrom, select
+ Live (from <boardname>) as your source. If you’re using a Cyton board we suggest you use a
+ microSD card using FAT32 format. If you do so, do not forget to select at least 12 hour maximum for
+ the write to SD card parameter. Otherwise, you must keep your computer near and open for the whole night and
+ log the data to a session file. If you do it this way, do not forget to select the OpenBCI file output and
+ to select No Limit as your max file duration. When everything is configured properly, you can press
+ Start Session. Before pressing Start Stream, press Hardware Settings and configure
+ everything as follow:
+
+
+
+
Hardware configuration for the Cyton board
+
+
+
+ Channel |
+ PGA Gain |
+ Input Type |
+ Bias |
+ SRB2 |
+ SRB1 |
+
+
+
+
+ 1 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+ No |
+
+
+ 2 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+ No |
+
+
+
+
+
+
+
Hardware configuration for the Ganglion board
+
+
+
+ Channel |
+ PGA Gain |
+ Input Type |
+ Driven Ground |
+ Common Ref |
+
+
+
+
+ 1 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+
+
+ 2 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+
+
+
+
+
+ Do not forget to deactivate all unused channels by greying out the numbered colored pill on the left of the
+ signal in the GUI. You can now press Start data stream. If you are using a microSD card and a Cyton
+ board, you may want to pull off the dongle from its usb port. Data will be written to the SD card for the
+ configured amount of time.
+
+
+
+
+ Limit noise
+
+ Tie the electrodes together with a hair tie, and if you have long hair, tie them all together in order to
+ avoid static during the night. To limit electromagnetic interferences you may want to place your board in
+ some sort of Faraday cage, for example, a plastic container wrapped up in aluminium foil.
+
+
+
+
+ Write a journal
+
+ You must keep a journal (accurate to the minute) and write down a few information to help us track and
+ analyze your sleep:
+
+ - When you started the stream
+ - Bedtime (when you go to sleep)
+ - When you wake up
+
+ You will need to provide this information in order to score your EEG recording.
+
+
+
+
+
+ Wake up!
+
+ ☀️
+
+
+
+
Remove your electrodes
+
+ In order to take the electrodes off your scalp, you can use warm water for the EC2 to come off easily. The
+ Hypafix, used for electrodes over the skin, should be taken off with warm water and/or rubbing alcohol.
+ Prefer taking them off slowly, since they can hurt sensible skin if removed too quickly. Don’t forget to
+ clean your electrodes using warm water and soap.
+
+
+
+
If you used an microSD card:
+
+ Remove the microSD card from the board and insert it in your computer. Then, open OpenBCI GUI and select
+ PLAYBACK (from file) as your data source. Use the Convert SD for playback option and select
+ your sd file. Wait a little bit and you will get the converted csv file. Upload this one to this website
+ in order to score your sleep
+
+
+
+
If you used session file:
+
+ After stopping the stream, go to the Recordings directory where your session file. Just upload this file
+ in order to score your sleep and analyze your data.
+
+
+
+
+
+ );
+};
+
+export default RecordMySleep;
diff --git a/web/src/views/record_my_sleep/text.json b/web/src/views/record_my_sleep/text.json
new file mode 100644
index 00000000..814e6208
--- /dev/null
+++ b/web/src/views/record_my_sleep/text.json
@@ -0,0 +1,5 @@
+{
+ "header_title": "Record my sleep",
+ "header_subtitle": "create your own sleep lab",
+ "header_description": "at home, using a little."
+}
From b7f704ab92aa9840f5722c1f625b85123cb61b7f Mon Sep 17 00:00:00 2001
From: Anes Belfodil
Date: Wed, 4 Nov 2020 12:28:05 -0500
Subject: [PATCH 03/34] Beautify the page
---
web/src/components/separator.js | 10 +
web/src/views/record_my_sleep/index.js | 358 ++++++++++++++-----------
2 files changed, 210 insertions(+), 158 deletions(-)
create mode 100644 web/src/components/separator.js
diff --git a/web/src/components/separator.js b/web/src/components/separator.js
new file mode 100644
index 00000000..074855e7
--- /dev/null
+++ b/web/src/components/separator.js
@@ -0,0 +1,10 @@
+import React from 'react';
+
+const Separator = () => (
+
+);
+export default Separator;
diff --git a/web/src/views/record_my_sleep/index.js b/web/src/views/record_my_sleep/index.js
index 980cc327..978852af 100644
--- a/web/src/views/record_my_sleep/index.js
+++ b/web/src/views/record_my_sleep/index.js
@@ -1,6 +1,7 @@
import React from 'react';
-import { Container, Table, Row } from 'reactstrap';
+import { Container, Table, Row, Col } from 'reactstrap';
+import Separator from 'components/separator';
import Header from 'components/header';
import text from './text.json';
@@ -8,7 +9,7 @@ import WIPWarning from 'components/wip_warning';
const RecordMySleep = () => {
return (
-
+ <>
{
subtitle={text['header_subtitle']}
description={text['header_description']}
/>
-
-
- Create your own sleep lab
+
+
+ Create your own sleep lab
Here are some explanations about how to get your own EEG data in order to score your sleep using this
website. If you already own an OpenBCI board, you could have very little (see nothing) to buy.
@@ -27,15 +28,21 @@ const RecordMySleep = () => {
If you don’t have the time or the resources to create your own sleep lab, we have pre-recorded one of our
members' night's sleep. You can take a look at the end result right here:
-
+
+
+
-
- What you need
+
+
+
+
-
- Where to place the electrodes
+
+
+ Where to place the electrodes
You may want to ask a friend for some help. It will be easier to locate the site where to place your
electrodes and to place them with the help of someone else.
@@ -46,59 +53,70 @@ const RecordMySleep = () => {
-
Fpz
-
- Fpz is used as one of our active electrodes. To identify the Fpz location, just measure the distance
- starting from your nasion (the easily identifiable depressed area between your eyes) to your inion using
- your flexible measuring tape.
-
-
-
Fpz is located at 10 % of the distance along the midline between your nasion and your inion.
-
-
-
-
Cz
-
- We’re measuring a potential difference between Fpz and that point. Cz is located at 50% of the distance
- along the midline starting from your nasion to your inion.
-
+
+
+
+
+
+ Fpz
+
+ Fpz is located at 10 % of the distance along the midline between your nasion and your inion.
+
+
+
+
+
+
+ Cz
+
+ We’re measuring a potential difference between Fpz and that point. Cz is located at 50% of the
+ distance along the midline starting from your nasion to your inion.
+
+
+
+
+
+
+ A2
+
+ This is the electrode that serves as driven ground between your and your OpenBCI board. Simply place
+ it on your right earlobe.
+
+
+
+
+
+
+
+
+ Pz
+
+ This is our other active electrode. It is located at 70% of the distance between your nasion and your
+ inion.
+
+
+
+
+
+
+ Oz
+
+ This is the point at which Pz is referenced. It is located at 90% of the distance between your nasion
+ and your inion.
+
+
+
+
+
+
-
-
Pz
-
- This is our other active electrode. It is located at 70% of the distance between your nasion and your
- inion.
-
-
+
+
+ How to place the electrodes
-
Oz
-
- This is the point at which Pz is referenced. It is located at 90% of the distance between your nasion and
- your inion.
-
-
-
-
-
A2
-
- This is the electrode that serves as driven ground between your and your OpenBCI board. Simply place it on
- your right earlobe.
-
-
-
-
-
-
- How to place the electrodes
-
- 🌙
-
-
-
-
-
Apply Abrasive paste
+
Apply Abrasive paste
Now that you marked all these locations, you can clean the areas with abrasive paste. Exfoliate the skin
with a cotton swab until it begins to turn pink, and then wash the skin using some rubbing alcohol and a
@@ -107,7 +125,7 @@ const RecordMySleep = () => {
-
Place your electrodes
+
Place your electrodes
Make sure your electrodes are clean.
For Cz, Pz and Oz (electrodes placed over your scalp): Squeeze some EC2 over a gauze pad, take an
@@ -126,7 +144,7 @@ const RecordMySleep = () => {
-
Ensure good skin contact
+
Ensure good skin contact
To ensure that skin contact is good, it is important to measure the impedance between the electrodes.
Start by measuring the impedance between your active electrode and its reference (e.g.: Fpz and Cz). Also,
@@ -136,7 +154,7 @@ const RecordMySleep = () => {
-
Wire the electrodes to the OpenBCI device
+
Wire the electrodes to the OpenBCI device
Here’s is how you need to wire your electrodes to the OpenBCI board you are using:
@@ -175,125 +193,149 @@ const RecordMySleep = () => {
-
+
+
+
-
- How to use OpenBCI GUI
+
+
+ How to use OpenBCI GUI
- First thing you need is the OpenBCI GUI in order to use the hardware. Therefrom, select
+ First thing you need is the OpenBCI GUI in order to use the hardware. Therefrom, select {' '}
Live (from <boardname>) as your source. If you’re using a Cyton board we suggest you use a
microSD card using FAT32 format. If you do so, do not forget to select at least 12 hour maximum for
the write to SD card parameter. Otherwise, you must keep your computer near and open for the whole night and
log the data to a session file. If you do it this way, do not forget to select the OpenBCI file output and
- to select No Limit as your max file duration. When everything is configured properly, you can press
+ to select No Limit as your max file duration. When everything is configured properly, you can press {' '}
Start Session. Before pressing Start Stream, press Hardware Settings and configure
everything as follow:
-
-
Hardware configuration for the Cyton board
-
-
-
- Channel |
- PGA Gain |
- Input Type |
- Bias |
- SRB2 |
- SRB1 |
-
-
-
-
- 1 |
- x24 |
- Normal |
- Include |
- Off |
- No |
-
-
- 2 |
- x24 |
- Normal |
- Include |
- Off |
- No |
-
-
-
-
+
+
+ Cyton
+
+
+
+ Channel |
+ PGA Gain |
+ Input Type |
+ Bias |
+ SRB2 |
+ SRB1 |
+
+
+
+
+ 1 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+ No |
+
+
+ 2 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+ No |
+
+
+
+
+
+ Ganglion
+
+
+
+ Channel |
+ PGA Gain |
+ Input Type |
+ Driven Ground |
+ Common Ref |
+
+
+
+
+ 1 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+
+
+ 2 |
+ x24 |
+ Normal |
+ Include |
+ Off |
+
+
+
+
+
-
-
Hardware configuration for the Ganglion board
-
-
-
- Channel |
- PGA Gain |
- Input Type |
- Driven Ground |
- Common Ref |
-
-
-
-
- 1 |
- x24 |
- Normal |
- Include |
- Off |
-
-
- 2 |
- x24 |
- Normal |
- Include |
- Off |
-
-
-
-
Do not forget to deactivate all unused channels by greying out the numbered colored pill on the left of the
signal in the GUI. You can now press Start data stream. If you are using a microSD card and a Cyton
board, you may want to pull off the dongle from its usb port. Data will be written to the SD card for the
configured amount of time.
-
+
+
+
-
- Limit noise
+
+
+ Limit noise
Tie the electrodes together with a hair tie, and if you have long hair, tie them all together in order to
avoid static during the night. To limit electromagnetic interferences you may want to place your board in
some sort of Faraday cage, for example, a plastic container wrapped up in aluminium foil.
-
+
+
+
-
- Write a journal
+
+
+ Write a journal
You must keep a journal (accurate to the minute) and write down a few information to help us track and
analyze your sleep:
-
- - When you started the stream
- - Bedtime (when you go to sleep)
- - When you wake up
-
- You will need to provide this information in order to score your EEG recording.
-
+
+ You will need to provide this information in order to score your EEG recording.
+
+
+
-
-
- Wake up!
-
- ☀️
-
-
+
+
+ Wake up!
-
Remove your electrodes
+
Remove your electrodes
In order to take the electrodes off your scalp, you can use warm water for the EC2 to come off easily. The
Hypafix, used for electrodes over the skin, should be taken off with warm water and/or rubbing alcohol.
@@ -302,7 +344,7 @@ const RecordMySleep = () => {
-
If you used an microSD card:
+
If you used an microSD card:
Remove the microSD card from the board and insert it in your computer. Then, open OpenBCI GUI and select
PLAYBACK (from file) as your data source. Use the Convert SD for playback option and select
@@ -311,16 +353,16 @@ const RecordMySleep = () => {
-
If you used session file:
+
If you used session file:
After stopping the stream, go to the Recordings directory where your session file. Just upload this file
in order to score your sleep and analyze your data.
-
-
-
+
+
+
+ >
);
};
-
export default RecordMySleep;
From 8f9b08ddf8576f28cfa718dc7ac0436dc77b3408 Mon Sep 17 00:00:00 2001
From: Anes Belfodil
Date: Wed, 4 Nov 2020 16:16:11 -0500
Subject: [PATCH 04/34] Remove separator
---
web/src/components/separator.js | 10 ----------
web/src/views/record_my_sleep/index.js | 13 ++-----------
2 files changed, 2 insertions(+), 21 deletions(-)
delete mode 100644 web/src/components/separator.js
diff --git a/web/src/components/separator.js b/web/src/components/separator.js
deleted file mode 100644
index 074855e7..00000000
--- a/web/src/components/separator.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-
-const Separator = () => (
-
-);
-export default Separator;
diff --git a/web/src/views/record_my_sleep/index.js b/web/src/views/record_my_sleep/index.js
index 978852af..dea439b5 100644
--- a/web/src/views/record_my_sleep/index.js
+++ b/web/src/views/record_my_sleep/index.js
@@ -1,7 +1,6 @@
import React from 'react';
import { Container, Table, Row, Col } from 'reactstrap';
-import Separator from 'components/separator';
import Header from 'components/header';
import text from './text.json';
@@ -29,7 +28,6 @@ const RecordMySleep = () => {
members' night's sleep. You can take a look at the end result right here:
-
@@ -37,7 +35,6 @@ const RecordMySleep = () => {
What you need
-
@@ -108,7 +105,6 @@ const RecordMySleep = () => {
-
@@ -194,19 +190,18 @@ const RecordMySleep = () => {
-
How to use OpenBCI GUI
- First thing you need is the OpenBCI GUI in order to use the hardware. Therefrom, select {' '}
+ First thing you need is the OpenBCI GUI in order to use the hardware. Therefrom, select{' '}
Live (from <boardname>) as your source. If you’re using a Cyton board we suggest you use a
microSD card using FAT32 format. If you do so, do not forget to select at least 12 hour maximum for
the write to SD card parameter. Otherwise, you must keep your computer near and open for the whole night and
log the data to a session file. If you do it this way, do not forget to select the OpenBCI file output and
- to select No Limit as your max file duration. When everything is configured properly, you can press {' '}
+ to select No Limit as your max file duration. When everything is configured properly, you can press{' '}
Start Session. Before pressing Start Stream, press Hardware Settings and configure
everything as follow:
@@ -284,7 +279,6 @@ const RecordMySleep = () => {
configured amount of time.
-
@@ -296,7 +290,6 @@ const RecordMySleep = () => {
some sort of Faraday cage, for example, a plastic container wrapped up in aluminium foil.
-
@@ -328,7 +321,6 @@ const RecordMySleep = () => {
You will need to provide this information in order to score your EEG recording.
-
@@ -360,7 +352,6 @@ const RecordMySleep = () => {
-
>
);
From c08fd2ab3e8b556f4d85f9db2f5cad51c8b02a35 Mon Sep 17 00:00:00 2001
From: Anes Belfodil
Date: Wed, 4 Nov 2020 16:35:16 -0500
Subject: [PATCH 05/34] Shorten code
---
web/src/components/table.js | 25 ++++++
web/src/views/record_my_sleep/index.js | 120 ++++++-------------------
2 files changed, 51 insertions(+), 94 deletions(-)
create mode 100644 web/src/components/table.js
diff --git a/web/src/components/table.js b/web/src/components/table.js
new file mode 100644
index 00000000..de31d014
--- /dev/null
+++ b/web/src/components/table.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+const SimpleTable = ({ headers, elementsRows }) => (
+
+
+
+ {headers.map((header) => (
+ {header} |
+ ))}
+
+
+
+ {elementsRows.map((row, i) => (
+
+ {row.map((element) => (
+ {element} |
+ ))}
+
+ ))}
+
+
+);
+
+export default SimpleTable;
diff --git a/web/src/views/record_my_sleep/index.js b/web/src/views/record_my_sleep/index.js
index dea439b5..ec9babf3 100644
--- a/web/src/views/record_my_sleep/index.js
+++ b/web/src/views/record_my_sleep/index.js
@@ -1,7 +1,8 @@
import React from 'react';
-import { Container, Table, Row, Col } from 'reactstrap';
+import { Container, Row, Col } from 'reactstrap';
import Header from 'components/header';
+import Table from 'components/table';
import text from './text.json';
import WIPWarning from 'components/wip_warning';
@@ -152,42 +153,16 @@ const RecordMySleep = () => {
Wire the electrodes to the OpenBCI device
Here’s is how you need to wire your electrodes to the OpenBCI board you are using:
-
-
-
- Location |
- Pin on Cyton |
- Pin on Ganglion |
-
-
-
-
- Fpz |
- P1 |
- +1 |
-
-
- Cz |
- N1 |
- -1 |
-
-
- Pz |
- P2 |
- +2 |
-
-
- Oz |
- N2 |
- -2 |
-
-
- A2 |
- BIAS (Any pin) |
- D_G (Any pin) |
-
-
-
+
@@ -209,66 +184,23 @@ const RecordMySleep = () => {
Cyton
-
-
-
- Channel |
- PGA Gain |
- Input Type |
- Bias |
- SRB2 |
- SRB1 |
-
-
-
-
- 1 |
- x24 |
- Normal |
- Include |
- Off |
- No |
-
-
- 2 |
- x24 |
- Normal |
- Include |
- Off |
- No |
-
-
-
+
Ganglion
-
-
-
- Channel |
- PGA Gain |
- Input Type |
- Driven Ground |
- Common Ref |
-
-
-
-
- 1 |
- x24 |
- Normal |
- Include |
- Off |
-
-
- 2 |
- x24 |
- Normal |
- Include |
- Off |
-
-
-
+
From 8073e7efe0637dce7bea257c1590dd0d4395e3d6 Mon Sep 17 00:00:00 2001
From: Anes Belfodil
Date: Fri, 6 Nov 2020 09:17:48 -0500
Subject: [PATCH 06/34] Add illustrations
---
web/public/illustrations/chip.png | Bin 0 -> 18672 bytes
web/public/illustrations/ec2.png | Bin 0 -> 22807 bytes
web/public/illustrations/electrode.png | Bin 0 -> 12676 bytes
web/public/illustrations/gauze_pads.png | Bin 0 -> 28625 bytes
web/public/illustrations/hypafix.png | Bin 0 -> 25798 bytes
web/public/illustrations/measuring_tape.png | Bin 0 -> 27722 bytes
web/public/illustrations/medical_tape.png | Bin 0 -> 23984 bytes
web/public/illustrations/prep_gel.png | Bin 0 -> 26913 bytes
web/public/illustrations/sd.png | Bin 0 -> 7361 bytes
web/public/illustrations/ten20.png | Bin 0 -> 17479 bytes
web/src/components/card_groups.js | 21 +++++++
web/src/views/record_my_sleep/index.js | 5 +-
.../record_my_sleep/material_needed.json | 59 ++++++++++++++++++
13 files changed, 84 insertions(+), 1 deletion(-)
create mode 100644 web/public/illustrations/chip.png
create mode 100644 web/public/illustrations/ec2.png
create mode 100644 web/public/illustrations/electrode.png
create mode 100644 web/public/illustrations/gauze_pads.png
create mode 100644 web/public/illustrations/hypafix.png
create mode 100644 web/public/illustrations/measuring_tape.png
create mode 100644 web/public/illustrations/medical_tape.png
create mode 100644 web/public/illustrations/prep_gel.png
create mode 100644 web/public/illustrations/sd.png
create mode 100644 web/public/illustrations/ten20.png
create mode 100644 web/src/components/card_groups.js
create mode 100644 web/src/views/record_my_sleep/material_needed.json
diff --git a/web/public/illustrations/chip.png b/web/public/illustrations/chip.png
new file mode 100644
index 0000000000000000000000000000000000000000..62a00fdb667a6f2ac2b670ca22cf3529696097c3
GIT binary patch
literal 18672
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
bf(YvO^nM|pa$?N|C1hsxh
literal 0
HcmV?d00001
diff --git a/web/public/illustrations/ec2.png b/web/public/illustrations/ec2.png
new file mode 100644
index 0000000000000000000000000000000000000000..b12c9c6b9ce9c6f30df6decc09edc6ac21ad673f
GIT binary patch
literal 22807
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
EAB$Xkc>n+a
literal 0
HcmV?d00001
diff --git a/web/public/illustrations/electrode.png b/web/public/illustrations/electrode.png
new file mode 100644
index 0000000000000000000000000000000000000000..260187e3fdfe4c4da558e8c838ab0cb8db417cbe
GIT binary patch
literal 12676
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