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!

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

Give feedback

Comments

Similar projects you might like

The composting friend
Intermediate
  • 543
  • 33

Full instructions

Our goal is to make composting easier to use and to maintain.

An Arduino-Powered Easter Egg Printer
Intermediate
  • 828
  • 13

Have you started dyeing Easter eggs yet? We at ELEKS have created a smart Egg Printer powered by Arduino Uno R3.

DIGITAL BASCULE WITH ARDUINO UNO AND FSR SENSOR
Intermediate
  • 256
  • 1

Protip

The main goal is to make a practical digital bascule and using Arduino UNO board and FSR Sensor.

Automatic Fear 1.0
Intermediate
  • 211
  • 5

Full instructions

A device capable of frightening my sister and with compatibility with other members of the family

Arduino Addons : Battery Level Indicator
Intermediate
  • 1,447
  • 19

A RealTime Battery Indicator For Your Project Without Extra Components Or Using Any Analog I/Os

End-Effector and Control Logic for Robot
Intermediate
  • 2,579
  • 22

For my thesis, I have developed the control system and end-effector for a robot, easily implementable and economic.

ProjectsCommunitiesContestsLiveAppsBetaFree StoreBlogAdd projectSign up / Login
Respect project
Feedback