Things used in this project

Hardware components:
Ard nano
Arduino Nano R3
any arduino is okay, im thinking on using tinyduino
×1
mpc41010
digital potenciometer
×1
09269 01
SparkFun Triple Axis Accelerometer Breakout - ADXL335
any analogoutput accelerometer is okay
×1
stereo audio jack 6,5 mm female adapter
×1
stereo audio jack 6,5 mm cable
×1
09264 1
RGB Diffused Common Cathode
just for fun, no needed
×1
Software apps and online services:
Ide web
Arduino IDE

Schematics

SCHEME ANKLE EXPRESSION PEDAL
Guitar%20pedal

Code

MAIN THINGArduino
main raw program, the rgb led or any pwm signal is catastrophic fro the accelerometer readings (noise)
#include <SPI.h>  
#define debug //comment this line if you´re not gonna use the serial data with the arduino ide

#define CS 10 //chipselect

#define accelerometerX A0//analogpins for the accelerometer
#define accelerometerY A1
#define accelerometerZ A2

#define RED 6 //rgb pins
#define GREEN 3
#define BLUE 5

//MCP41010 chip´s connection
//        39ohms per step of the  
//CS  10              U      vcc
//SCK 13 serial clock        PBO--UPRESISTOR
//SI  11 serial imput        PWO  INRESISTOR
//gnd                        PAO--BOTTOMRESISTOR




