diff --git a/Availability Modelling.md b/Availability Modelling.md new file mode 100644 index 0000000..cd0935a --- /dev/null +++ b/Availability Modelling.md @@ -0,0 +1,179 @@ +# Availability Modelling + +# Introduction + +sdvsv + +# Model Parameters + +## Performance Time ($$t_p$$) + +The average time a T-Stick performance lasts given in hours. + +## Performer Intensity ($$j_p$$) + +The intensity of the performance, rough indicator of the impact of a performance on the reliability of certain components. + +## Simulation Parameters + +These additional parameters may be used for simulation, when wanting to take into account technician availability. It is not used for PIR calculations for the T-Stick evaluation though. + +### Performance Frequency ($$p_f$$) + +The average amount of performances per month. It can be used along side ***maintenance time between performance***, and ***technician availability*** to compute the ***interruption percentage*.** + +### Technician Availability ($$A_{tech}$$) + +The average amount of hours a technician/luthier is available to fix any issues an artist can’t fix with their instrument per month. + +### Technician Turnaround ($$t_{tech}$$) + +The average amount of business days it takes for the technician/luthier to return the instrument to the artist/musician. + +## Model Inputs + +### Maintenance Time between performances ($$t_m$$) + +The amount of time an artist/musician spends maintaining the T-Stick in between performances, given in hours. + +### Mean time to repair for T-Stick Components ($$MTTR_c$$) + +Mean time to repair/replace for T-Stick components in hours + +### Mean time between failure for T-Stick Components ($$MTBF_c$$) + +Mean time between failure of T-Stick components in hours + +### Maintenance actions between performance + +The actions the artist/musicians take when maintaining their instrument. + +### Available tools (T) + +The available equipment an artist has on hand for maintaining and fixing their instrument. + +# Compute Practice Interruption Rate (PIR) + +## 1. Computing MTBF and failure rate of T-Stick + +To compute the Practice interruption rate we must first compute the failure rate of the T-Stick ($$ \lambda_{tstick}$$). We do this by adding the failure rate of each component. + +$$$ +\begin{equation} +\lambda_{tstick} = \lambda_{esp32} + \lambda_{fsr}+\lambda_{imu}+\lambda_{button}+\lambda_{capsense}+\lambda_{resistor}+\lambda_{touchsensor}+\lambda_{battery}+\lambda_{connectors} +\end{equation} +$$$ + +where $$\lambda_i$$ is the failure rate of component *i*. + +The failure rates for several components such as: + +* FSR +* Resistor +* IMU +* Capsense Board +* ESP32 Board +* Battery + +can be estimated using a combination of the [FIDES reliability prediction too](https://www.fides-reliability.org/)l, the [MIL-217F Handbook](https://drive.google.com/file/d/1QNUiTOAwJebwC-bk0FJWB0jD3I6XFxFi/view?usp=drive_link), and the [NPRD-91](https://drive.google.com/file/d/1QPMqClW2nHY4U9tmMO5Lzc11RDF2Oeoc/view?usp=sharing). The MTBF of the connectors is taken from the performance model. + +We compute the MTBF of the t stick by taking the reciprocal of the failure rate. + +$$$ +\begin{equation} +MTBF_{tstick} = \frac{1}{\lambda_{tstick}} +\end{equation} +$$$ + +## 3. Compute Mean Performances between failure (MPBF) + +We can then compute the mean performances between failure ($$MTBF_{tstick}$$) by dividing the $$MTBF_{tstick}$$ by the **performance time (**$$t_P$$) + +$$$ +\begin{equation} +MPBF = \frac{MTBF_{tstick}}{t_p} +\end{equation} +$$$ + +## 4. Compute PIR + +We calculate the practice interruption rate by taking the reciprocal of $$MPBF$$. + +$$$ +\begin{equation} +PIR = \frac{1}{MPBF} +\end{equation} +$$$ + +Using Eq.5, Eq.6 and Eq.7 we can simplify the PIR expression. + +$$$ +\begin{align*} +PIR &= t_p(\frac{1}{MTBF_{tstick}}) \tag{Using Eq.3}\\ + &= t_p(\lambda_{tstick}) \tag{Using Eq.6} \\ +\end{align*} +$$$ + +Hence an alternative expression for the Practice Interruption rate is: + +$$$ +\begin{equation} +PIR = t_p(\lambda_{tstick}) +\end{equation} +$$$ + +In simple words the **Practice Interruption Rate** is the: + +$$$ +\text{average performance time} \times \text{failure rate of the t-stick} +$$$ + +# Compute Performance/Maintenance Ratio (PMR) + +Computing the Performance/Maintenance Ratio (PMR) is a matter of taking the $$MTBF_{tstick}$$ computed in the PIR model and dividing that by the average maintenance time. + +## Computing Average Maintenance time ($$T_m$$) + +To compute average maintenance time we consider the mean time to repair ($$MTTR_c$$) of each component and the failure rate of each component ($$\lambda_c$$). We can then take a weighted average of all the repair by taking into account each components contribution to the total failure rate. + +$$$ +\begin{equation} +T_m = \sum_{c=0}^n \frac{\lambda_c}{\lambda_{tstick}}(MTTR_c) +\end{equation} +$$$ + +## Compute PMR + +To compute PMR we divide the $$MTBF_{tstick}$$ by the average maintenance time ($$T_m$$). + +$$$ +\begin{equation} +PMR = \frac{MTBF_{tstick}}{T_m} +\end{equation} +$$$ + +# Compute Direct Maintenance Costs (DMC) + +We can also look at the direct maintenance cost of the T-Stick which we define as the dollars spent on maintaining the T-Stick per performance hour. + +## Compute Mean Repair Cost of the T Stick + +The mean repair cost of the T-Stick ($$MRC_{tstick}$$) is computed the same way the average maintenance time, by using a weighted average of the mean repair cost of each component. + +$$$ +\begin{equation} +MRC_{tstick} = \sum_{c=0}^n \frac{\lambda_c}{\lambda_{tstick}}(MRC_c) +\end{equation} +$$$ + +## Compute DMC + +To compute DMC we divide the mean repair cost by the mean time between failure of the T-Stick ($$MTBF_{tstick}$$) + +$$$ +\begin{equation} +DMC = \frac{MRC_{tstick}}{MTBF_{tstick}} +\end{equation} +$$$ + + diff --git a/Gesture Algorithms.md b/Gesture Algorithms.md new file mode 100644 index 0000000..767c39d --- /dev/null +++ b/Gesture Algorithms.md @@ -0,0 +1,5 @@ +# Gesture Algorithms + +# Introduction + +Many different gesture algorithms have been used in the T-Stick. This section will list links to documentation for these algorithms. Check the [T-Stick Designs](./T-Stick%20Designs.md) to find out which algorithm is compatible with which T-Stick version. \ No newline at end of file diff --git a/Gesture Algorithms/Puara Gestures.md b/Gesture Algorithms/Puara Gestures.md new file mode 100644 index 0000000..6f35f74 --- /dev/null +++ b/Gesture Algorithms/Puara Gestures.md @@ -0,0 +1,314 @@ +# Puara Gestures + +Note: Article still a Work in Progress + +# High-Level gesture vocabulary for the T-Stick + +Presented codes are arduino compatible. + +## Summary: + +* [Signal structures and global variables](#signal-structures-and-global-variables) +* [functions](#functions) +* [Instrument Data](#instrument) + * [Touch (instrument/touch/)](#instrumenttouch) + * [/instrument/touch/all (InstrumentData.touchAll)](#instrumenttouchall-InstrumentDatatouchAll) + * [/instrument/touch/body (InstrumentData.touchBody)](#instrumenttouchbody-InstrumentDatatouchBody) + * [/instrument/touch/middle (InstrumentData.touchMiddle)](#instrumenttouchmiddle-InstrumentDatatouchMiddle) + * [/instrument/touch/bottom (InstrumentData.touchBottom)](#instrumenttouchbottom-InstrumentDatatouchBottom) + * [Brush (instrument/brush/)](#instrumentbrush) + * [/instrument/brush/up, and /down](#instrumentbrushup-down) + * [/instrument/brush/amplitude (brush)](#instrumentbrushamplitude-brush) + * [/instrument/brush/energy (rub)](#instrumentbrushenergy-rub) + * [/instrument/amplitude /roll /tilt](#instrumentamplitude-roll-tilt) + * [/instrument/shake /jerk](#instrumentshake-jerk) + * [/instrument/jab](#instrumentjab) + +## Signal structures and global variables: + +``` +byte touchByteSize = 2; // bytes necessary to represent all the stripes (1-bit per stripe) = 2 for the sopranino +byte touchSizeAll = touchByteSize * 8 ; // total amount of T-Stick stripes (8 bits per byte) +byte touchSizeEdge = 4; // amount of T-Stick stripes for top and bottom portions of the T-Stick (arbitrary) +float leakyConstant = 0.05; +float shakeArray[5] = {0,0,0,0,0}; +byte shakeArrayindex = 0; +float jabArray[5] = {0,0,0,0,0}; +byte jabArrayindex = 0; +float shakeAccum = 0; +float cartopolAmplitude = 0; +float cartopolAngle = 0; + +struct RawDataStruct { // initialized as RawData + byte touch[touchByteSize]; // /raw/capsense, i..., 0--255, ... (1 int per 8 capacitive stripes -- 8 bits) + float fsr; // /raw/fsr, i, 0--4095 + float piezo; // /raw/piezo, i, 0--1023 + float accl[3]; // /raw/accl, fff, +/-16, +/-16, +/-16 (g linear acceleration full scale), converted from sensor data with range +/-32767 (integers) + float gyro[3]; // /raw/gyro, fff, +/-2000, +/-2000, +/-2000 (dps angular rate full scale), converted from sensor data with range +/-34.90659 (floats) + float magn[3]; // /raw/magn, iii, fff, +/-16, +/-16, +/-16 (gauss magnetic full scale), converted from sensor data with range +/-32767 (integers) + float raw[9]; // /raw (IMU data to be send to callibration app) + float quat[4]; // /raw/quat, ffff, ?, ? ,? ,? + float ypr[3]; // /raw/ypr, fff, ?, ? ,? +}; +``` + +``` +struct NormDataStruct { // initialized as NormData + float fsr; // /norm/fsr, f, 0--1 + float piezo; // /norm/piezo, f, 0--1 + float accl[3]; // /norm/accl, fff, +/-1, +/-1, +/-1 + float gyro[3]; // /norm/gyro, fff, +/-1, +/-1, +/-1 + float magn[3]; // /norm/magn, fff, +/-1, +/-1, +/-1 +}; +``` + +``` +struct LastStateDataStruct { // initialized as LastStateData + byte touch[touchByteSize]; // last state of /raw/capsense + byte brushUp; + byte brushDown; + float shake; + float shakeAccum; +}; +``` + +``` +struct InstrumentDataStruct { // initialized as InstrumentData + byte touchAll[touchByteSize]; // surface contact + byte touchTop; + byte touchBody[touchByteSize-1]; + byte touchMiddle[touchByteSize-2]; + byte touchBottom; + byte brushUp; + byte brushDown; + byte brushAmplitude; + byte energy; + float amplitude; + float roll; + float tilt; + float shake; + float jerk; +}; +``` + +## functions + +* Implement bit read/write function (not needed for arduino, bitRead and bitWrite function is already included): + +``` +bool bitRead(byte target, byte index){ + return ((target >> index) & 1U); +} + +void bitWrite(byte destiny, byte index, byte origin){ + if (bitRead(destiny, index) != bitRead(origin, index)) { + destiny.flip(index); + } +} +``` + +* Implement function to calculate mean for a given bit range + +``` +float bitMean (byte capsense_array[], byte first_bit, byte last_bit) { // calculates mean for a given bit range + float mean = 0; + For ( i = first_bit; i < last_bit; i++ ) { + byte array_index = i/8; + byte target_index = i - (8 * array_index); + If ( bitRead(capsense_array[array_index], target_index) ) { // read each bit ... + mean += 1/ (last_bit - first_bit); // ... and add if its high + } + } + return mean; +} +``` + +* Leaky integrator: + +``` +float leakyIntegrator (float reading, float old_value,float leak) { + return reading + (old_value * leak) +} +``` + +* Windowed Extrema (getting max and min values out of a window). Dont forget to populate `shakeArray` + +``` +float windowedExtremaMax (float array[]) { + float result = 0; + For ( i=0; i < sizeof(array)/sizeof(array[0]); i++ ) { + result = max(result, array[i]); + } + return result; +} + +float windowedExtremaMin (float array[]) { + float result = 0; + For ( i=0; i < sizeof(array)/sizeof(array[0]); i++ ) { + result = min(result, array[i]); + } + return result; +} +``` + +* 1st order IIR filter for sensor data: + +``` +float lowPassFilter (data,olddata,k) { + return olddata + ((data - olddata)/k) +} +``` + +## /instrument + +### /instrument/touch/ + +#### /instrument/touch/all (InstrumentData.touchAll) + +* InstrumentData.touchAll: get the "amount of touch" normalized between 0 and 1 + +``` +InstrumentData.touchAll = bitMean(RawData.touch, 0, touchSizeAll); +``` + +#### /instrument/touch/top (InstrumentData.touchTop) + +* InstrumentData.touchTop: similar to /instrument/touch/all, but applied only to the "top" region of the capsense + +``` +InstrumentData.touchTop = bitMean(RawData.touch, 0, touchSizeEdge); +``` + +#### /instrument/touch/body (InstrumentData.touchBody) + +* InstrumentData.touchBody: similar to /instrument/touch/all, but applied only to the "body" region of the capsense + +``` +InstrumentData.touchBody = bitMean(RawData.touch, touchSizeEdge, touchSizeAll); +``` + +#### /instrument/touch/middle (InstrumentData.touchMiddle) + +* InstrumentData.touchMiddle: similar to /instrument/touch/middle, but applied only to the "middle" region of the capsense + +``` +InstrumentData.touchMiddle = bitMean(RawData.touch, touchSizeEdge, (touchSizeAll - touchSizeEdge) ); +``` + +#### /instrument/touch/bottom (InstrumentData.touchBottom) + +* InstrumentData.touchBottom: similar to /instrument/touch/all, but applied only to the "top" region of the capsense + +``` +InstrumentData.touchBottom = bitMean(RawData.touch, (touchSizeAll - touchSizeEdge), touchSizeAll); +``` + +### /instrument/brush + +#### /instrument/brush/up /down + +``` +operation_up = (LastStateData.brushUp & RawData.touch) +operation_down = (LastStateData.brushDown & RawData.touch) + +For ( i = 0; i < number_of_touch; i++ ) { + if ( bitRead(operation_up, i) ) { + InstrumentData.brushUp = (number_of_touch - i) / number_of_touch; + mean_up += 1/ number_of_touch; + } + if ( bitRead(operation_down, i) ) { + InstrumentData.brushDown = (number_of_touch - i) / number_of_touch; + mean_down += 1/ number_of_touch; + } +} +``` + +#### /instrument/brush/amplitude (brush) + +``` +InstrumentData.brushAmplitude = InstrumentData.brushDown - InstrumentData.brushUp +``` + +#### /instrument/brush/energy (rub) + +``` +if (InstrumentData.brushUp > InstrumentData.brushDown) { + InstrumentData.energy = InstrumentData.brushUp +} +else { + InstrumentData.energy = InstrumentData.brushDown +} +``` + +#### /instrument/amplitude /roll /tilt + +(range +/- 2 ?) + +``` +cartopolAmplitude = sqrt( pow((((RawData.accl[1] * 2) - 128) * -1),2) + pow((((RawData.accl[2] * 2) - 128) * -1)) ) +cartopolAngle = tan-1 ( (((RawData.accl[2] * 2) - 128) * -1) / (((RawData.accl[1] * 2) - 128) * -1) ) +InstrumentData.amplitude = sqrt( pow(cartopolAmplitude) + pow(((RawData.accl[0] * 2) - 128)) ) +InstrumentData.roll = cartopolAngle + 3.14159 +InstrumentData.tilt = tan-1 ( ((RawData.accl[0] * 2) - 128) / cartopolAmplitude) +``` + +#### /instrument/shake /jerk + +``` +// populating shakeArray each loop) +shakeArray[shakeArrayindex] = InstrumentData.amplitude; +if (shakeArrayindex < 5) { + shakeArrayindex += 1; +} +else { + shakeArrayindex = 0; +} + +shakeAccum = -(windowedExtremaMax(shakeArray[]) - windowedExtremaMin(shakeArray[])); +shakeAccum = leakyIntegrator(shakeAccum,LastStateData.shakeAccum,leakyConstant); +InstrumentData.shake = lowPassFilter(shakeAccum,LastStateData.shake,20); + +InstrumentData.jerk = shakeAccum - InstrumentData.shake; +``` + +#### /instrument/jab (INCOMPLETE) + +``` +// populating jabArray each loop) +shakeArray[jabArrayindex] = InstrumentData.jab; +if (jabArrayindex < 5) { + jabArrayindex += 1; +} +else { + jabArrayindex = 0; +} + +InstrumentData.jab = windowedExtremaMax(jabArray[]) - windowedExtremaMin(jabArray[]); + + + +RawData.accl[0] + + +Andrew + +thrust +shake +spin +frame (populated inside?) +rest vs effort + +Travis + +Jab +eggbeater +eggwhip +tilt +hold +squeez + +#### Update Last State Values +LastStateData.brushUp = (RawData.touch << 1) & (~ RawData.touch) LastStateData.brushDown = (RawData.touch >> 1) & (~ RawData.touch) +``` + + diff --git a/T-Stick Designs.md b/T-Stick Designs.md new file mode 100644 index 0000000..4154981 --- /dev/null +++ b/T-Stick Designs.md @@ -0,0 +1,22 @@ +# T-Stick Designs + +# Introduction + +This document outlines the high level functions the T-Stick does and links previous designs of the T-Stick for inspiration of how the functions were accomplished. + +# Functional Analysis + +As shown in figure below the T-Stick has a relatively straight forward functional flow block diagram. + + + ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/56b52481-887d-4043-95c6-8804b80c0eab/ffbd-tstick.png) + +The sensors must be initialised, and then regularly polled for their raw sensor data. Any sensor errors must be processed and then converted to error messages to be sent to the user. In the fourth generation of T-Sticks this function is not fully developed but still exists, as most errors are at least printed to the serial monitor. The power system of the T-Stick handles charging the instrument, providing power to all components and changing the power state between active operation and deep sleep. The control and communication system output signals and interpret any user inputs/signals such as using the serial monitor to reboot the T-Stick. + +# Previous Designs + + +1. [T-Stick 4GW](./T-Stick%20Designs/T-Stick%204GW.md): Wi-Fi based T-Stick design, primarily for Sopranino and Soprano T-Stick with limited support for Alto and Tenor T-Stick. Uses the TinyPico ESP32 development board for control and communication along with a FSR for pressure sensing, a Trill Board for touch sensing and a LSM9DS1 for orientation and acceleration measurements. +2. [T-Stick 5GW](./T-Stick%20Designs/T-Stick%205GW.md): Wi-Fi based T-Stick design featuring a custom ESP32-S3 development board using a WROOM2 Module, alongside a ICM20948 IMU for orientation and acceleration measurements, a MAX17055 for battery management and keeping the Trill Board and FSR from the 4GW design. + + diff --git a/T-Stick Designs/T-Stick 4GW.md b/T-Stick Designs/T-Stick 4GW.md new file mode 100644 index 0000000..96a765a --- /dev/null +++ b/T-Stick Designs/T-Stick 4GW.md @@ -0,0 +1,51 @@ +# T-Stick 4GW + +# Introduction + +The T-Stick 4GW was designed by Eduardo Meneses and Alex Nieva with the first revision being completed in 2018. This generation of T-Sticks is a Wi-Fi based system using Open Sound Control and later Libmapper for sending signals. It uses the ESP32 microcontroller for controlling the T-Stick. Multiple development boards such as the Lolin D32 and TinyPico have been used with this design. Although the design is modular and can in theory support T-Sticks up to the length of a Tenor T-Stick. Limitations due to how the T-Stick is constructed and firmware makes this design appropriate only for Sopranino and Soprano T-Sticks. + +Note that as the TinyPico is now discontinued it can be replaced with the TinyS3, but changes to the 3D skeleton may need to be done. + +# System Architecture + +The T-Stick can be split into four subsystems: a control system, power system, sensor system, and mapping system. The current architecture of the T-Stick 4GW is shown below. + + + ![T-Stick 4GW System Architecture](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9cff436b-2a8a-41e3-af45-2f272963ca74/fourtehgen-systemarchitecture.png) + +The control system interprets the outputs of the sensor system, identifies gestures, and manages the power state of the T-Stick (on/sleep/off). The power system delivers power to the rest of the subsystems as well as handling the charging and discharging of batteries. The sensor system handles the input of the user as well as basic signal processing. The raw and processed signals are sent to the control system to be interpreted. The mapping system handles the T-Stick’s connections with external devices. This is handled by either libmapper or OSC. The system handles sending and receiving signals. + +## Gesture Algorithms + +Note: Section is still a Work in Progress + +The fourth generation T-Sticks are the first T-Sticks to include embedded gesture extraction. The table below lists all the properties that are extracted for the high level gesture. + +### Table 1: High Level Gestures + +| Address | Data type | Min | Max | Description | +|----|----|----|----|----| +| /instrument/touch/all | float | 0 | 1 | Amount of touch | +| /instrument/touch/top | float | 0 | 1 | Amount of touch on the top region | +| /instrument/touch/middle | float | 0 | 1 | Amount of touch for the middle part | +| /instrument/touch/bottom | float | 0 | 1 | Amount of touch for the bottom part | +| /instrument/touch/frame/position | integer | 0 | Number of touch sensors - 1 | Position of frame start from bottom | +| /instrument/touch/frame/size | integer | 0 | Number of touch sensors - 2 | Size of frame | +| /instrument/touch/frame/touch\[N\] | integer | 0 | 1 | Touch values within frame | +| /instrument/brush/up | float | 0 | 1 | Distance traveled during brush up | +| /instrument/brush/down | float | 0 | 1 | Distance traveled during brush down | +| /instrument/brush/amplitude | float | 0 | 1 | Amplitude of brush | +| /instrument/brush/energy | float | 0 | 1 | Brush energy | +| /instrument/orientation/yaw | float | -1 | 1 | Yaw | +| /instrument/orientation/pitch | float | -1 | 1 | Pitch | +| /instrument/orientation/roll | float | -1 | 1 | Roll | +| /instrument/shake | float | 0 | 1 | TBD | +| /instrument/jerk | float | 0 | 1 | TBD | +| /instrument/thrust/x | float | -1 | 1 | Thrust/jab gesture magnitude | +| /instrument/thrust/y | float | -1 | 1 | Thrust/jab gesture magnitude | +| /instrument/thrust/z | float | -1 | 1 | Thrust/jab gesture magnitude | +| /instrument/squeez | float | 0 | 1 | Same as pressure for now | +| /instrument/rest | float | 0 | 1 | High when interaction activity is low | +| /instrument/effort | float | 0 | 1 | High when interaction activity is high | + + diff --git a/T-Stick Designs/T-Stick 4GW/Getting Started.md b/T-Stick Designs/T-Stick 4GW/Getting Started.md new file mode 100644 index 0000000..16d1c2d --- /dev/null +++ b/T-Stick Designs/T-Stick 4GW/Getting Started.md @@ -0,0 +1,242 @@ +# Getting Started + +# Building a Sopranino T-Stick 4GW + +## Bill of Materials + +| Qty | Description | +|----|----| +| 01 | [Trill](https://shop.bela.io/products/trill-craft/) | +| 01 | [TinyPICO](https://www.adafruit.com/product/4335) | +| 01 | [IMU breakout board LSM9DS](https://www.sparkfun.com/products/13284) | +| 01 | [FSR 408](https://www.robotshop.com/ca/en/interlink-24-long-fsr.html) | +| 01 | 1K resistor | +| 01 | [10K potentiometer](https://www.digikey.com/products/en?mpart=PV36W103C01B00&v=118) | +| 01 | [button](https://www.digikey.ca/product-detail/en/c-k/PTS125SM43-2-LFS/CKN9100-ND/1146743) | +| 01 | Li-Po Battery min 1000mA | +| 01 | PVC Tube (30 cm) | +| \~85cm | Copper adhesive tape | +| 01 | [ON-OFF rocker switch](https://www.digikey.ca/product-detail/en/RA1113112R/EG5619-ND/3778055/?itemSeq=307636370) | +| \~35cm | Heat shrink tube | +| 01 | end-cup with microcontroller base | +| 01 | end-cup with for the ON-OFF switch | +| 01 | [3D printed bases](https://../3D_printing/), one of each file, and 4 regular poles | +| 11 | [M2 Mounting Screws](https://www.digikey.ca/product-detail/en/MPMS+002+0008+PH/H739-ND/274950/?itemSeq=307635387) | +| 01 | [foam sheet](https://www.amazon.ca/Craft-Foam-Sheets-Assorted-Colours/dp/B005EQPRM6) | + +## Instructions + +### Printing the Frame + +Print one of each of the [3d printing files](https://../3D_printing/), but print 4 copies of the "regular poles". The beds (pieces that snap together) will need supports on the piece that snaps. + + ![Overview](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/17216446-d9a2-49d5-a201-a84fa767168a/image.png) + + ![](https://./images/construction/0_overview.jpg "3d printing overview") + +Snap the beds together as in the image above, snapping the regular poles between beds to secure them. Place copper strips on each arc in the beds, these will be used for capacitive touch sensing. + +### Soldering Components + +All the building tools can be found in the Machine Shop at the McGill Music Tech Department. + + ![Overview with wires](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/3613fe3b-9ef2-4e0e-9b48-ecde48f070cb/image.png) + +Let's start with the end cap where the TinyPICO will be inserted. Insert the button into the slot like the pictures below. + +| button top view | button bottom view | soldering | +|----|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ed716993-a1e9-4daa-b98e-b5e4a6f6f26a/image.png) ![](https://./images/construction/2_button.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8613e7d2-7225-4674-92b9-2a373dbc8193/image.png) ![](https://./images/construction/3_button.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7cdcaf84-f69b-4216-8be8-c5b0ef64ffb2/image.png) | + +Solder 2 wires diagonally to the button pins, connecting one to GND and one to pin 15 on the TinyPICO. For the GND connection, twist an extra wire together before soldering to the TinyPICO, which will be used for connecting the IMU later on. + +| connecting to TinyPICO | completed button circuit | +|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/2268587d-424f-447a-9567-e75089f94faa/image.png) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6402eafa-7bec-47c2-8110-2dd04f3defd6/image.png) | + +To prepare the resistor for its FSR connection, solder 2 wires to one end and 1 to the other like below. Use heat shrink to wrap the connection. Solder the single end wire to a GND pin on the button. Solder one of the double end wires to pin 33 on the TinyPICO. + +| soldering | heat shrinking | connecting to TinyPICO | +|----|----|----| +| ![](https://./images/construction/7_resistor.jpg) ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7350098d-667b-4969-9b25-e03d1f063dd5/image.png) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8cb44790-98de-4b38-82ec-f4bf3be8601c/image.png) ![](https://./images/construction/8_resistor.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/edc4190d-896a-4565-8a4c-247e488908f3/image.png) ![](https://./images/construction/9_resistor.jpg) | + +Prepare the FSR connections by carefully soldering 2 wires to its terminals, using the extra wire form the resistor as one of the terminals. Be cautious not to melt the plastic on the FSR if possible by soldering quickly. Heat shrink the terminals when complete. + +| soldering | heat shrinking | +|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/fb75a092-a4b3-4f9e-b668-2fef25df9f18/image.png) ![](https://./images/construction/10_fsr.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8b991cbc-a152-486f-b0f1-85ec0d555249/image.png) ![](https://./images/construction/11_fsr.jpg) | + +Solder the other FSR wire **and** another wire (which will connect to the IMU) to the 3V3 pin on the TinyPICO (yellow and orange in the picture below). Twisting the 2 wires together before inserting into the pin will make this task easier. + +| twisting and soldering | view of 3V3 pin | +|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/92fc6218-68cc-4569-9367-c60fde7a751c/image.png) ![](https://./images/construction/12_fsr.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9edd6d60-e0c8-4c85-90d0-e6f76f843083/image.png) ![](https://./images/construction/13_fsr.jpg) | + +Solder 2 wires to each of the IMU's GND, VCC, SDA and SCL pins. One of the VCC wires and one of the GND wires should be the extra 3V3 and GND wires from the TinyPICO that you put in in the above steps. Connect one of the SDA wires to pin 21 of the TinyPICO, and one of the SCL wires to pin 22 of the TinyPICO. + +| twisting and soldering | connecting to TinyPICO | imu wiring | +|----|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/decf69d5-0671-4ed8-b9f3-3032b75ad489/image.png) ![](https://./images/construction/14_imu.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6c929cb1-3eba-471e-a644-81e152e5071c/image.png) ![](https://./images/construction/15_imu.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/25e7c8eb-1912-466c-8b75-f96e18020015/image.png) ![](https://./images/construction/16_imu.jpg) | + +At this stage, the IMU should have unconnected wires (1 of each) from SDA, SCL, GND and VCC. Run the 4 unconnected wires through the pole and solder to the corresponding labeled pins on the Trill. + +| trill connections | alternate view | +|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/63727780-0fbd-45d3-96d8-175ffde5f2e5/image.png) ![](https://./images/construction/17_trill.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/b1fd888b-0427-4c02-85b4-4928b8bda2d9/image.png) ![](https://./images/construction/18_trill.jpg) | + +Now for the fun part ;). Solder wires onto each of the 15 copper strips, running them through the poles to the Trill board when necessary. When cutting wires for this part, allow enough length to get to the Trill, but not too long to clutter the internals. Solder the other ends of the wires **in order** from pico towards the end cap to pins 0-15 on the Trill board. + +| copper soldering | alternate view | +|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/da47865d-da37-4c56-afa1-b8728946a374/image.png) ![](https://./images/construction/19_trill.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/c4e4daca-0df4-4c63-bbcc-1c4900a72328/image.png) ![](https://./images/construction/20_trill.jpg) | + +Connect long wires from the 5V and GND pins of the TinyPICO (for the battery), and run them through the poles to the other end. Mount the IMU and Trill boards to their beds, and insert the TinyPICO into its slot in the end cap with the button. Slide the entire frame with the button cap into the PVC, making sure the long power wires can be accessed from the open end. Attach the FSR to the outside of the PVC, cutting the end if it's too long. Use the end cap's slot for the FSR wires to come out of the frame. + +**IMU Mounting Note:** Please install the IMU so that this configuration is kept consistent will the design. + + ![T-Stick Sopranino orientation](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ab424347-ee58-4796-b765-a0c3b3804c30/image.png) + + ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/5faed0d9-3934-4436-8f8e-eac2ebb8802d/image.png) ![](https://./images/T-Stick-Orientation.png "T-Stick Sopranino orientation") + +Insert the power switch into the other end cap. Solder the power wire of the battery to the power switch as in the picture below, twisting together the long power wire from the TinyPICO sticking out the end. Solder the long GND wire to the battery's GND. + +**Important Note**: 2nd picture below should have ran the wires through the poles and inserted into the frame before soldering to the TinyPICO, be sure to do this before soldering the battery to the TinyPICO. + +| power soldering | power circuit view | +|----|----| +| ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/14114aa8-0a67-46e2-be71-4e3f1061763c/image.png) ![](https://./images/construction/21_power.jpg) | ![](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e3705397-650f-40f8-89a2-dccf21108cc2/image.png) ![](https://./images/construction/22_power.jpg) | + +Hooray, you built a T-Stick! + +## Document info + +Version 1.2: Brady Boettcher Version 1.1: Edu Meneses - eduardo.meneses@mail.mcgill.caVersion 1.0: Alex Nieva - alex.nieva@mail.mcgill.ca + +__Input Devices and Music Interaction Laboratory__ Schulich School of MusicMcGill University550 Rue Sherbrooke Ouest, Suite 500Montreal, QC, H3A 1ECanada + +# Flashing Firmware for T-Stick 4GW + +Sopranino T-Stick 4G - LOLIN D32 PRO / TinyPico - USB - WiFi Input Devices and Music Interaction Laboratory (IDMIL) + +## Option 1: using .bin files and [esptool.py](http://esptool.py) + +This method is easier/faster. It uses [esptool.py](https://github.com/espressif/esptool). + +### Download the [bin files](../firmware/bin) + +* Download the .bin files located at the [bin folder](../firmware/bin) + +### Download [esptool.py](https://github.com/espressif/esptool) + +* Download the *[esptool.py](http://esptool.py)* from . Use the `Download ZIP` option from Github +* Unzip the *esptool-master.zip* file + +### Connect the T-Stick to the computer and check the USB port + +* [Check the T-Stick (ESP32) port in your computer](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/establish-serial-connection.html): + * For MacOS/Linux: + * install the [latest drivers from from the SiLabs website](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers). + * Open a *Terminal* window + * Execute the command `ls /dev/cu.*`. The command will return a list of ports in your computer. + * Plug the T-Stick (USB) and run the command `ls /dev/cu.*` one more time. You can now compare the lists and anotate the T-Stick USB port. Should be something similar to `/dev/cu.wchusbserial1410`, probably with a different number + * Linux users should also give the currently logged user read and write access the serial port over USB. Check [here](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/establish-serial-connection.html) for more information + * For Windows: + * Check the list of identified COM ports in the [Windows Device Manager](https://support.microsoft.com/en-ca/help/4026149/windows-open-device-manager) + * Plug the T-Stick (USB) and check the list of identified COM ports in the [Windows Device Manager](https://support.microsoft.com/en-ca/help/4026149/windows-open-device-manager) again. The T-Stick port should appear on the list. Anotate the T-Stick USB port, it should be something similar to `COM3` or `COM16` + +### Flash the firmware (.bin files) + +* Use *Finder*, *Terminal*, or *File Explorer* to copy the contents of the [bin](../firmware/bin/) folder (you should copy 3 .bin files) to the *esptool-master* folder +* Navigate to the *esptool-master* folder in *Terminal* or *Command Prompt* +* Run the command (__don't forget to replace the --port (/dev/cu.wchusbserial1410) option for your T-Stick port__): `esptool.py --chip esp32 --port /dev/cu.wchusbserial1410 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_dio_80m.bin 0x10000 esp32_arduino_FW211124.bin 0x8000 esp32_arduino_FW211124.ino.partitions.bin 2686976 esp32_arduino_FW211124.spiffs.bin`. Wait for the process to be complete. Do not unplug or turn off your T-Stick during the process. + +To set the T-Stick info and test if the data is being send correctly: + +* Connect the T-Stick to a network (instructions [here](./T-Stick_2GW_Connecting_Guide(v1.2).md)); +* Open the Pure Data (PD) or Max/MSP patch to receive T-Stick messages (they can be found [here](../Test_config/)); +* Start receive OSC messages according to the chosen patch. + +## Option 2: Using PlatformIO + +*INSTALL ALL DEPENDENCIES AND REAL ALL OBSERVATIONS BEFORE UPLOAD !* + +### Install PlatformIO + +To download and install PlatformIO, follow the instructions at . + +We recomment using PlatformIO under Visual Studio Code, but you can also coose another editor. + +### Clone the T-Stick repository + +Clone this repository using `git clone https://github.com/IDMIL/T-Stick.git`. Alternatively, you can download the repository as a zip file at . Take note of the folder location. + +### Open firmware project and flash it to the T-Stick + +* Open the T-Stick firmware project (folder **firmware** in the T-Stick repository folder) in VSC/PlatformIO. You can get help on how to use PlatformIO at +* You can make any necessary changes on the firmware before flashing (e.g., changing T-Stick ID, selecting the board and capacitive board accordingly) +* If it is the first time flashing, you may see an error pointing to the ESP32 inet.h file. The file requires manual fixing. Check the issue at + +When ready, you need to flash both the firmware and the filesystem image. Choose the proper platform accordingly (*lolin_d32_pro* or *tinypico*) and use the PlatformIO menu to flash both images to the T-Stick. + +### Test T-Stick + +After flashing, you can use the VSC/PlatformIO serial monitor to check if the T-Stick is booting properly. You should see T-Stick booting process. + +You can also interact with the controller using the following commands: + +* 's' to start setup mode +* 'r' to reboot +* 'd' to enter deep sleep + +To test if the data is being send correctly: + +* Connect the T-Stick to a network (instructions [here](./Docs/T-Stick_2GW_Connecting_Guide(v1.2).md)) +* Open the Pure Data (PD) or Max/MSP patch to receive T-Stick messages (they can be found [here](./Configuration)) +* Start receive OSC messages according to the chosen patch + +# Connecting to a T-Stick 4GW + +## Option 1: Wireless Connection + +### Get your network details + + +1. Connect to the network you will be connecting the T-Stick to. +2. Note the SSID (network name) and SSID Password (network password). +3. Get your computers IP address while connected to this network. Below are linked some support articles for Windows, MacOS and Linux on how to find your computers IP address. + * [Find your IP Address Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9) + * [Find your IP Address MacOS](https://discussions.apple.com/thread/253927735) + * [Find your IP Address Linux](https://opensource.com/article/18/5/how-find-ip-address-linux) + +### Connect to the T-Stick + + + 4. Power on your T-Stick and wait until the boot sequence is complete. If your T-Stick does not have a Power switch press the button once and wait for the T-Stick to turn on. + 5. Connect to the T-Stick_XXX wifi network where XXX is the ID of the T-Stick. ie: TStick_001. By default the password is mappings. + 6. Open your browser and go to or , where XXX is the ID of the T-Stick module. + + ![T-Stick Setup Page](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png) ![](images/TStick_setupv13.png "T-Stick wifi setup page") + 7. In the __Network__ section write the network name and password optained in Step 2 in the __SSID__ and __SSID Password__ fields. + 8. In the __OSC send settings__ put in your computer's IP address optained in Step 3 in the __Primary IP__ field. + 9. Click the green __Save__ button. You will be directed to a page saying that the information was saved successfully. +10. Click __Config__ on the top of the page to return to the orginal menu. +11. Click the green __Close and Reboot__ button at the bottom of the page. + +## Option 2: Puara Serial Manager + + +1. Download or clone the Puara client repository at . Instructions for how to clone github repositories can be found at the link below + * [Cloning a Git Repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository). +2. Open `config_template.json`. +3. Put in the network name you want the T-Stick to connect to in the __wifiSSID__ field. +4. Put the network password in the __wifiPSK__ field. +5. Save and close `config_template.json`. +6. Run the `puara_serial_manager.py` script. +7. Connect the T-Stick to your PC using a USB cable. +8. The script should auto detect and configure the T-Stick. If the T-Stick is not being detected you may need to download the CP210x USB driver. A link can be found on [Esspressif's website](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/establish-serial-connection.html). + +## Guide info: + +Version 1.3: (2022/11/19) Albert-Ngabo Niyonsenga - albert-ngabo.niyonsenga@mail.mcgill.caVersion 1.2: (2020/03/20) Edu Meneses - eduardo.meneses@mail.mcgill.caVersion 1.11: (2019/11/27) Edu MenesesVersion 1.1: (2019/10/27) Edu MenesesVersion 1.0: (2019/08/28) Edu Meneses + +__Input Devices and Music Interaction Laboratory__Schulich School of MusicMcGill University550 Rue Sherbrooke Ouest, Suite 500Montreal, QC, H3A 1ECanada \ No newline at end of file diff --git a/T-Stick Designs/T-Stick 4GW/Technical Information.md b/T-Stick Designs/T-Stick 4GW/Technical Information.md new file mode 100644 index 0000000..58b1336 --- /dev/null +++ b/T-Stick Designs/T-Stick 4GW/Technical Information.md @@ -0,0 +1,93 @@ +# Technical Information + +# Technical Details + +## Summary + +| Feature | Details | +|----|----| +| Communication Type | Wi-Fi, 802.11 b/g/n | +| Compatible protocols | Open Sound Control (OSC)/Libmapper | +| Touch Sensing Density | 1 channel per 2cm | +| Microcontroller | ESP32 Series | +| Gestures Embedded? | Yes | +| Embedded Gestures Libraries | Puara Gestures | +| Sensors | LSM9DS1 IMU, Trill Craft Capacitive Sensing Board (30 channels), Force Sensitive Resistor 408 Series | + +## Detailed + +| Feature | Detail | +|----|----| +| Control Loop Frequency | | +| Wireless Latency | | +| Battery Life | | +| State of Charge Accuracy | | +| Battery Voltage Accuracy | | +| Average Sensor Latency | | +| LSM9DS1 Latency | | +| Trill Craft Latency | | +| FSR 408 Latency | | +| Average Sensor Accuracy | | +| LSM9DS1 Accuracy | | +| Trill Craft Accuracy | | +| FSR 408 Accuracy | | +| Practice Interruption Rate | | +| Practice/Maintenance Ratio | | + +## Diagrams + +## Schematic + +# OSC Signal Namespace + +## firmware 220916 + +#### (Replace XXX for the T-Stick ID number) + +## Raw data + +/TStick_XXX/raw/capsense, i..., 0--255, ... (1 int per 8 capacitive stripes -- 8 bits) + +/TStick_XXX/raw/fsr, i, 0--4095 + +/TStick_XXX/raw/accl, fff, +/-24 (floats) + +/TStick_XXX/raw/gyro, fff, +/-42 (floats) + +/TStick_XXX/raw/magn, iii, +/-0.001 (floats) + +## Instrument data + +/TStick_XXX/instrument/button/count, i, 0--i + +/TStick_XXX/instrument/button/tap, i, 0 or 1 + +/TStick_XXX/instrument/button/dtap, i, 0 or 1 + +/TStick_XXX/instrument/button/ttap, i, 0 or 1 + +/TStick_XXX/orientation, ffff, ?, ? ,? ,? + +/TStick_XXX/instrument/ypr, fff, +/-180, +/-90 ,+/-180 (degrees) + +/TStick_XXX/instrument/touch/all, f, 0--1 + +/TStick_XXX/instrument/touch/top, f, 0--1 + +/TStick_XXX/instrument/touch/middle, f, 0--1 + +/TStick_XXX/instrument/touch/bottom, f, 0--1 + +/TStick_XXX/instrument/brush, f, 0--? (\~cm/s) + +/TStick_XXX/instrument/multibrush, ffff, 0--? (\~cm/s) + +/TStick_XXX/instrument/rub, f, 0--? (\~cm/s) + +/TStick_XXX/instrument/multirub, ffff, 0--? (\~cm/s) + +/TStick_XXX/instrument/shakexyz, fff, 0--? + +/TStick_XXX/instrument/jabxyz, fff, 0--? + +/TStick_XXX/battery \ No newline at end of file diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/14114aa8-0a67-46e2-be71-4e3f1061763c/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/14114aa8-0a67-46e2-be71-4e3f1061763c/image.png new file mode 100644 index 0000000..ece5c30 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/14114aa8-0a67-46e2-be71-4e3f1061763c/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/17216446-d9a2-49d5-a201-a84fa767168a/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/17216446-d9a2-49d5-a201-a84fa767168a/image.png new file mode 100644 index 0000000..a1eca7b Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/17216446-d9a2-49d5-a201-a84fa767168a/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/2268587d-424f-447a-9567-e75089f94faa/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/2268587d-424f-447a-9567-e75089f94faa/image.png new file mode 100644 index 0000000..de6b1f0 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/2268587d-424f-447a-9567-e75089f94faa/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/25e7c8eb-1912-466c-8b75-f96e18020015/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/25e7c8eb-1912-466c-8b75-f96e18020015/image.png new file mode 100644 index 0000000..c093ef3 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/25e7c8eb-1912-466c-8b75-f96e18020015/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/3613fe3b-9ef2-4e0e-9b48-ecde48f070cb/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/3613fe3b-9ef2-4e0e-9b48-ecde48f070cb/image.png new file mode 100644 index 0000000..19c251b Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/3613fe3b-9ef2-4e0e-9b48-ecde48f070cb/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/5faed0d9-3934-4436-8f8e-eac2ebb8802d/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/5faed0d9-3934-4436-8f8e-eac2ebb8802d/image.png new file mode 100644 index 0000000..7b5e21e Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/5faed0d9-3934-4436-8f8e-eac2ebb8802d/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/63727780-0fbd-45d3-96d8-175ffde5f2e5/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/63727780-0fbd-45d3-96d8-175ffde5f2e5/image.png new file mode 100644 index 0000000..36f25b1 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/63727780-0fbd-45d3-96d8-175ffde5f2e5/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6402eafa-7bec-47c2-8110-2dd04f3defd6/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6402eafa-7bec-47c2-8110-2dd04f3defd6/image.png new file mode 100644 index 0000000..3bf5408 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6402eafa-7bec-47c2-8110-2dd04f3defd6/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6c929cb1-3eba-471e-a644-81e152e5071c/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6c929cb1-3eba-471e-a644-81e152e5071c/image.png new file mode 100644 index 0000000..2707f4c Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/6c929cb1-3eba-471e-a644-81e152e5071c/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7350098d-667b-4969-9b25-e03d1f063dd5/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7350098d-667b-4969-9b25-e03d1f063dd5/image.png new file mode 100644 index 0000000..3e63b12 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7350098d-667b-4969-9b25-e03d1f063dd5/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7cdcaf84-f69b-4216-8be8-c5b0ef64ffb2/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7cdcaf84-f69b-4216-8be8-c5b0ef64ffb2/image.png new file mode 100644 index 0000000..bec2100 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/7cdcaf84-f69b-4216-8be8-c5b0ef64ffb2/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8613e7d2-7225-4674-92b9-2a373dbc8193/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8613e7d2-7225-4674-92b9-2a373dbc8193/image.png new file mode 100644 index 0000000..0b1a139 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8613e7d2-7225-4674-92b9-2a373dbc8193/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8b991cbc-a152-486f-b0f1-85ec0d555249/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8b991cbc-a152-486f-b0f1-85ec0d555249/image.png new file mode 100644 index 0000000..8130012 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8b991cbc-a152-486f-b0f1-85ec0d555249/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8cb44790-98de-4b38-82ec-f4bf3be8601c/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8cb44790-98de-4b38-82ec-f4bf3be8601c/image.png new file mode 100644 index 0000000..c167c38 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/8cb44790-98de-4b38-82ec-f4bf3be8601c/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/92fc6218-68cc-4569-9367-c60fde7a751c/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/92fc6218-68cc-4569-9367-c60fde7a751c/image.png new file mode 100644 index 0000000..1fb4dbc Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/92fc6218-68cc-4569-9367-c60fde7a751c/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9edd6d60-e0c8-4c85-90d0-e6f76f843083/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9edd6d60-e0c8-4c85-90d0-e6f76f843083/image.png new file mode 100644 index 0000000..75bde58 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9edd6d60-e0c8-4c85-90d0-e6f76f843083/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ab424347-ee58-4796-b765-a0c3b3804c30/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ab424347-ee58-4796-b765-a0c3b3804c30/image.png new file mode 100644 index 0000000..b4bc392 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ab424347-ee58-4796-b765-a0c3b3804c30/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/b1fd888b-0427-4c02-85b4-4928b8bda2d9/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/b1fd888b-0427-4c02-85b4-4928b8bda2d9/image.png new file mode 100644 index 0000000..a61e456 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/b1fd888b-0427-4c02-85b4-4928b8bda2d9/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/c4e4daca-0df4-4c63-bbcc-1c4900a72328/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/c4e4daca-0df4-4c63-bbcc-1c4900a72328/image.png new file mode 100644 index 0000000..18481a7 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/c4e4daca-0df4-4c63-bbcc-1c4900a72328/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png new file mode 100644 index 0000000..3547d7d Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/da47865d-da37-4c56-afa1-b8728946a374/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/da47865d-da37-4c56-afa1-b8728946a374/image.png new file mode 100644 index 0000000..04d6ab8 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/da47865d-da37-4c56-afa1-b8728946a374/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/decf69d5-0671-4ed8-b9f3-3032b75ad489/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/decf69d5-0671-4ed8-b9f3-3032b75ad489/image.png new file mode 100644 index 0000000..892b118 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/decf69d5-0671-4ed8-b9f3-3032b75ad489/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e3705397-650f-40f8-89a2-dccf21108cc2/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e3705397-650f-40f8-89a2-dccf21108cc2/image.png new file mode 100644 index 0000000..1a19c6c Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e3705397-650f-40f8-89a2-dccf21108cc2/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ed716993-a1e9-4daa-b98e-b5e4a6f6f26a/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ed716993-a1e9-4daa-b98e-b5e4a6f6f26a/image.png new file mode 100644 index 0000000..78ffb7f Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/ed716993-a1e9-4daa-b98e-b5e4a6f6f26a/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/edc4190d-896a-4565-8a4c-247e488908f3/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/edc4190d-896a-4565-8a4c-247e488908f3/image.png new file mode 100644 index 0000000..f81fdde Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/edc4190d-896a-4565-8a4c-247e488908f3/image.png differ diff --git a/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/fb75a092-a4b3-4f9e-b668-2fef25df9f18/image.png b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/fb75a092-a4b3-4f9e-b668-2fef25df9f18/image.png new file mode 100644 index 0000000..a3a2023 Binary files /dev/null and b/T-Stick Designs/T-Stick 4GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/fb75a092-a4b3-4f9e-b668-2fef25df9f18/image.png differ diff --git a/T-Stick Designs/T-Stick 5GW.md b/T-Stick Designs/T-Stick 5GW.md new file mode 100644 index 0000000..8c868e7 --- /dev/null +++ b/T-Stick Designs/T-Stick 5GW.md @@ -0,0 +1,57 @@ +# T-Stick 5GW + +# Introduction + +The T-Stick 5GW consists of a custom ESP32 board which integrates a ESP32-S3 WROOM 2 Module with a ICM20948 IMU and MAX17055 on a single board, and a touch board that has a pinout for the Trill Craft board as well as, two JST-SH 4 pin connectors to daisy chain multiple touch boards together. The T-Stick switches from the Puara framework that the [4GW](./T-Stick%204GW.md) design uses in favor of Sygaldry. Sygaldry is a conceptual frame for developing digital musical instruments that are replicable, readable and reliable. Information about Sygaldry and the implementation of T-Stick Components can be found on their [website](https://enchantedinstruments.com/). + +## Read more about Sygaldry + +* [Design Concepts](https://enchantedinstruments.com/page-docs-design_concepts.html) +* Implementation Specific Documentation + * [T-Stick Implementation](https://enchantedinstruments.com/page-sygin-t_stick) + * [ESP32 Button](https://enchantedinstruments.com/page-sygse-button.html) + * [Trill Craft Implementation](https://enchantedinstruments.com/page-sygsa-trill_craft) + * ICM20948 Implementation + +# System Architecture + +Figure 1 shows the hardware architecture for the new T-Stick design. Most of the power sytem functions such as providing power, charging the instrument and changing the power state is handled by the MCP73871. This IC handles charging the LiPO/Li-ion battery and changing between the USB power and battery power depending on voltage. In addition, two regulators, the NCP167AMX330TBG/NCP167AMX1800TBG series are used to step down the system power to 3.3V and 1.8V respectively. The MAX17055 is used as a fuel gauge. As mentioned previously this fuel gauge is used over its non-current sensing counter parts due to better accuracy. + + ![Figure 1: T-Stick 5GW Architecture](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/4768188f-aa9a-4950-941c-6afa66150118/TStick-HardwareArchitecture-Pro.png) + +The Trill Craft board is kept as the capacitive sensor solution of choice. A more integrated solution using just the MCU on the Trill Craft board was considered but figuring out how to flash the MCU in a systematic way, would have been more of a hassle than it is worth. The touch board uses a 32 pin FFC connector to connect to a flexible PCB with 30 touch points and two ground points. The IMU is changed to an ICM20948 9-DOF IMU. as mentioned previously this is due to the fact that the LSM9DS1 is no longer actively supported by the company that produces it. It receives the 1.8V power from one of the regulators. Three mosfets are used to convert the 1.8V logic from the ICM20948 to 3.3V to communicate with the ESP32. + +# Gesture Algorithms + +Note: Section is still a Work in Progress + +Like the fourth generation T-Sticks this 5th generation of T-Sticks also includes embedded gestures. It also uses the Puara Gestures Library for gesture extraction. The table below lists all the properties that are extracted for the high-level gesture. + +### Table 1: High Level Gestures + +| Address | Data type | Min | Max | Description | +|----|----|----|----|----| +| /instrument/touch/all | float | 0 | 1 | Amount of touch | +| /instrument/touch/top | float | 0 | 1 | Amount of touch on the top region | +| /instrument/touch/middle | float | 0 | 1 | Amount of touch for the middle part | +| /instrument/touch/bottom | float | 0 | 1 | Amount of touch for the bottom part | +| /instrument/touch/frame/position | integer | 0 | Number of touch sensors - 1 | Position of frame start from bottom | +| /instrument/touch/frame/size | integer | 0 | Number of touch sensors - 2 | Size of frame | +| /instrument/touch/frame/touch\[N\] | integer | 0 | 1 | Touch values within frame | +| /instrument/brush/up | float | 0 | 1 | Distance traveled during brush up | +| /instrument/brush/down | float | 0 | 1 | Distance traveled during brush down | +| /instrument/brush/amplitude | float | 0 | 1 | Amplitude of brush | +| /instrument/brush/energy | float | 0 | 1 | Brush energy | +| /instrument/orientation/yaw | float | -1 | 1 | Yaw | +| /instrument/orientation/pitch | float | -1 | 1 | Pitch | +| /instrument/orientation/roll | float | -1 | 1 | Roll | +| /instrument/shake | float | 0 | 1 | TBD | +| /instrument/jerk | float | 0 | 1 | TBD | +| /instrument/thrust/x | float | -1 | 1 | Thrust/jab gesture magnitude | +| /instrument/thrust/y | float | -1 | 1 | Thrust/jab gesture magnitude | +| /instrument/thrust/z | float | -1 | 1 | Thrust/jab gesture magnitude | +| /instrument/squeez | float | 0 | 1 | Same as pressure for now | +| /instrument/rest | float | 0 | 1 | High when interaction activity is low | +| /instrument/effort | float | 0 | 1 | High when interaction activity is high | + + diff --git a/T-Stick Designs/T-Stick 5GW/Getting Started.md b/T-Stick Designs/T-Stick 5GW/Getting Started.md new file mode 100644 index 0000000..5b33413 --- /dev/null +++ b/T-Stick Designs/T-Stick 5GW/Getting Started.md @@ -0,0 +1,94 @@ +# Getting Started + +# Building a T-Stick 5GW + +## Bill of Materials + +| Qty | Description | +|----|----| +| 01 | [Trill](https://shop.bela.io/products/trill-craft/) | +| 01 | Custom ESP32 Development Board | +| 01 | 30cm/60cm FSR 408 | +| 01 | [Button](https://www.digikey.ca/product-detail/en/c-k/PTS125SM43-2-LFS/CKN9100-ND/1146743) | +| 01 | Li-Po/Li-ion Battery min 1000mA | +| 01 | ABS/PVC Tube | +| 02 | Sparkfun Qwiic Cable or equivalent (at least 10cm) (longer T-Sticks need additional cables) | +| \~35cm | Heat shrink tube | +| 01 | end-cup with microcontroller base | +| 01 | end-cup with for the ON-OFF switch | +| 01 | 3D printed bases, one of each file, and 4 regular poles | +| 11 | M3 Mounting Screws | +| 01 | foam sheet | + +# Flashing Firmware for a T-Stick 5GW + +## Option 1: using .bin files and [esptool.py](http://esptool.py) + +This method is easier/faster. It uses [esptool.py](https://github.com/espressif/esptool). + +### Download the bin files + +* Download the .bin files located at the bin folder + +### Download [esptool.py](https://github.com/espressif/esptool) + +* Download the *[esptool.py](http://esptool.py)* from . Use the `Download ZIP` option from Github +* Unzip the *esptool-master.zip* file + +### Connect the T-Stick to the computer and check the USB port + +* [Check the T-Stick (ESP32) port in your computer](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/establish-serial-connection.html): + * For MacOS/Linux: + * install the [latest drivers from from the SiLabs website](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers). + * Open a *Terminal* window + * Execute the command `ls /dev/cu.*`. The command will return a list of ports in your computer. + * Plug the T-Stick (USB) and run the command `ls /dev/cu.*` one more time. You can now compare the lists and anotate the T-Stick USB port. Should be something similar to `/dev/cu.wchusbserial1410`, probably with a different number + * Linux users should also give the currently logged user read and write access the serial port over USB. Check [here](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/establish-serial-connection.html) for more information + * For Windows: + * Check the list of identified COM ports in the [Windows Device Manager](https://support.microsoft.com/en-ca/help/4026149/windows-open-device-manager) + * Plug the T-Stick (USB) and check the list of identified COM ports in the [Windows Device Manager](https://support.microsoft.com/en-ca/help/4026149/windows-open-device-manager) again. The T-Stick port should appear on the list. Anotate the T-Stick USB port, it should be something similar to `COM3` or `COM16` + +### Flash the firmware (.bin files) + +* Use *Finder*, *Terminal*, or *File Explorer* to copy the contents of the [bin](https://../firmware/bin/) folder (you should copy 3 .bin files) to the *esptool-master* folder +* Navigate to the *esptool-master* folder in *Terminal* or *Command Prompt* +* Run the command (__don't forget to replace the --port (/dev/cu.wchusbserial1410) option for your T-Stick port__): `esptool.py --chip esp32 --port /dev/cu.wchusbserial1410 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_dio_80m.bin 0x10000 esp32_arduino_FW211124.bin 0x8000 esp32_arduino_FW211124.ino.partitions.bin 2686976 esp32_arduino_FW211124.spiffs.bin`. Wait for the process to be complete. Do not unplug or turn off your T-Stick during the process. + +To set the T-Stick info and test if the data is being send correctly: + +* Connect the T-Stick to a network (instructions [here](https://./T-Stick_2GW_Connecting_Guide(v1.2).md)); +* Open the Pure Data (PD) or Max/MSP patch to receive T-Stick messages (they can be found [here](https://../Test_config/)); +* Start receive OSC messages according to the chosen patch. + +# Connecting to a T-Stick 5GW + +## Option 1: Wireless Connection + +### Get your network details + + +1. Connect to the network you will be connecting the T-Stick to. +2. Note the SSID (network name) and SSID Password (network password). +3. Get your computers IP address while connected to this network. Below are linked some support articles for Windows, MacOS and Linux on how to find your computers IP address. + * [Find your IP Address Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9) + * [Find your IP Address MacOS](https://discussions.apple.com/thread/253927735) + * [Find your IP Address Linux](https://opensource.com/article/18/5/how-find-ip-address-linux) + +### Connect to the T-Stick + + + 4. Power on your T-Stick and wait until the boot sequence is complete. If your T-Stick does not have a Power switch press the button once and wait for the T-Stick to turn on. + 5. Connect to the T-Stick_XXX wifi network where XXX is the ID of the T-Stick. ie: TStick_001. By default the password is mappings. + 6. Open your browser and go to or , where XXX is the ID of the T-Stick module. + + \ + ![T-Stick Setup Page](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png) ![](https://images/TStick_setupv13.png "T-Stick wifi setup page") + + \ + 7. In the __Network__ section write the network name and password optained in Step 2 in the __SSID__ and __SSID Password__ fields. + 8. In the __OSC send settings__ put in your computer's IP address optained in Step 3 in the __Primary IP__ field. + 9. Click the green __Save__ button. You will be directed to a page saying that the information was saved successfully. +10. Click __Config__ on the top of the page to return to the orginal menu. +11. Click the green __Close and Reboot__ button at the bottom of the page. + + diff --git a/T-Stick Designs/T-Stick 5GW/Technical Information.md b/T-Stick Designs/T-Stick 5GW/Technical Information.md new file mode 100644 index 0000000..7ad5317 --- /dev/null +++ b/T-Stick Designs/T-Stick 5GW/Technical Information.md @@ -0,0 +1,53 @@ +# Technical Information + +# Technical Details + +## Summary + +| Feature | Details | +|----|----| +| Communication Type | Wi-Fi, 802.11 b/g/n | +| Compatible protocols | Open Sound Control (OSC)/Libmapper | +| Touch Sensing Density | 1 channel per 1cm | +| Microcontroller | ESP32-S3 Series | +| Gestures Embedded? | Yes | +| Embedded Gesture Libraries | Puara Gestures | +| Sensors | ICM20948 IMU, Trill Craft Capacitive Sensing Board (30 channels), Force Sensitive Resistor, MAX17055 | + +## Detailed + +| Feature | Detail | +|----|----| +| Control Loop Frequency | | +| Wireless Latency | | +| Battery Life | | +| State of Charge Accuracy | | +| Battery Voltage Accuracy | | +| Average Sensor Latency | | +| ICM20948 Latency | | +| Trill Craft Latency | | +| FSR 408 Latency | | +| Average Sensor Accuracy | | +| ICM20948 Accuracy | | +| Trill Craft Accuracy | | +| FSR 408 Accuracy | | +| Practice Interruption Rate | | +| Practice/Maintenance Ratio | | + +## Diagrams + + ![ESP32 Board Diagram](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/55507260-3901-49f6-891e-723b7da5a768/pcb_layout_components.png) + + ![Touch Board Diagram](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e64dc1b2-dddd-4157-ab55-75b57fe26842/touch-board-schematic-view.png) + +## Schematic + + ![Custom ESP32 Board Schematics](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d26c1a30-41a1-4488-9e0c-c67d8ac1c3b6/tstick-5GW-schematic.png) + + ![Touch Board Schematic](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d6efdb3d-c021-46f8-9f8d-c353fdd50d2f/tstick-touch-board-schematic.png) + +# OSC Signal Namespace + +TBD + + diff --git a/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/55507260-3901-49f6-891e-723b7da5a768/pcb_layout_components.png b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/55507260-3901-49f6-891e-723b7da5a768/pcb_layout_components.png new file mode 100644 index 0000000..16839a0 Binary files /dev/null and b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/55507260-3901-49f6-891e-723b7da5a768/pcb_layout_components.png differ diff --git a/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png new file mode 100644 index 0000000..3547d7d Binary files /dev/null and b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/cb84832a-b46c-4839-b3c7-f71fec0797ad/image.png differ diff --git a/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d26c1a30-41a1-4488-9e0c-c67d8ac1c3b6/tstick-5GW-schematic.png b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d26c1a30-41a1-4488-9e0c-c67d8ac1c3b6/tstick-5GW-schematic.png new file mode 100644 index 0000000..ce57b99 Binary files /dev/null and b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d26c1a30-41a1-4488-9e0c-c67d8ac1c3b6/tstick-5GW-schematic.png differ diff --git a/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d6efdb3d-c021-46f8-9f8d-c353fdd50d2f/tstick-touch-board-schematic.png b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d6efdb3d-c021-46f8-9f8d-c353fdd50d2f/tstick-touch-board-schematic.png new file mode 100644 index 0000000..d6a5a2c Binary files /dev/null and b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/d6efdb3d-c021-46f8-9f8d-c353fdd50d2f/tstick-touch-board-schematic.png differ diff --git a/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e64dc1b2-dddd-4157-ab55-75b57fe26842/touch-board-schematic-view.png b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e64dc1b2-dddd-4157-ab55-75b57fe26842/touch-board-schematic-view.png new file mode 100644 index 0000000..d52c9b3 Binary files /dev/null and b/T-Stick Designs/T-Stick 5GW/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/e64dc1b2-dddd-4157-ab55-75b57fe26842/touch-board-schematic-view.png differ diff --git a/T-Stick Designs/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/4768188f-aa9a-4950-941c-6afa66150118/TStick-HardwareArchitecture-Pro.png b/T-Stick Designs/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/4768188f-aa9a-4950-941c-6afa66150118/TStick-HardwareArchitecture-Pro.png new file mode 100644 index 0000000..6137f87 Binary files /dev/null and b/T-Stick Designs/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/4768188f-aa9a-4950-941c-6afa66150118/TStick-HardwareArchitecture-Pro.png differ diff --git a/T-Stick Designs/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9cff436b-2a8a-41e3-af45-2f272963ca74/fourtehgen-systemarchitecture.png b/T-Stick Designs/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9cff436b-2a8a-41e3-af45-2f272963ca74/fourtehgen-systemarchitecture.png new file mode 100644 index 0000000..80281dd Binary files /dev/null and b/T-Stick Designs/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/9cff436b-2a8a-41e3-af45-2f272963ca74/fourtehgen-systemarchitecture.png differ diff --git a/Technical Requirements and Constraints.md b/Technical Requirements and Constraints.md new file mode 100644 index 0000000..40b5d3d --- /dev/null +++ b/Technical Requirements and Constraints.md @@ -0,0 +1,197 @@ +# Technical Requirements and Constraints + +This page outline the technical requirements of the T-Stick as well as constraints inherited from previous designs. The goal is that with these technical requirements and constraints someone will be able to build a T-Stick that is functionally identical to the designs that have previously been built. + +# Verification Method table + +| | **Verification Method (IADT)** | +|----|----| +| Inspection | Visual inspection of the device | +| Analysis | Simulation, mathematical models and data analysis | +| Demonstration | Demonstrate the functionality for the user | +| Test | More rigorous form of demonstration to show performance | + +# Technical Requirements + +The technical requirements are split into 5 sections representing each of the major subsystems of the T-Stick and a section for manufacturing and reliability requirements. + +## 1. Control and Communication System + +Control and Communication System of the T-Stick is the set of hardware and software components that handle the controlling and regulating the instrument which includes: configuring the instrument, communicating with the instrument, communication between subsystems, and managing the main control loop. + +| **ID** | **Requirements** | **Verification Method (IADT)** | +|----|----|----| +| **1** | **Control System** | | +| 1.1 | The control rate of the system should be at least 1000HZ and will be no slower than 200Hz. | Test | +| 1.2 | Continuous signals should have a wireless signal rate of at least 100Hz and will be no slower than 50Hz. | Test/Analysis | +| 1.3 | Wireless Signal Latency will be below 10ms. | Test/Analysis | +| 1.4 | Wireless Signal Jitter will be below 2ms. | Test/Analysis | +| 1.5 | The communication system will send any errors experienced by other subsystems to the user. | Demonstration | +| 1.5.1 | The communication system will send errors experienced by the sensor system to the user. | Demonstration | +| 1.5.2 | The communication system will send errors experienced by the power system to the user, excluding errors that cause a complete power delivery failure. | Demonstration | +| 1.5.3 | The communication system will send errors experienced by the control and communication system to the user. | Demonstration | + +### 1.1: The control rate of the system should be at least 1000HZ and will be no slower than 200Hz.. + +1000Hz allows responsive control of the T-Stick. + +### 1.2: Continuous signals should have a wireless signal rate of at least **100Hz** and will be no slower than 50Hz. + +INSERTJUSTIFICATIONHERE + +### 1.3: Wireless Signal Latency will be below 10ms. + +Wireless latency for signals need to be below 10ms for continuous signals to have a signal rate of 100Hz. + +### 1.4: Wireless Signal Jitter will be below 2ms. + +Jitter should be reasonably low for a consistent wireless speed. + +### 1.5: The communication system will send any errors experienced by other subsystems to the user + +The communication system should handle sending any errors to the user wirelessly or wired. This helps the user understand what is going on with their T-Stick when things go wrong. + +## 2. Power System Requirements + +The Power System of the T-Stick handles delivering power to all components of the T-Stick and measuring the remaining power when the T-Stick is on battery power. Hardware components such as regulators, and fuel gauges, as well as software components such as battery life estimation algorithms. + +| **ID** | **Requirements** | **Verification Method (IADT)** | +|----|----|----| +| **2** | **Power System** | | +| 2.1 | The device will be able to be powered both wirelessly and wired. | Demonstration | +| 2.2 | The power system will be able to provide continuous power to the T-Stick for at least **2** hours on a single charge. | Test | +| 2.3 | The power system will be able to measure the battery voltage with an average error of less than **1%.** | Test | +| 2.4 | The power system will be able to measure the state of charge of the battery with an average error of less than **10%.** | Analysis | +| 2.5 | The power system will be able to estimate the battery life with an average error of less than **10%.** | Test | + +### 2.1: The device will be able to be powered both wirelessly and wired. + +The current generation of T-Sticks are both battery and USB powered, we are keeping this feature. + +### 2.2: The power system will be able to provide continuous power to the T-Stick for at least **2** hours on a single charge. + +Two hours is considered a reasonable amount of time to play and perform with the T-Stick before needing a charge. The number can be increased based on conversations with artist to determine what battery life we should be aiming for. + +### 2.3: The power system will be able to measure the battery voltage with an average error of less than 1%. + +Accurate battery voltage measurements allow the T-Stick to better estimate when the battery health is starting to decline. This is useful as it can give artist advanced warning of when their batteries need to be replaced. + +### 2.4: The power system will be able to estimate the battery capacity of the battery with an average error of less than 10%. + +Accurate battery capacity measurements allow the T-Stick to better estimate when the battery health is starting to decline. This is useful as it can give artist advanced warning of when their batteries need to be replaced. + +### 2.5: The power system will be able to estimate the battery life with an average error of less than 10%. + +Accurate battery life estimation is useful to artist as it gives feedback on when they should charge their T-Sticks + +## 3. Sensor System Requirements + +The Sensor System of the T-Stick manages the initialization, communication, and analysis of sensors in the T-Stick. This includes all the sensors excluding sensors related to power management and the software components that communicate with the sensors and process their data. + +| **ID** | **Requirements** | **Verification Method (IADT)** | +|----|----|----| +| **3** | **Sensor System** | | +| 3.1 | The sensor system should have a polling rate of at least **1000Hz** for continuous signals. | Test | +| 3.2 | The sensor system will have an average error of less than **1%.** | Analysis/Test | +| 3.3 | The sensor system will be able to detect when sensors are not communicating. | Demonstration | +| 3.4 | The sensor system will be able to identify sensors that are not communicating. | Demonstration | +| 3.5 | The sensor system will continue operating regardless of the states of the sensors | Test | +| 3.6 | The sensor system will have a calibration mode which enables artist to manually calibrate the sensors. | Demonstration/Test | +| 3.7 | The sensor system will be able to measure or approximate the following properties listed in Section 3 of the [T-Stick Design Guidelines](./Technical%20Requirements%20and%20Constraints/T-Stick%20Design%20Guidelines.md). | Demonstration | + +### 3.1: The sensor system will have a polling rate of at least 1000Hz. + +The sensor system needs have a high polling rate of the sensors to allow for fast controls on the T-Stick. See the [control and communication system requirement](./../5th%20Generation%20T-Stick%20Design%20Docs%20%5BARCHIVE%5D/Requirements%20Analysis/Control%20and%20Communication%20System%20Requirements.md). + +### 3.2: The sensor system will have an average error of less than **1%.** + +Highly accurate sensor measurements increase confidence for the artist that the T-Stick will do what they tell it to do. + +### 3.3: The sensor system will be able to detect when sensors are not communicating. + +Detecting sensor system errors is useful for troubleshooting problems with the T-Stick + +### 3.4: The sensor system will be able to identify sensors that are not communicating. + +Identifying which sensors are not communicating is useful as it allows the TY-Stick to disable them, and skip trying to poll them. + +### 3.5: The sensor system will continue operating regardless of the states of the sensors + +The entire T-Stick should keep working even if some sensors are not communicating. Furthermore, it makes it more obvious for artist as to which sensor is not working. + +### 3.6 The sensor system will have a calibration mode which enables artist to manually calibrate the sensors. + +Calibration is important, as it improves sensor accuracy and precision, artist should have the option to use a calibration mode to improve the performance of the T-Stick. + +## 4. Reliability and Maintainability + +As the name suggests this section contains all requirements relating to reliability and availability. This includes a PIR and PMR target for the T-Stick. We use the model defined in INSERTREFERENCEHERE for computing the PIR and PMR of the T-Stick. The robustness requirements are to ensure the T-Stick can handle elevated levels of shaking and jabbing for short periods of time without permanent failures. + +| **ID** | **Requirements** | **Verification Method (IADT)** | +|----|----|----| +| **4** | **Reliability and Availability** | | +| 4.1 | The T-Stick will have a [Practice/Performance Interruption Rate (PIR)](./Availability%20Modelling.md) of 1%. | Analysis | +| 4.2 | The T-Stick will have a [Playing/Maintenance Ratio (PMR)](./Availability%20Modelling.md) of at least 1. | Analysis | +| 4.3 | The T-Stick will be robust to jabs. | Test | +| 4.4 | The T-Stick will be robust to shakes. | Test | + +### 4.1: The T-Stick will have a Practice Interruption Rate (PIR) of 1% + +Low PIR means that artist can be more confident with using the instrument without having to constantly require maintenance from a technician/luthier. + +### 4.2: The T-Stick will have a Performance/Maintenance Ratio (PMR) of at least 1. + +A high PMR ratio means that we get a large amount of performance hours per hour of maintenance. + +### 4.3: The T-Stick will be robust to jabs. + +Jabs are an important gesture for the T-Stick. Performers should be able to do them freely without worrying about failures. + +### 4.4: The T-Stick will be robust to shakes. + +Shakes are an important gesture for the T-Stick. Performers should be able to do them freely without worrying about failures. + +## 5. Manufacturing Requirements + +The manufacturability Requirements are all the requirements related to the manufacturing of T-Sticks including constraints on the Bill of Materials (BOM), required documentation, and time to assemble the T-Stick. + +| **ID** | **Requirements** | **Verification Method (IADT)** | +|----|----|----| +| **5** | **Manufacturability** | | +| 5.1 | The T-Stick will follow the design guidelines and requirements outlined in sections 1 and 2 of the [T-Stick Design Guidelines](./Technical%20Requirements%20and%20Constraints/T-Stick%20Design%20Guidelines.md). | Demonstration | +| 5.2 | The physical design documentation will include a bill of materials. | Demonstration | +| 5.2.1 | The bill of materials will have fewer than 64 individual parts, including fly wires, screws, nuts, and heat shrink. | Demonstration | +| 5.2.2 | The bill of materials will have fewer than 40 distinct types of parts. | Demonstration | +| 5.3 | The physical design documentation will include a schematic. | Demonstration | +| 5.4 | The physical design documentation will include assembly instructions. | Demonstration | +| 5.5 | The mean time to assemble one T-Stick, not counting the time to gather parts and materials, will be less than 5 hours. | Test | +| 5.6 | The final assembly and repair of the T-Stick will be possible using only a soldering iron, wire stripper/cutter, heat gun, saw, and hex key. | Demonstration | +| 5.7 | The T-Stick will use common readily available parts and materials. | Demonstration | + +### 5.1: The T-Stick will follow the design guidelines and requirements outlined in Sections 1 and 2 of the [T-Stick Design Guidelines](./Technical%20Requirements%20and%20Constraints/T-Stick%20Design%20Guidelines.md). + +standardisation of design… + +### 5.2: The physical design documentation will include a bill of materials. + +As an open source project that we want others to replicate, a bill of materials is important. We include this as a requirement to ensure it is done as part of the design cycle and not as an afterthought. + +### 5.3: The physical design documentation will include a schematic. + +A schematic is useful for builders as it shows them how all the electronics are connected. + +### 5.4: The physical design documentation will include assembly instructions. + +As an open source project that we want others to replicate, a bill of materials is important. We include this as a requirement to ensure it is done as part of the design cycle and not as an afterthought. + +### 5.5: The mean time to assemble one T-Stick, not counting the time to gather parts and materials, will be less than 5 hours. + +The T-Stick should not take more than a day to build for new builders. + +### 5.6: The final assembly and repair of the T-Stick will be possible using only a soldering iron, wire stripper/cutter, heat gun, saw, and hex key. + +The T-Stick should be able to be built using common tools to help facilitate low-cost manufacturing. + +### 5.7: The T-Stick will use common readily available parts and materials. + +The T-Stick should be able to be built using common components to help facilitate low-cost manufacturing. \ No newline at end of file diff --git a/Technical Requirements and Constraints/T-Stick Design Guidelines.md b/Technical Requirements and Constraints/T-Stick Design Guidelines.md new file mode 100644 index 0000000..d10ebce --- /dev/null +++ b/Technical Requirements and Constraints/T-Stick Design Guidelines.md @@ -0,0 +1,96 @@ +# T-Stick Design Guidelines + +# Purpose + +To improve interoperability between present and future T-Stick implementations. + +# 1. Identity Characteristics + +These features might be part of what makes an object identifiable as a T-Stick, and not some other instrument or object. These features are not normative, and serve more to introduce vocabulary that can be used in subsequent remarks. + + +1. T-Stick is cylindrical. +2. T-Stick usually has a diameter such that it can be held in one hand. +3. T-Stick’s outer cylindrical face has two sides; one side (termed “the top side”) has a pressure sensor, and it is usually slightly squishy e.g. due to a layer of closed cell foam adhered on that side of the instrument. The other side (termed “the bottom side”) has a (usually capacitive) fully multitouch touch sensor, and it is usually not squishy. +4. T-Stick also senses information about the orientation and motion of the instrument in space, such as the direction in the global frame of reference it is pointing (i.e. “pitch and yaw”, aka “altitude and azimuth”, aka “heading and inclination” aka etc), usually using an inertial measurement unit (IMU), or magnetic-inertial measurement unit (MIMU). +5. T-Stick usually has a recipient port for a serial communications bus connection at one end of the pipe, usually USB. This end is termed “the proximal end” of the pipe, because it is often held closer to the heart of the T-Stick player. The other end of the pipe is termed “the distal end” of the pipe. +6. The ends of the pipe are usually closed off with end caps which sometimes have buttons, lights, and/or switches embedded in them, as well as the serial bus connector on the proximal end. +7. In addition to the pipe that makes up the main body of the instrument, a T-Stick often has an internal structure. Sensors may be attached to the pipe, the internal structure, the endcaps, or a combination of these parts. + +# 2. Hardware Standards + +These remarks are meant to be normative. Adherence to these remarks is meant to improve interoperability between present and future T-Stick implementations. + +Many of the following standards are based on the dimensions of materials readily available in Canada where most T-Sticks are currently made. T-Stick builders in regions where available materials are sold with different base dimensions may wish to define local standards. + +## 2.1. Coordinate Systems + +The global coordinate system used in T-Stick implementations is a right-handed East-North-Up 3-dimensional orthogonal Cartesian coordinate system. The positive X axis points to the East. The positive Y axis points North. The positive Z axis points up. + +The performance-local coordinate system used in T-Stick implementations is derived by a rotation of the global coordinate system about the Z axis, such that the performance-local X axis points from center stage to stage right (i.e. from left to right when standing on stage facing the audience), and the performance-local Y axis points from center stage to downstage (i.e. towards the audience). + +The T-Stick-local coordinate system is used to give directions relative to the body of the T-Stick. The X axis points from the proximal end of the pipe to the distal end of the pipe. The Y axis is determined from a 90 degree counterclockwise rotation of the X axis about the Z axis. The Z axis points from the bottom side of the pipe to the top side of the pipe. + +The reference origin is centered in the circular cross-section of the pipe, with X = 0 defined such that the origin lies in the cutting plane that defines the proximal end of the pipe before end caps are attached. + + ![T-Stick Coordinate System](uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/70289f57-eca4-480f-bd53-48e93a60c4f0/image.png) + +Dimensions must given in millimeters (mm). Alternative representations in other units such as inches (in), feet (ft), centimeters (cm), or other units may be given *in addition* to the dimension in mm when convenient to aid comprehension. + +## 2.2. Consort Dimensions + +T-Sticks can be made in a variety of sizes, shown in table 1. + +All T-Sticks in this consort use standard **1 ½” ABS pipe** (typically manufactured for use in plumbing fixtures) with an outer diameter of **42.164 mm (1.6600 in)** and an inner diameter of **35.179 mm (1.3850 in)**. + +The base unit of length of a T-Stick is **304.8 mm (12 in, 1 ft)**. The different T-Stick sizes are all multiples of this base length. This length is chosen for maximum yield of T-Sticks from readily available lengths of pipe, which are normally sold by the foot. + + +**Table 1: T-Stick Sizes** + +| **“Range”** | **Length of pipe (without end caps)** | +|----|----| +| Sopranino | 304.8 mm (12 in, 1 ft) | +| Soprano | 609.6 mm (24 in, 2 ft) | +| Alto | 914.4 mm (36 in, 3 ft) | +| Tenor | 1219.2 mm (48 in, 4 ft) | +| Bass | 1524.0 mm (60 in, 5 ft) | +| Contrabass | 1828.8 mm (72 in, 6 ft) | + +## 2.3. Mounting Holes + +Mounting holes on the PCB and internal structure shall be spaced **12.7 mm (½ in)** apart along the X axis, starting **6.35 mm (¼ in)** from the origin (i.e. from the proximal opening of the pipe). Adherence to this standard enables parts to be designed without strict coupling. + +## 2.4. PCBs + +If PCBs are used the following characteristics should be followed to improve interoperability between designs. + + +1. PCBs shall not have dimension in the Y axis greater than **31.75 mm (1.25 in)**. +2. The bottom surface of PCBs should not have any surface mount components or through hole component legs. + +# 3. Sensor Measurements + +The T-Stick shall be able to measure or approximate the following properties: + + +1. Acceleration +2. Orientation +3. Pressure +4. Multi-finger touch +5. Taps +6. Jabs +7. Brushes +8. Rubs + +It is recommended to use a similar set of sensors and algorithms as previous [T-Stick designs](./../T-Stick%20Designs.md) to maintain similar behavior across T-Sticks. These properties should be able to meet the accuracy requirement (Requirement 3.2) outlined in [Technical Requirements and Constraints](./../Technical%20Requirements%20and%20Constraints.md). Additionally any sensor fusion and gestural extraction should be done in the T-Stick firmware. + +# 4. Signal Namespace + +If interoperability with previous T-Stick pieces is desired the following guidelines should be followed: + + +1. The T-Stick should avoid using a different namespace than the ones presented in this Table. +2. If you wish for the T-Stick to be able to play older pieces the firmware of the T-Stick should have a built in translation layer for signals. External translation layers can be used but are not desired. + + diff --git a/Technical Requirements and Constraints/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/70289f57-eca4-480f-bd53-48e93a60c4f0/image.png b/Technical Requirements and Constraints/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/70289f57-eca4-480f-bd53-48e93a60c4f0/image.png new file mode 100644 index 0000000..b4bc392 Binary files /dev/null and b/Technical Requirements and Constraints/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/70289f57-eca4-480f-bd53-48e93a60c4f0/image.png differ diff --git a/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/56b52481-887d-4043-95c6-8804b80c0eab/ffbd-tstick.png b/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/56b52481-887d-4043-95c6-8804b80c0eab/ffbd-tstick.png new file mode 100644 index 0000000..18a5896 Binary files /dev/null and b/uploads/3beaeacb-7875-4267-b82a-cf15952f3e30/56b52481-887d-4043-95c6-8804b80c0eab/ffbd-tstick.png differ