Servo Arm แขนหุ่นยนต์แบบตั้งโปรแกรมได้

#include <Servo.h>

Servo servo1; //Servos
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
const int LED1 = 0; //LEDs
const int LED2 = 1;
const int LED3 = 2;
const int LED4 = 3;
const int LED5 = 4;

const int button1 = 5; //Buttons
const int button2 = 6;

int button1Presses = 0; //Button values
boolean button2Pressed = false;

const int pot1 = A0; //Potentimeters
const int pot2 = A1; 
const int pot3 = A2;
const int pot4 = A3;
const int pot5 = A4;
const int pot6 = A5;
int pot1Val; //Potentimeter values
int pot2Val;
int pot3Val;
int pot4Val; 
int pot5Val;
int pot6Val;
int pot1Angle;
int pot2Angle;
int pot3Angle;
int pot4Angle;
int pot5Angle;
int pot6Angle;
int servo1PosSaves[] = {1,1,1,1,1}; //บันทึกตำแหน่ง
int servo2PosSaves[] = {1,1,1,1,1};
int servo3PosSaves[] = {1,1,1,1,1};
int servo4PosSaves[] = {1,1,1,1,1}; 
int servo5PosSaves[] = {1,1,1,1,1};
int servo6PosSaves[] = {1,1,1,1,1};
void setup() {
  servo1.attach(8); // Set up everything and will run once; attach servos and define the pin modes
  servo2.attach(9);
  servo3.attach(10);
  servo4.attach(11); // Set up everything and will run once; attach servos and define the pin modes
  servo5.attach(12);
  servo6.attach(13);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);

  Serial.begin(9600);
}

void loop() {
  pot1Val = analogRead(pot1); // อ่านค่าจากโพเทนทิมิเตอร์และเก็บไว้...
  pot1Angle = map(pot1Val, 0, 1023, 0, 179); // ค่าจากโพเทนชิโอมิเตอร์กับค่าที่เซอร์โวสามารถใช้และเก็บไว้ใช้ในภายหลัง
  pot2Val = analogRead(pot2); 
  pot2Angle = map(pot2Val, 0, 1023, 0, 179);
  pot3Val = analogRead(pot3);
  pot3Angle = map(pot3Val, 0, 1023, 0, 179);
  pot4Val = analogRead(pot4); 
  pot4Angle = map(pot4Val, 0, 1023, 0, 179); // 
  pot5Val = analogRead(pot5); 
  pot5Angle = map(pot5Val, 0, 1023, 0, 179);
  pot6Val = analogRead(pot6);
  pot6Angle = map(pot6Val, 0, 1023, 0, 179);
  servo1.write(pot1Angle); // จะทำให้เซอร์โวย้ายไปที่มุมที่แมปไว้
  servo2.write(pot2Angle);
  servo3.write(pot3Angle);
  servo4.write(pot4Angle); 
  servo5.write(pot5Angle);
  servo6.write(pot6Angle);
  if(digitalRead(button1) == HIGH){ //นี่จะตรวจสอบว่ามีการกด button1 กี่ครั้งและบันทึกตำแหน่งลงในอาร์เรย์โดยขึ้นอยู่กับจำนวนครั้งที่กด switch / case ทำงานเหมือนคำสั่ง if
    button1Presses++;
    switch(button1Presses){
      case 1:
        servo1PosSaves[0] = pot1Angle;
        servo2PosSaves[0] = pot2Angle;
        servo3PosSaves[0] = pot3Angle;
        servo4PosSaves[0] = pot4Angle;
        servo5PosSaves[0] = pot5Angle;
        servo6PosSaves[0] = pot6Angle;
        digitalWrite(LED1, HIGH);
        Serial.println("Pos 1 Saved");
        break;
      case 2:
         servo1PosSaves[1] = pot1Angle;
         servo2PosSaves[1] = pot2Angle;
         servo3PosSaves[1] = pot3Angle;
         servo4PosSaves[1] = pot4Angle;
         servo5PosSaves[1] = pot5Angle;
         servo6PosSaves[1] = pot6Angle;
         digitalWrite(LED2, HIGH);
         Serial.println("Pos 2 Saved");
         break;
      case 3:
         servo1PosSaves[2] = pot1Angle;
         servo2PosSaves[2] = pot2Angle;
         servo3PosSaves[2] = pot3Angle;
         servo4PosSaves[2] = pot4Angle;
        servo5PosSaves[2] = pot5Angle;
        servo6PosSaves[2] = pot6Angle;
         digitalWrite(LED3, HIGH);
         Serial.println("Pos 3 Saved");
         break;
       case 4:
         servo1PosSaves[3] = pot1Angle;
         servo2PosSaves[3] = pot2Angle;
         servo3PosSaves[3] = pot3Angle;
         servo4PosSaves[3] = pot4Angle;
         servo5PosSaves[3] = pot5Angle;
         servo6PosSaves[3] = pot6Angle;
         digitalWrite(LED4, HIGH);
         Serial.println("Pos 4 Saved");
         break;
       case 5:
         servo1PosSaves[4] = pot1Angle;
         servo2PosSaves[4] = pot2Angle;
         servo3PosSaves[4] = pot3Angle;
         servo4PosSaves[4] = pot4Angle;
         servo5PosSaves[4] = pot5Angle;
         servo6PosSaves[4] = pot6Angle;
         digitalWrite(LED5, HIGH);
         Serial.println("Pos 5 Saved");
         break;
    }
  }

  if(digitalRead(button2) == HIGH){ // Pretty self-explnatory here
    button2Pressed = true;   
  }
  
  if(button2Pressed){ // หาก 2 กดเป็นจริงเซอร์โวจะทำงานแม้ว่าตำแหน่งที่บันทึกไว้ทั้งหมด
    for(int i = 0; i < 5; i++){
        servo1.write(servo1PosSaves[i]);
        servo2.write(servo2PosSaves[i]);
        servo3.write(servo3PosSaves[i]);
        servo4.write(servo4PosSaves[i]);
        servo5.write(servo5PosSaves[i]);
        servo6.write(servo6PosSaves[i]);
        Serial.println(" potentimeter Angles: ");
        Serial.println(servo1PosSaves[i]);
        Serial.println(servo2PosSaves[i]);
        Serial.println(servo3PosSaves[i]);
        Serial.println(servo4PosSaves[i]);
        Serial.println(servo5PosSaves[i]);
        Serial.println(servo6PosSaves[i]);
        delay(1050);
      }
  }
  delay(300);
} 