int datarray[18]={0,0,0,0,0,0,1023,1023,1023,0,0,0,0,0,0};
int smoothingarray[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int rgb[3];
int i=0,chipvalue=0;
int ResistorValue=0;
void setup() {
//
//pinMode (GREEN, OUTPUT);//GREEN RGB (PWM)
//pinMode (BLUE, OUTPUT);//BLUE
//pinMode (RED, OUTPUT);//RED  
//digitalWrite(GREEN, HIGH);//setting the led off at the begining
//digitalWrite (BLUE, HIGH);//
//digitalWrite (RED,  HIGH);//

pinMode (CS, OUTPUT);//chipselect for the  MCP41010 chip
pinMode (13, OUTPUT);//things are happening led 
pinMode (accelerometerX, INPUT);//acelerometer´s inputs
pinMode (accelerometerY, INPUT);//
pinMode (accelerometerZ, INPUT);//
  SPI.begin(); 
  MCP41010Write(0);//init value horizontal foot
  
#ifdef debug
Serial.begin(9600);
#endif
}

void loop() {
datarray[0]=analogRead(accelerometerX);
datarray[1]=analogRead(accelerometerY);
datarray[2]=analogRead(accelerometerZ);

comparemaxmin(datarray);

detectRange(datarray);

ResistorValue=map(datarray[datarray[15]],datarray[datarray[15]+6]+20,datarray[datarray[15]+3]-10,0,255);//+20 to the min and -10 to the max for preventing unreachable edges

chipvalue =constrain(ResistorValue,0,255);

MCP41010Write(smoothing(chipvalue));

//  //map(value, fromLow, fromHigh, toLow, toHigh)
// for(i=0;i<=2;i++){
//  rgb[i]=map(datarray[i],datarray[i+6],datarray[i+3],0,255);
// }
////analogWrite(GREEN, rgb[0]);//EL LED DA PROBLEMAS DE LECTURA ruido/////////////////////7
////analogWrite (BLUE, rgb[1]);//
////analogWrite (RED,  rgb[2]);//



#ifdef debug
      Serial.print("//RawReadings:  ");
      Serial.print(datarray[0]);
      Serial.print(" ");
      Serial.print(datarray[1]);
      Serial.print(" ");
      Serial.print(datarray[2]);
      
      Serial.print("     /max ");
      Serial.print(datarray[3]);
      Serial.print(" ");
      Serial.print(datarray[4]);
      Serial.print(" ");
      Serial.print(datarray[5]);

      Serial.print(" /min ");
      Serial.print(datarray[6]);
      Serial.print(" ");
      Serial.print(datarray[7]);
      Serial.print(" ");
      Serial.print(datarray[8]);

      Serial.print("    //GAP :");
      Serial.print(datarray[9]);
      Serial.print(" ");
      Serial.print(datarray[10]);
      Serial.print(" ");
      Serial.print(datarray[11]);

//      Serial.print("/?? ");
//      Serial.print(datarray[12]);
//      Serial.print(" ");
//      Serial.print(datarray[13]);
//      Serial.print(" ");
//      Serial.print(datarray[14]);

      Serial.print("  //axis choose ");
      Serial.print(datarray[15]);
      
      Serial.print("       //chip value ");
      Serial.print(chipvalue);
      
      Serial.println();
#endif
  delay(100);//delay for stability
}






void comparemaxmin(int datarray[])
{
  for(i=0;i<=2;i++)
datarray[i+3]=max(datarray[i],datarray[i+3]);

  for(i=0;i<=2;i++)
datarray[i+6]=min(datarray[i],datarray[i+6]);

}


void detectRange(int datarray[18])
{
  for(i=0;i<=2;i++)
  {
datarray[i+9]=abs(abs(datarray[i+3])-abs(datarray[i+6]));
  }
if(datarray[9]>=datarray[10]&&datarray[9]>=datarray[11])//choosing the axis with the wider range
datarray[15]=0;
if(datarray[10]>=datarray[9]&&datarray[10]>=datarray[11])
datarray[15]=1;
if(datarray[11]>=datarray[9]&&datarray[11]>=datarray[10])
datarray[15]=2;
}

void MCP41010Write(byte value) //speaking protocol with the mcp chip
{
  // Note that the integer value passed to this subroutine
  // is cast to a byte
  
  digitalWrite(CS,LOW);
  SPI.transfer(B00010001); // This tells the chip to set the pot
  SPI.transfer(value);     // This tells it the pot position
  digitalWrite(CS,HIGH); 
}

int smoothing(int data){
int result,j;

for(j=0;j<=14;j++){
  smoothingarray[j] =  smoothingarray[j+1]; 
}
smoothingarray[14]= data;

result=(smoothingarray[0]+smoothingarray[1]+smoothingarray[2]+smoothingarray[3]+smoothingarray[4])/5;
constrain(result,0,255);
return result;
}

Credits

Ltcqjr9usazbcjumiyay
javier muñoz sáez

Electronic engineer, musician and mad scientist

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Personal Healthcare Assistant PHA
Intermediate
  • 2,532
  • 119

Full instructions

Wearable for monitoring the health condition of patients who have suffered or are in risk of having a cardiac arrest.

Snacks Vending Machine powered by Arduino
Intermediate
  • 1,551
  • 26

Full instructions

Create a Vending Machine, powered by Arduino microcontroller, using "any cheap and easy to get" components available in local store.

Arduino Altair 8800 simulator
Intermediate
  • 6,601
  • 37

Full instructions

Ever wanted to play with the computer that sparked the personal computer age but don't have the cash to buy an Altair? Build your own!

Twitter Smart Home
Intermediate
  • 525
  • 7

Full instructions

Tweet to your timeline and control anything using a Raspberry Pi, Arduino, and the Twitter API.

Smart and Safe Cabinets
Intermediate
  • 485
  • 10

Full instructions

With 41% of poisonings happening to children under 4, more needs to be done. We use Amazon Alexa and Intel IoT to lock and unlock cabinets.

Smart and Safe Cabinets

Magic Smoke Replacement Team

Swimming Pool Lap Counter
Intermediate
  • 1,648
  • 15

I love swimming, but I tend to lose count of the laps, so I made this lap counter with an Arduino.

ProjectsCommunitiesContestsLiveJobsFree StoreBlogAdd projectSign up / Login
Respect project