Robot arm code
The Arduino sketch behind the arm, shown as I wrote it. It is still a work in progress.
// 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); }}