<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Project C.O.D.I. |  Schematics, Arduino IDE Sketch, B.O.M, and Eagle Files!</title><link>https://community.element14.com/challenges-projects/project14/wearabletech/w/documents/3634/project-c-o-d-i-schematics-arduino-ide-sketch-b-o-m-and-eagle-files</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Project C.O.D.I. |  Schematics, Arduino IDE Sketch, B.O.M, and Eagle Files!</title><link>https://community.element14.com/challenges-projects/project14/wearabletech/w/documents/3634/project-c-o-d-i-schematics-arduino-ide-sketch-b-o-m-and-eagle-files</link><pubDate>Fri, 23 Nov 2018 08:13:02 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:38f6eaae-a4ef-4f42-917f-47d7f7c3be26</guid><dc:creator>tariq.ahmad</dc:creator><comments>https://community.element14.com/challenges-projects/project14/wearabletech/w/documents/3634/project-c-o-d-i-schematics-arduino-ide-sketch-b-o-m-and-eagle-files#comments</comments><description>Current Revision posted to Documents by tariq.ahmad on 11/23/2018 8:13:02 AM&lt;br /&gt;
&lt;div style="border:1px solid #9EA900;margin:0px;"&gt;&lt;table cellpadding="0" cellspacing="0" style="background-color:#f4f4f2;padding:0px;margin:0px;width:100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td rowspan="3" style="padding:6px 15px 6px 12px;"&gt;&lt;a href="/challengesprojects/project14/"&gt;&lt;img alt="image" src="/e14/assets/legacy/2017/project14_logodoc.png" style="vertical-align:top;"  /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="3" style="padding:6px 12px 8px 0px;"&gt;&lt;p style="margin:0;font-size:18px;font-weight:bold;padding-bottom:4px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/project14/wearabletech/"&gt;Wearable Tech&lt;/a&gt;&lt;/p&gt;&lt;p style="margin:0;padding-bottom:6px;line-height:17px;"&gt;&lt;strong&gt;Enter Your Electronics &amp;amp; Design Project&lt;/strong&gt; for a chance to win a $100 Shopping Cart!&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="/challengesprojects/project14/"&gt;Back to The Project14 homepage &lt;img loading="lazy" alt="image" src="/e14/assets/legacy/gen/LinkArrow.gif"  /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding:10px 12px;vertical-align:middle;background-color:#9ea900;" width="24%"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/project14/"&gt;&lt;span style="font-size:12px;color:#ffffff;"&gt;&lt;strong&gt;Project14 Home&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding:10px 12px;vertical-align:middle;background-color:#767e00;"&gt;&lt;span style="color:#dceb93;text-decoration:none;font-size:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/project14/w/documents/3370/project14-project-competition-events-trophies-timetable-projected-and-historical-timelines"&gt;&lt;span style="color:#ffffff;text-decoration:none;font-size:12px;"&gt;&lt;strong&gt;Monthly Themes&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding:10px 12px;vertical-align:middle;background-color:#596000;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/project14/w/documents/20670/project14-you-decide-the-next-monthly-project-competition"&gt;&lt;span style="color:#ffffff;text-decoration:none;font-size:12px;"&gt;&lt;strong&gt;Monthly Theme Poll&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&lt;span style="color:#007fac;"&gt;&lt;strong&gt;&lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/1206x900/__key/communityserver-wikis-components-files/00-00-00-04-11/4265.contentimage_5F00_105009.png"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/04/11/4265.contentimage_105009.png-620x463.png?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=dwUHqTZgLbVg%2FhD8XLN%2Bi%2FW%2F%2FjlbOt8IlF8KC6A6vQs%3D&amp;amp;se=2026-08-21T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=s9vLjB8YWCjAujY+sD3Izw==" style="max-height: 463px;max-width: 620px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span style="color:#007fac;"&gt;&lt;strong&gt;&lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/1288x536/__key/communityserver-wikis-components-files/00-00-00-04-11/2112.contentimage_5F00_105010.png"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/04/11/2112.contentimage_105010.png-620x258.png?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=cFV2gWxoI6JCtwD0rjCUn8XRzwWio%2Bsj5LBBqh8HPQA%3D&amp;amp;se=2026-08-21T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=kbe7x7zZXHqLrUTZPVMYSA==" style="max-height: 258px;max-width: 620px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;/h2&gt;&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* ESP32_TOF_VL5130_USRF

 This code is based on the four &amp;quot;&amp;quot;SingleRanging&amp;quot; examples in the VL53L0X API.
 The range readings are in units of mm and the Pololu library example

 Written By:
 Cameron Rodriguez
 cameron@notimpossiblelabs.com


 Last Modified:
 May 2nd, 2018


 */




