2016/10/23

Ejemplo de código en Processing

Ejemplo de código en Processing
int x=0;
int y=0;

void setup(){
  //size(300,400);
  size(screenWidth,400);
  //size(screenWidth,screenHeight);
  
  /*
  screenWidth y screenHeight ya no están soportados
  en Processing 3.x pero los sketches siguen
  funcionando incrustados en el canvas de html5
  */
  
  background(255,200,0);
}

void draw(){
  //background(255,200,0);
  if(mousePressed == true){
    if(mouseX>=(width/2)){
      x=x+1;
    }else{
      x=x-1;
    }
    if(mouseY>=(height/2)){
      y=y+1;  
    }else{
      y=y-1;
    }
  }
  noStroke();
  fill(0,0,0);
  rect(x,y,5,5);  
}

2016/05/08

Arduino Robot v09 Tupperbot (I)

Nueva versión del robot Arduino, esta vez con cuatro ruedas tractoras y con la torreta estrenada en la versión nueve.


2016/05/02

Arduino Robot v08 Tupperbot (III)

Continuamos con el tutorial de construcción y programación de nuestro robot. En esta ocasión vamos a implementar la función de control de los dos servomotores con un mando a distancia de infrarrojos. El mando en cuestión es el que aparece en el listado de materiales pero podemos usar cualquier mando que tengamos por casa. Solo tenemos que sustituir el código que aparece en las estructuras switch-case con el código de los botones de nuestro mando.

//Arduino Robot v09_02 2016/05/02
//Diseño y programación: Antonio Vallecillos, @fotovallegrafia
//Movimiento con IR

#include <IRremote.h>
// incluimos la librería para IRremote
int RECV_PIN = 12;
// definimos una variable de tipo entero llamada RECV_PIN
// con un valor 12 por defecto
IRrecv irrecv(RECV_PIN);
// el TSOP 2238 está conectado al pin 12
decode_results results;
// el código de cada tecla se almacenará en la variable results

#include <Servo.h>
// incluimos la librería para controlar los servomotores

Servo servoDER;
// creamos un objeto servo llamado servoDER
Servo servoIZQ;
// creamos un objeto servo llamado servoIZQ

void setup() {
  Serial.begin(9600);
  // iniciamos el Monitor Serial a 9600 baudios
  irrecv.enableIRIn();
  // iniciamos el receptor de infrarrojos
  
  servoDER.attach(7);
  // el servomotor de la derecha está conectado al pin 7
  servoIZQ.attach(8);
  // el servomotor de la izquierda está conectado al pin 8
  funcionStop();
  // ejecutamos el código detro de funcionStop()
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    // imprime el código de la tecla pulsada en el
    // Monitor Serial
    switch (results.value) {
    // control de flujo mediante switch
      
      case 16615543:
      // botón Flecha Arriba
      funcionAv();
      // ejecutamos el código detro de funcionAv()
      break;

      case 16619623:
      // botón Flecha Abajo
      funcionRe();
      // ejecutamos el código detro de funcionRe()
      break;
      
      case 16607383:
      // botón Flecha Derecha
      funcionGd();
      // ejecutamos el código detro de funcionGd()
      break;
      
      case 16591063:
      // botón Flecha Izquierda
      funcionGi();
      // ejecutamos el código detro de funcionGi()
      break;
      
    }
    irrecv.resume();
    // recibe el siguiente valor
  }
  else {
    funcionStop();
    // ejecutamos el código detro de funcionStop()
  }
  delay(250);
}

// funciones de movimiento

void funcionAv() {
  Serial.println("ADELANTE");
  // imprime ADELANTE en el Monitor Serial
  servoDER.write(0);
  // el servomotor de la derecha gira en sentido horario
  // (hacia adelante) a máxima velocidad (90 es parado)
  servoIZQ.write(180);
  // el servomotor de la izquierda gira en sentido antihorario
  // (hacia adelante) a máxima velocidad (90 es parado)
}

void funcionRe() {
  Serial.println("ATRÁS");
  servoDER.write(180); 
  servoIZQ.write(0); 
}

void funcionGd() {
  Serial.println("DERECHA");
  servoDER.write(180); 
  servoIZQ.write(180); 
}

void funcionGi() {
  Serial.println("IZQUIERDA");
  servoDER.write(0); 
  servoIZQ.write(0); 
}

void funcionStop() {
  Serial.println("STOP");
  servoDER.write(90);
  // el servomotor de la derecha permanece parado 
  // (0 es la máxima velocidad en sentido horario)
  // (180 es la máxima velocidad en sentido antihorario)
  servoIZQ.write(90);
  // el servomotor de la izquierda permanece parado 
  // (0 es la máxima velocidad en sentido horario)
  // (180 es la máxima velocidad en sentido antihorario)
}

Arduino Robot v08 Tupperbot (II)

Seguimos con la serie de tutoriales dedicados a la versión ocho del robot Arduino. Esta entrada la vamos a dedicar a la lista de materiales y herramientas que necesitaremos para construir el robot.

LISTA DE MATERIALES:
HERRAMIENTAS:
  • TALADRO + BROCA DE 3MM
  • CUTTER
  • ALICATES DE PUNTA FINA
  • CORTACABLES
  • SOLDADOR + ESTAÑO
  • DESTORNILLADOR PLANO
  • DESTORNILLADOR DE CRUZ
  • LIMAS
  • CINTA AISLATE

2016/04/23

Arduino Robot v08 Tupperbot (I)

La versión más sencilla del robot arduino, con la estructura de un contenedor hermético de alimentos. Si no dispones de una impresora 3D o de un taller con herramientas para trabajar con madera, considera seriamente esta opción para iniciarte en la robótica con placas Arduino. Solo necesitas un taladro y un cutter para instalar todos los componentes sobre el cuerpo del robot.

En la parte superior colocamos la placa Arduino UNO y la protoboard para realizar conexiones rápidas sin necesidad de soldaduras.


El robot también dispone de una torreta con un sensor de ultrasonidos HC-SR04 montado sobre un servomotor de 180º que le permitirá "mirar" a izquierda y derecha para detectar obstáculos.


En la parte interior instalamos los dos servomotores de rotación continua y el portapilas. Los cables de los servomotores atraviesan la tapa y se conectan a la protoboard. Los cables del portapilas se conectan a un interruptor que alimenta a la placa Arduino UNO con 9 voltios.


El siguiente vídeo muestra al robot ejecutando un sencillo programa que le permite moverse en una trayectoria circular.


Este es el código Arduino que ejecuta el movimiento del vídeo anterior.

//Arduino Robot v09_01 2016/04/23
//Diseño y programación: Antonio Vallecillos, @fotovallegrafia
//Movimiento circular

#include <Servo.h>
// incluimos la librería para controlar los servomotores

Servo servoDER;
// creamos un objeto servo llamado servoDER
Servo servoIZQ;
// creamos un objeto servo llamado servoIZQ

void setup() {
  servoDER.attach(7);
  // el servomotor de la derecha está conectado al pin 7
  servoIZQ.attach(8);
  // el servomotor de la izquierda está conectado al pin 8
}

void loop() {
  servoDER.write(82); 
  /* el servomotor de la derecha gira muy despacio en sentido
  horario (hacia adelante). 0 es la máxima velocidad y 90
  es parado. */
  servoIZQ.write(180);
  /* el servomotor de la izquierda gira muy despacio en sentido 
  antihorario (hacia adelante). 180 es la máxima velocidad y 90
  es parado. */
  delay(100); // pausa de 100 milisegundos
}