Semelle connectee

De Kernel Fablab Lannion

La semelle connectée est d’abord constituée d’une semelle imprimée par une TOBECAV1 en PLA semi-souple ORBI-TECH selon un modèle paramétrique déposé sur thingiverse (File:IMG_20151016_111925_626.jpg http://www.thingiverse.com/thing:375428). Caractéristique principale de la hauteur de pied à relever, la mesure selon l’axe Z entre le plateau et le sommet de la voute plantaire est comblée par du matériau support formant une structure allégée dans laquelle est taillée à la dremel le logement des différents composants:
IMG 201608091.jpgIMG 20160809 1.jpg

-une battery li-on 3,7V

-2 résistances (10Kohms)

-2 capteurs FSR sensitronics

-un arduino pro mini

-un esp8266 avec le firmware italien uPanel

Le capteur FSR Sensitronics a été sélectionné et testé lors de séances ENUMEA (ex club REIA) pour son prix (6$), sa souplesse d'utilisation et son potentiel de compatibilité biomecanique. D’autres capteurs embarqués ont été abordés avec l'expertise notamment de Christophe Onillon dans la recherche de partenariat avec des fondeurs. D’abord envisagé avec TI (CC2650) sous l’impulsion de la Cité de l’Objet Connecté à Angers, c’est avec ST que la relation s’affirme dans le choix technologique autour du module STEVAL WESU. IMG 20170127 sandale.jpg

sketch podometre

String Msg;
char ChNumbers = 1;            // Number of enabled channels
char ChScanning = 0;           // Channel to scan

int ChValues[4] = {0,0,0,0};   // Array of channel values
long LastMeasTime = 0;         // Time of last measurement

void setup() {

  pinMode(13, OUTPUT);
  Serial.begin(57600);         // Initialise serial
  delay(3000);                 // Let's the module start
  Serial.println("");            // Dismiss partial sent messages
  Serial.println("$PING 200");   // Enable real-time communication
  SendSplashScreen();          // Send Application Splash Screen
  
}

void SendSplashScreen()        // Send the splash screen cointaining the Start button
{
   Serial.print("\n$P:D!g5;{^*30%80,100!g3{ht2,000,1*7T#180:&#956Panel;}/3{*4T#888:Mobile Interactive;_T#888:Universal Panel;}");
   Serial.println("_{*10T#FFF:Podometre Testeur;_*8T#3AA:P.Pinault BIOZOPIX;_I1.762%50;}}/20*10B0%20,10r30g0.1#FFFfb:PODO;");  
      Serial.println("");                  // Terminate the panel definition

}

void SendPanel(char NumberOfChannels)
{
   char x; 
   char y;
   // Send the definition of the Panel header and define the macro to display channels
   Serial.print("$P:D!g1;{^%100,20!g8|%33B1%80:FSR+;|%33B2%80:FSR-;|%33B3%80:Sortie;}");
   Serial.print("K1:{p8*15%87!g8_T:FSR?= ;M??fb:0.00;T: N;A??G%45:5.10:5.11:0::0:0.25;|T:BIOZOPIX;}$");
   
   for(x=0; x<NumberOfChannels; x++)    // Recall the channel Macro to display enabled channel sub-panel
   {
     Serial.print("J1(");               // Macro call keyword
     Serial.print(x,DEC);     // Pass to the macro the number of channel
  //   Serial.print(y,DEC);     // Pass to the macro the number of channel
     Serial.print(")");                 // Terminate the Macro call
   } 
  
   Serial.println("");                  // Terminate the panel definition
    
   for(x=0; x<NumberOfChannels; x++) DisplayChannel(x);  // Update the channels' value
   
}

void DisplayChannel(char c)    // Update the channel value
{
  
    Serial.print("#A"); Serial.print(c,DEC); Serial.print(":");  // Update the analog bar value
    Serial.println(ChValues[c]);                                 // with the acquired value (LSB)
    
  //  float v = ((float) ChValues[c]) / 1024.0 * 5.0;              // Transfor the LSB into voltage
    float w = ((float) ChValues[c]) / 1024.0 * 5.0*300/2.65;
 //   Serial.print("#M"); Serial.print(c,DEC);                     // Update the channel value message
    analogWrite(13, int(w/2));    
 //   Serial.println(v);                                           // with the acquired value (V)
    Serial.print("#M"); Serial.print(c,DEC);                     // Update the channel value message
    Serial.println(w);                                           // with the acquired value (V)
  
}


void loop() {
  
  int c;
  while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
  if (c == '\n')                                       // is message complete?
  { 
    
    if (Msg.substring(0,4).equals("#B3P")) SendSplashScreen();    // has Exit key been pressed? Splash screen!
    if (Msg.substring(0,4).equals("#B0P")) SendPanel(ChNumbers);  // has Start key been pressed? Display Panel
    
    if (Msg.substring(0,4).equals("#B1P"))     // has the channel ADD button been pressed?
      {  
        ChNumbers++;                           // Increase the number of channels
        if (ChNumbers > 4) ChNumbers = 4;      // up to 4
        SendPanel(ChNumbers);                  // Send the new panel
      }
      
    if (Msg.substring(0,4).equals("#B2P"))     // has the channel DELETE button been pressed?
      {  
        ChNumbers--;                           // Decrease the number of channels
        if (ChNumbers < 1) ChNumbers = 1;      // down to 1
        SendPanel(ChNumbers);                  // Send the new panel
      }
         
    Msg = "";
  } 
  
  if (millis() - LastMeasTime > 100)                      // is time for a new measurement? 
  {
    if (ChScanning >= ChNumbers) ChScanning = 0;         // if all channels already scanned, restart from 0
    ChValues[ChScanning] = analogRead(A0+ChScanning);    // Read analog value of selected channel
    DisplayChannel(ChScanning++);                        // Update panel and move to the next channel
    LastMeasTime = millis();                             // save the time of this measurement
  }

 
  delay(150); 
   Serial.println("");                  // Terminate the panel definition


}

Test in situ

La restitution des informations en direct de l'esp sur tablette via l'appli μpanel ou via web: Screenshot 2017-01-27-13-26-44.pngScreenshot 2017-01-27-09-41-19.png Screenshot 2017-01-27-13-25-56.png