// ###################################
// ############ Libraries ############
// ###################################


#include &amp;lt;Wire.h&amp;gt;
#include &amp;lt;VL53L0X.h&amp;gt;


// Math Library
#include &amp;lt;math.h&amp;gt;






// ###################################
// ######### Program Options #########
// ###################################


// #define DEBUG // Enable debug prints
// #define MotorsDisabled // Kill the PWM Motors
#define USEnable // Enable US readings


//
  #ifdef DEBUG
    boolean debug = true;
  #else
    boolean debug = false;
  #endif




  #ifdef USEnable
    boolean usenable = true;
  #else
    boolean usenable = false;
  #endif




  #ifdef MotorsDisabled
    boolean RunMotors = false;
  #else
    boolean RunMotors = true;
  #endif
  
// Uncomment this line to use long range mode. This
// increases the sensitivity of the sensor and extends its
// potential range, but increases the likelihood of getting
// an inaccurate reading because of reflections from objects
// other than the intended target. It works best in dark
// conditions.


// #define LONG_RANGE


// Uncomment ONE of these two lines to get
// - higher speed at the cost of lower accuracy OR
// - higher accuracy at the cost of lower speed


#define HIGH_SPEED
//#define HIGH_ACCURACY


// ###################################
// ####### GPIO DECLARATIONS #########
// ###################################


#define PWMPin1        10
#define PWMPin2        11
#define USpw            5
#define USa            A0
#define LuxPin         A1


#define LEDC_CHANNEL_0     0
#define LEDC_CHANNEL_1     1


#define LEDC_TIMER_13_BIT  13 // use 13 bit precission for LEDC timer
#define LEDC_BASE_FREQ     5000 // use 5000 Hz as a LEDC base frequency


// ###################################
// ############# GLOBALS #############
// ###################################


// ***** PWM Setup *****
unsigned int pwmrange = 511;  // 32u4 Huzzah boards


//Normalizing Scale Factor Calculations for Log Scale Mapping
int count = 0; int NumAvg = 1;
#ifdef LONG_RANGE
  double TOF_RangeMax = 2000.0;
#else
  double TOF_RangeMax = 1200.0;
#endif
double TOF_RangeMin = 50.0;


double US_RangeMax = 5000.0;
double US_RangeMin = 300.0;


int PWMmap1 = 0;
int PWMmap2 = 0;


double TOF_MAPSF = 1 / -log(1 / (double(TOF_RangeMax) - double(TOF_RangeMin) + 1.0)); // 255 *  1/-LOG(1/(RANGEMAX-RANGEMIN+1)) OR 255/MAX LOG VALUE GIVEN THE RANGE
double US_MAPSF = 1 / -log(1 / (double(US_RangeMax) - double(US_RangeMin) + 1.0)); // 255 *  1/-LOG(1/(RANGEMAX-RANGEMIN+1)) OR 255/MAX LOG VALUE GIVEN THE RANGE


// *********************




// ***** Measurement Setup *****


const int HistSz = 5; 
long MI = 0; // Measurement Index
#if defined HIGH_SPEED
  const int USMeasInt = 1;
#else
  const int USMeasInt = 3;
#endif


// *********************


// ***** Lux *****


int LuxVal = 0;


// *********************




// ***** TOF Setup *****
float lux = 0.0;
int TOFrange = 0;
int TOFstatus = 1;


int TOF_Hist[HistSz]; // the Hist of the Status of the TOF
int TOF_Hist_Ind; // Index of Hist Array
int TOF_HistV = 0;


//


// ***** US Setup *****
long USpulse, USrange;
int USstatus = 0;


