Arduino Code für Mitsubishi Roboter

Verwendete Arduino Codes
Als Grundlage für die Arduinoprogramme zum steuern des Roboters dienten Beispielprogramme. Da im Team niemand professionell programmieren kann wurden in einem ersten Schritt folgende Programme unverändert auf das Arduino geladen und geschaut was passiert.

Links Arduinoprogramme:

Link 1: https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/install-software Von hier aus kann die Library heruntergeladen werden, woraus das Beispielprogramm "DCMotorTest" verwendet wurde.

Link 2: https://backyardbrains.com/experiments/MuscleSpikerShield_StepperMotor Von hier wurde das Programm MotorStepStep_SpikerShield.ino heruntergeladen.

Nachdem wesentliche Passagen des Codes etwas klarer wurden, wurde er so abgeändert das der Roboter die gewünschten Bewegungen ausführt. Wie gesagt hat unser Team kaum Programmier-Skills. Deshalb enthält der abgeänderte Code zum Teil noch Passagen, die wahrscheinlich nicht gebraucht werden. Da nicht herausgefunden werden konnte was derern Funktion ist, wurden sie im Programm belassen.

Programm 1:
Mit diesem Program wurde der Bewegungsablauf, der im Video "Mitsubishi Movemaster EX gesteuert von Arduino mit MotorShield" zu sehen ist,gesteuert. Alle Bewegungen wurden nur zeitgesteuert. /* This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2 It won't work with v1.x motor shields! Only for the v2's with built in PWM control

For use with the Adafruit Motor Shield v2 >	http://www.adafruit.com/products/1438


 * 1) include 
 * 2) include 

// Create the motor shield object with the default I2C address Adafruit_MotorShield AFMS = Adafruit_MotorShield; // Or, create it with a different I2C address (say for stacking) // Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);

// Select which 'port' M1, M2, M3 or M4. In this case, M1 Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1); Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3); Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4); // You can also make another motor on port M2 //Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);

void setup { Serial.begin(9600);          // set up Serial library at 9600 bps Serial.println("Adafruit Motorshield v2 - DC Motor test!");

AFMS.begin; // create with the default frequency 1.6KHz }

void loop { delay(5000);

myMotor2->run(BACKWARD); myMotor2->setSpeed(130); delay(300); myMotor2->run(RELEASE);

myMotor4->run(FORWARD); myMotor4->setSpeed(130); delay(1200); myMotor4->run(RELEASE);

myMotor1->run(FORWARD); myMotor1->setSpeed(130); delay(1000); myMotor1->run(RELEASE); myMotor4->run(BACKWARD); myMotor4->setSpeed(130); delay(1200); myMotor4->run(RELEASE);

myMotor2->run(FORWARD); myMotor2->setSpeed(130); delay(300); myMotor2->run(RELEASE);

delay(3000);

myMotor2->run(BACKWARD); myMotor2->setSpeed(130); delay(1300); myMotor2->run(RELEASE);

myMotor1->run(FORWARD); myMotor1->setSpeed(130); delay(650); myMotor1->run(RELEASE);

delay(3000);

myMotor1->run(BACKWARD); myMotor1->setSpeed(130); delay(640); myMotor1->run(RELEASE);

myMotor2->run(FORWARD); myMotor2->setSpeed(130); delay(1000); myMotor2->run(RELEASE);

delay(3000);

myMotor2->run(BACKWARD); myMotor2->setSpeed(130); delay(300); myMotor2->run(RELEASE);

myMotor4->run(FORWARD); myMotor4->setSpeed(130); delay(1200); myMotor4->run(RELEASE);

myMotor1->run(BACKWARD); myMotor1->setSpeed(130); delay(900); myMotor1->run(RELEASE);

myMotor4->run(BACKWARD); myMotor4->setSpeed(130); delay(1200); myMotor4->run(RELEASE);

myMotor2->run(FORWARD); myMotor2->setSpeed(130); delay(250); myMotor2->run(RELEASE); }

Programm 2:
Dieses Programm dient dazu, die vom Muscle SpikerShield ausgelesenen Daten, in eine "Auf- und Zubewegung" des Greifers umzuwandeln.

Stepper motor(PASOS, 2, 3, 4, 5); // Especifica el número de pasos del motor y los pines.
 * 1) include  //Librería para el control del Motor.
 * 2) define PASOS 48 //Número de pasos que tiene el motor.


 * 1) include 
 * 2) include 

Adafruit_MotorShield AFMS = Adafruit_MotorShield;

Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);

int lecturas[10]; int lecturaFinal; byte multiplicador = 1; byte pasosAvanza = 0; int cuentaPasos = 0;
 * 1) define MAX 20  // Máxima lectura posible.¡JUEGA CON ESTE VALOR!.
 * 2) define PASOSMAX 10 // Este es el número máximo de pasos que avanzará (Puedes modificar este valor).

void setup{ Serial.begin(9600); //begin serial communications motor.setSpeed(200); // Se especifica la velocidad del motor RPMs.

AFMS.begin;

}//Fin de void setup.

void loop{ for(int i = 0; i < 10; i++){   //Toma diez lecturas en ~ 0,02 segundos. lecturas[i] = analogRead(A0) * multiplicador; delay(2); } for(int i = 0; i < 10; i++){   //Promedia las diez lecturas. lecturaFinal += lecturas[i]; } lecturaFinal /= 10;

lecturaFinal = constrain(lecturaFinal, 0, MAX); //Restringe "lecturaFinal" a un rango definido(0->MAX). pasosAvanza = map(lecturaFinal, 0, MAX, 0, PASOSMAX); //Convierte el valor de "lecturafinal" a un numero de pasos a avanzar.

if(pasosAvanza == 0) //Si no hay lectura, el motor se detiene. {       motor.step(0);

motor.step(1); myMotor3->run(BACKWARD); myMotor3->setSpeed(255); delay(10); myMotor3->run(RELEASE);

delay(10);

}     else{ for(cuentaPasos = 0 ; cuentaPasos <= pasosAvanza ; cuentaPasos++) {     Serial.println(cuentaPasos);

motor.step(1); myMotor3->run(FORWARD); myMotor3->setSpeed(255); delay(10); myMotor3->run(RELEASE);

delay(10); }         }    delay(10); }//Fin de void loop.

Links
Zu Team Hacker

Zu Medizintechnik DIY

Category:MedTech-DIY