tlogar
Published © GPL3+

Omicron - Arduino Robot Arm

Omicron is a robot arm based on Arduino UNO.

IntermediateShowcase (no instructions)7,027
Omicron - Arduino Robot Arm

Story

Read more

Schematics

Schematic

Code

Omicron code

Arduino
//Made by Tine Logar (2017)

#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

//Starting position of servos
int pos1 = 90;
int pos2 = 23;
int pos3 = 111;
int pos4 = 146;

//Joysticks
int VRx1 = 0;
int VRy1 = 0;
int VRx2 = 0;
int VRy2 = 0;

//Potentiometer
int pot = 0;
int servoSpeed = 0;

//Button
const int button1 = 2;
int state1;
int lastState = LOW;
long lastDebounce = 0;
long delayDebounce = 50;
const int ledPump = 7;
int reading;
int pumpState;
const int relay = 12;

//Switch
const int modeSwitch = 4;
int switchState;

//LEDs
const int ledManual = 8;
const int ledAuto = 13;
const int ledOperation = 3;

const int buttonStart = 11;
int stateStart;

void setup() {

  Serial.begin(9600);

  servo1.attach(5);
  servo2.attach(6);
  servo3.attach(9);
  servo4.attach(10);

  servo1.write(pos1);
  servo2.write(pos2);
  servo3.write(pos3);
  servo4.write(pos4);

  pinMode(button1, INPUT_PULLUP);
  pinMode(ledPump, OUTPUT);
  pinMode(relay, OUTPUT);
  digitalWrite(relay, LOW);

  pinMode(modeSwitch, INPUT_PULLUP);

  pinMode(ledManual, OUTPUT);
  pinMode(ledAuto, OUTPUT);
  pinMode(ledOperation, OUTPUT);

  pinMode(buttonStart, INPUT_PULLUP);

}

