Arduino Code für Mitsubishi Roboter

From Hackteria Wiki
Revision as of 09:36, 17 February 2018 by M.Gnos (talk | contribs) (Verwendete Arduino Codes)
Jump to: navigation, search

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: Link 2:

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 die wahrscheinlich nicht gebraucht werden. Da diese aber keiner bestimmten Funktion zugeordnet werden konnten, wurden sie im Programm belassen.


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.
    

Links

Zu Team Hacker
Zu Medizintechnik DIY