int US_Hist[HistSz]; // the Hist of the Status of the US
int US_Hist_Ind; // Index of Hist Array
int US_HistV = 0;


//


// ***** COMM Setup *****
const int serialSpeed = 115200;       // USB serial port speed




VL53L0X sensor;


// ###################################
// ############ BASE FXNS ############
// ###################################


void AnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = pwmrange) {
  // calculate duty, 8191 from 2 ^ 13 - 1
  uint32_t duty = (8191 / valueMax) * min(value, valueMax);


  // write duty to LEDC
  ledcWrite(channel, duty);
}


// ###################################
// ############## SETUP ##############
// ###################################


void setup()
{
  if(debug){ 
    Serial.begin(serialSpeed);
    while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
    }
    Serial.println( F( &amp;quot;UART Communication Established&amp;quot; ) );
  }


  // Initialize I2C
  Wire.begin();
  
  // Initialize the GPIO
  //pinMode(PWMPin1, OUTPUT); digitalWrite(PWMPin1, LOW);
  //pinMode(PWMPin2, OUTPUT); digitalWrite(PWMPin2, LOW);


  ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
  ledcAttachPin(PWMPin1, LEDC_CHANNEL_0);


  ledcSetup(LEDC_CHANNEL_1, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
  ledcAttachPin(PWMPin2, LEDC_CHANNEL_1);
  
  pinMode(USpw, INPUT);
  pinMode(USa, INPUT);
  pinMode(LuxPin, INPUT);


  if(debug){ Serial.println( F( &amp;quot;Looking 4 Sensor&amp;quot;) );}
  sensor.init();
  sensor.setTimeout(500);
  if(debug){ Serial.println(F( &amp;quot;Sensor Starting&amp;quot;) );}


  #if defined LONG_RANGE
    // lower the return signal rate limit (default is 0.25 MCPS)
    sensor.setSignalRateLimit(0.1);
    // increase laser pulse periods (defaults are 14 and 10 PCLKs)
    sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
    sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
  #endif


  #if defined HIGH_SPEED
    // reduce timing budget to 20 ms (default is about 33 ms)
    sensor.setMeasurementTimingBudget(20000);
  #elif defined HIGH_ACCURACY
    // increase timing budget to 200 ms
    sensor.setMeasurementTimingBudget(200000);
  #else // default is about 33 ms
    sensor.setMeasurementTimingBudget(33000);  
  #endif


  //Initialize the status histories for the TOF and US to 80% good
  for (int TOF_Hist_Ind = 0; TOF_Hist_Ind &amp;lt; HistSz; TOF_Hist_Ind++) {
    TOF_Hist[TOF_Hist_Ind] = 0;
  }
  TOF_Hist_Ind = 0;
  
  for (int US_Hist_Ind = 0; US_Hist_Ind &amp;lt; HistSz; US_Hist_Ind++) {
    US_Hist[US_Hist_Ind] = 0;
  }
  US_Hist_Ind = 0;
}


// ###################################
// ############# MAIN LOOP ###########
// ###################################


