Robótica y Animatrónica – Interfaz gráfica de usuario

Interfaz Gráfica de Usuario

La aplicación que sirve como interfaz de usuario fue desarrollada con el lenguaje Processing y la librería G4P para crear interfaces gráficas.

gui

Mediante ésta establecemos la comunicación con Arduino para mover cada articulación del robot a la posición deseada.

Se presenta un control para cada actuador, estos controles generan un valor que es enviado por el puerto serie, cada vez que se presiona el botón “Mover” en una secuencia de valores numéricos separados por coma de la siguiente manera:

“5,78,120,17,1”

El primer valor indica la cantidad de pasos que se moverá el motor PAP. Valores positivos lo hacen girar en un sentido y negativos en el otro, 0 no cambia de lugar.

El siguiente valor es el ángulo del servo de la base, lo mismo para el tercer valor, que corresponde al ángulo del hombro y el cuarto para el codo.

Por último, el quinto elemento puede ser 0 o 1 e indica si está apagado o encendido el indicador luminoso.

Archivo gui_brazo.pde

// Need G4P library
import g4p_controls.*;
import processing.serial.*;

Serial arduino;   // Create object from Serial class
String comando;   // Información ppara el movimiento de los actuadores
                  // int_motor,int_base,int_hombro,int_codo,bool_led\n

public void setup(){
  size(480, 320, JAVA2D);
  createGUI();
  customGUI();
 
  //Abre el puerto serie
  String portName = Serial.list()[0];
  arduino = new Serial(this, portName, 9600);

 
}

public void draw(){
  background(230);
 
  textbase.setText(base.getValueS());
  texthombro.setText(hombro.getValueS());
  textcodo.setText(codo.getValueS());
  comando = int(motor_slider1.getValueF()) + "," + int(base.getValueF()) + "," + int(hombro.getValueF()) + "," + int(codo.getValueF()) + ",1" + "\n";
 
}

// Use this method to add additional statements
// to customise the GUI controls
public void customGUI(){

}

Archivo GUI

/* =========================================================
 * ====                   WARNING                        ===
 * =========================================================
 * The code in this tab has been generated from the GUI form
 * designer and care should be taken when editing this file.
 * Only add/edit code inside the event handlers i.e. only
 * use lines between the matching comment tags. e.g.

 void myBtnEvents(GButton button) { //_CODE_:button1:12356:
     // It is safe to enter your event code here  
 } //_CODE_:button1:12356:
 
 * Do not rename this tab!
 * =========================================================
 */

public void mover_click1(GButton source, GEvent event) { //_CODE_:Mover:801388:
  println(comando);
  arduino.write(comando);
} //_CODE_:Mover:801388:

public void base_turn1(GKnob source, GEvent event) { //_CODE_:base:207891:
  //println("knob1 - GKnob >> GEvent." + event + " @ " + millis());
} //_CODE_:base:207891:

public void knob1_turn1(GKnob source, GEvent event) { //_CODE_:hombro:577945:
  //println("hombro - GKnob >> GEvent." + event + " @ " + millis());
} //_CODE_:hombro:577945:

public void codo_turn1(GKnob source, GEvent event) { //_CODE_:codo:306758:
  //println("codo - GKnob >> GEvent." + event + " @ " + millis());
} //_CODE_:codo:306758:

public void motor_slider1_change1(GCustomSlider source, GEvent event) { //_CODE_:motor_slider1:807276:
  //println("motor_slider1 - GCustomSlider >> GEvent." + event + " @ " + millis());
} //_CODE_:motor_slider1:807276:

public void textbase_change1(GTextField source, GEvent event) { //_CODE_:textbase:325465:
  //println("textbase - GTextField >> GEvent." + event + " @ " + millis());
} //_CODE_:textbase:325465:

public void texthombro_change1(GTextField source, GEvent event) { //_CODE_:texthombro:661687:
  //println("texthombro - GTextField >> GEvent." + event + " @ " + millis());
} //_CODE_:texthombro:661687:

public void textfield1_change1(GTextField source, GEvent event) { //_CODE_:textcodo:999372:
  //println("textcodo - GTextField >> GEvent." + event + " @ " + millis());
} //_CODE_:textcodo:999372:

