ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Proyecto robotica


Enviado por   •  22 de Noviembre de 2018  •  Documentos de Investigación  •  4.334 Palabras (18 Páginas)  •  212 Visitas

Página 1 de 18

/*PROYECTO DE ROBOTICA

GESTICULACION DE ROSTRO MEDIANTE MOTORES EMPLEADO EN OJOS, PARPADOS,

CEJAS, BOCA, SONRISA Y DIRECCION DE VISTA.

PARA ELLO SE UTILIZARON LOS MOTORES DYNAMIXEL AX-12.

UTILIZANDO CON ELLOS EL OPENCM9.04 COMO CEREBRO DEL PROYECTO.*/

#define DXL_BUS_SERIAL1 1  //Dynamixel on Serial1(USART1)  <-OpenCM9.04

#define DXL_BUS_SERIAL2 2  //Dynamixel on Serial2(USART2)  <-LN101,BT210

#define DXL_BUS_SERIAL3 3  //Dynamixel on Serial3(USART3)  <-OpenCM 485EXP

/* Dynamixel ID defines */

#define OJO_IZQ 2

#define OJO_DER 3

#define BOCA 10

#define PARPADO_DER 16

#define PARPADO_IZQ 6

#define CEJA_DER 4

#define CEJA_IZQ 5

#define VISTA 1

#define SONRISA_IZQ 18

#define SONRISA_DER 14

/* Control table defines */

#define GOAL_POSITION 30

/* Libreria Dynamixel en el serial 1 */

Dynamixel Dxl(DXL_BUS_SERIAL1);

int Xarray[6];  //almacena los valores de x obtenidos del serial para el modo mirada

int Yarray[6];  //almacena los valores de y obtenidos del serial para el modo mirada

int x;        //almacena la posicion x para el modo mirada

int y;        //almacena la posicion y para el modo mirada

char XY;

char YX;

char n;

int miradax;    //valor que despliega el valor del motor en el modo mirada

int miraday;

int venojado=0;  //banderas para las variables de estado

int vtriste=0;

int vfeliz=0;

int valive=0;

int vhablar=0;

int vmapa=0;

int vquit=1;

int vparder;

int vparizq;

unsigned long previousMillis = -1000;    //variable para el millis en un segundo

const long tiempomovimiento=70;

const long interval = 1000;

int randomojod;    //variables para el modo alive que guarda el valor random de cada uno de los motores

int randomojoi;

int randomcejad;

int randomcejai;

int randomsonrisad;

int randomsonrisai;

int randomvista;

int randomboca;

int randomparpadod;

int randomparpadoi;

int tiempoactual=0;

int tiempoespera;

int bocacerrada=0;

int voz=0;

unsigned long currentMillis=millis();

void setup() {

  Serial2.begin(9600);    //se inicializa el serial en este caso para la comunicacion bluetooth

  Dxl.begin(3);          //se inicializa la comunicacion con los motores a 1Mb

  Dxl.jointMode(OJO_DER); //jointMode() is to use position mode

  Dxl.jointMode(OJO_IZQ); //jointMode() is to use position mode

  Dxl.jointMode(BOCA); //jointMode() is to use position mode

  Dxl.jointMode(PARPADO_DER); //jointMode() is to use position mode

  Dxl.jointMode(PARPADO_IZQ); //jointMode() is to use position mode

  Dxl.jointMode(VISTA); //jointMode() is to use position mode

  Dxl.jointMode(CEJA_IZQ); //jointMode() is to use position mode

  Dxl.jointMode(CEJA_DER); //jointMode() is to use position mode

  Dxl.jointMode(SONRISA_IZQ); //jointMode() is to use position mode

  Dxl.jointMode(SONRISA_DER); //jointMode() is to use position mode

}

void mapa() {    // esta funcion lee las coordenadas proporcionadas de 100 a 400, y las coloca en coordenadas para los motores

    for (int a = 0; a < 5; a++) {        //lee los caracteres enviados por el serial y los guarda en un array

      Xarray[a] = (SerialUSB.read() - 48);

      SerialUSB.print(Xarray[a]);              

    }

    SerialUSB.println("");

    x=((n-48)*100)+(Xarray[0] * 10)+(Xarray[1]);    //toma los primeros 3 caracteres del array y los convierte en coordenada x

    SerialUSB.println(int(x));

    y=(Xarray[2] * 100)+(Xarray[3] * 10)+(Xarray[4]);    //toma los primeros 3 caracteres del array y los convierte en coordenada y  

    SerialUSB.println(int(y));

    miradax=map(x,420,100,420,600);//convierte el rango de las coordenadas en x proporcionadas y las convierte en las coordenadas en x para el motor

    SerialUSB.println(int(miradax));

    miraday=map(y,100,340,455,545);//convierte el rango de las coordenadas en x proporcionadas y las convierte en las coordenadas en x para el motor

    SerialUSB.println(int(miraday));

    Dxl.writeWord(OJO_IZQ, GOAL_POSITION, miradax);    //escribe las coordenadas de x para el ojo izquierdo

    Dxl.writeWord(OJO_DER, GOAL_POSITION, miradax);  //escribe las coordenadas de x para el ojo derecho

    Dxl.writeWord(VISTA, GOAL_POSITION, miraday); //escribe las coordenadas de y para levantar o agachar la vista

    currentMillis = millis();//guarda los millis

    //vmapa=0;    

}

void enojado() {  //esta funcion gesticula los motores para obtener una simulacion de rostro enojado

  switch(venojado){

    case 1:    //en este caso, simula que parpaea

      SerialUSB.println("Enojado");

      Dxl.writeWord(PARPADO_IZQ, GOAL_POSITION, 630); //Compatible with all dynamixel serise

      Dxl.writeWord(PARPADO_DER, GOAL_POSITION, 825); //Compatible with all dynamixel serise

     

      currentMillis = millis();

      venojado=2;  //cambia el estado al siguiente

      break;

     

    case 2:    //en este caso espera 0.2 segundos para colocar los motores en las direcciones proporcionadas

...

Descargar como (para miembros actualizados)  txt (20 Kb)   pdf (76.3 Kb)   docx (15.5 Kb)  
Leer 17 páginas más »
Disponible sólo en Clubensayos.com