void loop(){


  LuxVal = analogRead(LuxPin);
  if(LuxVal &amp;gt;= 950){
  //if((LuxVal &amp;gt;= 900)||(TOF_HistV &amp;lt;=3)){
    #ifdef USEnable
      usenable = true;
    #endif  
  }
  else{usenable = false;}
  
  if(MI%USMeasInt == 0){ 
    if(usenable){
      read_US();
      if( (USrange &amp;lt;= US_RangeMax) &amp;amp;&amp;amp; (USrange &amp;gt; US_RangeMin) ){ 
        USstatus = 1; US_Tracker();}
      else{USstatus = 0; US_Tracker();}
    }
    else{USstatus = 0; USrange = 0; US_HistV = 0;}
  }
  
  TOFrange = sensor.readRangeSingleMillimeters();
  if( (!sensor.timeoutOccurred()) &amp;amp;&amp;amp; (TOFrange &amp;lt;= TOF_RangeMax) &amp;amp;&amp;amp; (TOFrange &amp;gt; 0) ){ 
    TOFstatus = 1; TOF_Tracker();}
  else{TOFstatus = 0; TOF_Tracker();}
  
  if(( TOFstatus == 1 )||(USstatus == 1 )){ // At least 1 channel of good data


    if((TOFstatus == 1) &amp;amp;&amp;amp; (USstatus == 0)){// TOF GOOD, US BAD
      if (TOFrange &amp;lt; TOF_RangeMin) {PWMmap1 = pwmrange;}
      else { PWMmap1 = LogMapTOF(double(TOFrange));}
    }
    else if((TOFstatus == 0) &amp;amp;&amp;amp; (USstatus == 1)){ // TOF BAD, US GOOD
      if (USrange &amp;gt; TOF_RangeMax) {PWMmap1 = 0;}
      else { PWMmap1 = LogMapTOF(double(USrange));}
    }
    else{ // BOTH GOOD
      if(TOF_HistV &amp;lt; US_HistV){ // Choose TOF over US if its history equal is better
        if (USrange &amp;gt; TOF_RangeMax) {PWMmap1 = 0;}
        else { PWMmap1 = LogMapTOF(double(USrange));}
      }
      else{
        if (TOFrange &amp;lt; TOF_RangeMin) {PWMmap1 = pwmrange;}
        else { PWMmap1 = LogMapTOF(double(TOFrange));}
      }
    }     
   
    if(RunMotors){
      AnalogWrite(PWMPin1, PWMmap1);
      AnalogWrite(PWMPin2, PWMmap1);
    }
    if(debug){
      if(( TOFstatus == 1 )&amp;amp;&amp;amp;(USstatus == 1 )){
        Serial.print(&amp;quot;Lux Value: = &amp;quot;); Serial.print( LuxVal ); Serial.print( &amp;quot;,     &amp;quot;);
        Serial.print(&amp;quot;PWM: = &amp;quot;); Serial.print( PWMmap1 ); Serial.print( &amp;quot;,     &amp;quot;);
        Serial.print(&amp;quot;TOF: Status = &amp;quot;); Serial.print( TOF_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;); Serial.print( TOFrange ); Serial.print( &amp;quot;mm,     &amp;quot;);
        Serial.print(&amp;quot;US: Status = &amp;quot; ); Serial.print( US_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;);Serial.print( USrange ); Serial.println( &amp;quot;mm&amp;quot; );}
      else if(( TOFstatus == 0 )&amp;amp;&amp;amp;(USstatus == 1 )){
        Serial.print(&amp;quot;Lux Value: = &amp;quot;); Serial.print( LuxVal ); Serial.print( &amp;quot;,     &amp;quot;);
        Serial.print(&amp;quot;PWM: = &amp;quot;); Serial.print( PWMmap1 ); Serial.print( &amp;quot;,     &amp;quot;);
        Serial.print(&amp;quot;TOF: Status = &amp;quot;); Serial.print( TOF_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;); Serial.print( &amp;quot;----- &amp;quot; ); Serial.print( &amp;quot;mm,     &amp;quot;);
        Serial.print(&amp;quot;US: Status = &amp;quot; ); Serial.print( US_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;);Serial.print( USrange ); Serial.println( &amp;quot;mm&amp;quot; );}
      else{
        Serial.print(&amp;quot;Lux Value: = &amp;quot;); Serial.print( LuxVal ); Serial.print( &amp;quot;,     &amp;quot;);
        Serial.print(&amp;quot;PWM: = &amp;quot;); Serial.print( PWMmap1 ); Serial.print( &amp;quot;,     &amp;quot;);
        Serial.print(&amp;quot;TOF: Status = &amp;quot;); Serial.print( TOF_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;); Serial.print( TOFrange ); Serial.print( &amp;quot;mm,     &amp;quot;);
        Serial.print(&amp;quot;US: Status = &amp;quot; ); Serial.print( US_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;);Serial.print( &amp;quot;----- &amp;quot;); Serial.println( &amp;quot;mm&amp;quot; );}
    }
    
  }
  else{
    if(RunMotors){
      digitalWrite(PWMPin1, LOW);
      digitalWrite(PWMPin2, LOW);
    }
    if(debug){
      Serial.print(&amp;quot;Lux Value: = &amp;quot;); Serial.print( LuxVal ); Serial.print( &amp;quot;,     &amp;quot;);
      Serial.print(&amp;quot;PWM: = 0,     &amp;quot;);
      Serial.print(&amp;quot;TOF: Status = &amp;quot;); Serial.print( TOF_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;); Serial.print( &amp;quot;----- &amp;quot; ); Serial.print( &amp;quot;mm,     &amp;quot;);
      Serial.print(&amp;quot;US: Status = &amp;quot; ); Serial.print( US_HistV ); Serial.print(&amp;quot;, Range = &amp;quot;);Serial.print( &amp;quot;----- &amp;quot;); Serial.println( &amp;quot;mm&amp;quot; );
    } 
  }


  MI++;
  
}




