ProjectsRobot armCode

Robot arm code

The Arduino sketch behind the arm, shown as I wrote it. It is still a work in progress.

Download robot-arm.ino

// Robot Arm Code// By Taj Nicholas// https://tajnicholas.wixsite.com/tajnicholas// https://www.youtube.com/@layered_mechtronic​// -------------------------- LIBARIES --------------------  #include <LiquidCrystal_I2C.h>  #include <Wire.h>  #include <Servo.h>  LiquidCrystal_I2C lcd(0x27, 16, 2); // Change the I2C address if needed​// ---------------------------- Defining Stuff --------------------------​  // Define Servo Pins{    #define Micro 2    #define Big_Arm 3    #define Base 4    #define Grabber_Rotate 5    #define Grabber 6    #define Ball_Feeder 9​  // Create Servo objects    Servo MicroServo;    Servo Big_ArmServo;    Servo BaseServo;    Servo Grabber_RotateServo;    Servo GrabberServo;    Servo Ball_FeederServo;​  // Define Stepper Pins    #define Stepper_Direction 7    #define Stepper_Pulse 8    int b = 0;  //Defining b equals to 0​  // Define RGB LED PINS    #define RGB_LED_RED 10    #define RGB_LED_GREEN 11    #define RGB_LED_BLUE 12​  // Define the LDR Sensor    int a = 0;  //Defining a equals to 0    const int Colour = A0;  // Rename A1 as Colour​  //Action for the stepper Motor Steps​    void repeatAction(int b) {      for (int i = 0; i < b; i++) {       // Code to repeat       digitalWrite(Stepper_Pulse, HIGH);       delay(60);        digitalWrite(Stepper_Pulse, LOW);       delay(60);     }​  //Buttons  #define STOP 0  #define START 1  }​//​void setup() { Serial.begin(9600);​  //​  // ------ SERVOS  // Attach the servos to their respective pins    MicroServo.attach(Micro);    Big_ArmServo.attach(Big_Arm);    BaseServo.attach(Base);    Grabber_RotateServo.attach(Grabber_Rotate);    GrabberServo.attach(Grabber);    Ball_FeederServo.attach(Ball_Feeder);​  //​  // ------- RGB LED --------  //RGB LED  pinMode(RGB_LED_RED, OUTPUT);   pinMode(RGB_LED_BLUE, OUTPUT);  pinMode(RGB_LED_GREEN, OUTPUT);  digitalWrite(RGB_LED_RED, HIGH);​  // ------- COLOUR SENSOR --  int sensorValue = analogRead(Colour);  // Read value from A1 (0-1023)  pinMode(Colour, INPUT);       // Use A1 as a digital input​  // ------- LCD SCREEN    //LCD SCREEN    lcd.init(); // Initialize the LCD    lcd.backlight(); // Turn on the backlight    lcd.setCursor(1, 0);    lcd.print("Colour:");   lcd.setCursor(1, 1);    lcd.print("Marbles:");​  // ------------------- Starting and stopping button ---------------------------    // Set BUTTON pin as INPUT_PULLUP to use the internal pull-up resistor      pinMode(STOP, INPUT_PULLUP);      pinMode(START, INPUT_PULLUP);}​//​void loop() {​  //​  // Read the button state (will be LOW when pressed and HIGH when not pressed)  int buttonState = digitalRead(START);​  // If the button is pressed (buttonState == LOW)  if (buttonState == LOW) {    digitalWrite(RGB_LED_BLUE, HIGH);   // Turn on the blue LED    delay(500);                         // Wait for 500ms    digitalWrite(RGB_LED_BLUE, LOW);    // Turn off the blue LED    digitalWrite(RGB_LED_RED, LOW);     // Turn off the red LED    Serial.println("Button pressed - switch on");  // Print message to the serial monitor  }  else {  // If the button is not pressed (buttonState == HIGH)    digitalWrite(RGB_LED_BLUE, LOW);    // Make sure the blue LED is off    digitalWrite(RGB_LED_GREEN, HIGH);  // Turn on the green LED    delay(500);                         // Wait for 500ms    digitalWrite(RGB_LED_GREEN, LOW);   // Turn off the green LED    digitalWrite(RGB_LED_RED, LOW);     // Turn off the red LED    Serial.println("Button not pressed - switch off");  // Print message to the serial monitor  }}  if(Val1 == 1){     // If switch is turned on (pressed)    digitalWrite(RGB_LED_BLUE, HIGH);              // Turn on the LED     delay(50);    digitalWrite(RGB_LED_BLUE, LOW);     digitalWrite(RGB_LED_RED, LOW);​  // ------------------- FIRST STAGE --------------------------------    //LED Green      digitalWrite(RGB_LED_GREEN, HIGH);​    //PICKING UP MARBLE      MicroServo.write(90);           //set micro Servo to 90 degress      Big_ArmServo.write(140);        //set Big_Arm Servo      BaseServo.write(122);           //set Base Servo      Grabber_RotateServo.write(62);  //set Grabber_Rotate Servo      GrabberServo.write(0);          //set Grabber Servo      delay(100);​    //move forward      MicroServo.write(90);           //set micro Servo to 90 degress      Big_ArmServo.write(96);         //set Big_Arm Servo      BaseServo.write(20);            //set Base Servo      Grabber_RotateServo.write(77);  //set Grabber_Rotate Servo      GrabberServo.write(0);          //set Grabber Servo      delay(100);​    //Grab Marble      GrabberServo.write(180);        //set Grabber Servo      delay(100);​    //Resting      MicroServo.write(90);           //set micro Servo to 90 degress      Big_ArmServo.write(140);        //set Big_Arm Servo      BaseServo.write(122);           //set Base Servo      Grabber_RotateServo.write(62);  //set Grabber_Rotate Servo      GrabberServo.write(180);        //set Grabber Servo      delay(500);​  //​  // ------------------- COLOUR DETECTION----------------------------​    //White      if ((Colour >= 22.5) && (Colour <= 30)) {        lcd.setCursor(9, 0);        lcd.print("White"); // Display colour of marbles        //Move Stepper Motor         b = b + 50;        }​    //Yellow      if ((Colour >= 18) && (Colour <= 23.5)) {        lcd.setCursor(9, 0);        lcd.print("Yellow"); // Display colour of marbles      //Move Stepper Motor        b = b + 70;      }​    //Blue      if ((Colour >= 9) && (Colour <= 13)) {        lcd.setCursor(9, 0);        lcd.print("Blue"); // Display colour of marbles      //Move Stepper Motor        b = b + 90;    }​    // Green      if ((Colour >= 14) && (Colour <= 18)) {        lcd.setCursor(9, 0);        lcd.print("Green"); // Display colour of marbles      //Move Stepper Motor        b = b + 110;      }​    //Black      if ((Colour >= 0) && (Colour <= 9)) {        lcd.setCursor(9, 0);        lcd.print("Black"); // Display colour of marbles      //Move Stepper Motor        b = b + 130;      }​  //​  // ------------------- MOVING STEPPER / MOTORS --------------------​    //Moving Stepper Motor Forward      digitalWrite(Stepper_Direction, HIGH);      repeatAction(b);   //Stepper Motor Pulses repeats according to the value of b​    //Number of Marbles    a = a + 1;  //Adding a marble to the tally    lcd.setCursor(10, 1);    lcd.print(a); // Display number of marbles    delay(50);​    //Moving Servos   VALUES NOT SET YET      MicroServo.write(90);           //set micro Servo to 90 degress      Big_ArmServo.write(140);        //set Big_Arm Servo      BaseServo.write(122);           //set Base Servo      Grabber_RotateServo.write(62);  //set Grabber_Rotate Servo      GrabberServo.write(180);          //set Grabber Servo      delay(100);      GrabberServo.write(0);          //set Grabber Servo to open      delay(100);​    //Moving Stepper Motor Back      digitalWrite(Stepper_Direction, LOW);      repeatAction(b);   //Stepper Motor Pulses repeats according to the value of b      delay(50);    }​//If the start button isnt pressed  else {    digitalWrite(RGB_LED_RED, HIGH);               // Otherwise, turn on the RED LED    digitalWrite(RGB_LED_BLUE, HIGH);              // Turn on the LED     delay(50);    digitalWrite(RGB_LED_RED, LOW);    delay(50);    }​//If the Stop Button is pressed  if(Val1 >= 512){     // If switch is turned on (pressed)    digitalWrite(RGB_LED_GREEN, LOW);    digitalWrite(RGB_LED_RED, HIGH);    digitalWrite(RGB_LED_BLUE, HIGH);    digitalWrite(RGB_LED_RED, LOW);  }}

Back to the robot arm