// Create all the GUI controls.
// autogenerated do not edit
public void createGUI(){
  G4P.messagesEnabled(false);
  G4P.setGlobalColorScheme(GCScheme.BLUE_SCHEME);
  G4P.setCursor(ARROW);
  surface.setTitle("Sketch Window");
  Mover = new GButton(this, 180, 280, 80, 30);
  Mover.setText("Mover");
  Mover.addEventHandler(this, "mover_click1");
  base = new GKnob(this, 60, 170, 60, 60, 0.8);
  base.setTurnRange(110, 70);
  base.setTurnMode(GKnob.CTRL_HORIZONTAL);
  base.setSensitivity(1);
  base.setShowArcOnly(false);
  base.setOverArcOnly(false);
  base.setIncludeOverBezel(false);
  base.setShowTrack(true);
  base.setLimits(90.0, 0.0, 180.0);
  base.setShowTicks(true);
  base.setOpaque(false);
  base.addEventHandler(this, "base_turn1");
  hombro = new GKnob(this, 190, 170, 60, 60, 0.8);
  hombro.setTurnRange(110, 70);
  hombro.setTurnMode(GKnob.CTRL_HORIZONTAL);
  hombro.setSensitivity(1);
  hombro.setShowArcOnly(false);
  hombro.setOverArcOnly(false);
  hombro.setIncludeOverBezel(false);
  hombro.setShowTrack(true);
  hombro.setLimits(90.0, 0.0, 180.0);
  hombro.setShowTicks(true);
  hombro.setOpaque(false);
  hombro.addEventHandler(this, "knob1_turn1");
  codo = new GKnob(this, 320, 170, 60, 60, 0.8);
  codo.setTurnRange(110, 70);
  codo.setTurnMode(GKnob.CTRL_HORIZONTAL);
  codo.setSensitivity(1);
  codo.setShowArcOnly(false);
  codo.setOverArcOnly(false);
  codo.setIncludeOverBezel(false);
  codo.setShowTrack(true);
  codo.setLimits(90.0, 0.0, 180.0);
  codo.setShowTicks(true);
  codo.setOpaque(false);
  codo.addEventHandler(this, "codo_turn1");
  motor_slider1 = new GCustomSlider(this, 70, 40, 310, 50, "grey_blue");
  motor_slider1.setShowValue(true);
  motor_slider1.setLimits(0, -5, 5);
  motor_slider1.setNbrTicks(11);
  motor_slider1.setStickToTicks(true);
  motor_slider1.setShowTicks(true);
  motor_slider1.setEasing(2.0);
  motor_slider1.setNumberFormat(G4P.INTEGER, 0);
  motor_slider1.setOpaque(false);
  motor_slider1.addEventHandler(this, "motor_slider1_change1");
  textbase = new GTextField(this, 60, 240, 60, 20, G4P.SCROLLBARS_NONE);
  textbase.setOpaque(true);
  textbase.addEventHandler(this, "textbase_change1");
  texthombro = new GTextField(this, 190, 240, 60, 20, G4P.SCROLLBARS_NONE);
  texthombro.setOpaque(true);
  texthombro.addEventHandler(this, "texthombro_change1");
  textcodo = new GTextField(this, 320, 240, 60, 20, G4P.SCROLLBARS_NONE);
  textcodo.setOpaque(true);
  textcodo.addEventHandler(this, "textfield1_change1");
  etmotor = new GLabel(this, 180, 10, 80, 20);
  etmotor.setText("Motor");
  etmotor.setOpaque(false);
  etbase = new GLabel(this, 60, 140, 60, 20);
  etbase.setText("Base");
  etbase.setOpaque(false);
  ethombro = new GLabel(this, 190, 140, 60, 20);
  ethombro.setText("Hombro");
  ethombro.setOpaque(false);
  etcodo = new GLabel(this, 320, 140, 60, 20);
  etcodo.setText("Codo");
  etcodo.setOpaque(false);
}

// Variable declarations
// autogenerated do not edit
GButton Mover;
GKnob base;
GKnob hombro;
GKnob codo;
GCustomSlider motor_slider1;
GTextField textbase;
GTextField texthombro;
GTextField textcodo;
GLabel etmotor;
GLabel etbase;
GLabel ethombro;
GLabel etcodo;

« Older Entries