void loop() {

  //Reading of inputs
  switchState = digitalRead(modeSwitch);

  pot = analogRead(A4);
  servoSpeed = map(pot, 0, 1023, 100, 12);
  
  VRx1 = analogRead(A1);
  VRx1 = map(VRx1, 0, 1023, 0, 10);
  VRy1 = analogRead(A0);
  VRy1 = map(VRy1, 0, 1023, 10, 0);
  VRx2 = analogRead(A2);
  VRx2 = map(VRx2, 0, 1023, 0, 10);
  VRy2 = analogRead(A3);
  VRy2 = map(VRy2, 0, 1023, 0, 10);

  reading = digitalRead(button1);

  stateStart = digitalRead(buttonStart);

  //Manual mode  
  if (switchState == LOW) {

      digitalWrite(ledManual, HIGH);
      digitalWrite(ledAuto, LOW);
      
    if (VRx1 < 2 && pos1 > 0) {
      (pos1--);
      delay(servoSpeed);
    }
  
    if (VRx1 > 8 && pos1 <180) {
      (pos1++);
     delay(servoSpeed);
    }

    servo1.write(pos1);

    if (VRy1 < 2 && pos2 > 0) {
      (pos2--);
      delay(servoSpeed);
   }

   if (VRy1 > 8 && pos2 <180) {
     (pos2++);
     delay(servoSpeed);
   }

   servo2.write(pos2);

   if (VRx2 < 2 && pos3 > 0) {
     (pos3--);
     delay(servoSpeed);
   }

   if (VRx2 > 8 && pos3 < 180) {
     (pos3++);
      delay(servoSpeed);
    }

   servo3.write(pos3);  

   if (VRy2 < 2 && pos4 > 0) {
     (pos4--);
     delay(servoSpeed);
    }

    if (VRy2 > 8 && pos4 < 180) {
     (pos4++);
      delay(servoSpeed);
   }

    servo4.write(pos4);

  //Turn ON/OFF air pump
    if (reading != lastState) {
      lastDebounce = millis();
    }

    if ((millis() - lastDebounce) > delayDebounce) {
      if (reading != state1) {
       state1 = reading;
       if (state1 == LOW) {
          pumpState = ! pumpState;
       }
     }  
    }

   lastState = reading;

      digitalWrite(ledPump, pumpState);
      digitalWrite(relay, !pumpState);
  }

  //Home position  
  if (stateStart == LOW) {
    
    for (pos1; pos1 < 90; pos1++) {
        delay(servoSpeed);
        servo1.write(pos1);
      }

    for (pos1; pos1 > 90; pos1--) {
        delay(servoSpeed);
        servo1.write(pos1);
      }

    for (pos4; pos4 < 146; pos4++) {
      delay(servoSpeed);
      servo4.write(pos4);
     }

     for (pos4; pos4 > 146; pos4--) {
      delay(servoSpeed);
      servo4.write(pos4);
     }

    for (pos3; pos3 < 111; pos3++) {
      delay(servoSpeed);
      servo3.write(pos3);
    }

    for (pos3; pos3 > 111; pos3--) {
      delay(servoSpeed);
      servo3.write(pos3);
    }

    for (pos2; pos2 < 23; pos2++) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    for (pos2; pos2 > 23; pos2--) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

  }

  //Auto mode
  if (switchState == HIGH && pumpState == LOW) {

    digitalWrite(ledAuto, HIGH);
    digitalWrite(ledManual, LOW);

  //Start operation
    if (stateStart == LOW) {

      digitalWrite(ledOperation, HIGH);

    for (pos1; pos1 < 90; pos1++) {
        delay(servoSpeed);
        servo1.write(pos1);
      }

    for (pos1; pos1 > 90; pos1--) {
        delay(servoSpeed);
        servo1.write(pos1);
      }

    for (pos4; pos4 < 146; pos4++) {
      delay(servoSpeed);
      servo4.write(pos4);
     }

     for (pos4; pos4 > 146; pos4--) {
      delay(servoSpeed);
      servo4.write(pos4);
     }

    for (pos3; pos3 < 111; pos3++) {
      delay(servoSpeed);
      servo3.write(pos3);
    }

    for (pos3; pos3 > 111; pos3--) {
      delay(servoSpeed);
      servo3.write(pos3);
    }

    for (pos2; pos2 < 23; pos2++) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    for (pos2; pos2 > 23; pos2--) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    for (pos2; pos2 < 35; pos2++) {
      delay(servoSpeed);
      servo2.write(pos2);
    }
    
    for (pos1; pos1 > 60; pos1--) {
      delay(servoSpeed);
      servo1.write(pos1);
    }

    for (pos2; pos2 > 20; pos2--) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    delay(500);
    digitalWrite(relay, LOW);
    digitalWrite(ledPump, HIGH);
    delay(1000);

    for (pos2; pos2 < 35; pos2++) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    for (pos1; pos1 < 170; pos1++) {
      delay(servoSpeed);
      servo1.write(pos1);
    }

    for (pos2; pos2 < 80; pos2++) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    for (pos3; pos3 > 75; pos3--) {
      delay(servoSpeed);
      servo3.write(pos3);
    }

    for (pos4; pos4 > 70; pos4--) {
      delay(servoSpeed);
      servo4.write(pos4);
     }

     for (pos1; pos1 > 15; pos1--) {
      delay(servoSpeed);
      servo1.write(pos1);
    }

    for (pos4; pos4 < 146; pos4++) {
      delay(servoSpeed);
      servo4.write(pos4);
     }

     for (pos3; pos3 < 111; pos3++) {
      delay(servoSpeed);
      servo3.write(pos3);
    }

    for (pos1; pos1 < 120; pos1++) {
      delay(servoSpeed);
      servo1.write(pos1);
    }

    for (pos2; pos2 > 20; pos2--) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    delay(1000);
    digitalWrite(relay, HIGH);
    digitalWrite(ledPump, LOW);
    delay(500); 

    for (pos2; pos2 <35; pos2++) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

    for (pos1; pos1 > 90; pos1--) {
      delay(servoSpeed);
      servo1.write(pos1);
    }

    for(pos2; pos2 > 23; pos2--) {
      delay(servoSpeed);
      servo2.write(pos2);
    }

   digitalWrite(ledOperation, LOW); 
     
  }
 }
}

//Made by: Tine Logar (2017)

Credits

tlogar

tlogar

0 projects • 1 follower

Comments