luis miguel
Published

Sistema de trabajo telemático

Con este proyecto pretendemos llevar a cabo una unión productiva y útil entre los humanos y las máquinas.

AdvancedShowcase (no instructions)Over 1 day215
Sistema de trabajo telemático

Things used in this project

Story

Read more

Schematics

Sistema robótico para la recepción y replicación de movimientos

Sistema robótico para la imitación de movimientos

File missing, please reupload.

Sistema de lectura de posiciones del brazo

Code

Emisor de datos del brazo

C#
Es el código que estará cargado en el Arduino que lee los datos del brazo del operario.
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

const int mpuAddress = 0x68;  //Puede ser 0x68 o 0x69
MPU6050 mpu(mpuAddress);

int ax, ay, az;

int hombro1 = 75;
int codo1 = 72;
int ante1 = 95;
int muneca1 = 95;
int accesorio1 = 90;

int hombro;
int codo;
int ante;
int muneca;
int accesorio;

void setup(){
  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();
}

void loop(){
  mpu.getAcceleration(&ax, &ay, &az);
  
  hombro = map(analogRead(2), 0, 1023, -10, 160);
  while(hombro > hombro1){
    Serial.print(1);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.println(",");
    hombro1 = hombro1 + 1;
  }
  while(hombro < hombro1){
    Serial.print(0);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.println(",");
    hombro1 = hombro1 - 1;
  }
  

  codo = map(ax, -17000, 17000, -16, 160); 
  while(codo > codo1){
    Serial.print(2);Serial.print(",");
    Serial.print(1);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.println(",");
    codo1 = codo1 + 1;
  }
  while(codo < codo1){
    Serial.print(2);Serial.print(",");
    Serial.print(0);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.println(",");
    codo1 = codo1 - 1;
  }


  ante = map(analogRead(0), 0, 1023, 10, 180);
  while(ante > ante1){
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(1);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.println(",");
    ante1 = ante1 + 1;
  }
  while(ante < ante1){
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(0);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.println(",");
    ante1 = ante1 - 1;
  }
  

  muneca = map(analogRead(3), 0, 1023, 10, 180);
  while(muneca > muneca1){
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(1);Serial.print(",");
    Serial.print(2);Serial.println(",");
    muneca1 = muneca1 + 1;
  }
  while(muneca < muneca1){
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(0);Serial.print(",");
    Serial.print(2);Serial.println(",");
    muneca1 = muneca1 - 1;
  }


  accesorio = map(analogRead(1), 0, 1023, 0, 180);
  while(accesorio > accesorio1){
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(1);Serial.println(",");
    accesorio1 = accesorio1 + 1;
  }
  while(accesorio < accesorio1){
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(2);Serial.print(",");
    Serial.print(0);Serial.println(",");
    accesorio1 = accesorio1 - 1;
  }
}

Brazo robótico

C#
Código que se encarga de interpretar los datos y dar las posiciones al brazo robótico.
#include <VarSpeedServo.h>

VarSpeedServo hombro;
VarSpeedServo hombroo;
VarSpeedServo codo;
VarSpeedServo codoo;
VarSpeedServo ante;
VarSpeedServo muneca;
VarSpeedServo accesorio;
VarSpeedServo ruedade;
VarSpeedServo ruedaiz;

const int pinIN1= 18;
const int pinIN2 = 19;

int hombro1 = 75;
int hombro2 = 75;
int codo1 = 72;
int codo2 = 72;
int ante1 = 95;
int muneca1 = 95;
int accesorio1 = 90;

void setup() {
   Serial.begin(9600);

   hombro.attach(27);
   hombroo.attach(26);
   codo.attach(30);  
   codoo.attach(34);
   ante.attach(38);
   muneca.attach(42);
   accesorio.attach(46);
   ruedade.attach(16);
   ruedaiz.attach(14); 

   pinMode(pinIN1, OUTPUT);
   pinMode(pinIN2, OUTPUT);

   hombro.write(hombro1, 90);
   hombroo.write(hombro2 ,90);
   codo.write(codo1, 90);
   codoo.write(codo2, 90);
   ante.write(ante1, 90);
   muneca.write(muneca1, 90);
   accesorio.write(accesorio1, 90);
   
   pinMode(12, OUTPUT);
   pinMode(6, OUTPUT);

   digitalWrite(6, HIGH);
}
 
