星期五, 9月 17, 2010
星期日, 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.
You can also arrange the "*" on the left side.
##CONTINUE##
Here is the code to build "*" pyramid.
#includeint 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.
#includeint 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; }
訂閱:
文章 (Atom)