// ###################################
// ########### SUBFUNCTIONS ##########
// ###################################


void US_Tracker(){


  US_HistV = US_HistV - US_Hist[US_Hist_Ind]; // Remove old value from the running total
  US_Hist[US_Hist_Ind] = USstatus; // add new val to index
  US_HistV = US_HistV + US_Hist[US_Hist_Ind]; // Add new value to the running total
  US_Hist_Ind ++;


  if (US_Hist_Ind &amp;gt;= HistSz) {US_Hist_Ind = 0;}  // if we&amp;#39;re at the end of the array, then wrap around to the beginning
  
}


void TOF_Tracker(){


  TOF_HistV = TOF_HistV - TOF_Hist[TOF_Hist_Ind];
  TOF_Hist[TOF_Hist_Ind] = TOFstatus;
  TOF_HistV = TOF_HistV + TOF_Hist[TOF_Hist_Ind];
  TOF_Hist_Ind ++;


  if (TOF_Hist_Ind &amp;gt;= HistSz) {TOF_Hist_Ind = 0;} // if we&amp;#39;re at the end of the array, then wrap around to the beginning
}


void read_US(){
  #if defined HIGH_SPEED
    USrange = analogRead(USa)*5;
  #else
    USrange = pulseIn(USpw, HIGH);
  #endif  
}


int LogMapTOF(double val) {
  double MAPval = (val - TOF_RangeMin + 1);
  MAPval = TOF_MAPSF * pwmrange * ( -log( MAPval / (TOF_RangeMax - TOF_RangeMin + 1) ));
  return int(MAPval);
} // END LogMap