ใส่รายละเอียดหน่อยครับ

  1. จะทำอะไร
  2. ติดปัญหาอะไร

ต้อนนี้ทำได้แค่ 7 สเต็ปครับ อยากให้ ได้ประมาณ 9 - 10 สเต็ป ครับ และแขนมีอาการ เหมือนไฟไม่พอเวลาก้มหยิบของจะลงไปกระแทกแรงมากพอสมควรเลยครับ

#include <Servo.h>

Servo servo1; //Servos
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
const int LED1 = 2; //LEDs
const int LED2 = 3;
const int LED3 = 4;
const int LED4 = 5;


const int button1 = 6; //Buttons
const int button2 = 7;

int button1Presses = 0; //Button values
boolean button2Pressed = false;

const int pot1 = A0; //Potentimeters
const int pot2 = A1; 
const int pot3 = A2;
const int pot4 = A3;
const int pot5 = A4;
const int pot6 = A5;
int pot1Val; //Potentimeter values
int pot2Val;
int pot3Val;
int pot4Val; 
int pot5Val;
int pot6Val;
int pot1Angle;
int pot2Angle;
int pot3Angle;
int pot4Angle;
int pot5Angle;
int pot6Angle;
int servo1PosSaves[] = {1,1,1,1,1,1,1}; //บันทึกตำแหน่ง
int servo2PosSaves[] = {1,1,1,1,1,1,1};
int servo3PosSaves[] = {1,1,1,1,1,1,1};
int servo4PosSaves[] = {1,1,1,1,1,1,1}; 
int servo5PosSaves[] = {1,1,1,1,1,1,1};
int servo6PosSaves[] = {1,1,1,1,1,1,1};
void setup() {
  servo1.attach(8); // Set up everything and will run once; attach servos and define the pin modes
  servo2.attach(9);
  servo3.attach(10);
  servo4.attach(11); // Set up everything and will run once; attach servos and define the pin modes
  servo5.attach(12);
  servo6.attach(13);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);

  Serial.begin(9600);
}

