Arduino Code für Mitsubishi Roboter
From Hackteria Wiki
Verwendete Arduino Codes
Programm 1:
/* 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 */ #include <Wire.h> #include <Adafruit_MotorShield.h> // 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:
#include <Stepper.h> //Librería para el control del Motor. #define PASOS 48 //Número de pasos que tiene el motor. Stepper motor(PASOS, 2, 3, 4, 5); // Especifica el número de pasos del motor y los pines. #include <Wire.h> #include <Adafruit_MotorShield.h> Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3); #define MAX 20 // Máxima lectura posible.¡JUEGA CON ESTE VALOR!. #define PASOSMAX 10 // Este es el número máximo de pasos que avanzará (Puedes modificar este valor). int lecturas[10]; int lecturaFinal; byte multiplicador = 1; byte pasosAvanza = 0; int cuentaPasos = 0; 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.