void loop() {
    char letra = Serial.read();

    if(letra == 'T'){
      hombro1 = hombro1 + 1;
      hombro2 = hombro2 - 1;
    }
    if(letra == 'G'){
      hombro1 = hombro1 - 1;
      hombro2 = hombro2 + 1;
    }
    hombro.write(hombro1);
    hombroo.write(hombro2);


    if(letra == 'R'){
      codo1 = codo1 + 1;
      codo2 = codo2 - 1;
    }
    if(letra == 'F'){
      codo1 = codo1 - 1;
      codo2 = codo2 + 1;
    }
    codo.write(codo1 + (90 - hombro1));
    codoo.write(codo2 - (90 - hombro1));
    

    if(letra == 'E'){
      ante1 = ante1 + 1;
    }
    if(letra == 'D'){
      ante1 = ante1 - 1;
    }
    ante.write(ante1);
    
  
    if(letra == 'W'){
      muneca1 = muneca1 + 1;
    }
    if(letra == 'S'){
      muneca1 = muneca1 - 1;
    }
    muneca.write(muneca1);


    if(letra == 'Q'){
      accesorio1 = accesorio1 + 1;

      digitalWrite(pinIN1, HIGH);
      digitalWrite(pinIN2, LOW);
    }
    if(letra == 'A'){
      accesorio1 = accesorio1 - 1;

      digitalWrite(pinIN1, LOW);
      digitalWrite(pinIN2, HIGH);
    }
    accesorio.write(accesorio1);
}

Emisor encargado del movimiento de las ruedas

C#
#include <SPI.h>  
#include "RF24.h"

RF24 myRadio (7, 8);
byte addresses[][6] = {"0"};

struct package{
  int cadera;
  int derecha;
  int izquierda;
  int rele;
};


typedef struct package Package;
Package data;


void setup(){
  Serial.begin(115200);
  delay(1000);
  myRadio.begin();  
  myRadio.setChannel(115); 
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate( RF24_250KBPS ) ; 
  myRadio.openWritingPipe( addresses[0]);
  delay(1000);
}

void loop(){
  myRadio.write(&data, sizeof(data)); 

  data.cadera = map(analogRead(0), 0, 1023, 0, 180);

  if(analogRead(2) > 900){
    data.derecha = 180;
    data.izquierda = 0;
  }
  if(analogRead(2) < 200){
    data.derecha = 0;
    data.izquierda = 180;
  }

  if(analogRead(3) > 900){
    data.derecha = 0;
    data.izquierda = 90;
  }
  if(analogRead(3) < 200){
    data.derecha = 90;
    data.izquierda = 180;
  }

  if(analogRead(2) < 900 && analogRead(2) > 200 && analogRead(3) < 900 && analogRead(3) > 200){
    data.derecha = 90;
    data.izquierda = 90;
  }

}

Receptor encargado del movimiento de las ruedas

C#
#include <VarSpeedServo.h>
#include <SPI.h>  
#include "RF24.h" 

RF24 myRadio (7, 8); 
struct package{
  int cadera;
  int derecha;
  int izquierda;
  int rele;
};

byte addresses[][6] = {"0"}; 

typedef struct package Package;
Package data;

VarSpeedServo cadera;
VarSpeedServo derecha;
VarSpeedServo izquierda;

void setup(){
  Serial.begin(115200);
  delay(1000);

  myRadio.begin(); 
  myRadio.setChannel(115); 
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate( RF24_250KBPS ) ; 
  myRadio.openReadingPipe(1, addresses[0]);
  myRadio.startListening();

  cadera.attach(5);
  derecha.attach(3);
  izquierda.attach(4);
}


void loop()  
{

  if ( myRadio.available()){
    while (myRadio.available()){
      myRadio.read(&data, sizeof(data));
    }
    cadera.write(data.cadera);
    derecha.write(data.derecha);
    izquierda.write(data.izquierda);
  }
}

Intermediario processing

C#
Se encarga de recibir y enviar datos entre placas.
import processing.serial.*;

Serial entrada;  
Serial salida;

void setup(){
  entrada = new Serial(this, "COM5", 9600);
  salida = new Serial(this, "COM3", 9600);
}

void draw(){
  while ( entrada.available() > 0){  
  
    String inString = entrada.readStringUntil('\n');
  
    if(inString != null){
      int[] val = int(split(inString,","));
       
       if(val[0] == 1){
         salida.write('T');
       }
       if(val[0] == 0){
         salida.write('G');
       }
       
       
       if(val[1] == 1){
         salida.write('R');
       }
       if(val[1] == 0){
         salida.write('F');
       }
       
       
       if(val[2] == 1){
         salida.write('E');
       }
       if(val[2] == 0){
         salida.write('D');
       }
       
       
       if(val[3] == 1){
         salida.write('W');
       }
       if(val[3] == 0){
         salida.write('S');
       }
       
       
       if(val[4] == 1){
         salida.write('Q');
       }
       if(val[4] == 0){
         salida.write('A');
       }
    }
  }
}  
  

Credits

luis miguel

luis miguel

-1 projects • 0 followers

Comments