void loop() {
  pot1Val = analogRead(pot1); // อ่านค่าจากโพเทนทิมิเตอร์และเก็บไว้...
  pot1Angle = map(pot1Val, 0, 1023, 30, 150); // ค่าจากโพเทนชิโอมิเตอร์กับค่าที่เซอร์โวสามารถใช้และเก็บไว้ใช้ในภายหลัง
  pot2Val = analogRead(pot2); 
  pot2Angle = map(pot2Val, 0, 1023, 60, 110);
  pot3Val = analogRead(pot3);
  pot3Angle = map(pot3Val, 0, 1023, 20, 100);
  pot4Val = analogRead(pot4); 
  pot4Angle = map(pot4Val, 0, 1023, 30, 95); // 
  pot5Val = analogRead(pot5); 
  pot5Angle = map(pot5Val, 0, 1023, 40, 130);
  pot6Val = analogRead(pot6);
  pot6Angle = map(pot6Val, 0, 1023, 90, 160);
  servo1.write(pot1Angle); // จะทำให้เซอร์โวย้ายไปที่มุมที่แมปไว้
  servo2.write(pot2Angle);
  servo3.write(pot3Angle);
  servo4.write(pot4Angle); 
  servo5.write(pot5Angle);
  servo6.write(pot6Angle);
  if(digitalRead(button1) == HIGH){ //นี่จะตรวจสอบว่ามีการกด button1 กี่ครั้งและบันทึกตำแหน่งลงในอาร์เรย์โดยขึ้นอยู่กับจำนวนครั้งที่กด switch / case ทำงานเหมือนคำสั่ง if
    button1Presses++;
    switch(button1Presses){
      case 1:
        servo1PosSaves[0] = pot1Angle;
        servo2PosSaves[0] = pot2Angle;
        servo3PosSaves[0] = pot3Angle;
        servo4PosSaves[0] = pot4Angle;
        servo5PosSaves[0] = pot5Angle;
        servo6PosSaves[0] = pot6Angle;
        digitalWrite(LED1, HIGH);
        Serial.println("Pos 1 Saved");
        break;
      case 2:
         servo1PosSaves[1] = pot1Angle;
         servo2PosSaves[1] = pot2Angle;
         servo3PosSaves[1] = pot3Angle;
         servo4PosSaves[1] = pot4Angle;
         servo5PosSaves[1] = pot5Angle;
         servo6PosSaves[1] = pot6Angle;
         digitalWrite(LED2, HIGH);
         Serial.println("Pos 2 Saved");
         break;
      case 3:
         servo1PosSaves[2] = pot1Angle;
         servo2PosSaves[2] = pot2Angle;
         servo3PosSaves[2] = pot3Angle;
         servo4PosSaves[2] = pot4Angle;
        servo5PosSaves[2] = pot5Angle;
        servo6PosSaves[2] = pot6Angle;
         digitalWrite(LED3, HIGH);
         Serial.println("Pos 3 Saved");
         break;
       case 4:
         servo1PosSaves[3] = pot1Angle;
         servo2PosSaves[3] = pot2Angle;
         servo3PosSaves[3] = pot3Angle;
         servo4PosSaves[3] = pot4Angle;
         servo5PosSaves[3] = pot5Angle;
         servo6PosSaves[3] = pot6Angle;
         digitalWrite(LED4, HIGH);
         Serial.println("Pos 4 Saved");
         break;
       case 5:
         servo1PosSaves[4] = pot1Angle;
         servo2PosSaves[4] = pot2Angle;
         servo3PosSaves[4] = pot3Angle;
         servo4PosSaves[4] = pot4Angle;
         servo5PosSaves[4] = pot5Angle;
         servo6PosSaves[4] = pot6Angle;
         digitalWrite(LED4, LOW);
         Serial.println("Pos 5 Saved");
         break;
          case 6:
         servo1PosSaves[5] = pot1Angle;
         servo2PosSaves[5] = pot2Angle;
         servo3PosSaves[5] = pot3Angle;
         servo4PosSaves[5] = pot4Angle;
         servo5PosSaves[5] = pot5Angle;
         servo6PosSaves[5] = pot6Angle;
         digitalWrite(LED3, LOW);
         Serial.println("Pos 6 Saved");
         break;
         case 7:
         servo1PosSaves[6] = pot1Angle;
         servo2PosSaves[6] = pot2Angle;
         servo3PosSaves[6] = pot3Angle;
         servo4PosSaves[6] = pot4Angle;
         servo5PosSaves[6] = pot5Angle;
         servo6PosSaves[6] = pot6Angle;
         digitalWrite(LED2, LOW);
         Serial.println("Pos 7 Saved");
         break;
    }
  }

  if(digitalRead(button2) == HIGH){ // Pretty self-explnatory here
    button2Pressed = true;   
  }
  
  if(button2Pressed){ // หาก 2 กดเป็นจริงเซอร์โวจะทำงานแม้ว่าตำแหน่งที่บันทึกไว้ทั้งหมด
    for(int i = 0; i < 7; i++){
        servo1.write(servo1PosSaves[i]);
        servo2.write(servo2PosSaves[i]);
        servo3.write(servo3PosSaves[i]);
        servo4.write(servo4PosSaves[i]);
        servo5.write(servo5PosSaves[i]);
        servo6.write(servo6PosSaves[i]);
        Serial.println(" potentimeter Angles: ");
        Serial.println(servo1PosSaves[i]);
        Serial.println(servo2PosSaves[i]);
        Serial.println(servo3PosSaves[i]);
        Serial.println(servo4PosSaves[i]);
        Serial.println(servo5PosSaves[i]);
        Serial.println(servo6PosSaves[i]);
        delay(1500);
      }
  }
  delay(500);
} 

ถ่ายวีดีโอ มาดูหน่อยครับ

ขอดูตอนมันทำงานตอนนี้หน่อยมันทำงานแบบไหน มีตัง ฮาร์ดแวร์รึยังครับ