星期日, 8月 08, 2010

EMG Signals Drive Servo



This simple project is what I really want to do before. I used Biopac system to amplify my EMG signals and acquired these signals by NI USB-6009.

##CONTINUE##
Originally, I want to use serial communication to send the control signals to arduino, but I don't know how to send the unsigned long integer in labview instead of string. As the result of that, I used USB-6009 to generate analog output to arduino.


Every hardware thing is ready, next is to write the program. As I mentioned before, I used labview to acquire EMG signals, so I just acquired the signals, calculated by RMS, and transformed the number into the range 0-5 to have the USB-6009 generate analog output voltage between 0 and 5.


The arduino program is also very simple. It just uses analogInput to receive the voltage from USB-6009 and controls the servo by the voltage value.


However, as you can see, the control is not good. I think this is the key point that I need to establish a good control strategy in the future.

星期六, 7月 03, 2010

Arduino + Processing



I made it to control my robotic arm originally. However, it's bad looking, so I used wii nunckuk instead.

##CONTINUE##
Yesterday, I was thinking how I can do to simply model hand motion and display in computer screen. I am not good at 3D painting, so I used RGB cube that I saw some people used it to demonstrate some programs. You can also find the processing code from the above link.

In this simple project, I used two potentiometers to control two axises. I am sorry that I don't have any idea to use the flex sensor, but I pasted it before, so I did not take it out.



Here is the code in arduino board:
int val_1;  //flex sensor
int val_2;  //middle potentiometer
int val_3;  //bottom potentiometer

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  val_1=analogRead(0);
  val_2=analogRead(1);
  val_3=analogRead(2);
  
  val_2=map(val_2,340,1023,0,360);
  val_3=map(val_3,0,1023,640,0);
  
  To2bytes(val_2);
  To2bytes(val_3);
  
  /*
  Serial.print(val_1);
  Serial.print("\t");
  Serial.print(val_2);
  Serial.print("\t");
  Serial.println(val_3);
  */
  delay(200);
}

void To2bytes(unsigned int inX){
  byte H_Byte;
  byte L_Byte;
 // int a=B01111111
  H_Byte=inX>>8;  
  L_Byte=(inX%256);
  Serial.print(H_Byte,BYTE);
  Serial.print(L_Byte,BYTE);
}

And I only add some codes in RGB cube code.
In void setup

println(Serial.list());// List all the available serial ports
  myPort = new Serial(this, Serial.list()[1], 9600); 
  
  //You have to import serial class before.
  //import processing.serial.*;
  //Serial myPort;  // The serial port

In void draw()

int[] inByte = new int[4];
  while (myPort.available() == 4) {  
    inByte[0]= myPort.read();
    inByte[1]= myPort.read();
    inByte[2]= myPort.read();
    inByte[3]= myPort.read();
    inY=(inByte[0]<<8)+inByte[1];
    inX=(inByte[2]<<8)+inByte[3];
     print("X" +inX);
     print("\t");
     println("Y" +inY);
  }

星期一, 4月 26, 2010

New robotic arm controlled by wii nunchuk

Continue by the Robotic arm controlled by wii nunchuk. I changed the material corrugated to acrylic, so it must be more consolidated. Also, I saw some videos on the youtube about grippers and tried to design my Robot Gripper.

星期六, 4月 10, 2010

Simple codes to build a pyramid

Someone asked me how to write a program to build "*" pyramid when reading this article. However, I didn't learn java since that time, so I wrote some simple codes in C language. The concept is very simple because it can be done by using nest loop.

##CONTINUE##
Here is the code to build "*" pyramid.
#include 
int main()
{
    int i,j;
    for (j=1; j<=5; j++)
    {
        for (i=1; i<=5; i++)
        {
            if (i<5-j+1)
            {
                printf(" ");
            }
            else
            {
                printf("* ");
            }
        }
        printf("\n");
    }

    return 0;
}

You can also arrange the "*" on the left side.
#include 
int main()
{
    int i,j;
    for (j=1; j<=10; j++)
    {
        for (i=1; i<=10; i++)
        {
            if (i<10-j+1)
            {
                printf("  ");
            }
            else
            {
                printf("* ");
            }
        }
        printf("\n");
    }

    return 0;
}