int LogMapUS(double val) {
  double MAPval = (val - TOF_RangeMin + 1);
  MAPval = US_MAPSF * pwmrange * ( -log( MAPval / (US_RangeMax - US_RangeMin + 1) ));
  return int(MAPval);
} // END LogMap&lt;/pre&gt;&lt;/p&gt;&lt;div style="display:none;"&gt;&lt;/div&gt;&lt;h2&gt;&lt;span style="color:#007fac;"&gt;&lt;strong&gt;Parts from:&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style="float:right;"&gt; &lt;/div&gt;&lt;p style="margin:0;font-family:Verdana, &amp;#39;Verdana Ref&amp;#39;, Geneva, Tahoma, sans-serif;color:#333333;"&gt;&lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/229x35/__key/communityserver-wikis-components-files/00-00-00-04-11/0068.contentimage_5F00_105011.png"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/04/11/0068.contentimage_105011.png-229x35.png?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=kcDWRhuPr45lnIeQelfLTUhb95aIS7C1yex2GzA4hmc%3D&amp;amp;se=2026-08-21T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=LQZjAaj3JCk2CIcg2Resaw==" style="max-height: 35px;max-width: 229px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style="font-family:Verdana, &amp;#39;Verdana Ref&amp;#39;, Geneva, Tahoma, sans-serif;color:#333333;"&gt;&lt;/h2&gt;&lt;table border="1" class="jiveBorder" style="border:1px solid #000000;width:100%;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Manufacturer Part Number&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Quantity&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Part Link&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Transistor NPN T092&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;"&gt;2n2222a&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown" id="addProduct-TNC8WpwV-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=9207120&amp;amp;nsku=10M4197&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=9207120&amp;amp;nsku=10M4197&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-TNC8WpwV-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Diode&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="color:black;font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;1N4001&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown" id="addProduct-BGrW7RbK-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=1651089&amp;amp;nsku=10M8464&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=1651089&amp;amp;nsku=10M8464&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-BGrW7RbK-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Resistor 180&lt;span style="font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;"&gt;Ω&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;"&gt;180Ω&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown" id="addProduct-XyFsAi6t-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=&amp;amp;nsku=97K5564&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=&amp;amp;nsku=97K5564&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-XyFsAi6t-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2&gt;&lt;span style="color:#007fac;"&gt;&lt;strong&gt;&lt;br /&gt;Parts From:&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin:0;padding-bottom:8px;"&gt;&lt;span style="color:#007fac;"&gt;&lt;strong&gt;&lt;a href="https://www.adafruit.com/" rel="nofollow ugc noopener" target="_blank"&gt; &lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/153x52/__key/communityserver-wikis-components-files/00-00-00-04-11/6825.contentimage_5F00_105012.jpg"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/04/11/6825.contentimage_105012.jpg-153x52.jpg?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=%2BrThptTPCVVwKH2vzEo9nH4ArAFWGlRmXe5bI2RZiaY%3D&amp;amp;se=2026-08-21T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=/xwD1DiG4rscrP4B+9tWuw==" style="max-height: 52px;max-width: 153px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border="1" class="jiveBorder" style="border:1px solid #000000;width:100%;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Manufacturer Part Number&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Quantity&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;TOF Sensor&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;3317&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;US Sensor&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;DejaVu Sans&amp;#39;, serif;font-size:14.6667px;text-align:center;"&gt;984&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ESP32 Feather&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;DejaVu Sans&amp;#39;, serif;font-size:14.6667px;text-align:center;"&gt;3404&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Female Header Pin&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;DejaVu Sans&amp;#39;, serif;font-size:14.6667px;text-align:center;"&gt;2886&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;2000mah LiPo&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;2011&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;font-family:Verdana, &amp;#39;Verdana Ref&amp;#39;, Geneva, Tahoma, sans-serif;color:#333333;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&lt;span style="color:#007fac;"&gt;Additional Parts:&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin:0;padding:0px;font-family:Verdana, &amp;#39;Verdana Ref&amp;#39;, Geneva, Tahoma, sans-serif;color:#333333;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="1" class="jiveBorder" style="border:1px solid #000000;width:100%;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Manufacturer Part Number&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Quantity&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="1" style="border:1px solid black;border:1px solid #000000;"&gt;&lt;strong&gt;Haptic Motor&lt;/strong&gt;&lt;/td&gt;&lt;td colspan="1" style="border:1px solid black;border:1px solid #000000;"&gt;JinLong Machinery &lt;span style="font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;"&gt;Z7AL2B1692082&lt;/span&gt;&lt;/td&gt;&lt;td colspan="1" style="border:1px solid black;border:1px solid #000000;"&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Custom PCB&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;OSH Park&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Wrist Brace&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;DejaVu Sans&amp;#39;, serif;font-size:14.6667px;text-align:center;"&gt;Mueller &lt;span style="font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;"&gt;74676862729&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;Velcro&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;DejaVu Sans&amp;#39;, serif;font-size:14.6667px;text-align:center;"&gt;3M &lt;span style="font-size:12.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;"&gt;B00006IC2T&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/project14/wearabletech/w/documents/3611/design-for-a-cause-project-c-o-d-i-help-build-a-superhero-costume-for-cody"&gt;Design for a Cause | Project C.O.D.I:&amp;nbsp; Help Build a Superhero Costume for Cody!&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/project14/wearabletech/w/documents/3633/project-c-o-d-i-overview-current-proof-of-concept-and-next-steps"&gt;Project C.O.D.I. | Overview, Current Proof of Concept, and Next Steps&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;div class="migration-injected-attachments"&gt;&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table style="border:0;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;span class="_se_attachment" id="attid_https://www.element14.com/community/api/core/v3/attachments/262462"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-11/Codi_5F00_Files.zip"&gt;community.element14.com/.../Codi_5F00_Files.zip&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: wearabletechch&lt;/div&gt;
</description></item></channel></rss>