Ejercicios Arduino+Processing
Ejercicios Arduino+Processing
Ejercicios Arduino+Processing
Arduclema Processing
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Relacin de ejercicios
Manejo de Arduino desde processing 1. Test de funcionamiento de Arduino 2. Gobierno de una salida de Arduino desde Processing 3. Control del valor de una salida analgica de Arduino mediante la posicin X e Y del ratn sobre la pantalla de ejecucin de Processing 4. Lectura de pulsador 5. Encendido y apagado de un LED de manera paulatina (efecto fading) 6. Lectura de un valor analgico y representacin en modo grfico y texto del valor ledo 7. Control de tres LEDs desde las teclas 1,2 y3 8. Controlar el brillo de un Led con el ratn 9. Cambio del color de un crculo 10. Pelota cambiando de tamao y botando 11. Juego Bsico de PinPong
Se trata de realizar aplicaciones en las que el programa que controla y monitoriza los datos de Arduino este en el IDE Processing. Metodos para controlar Arduino desde el IDE Processing: Existen dos mtodos para controlar Arduino desde processing: 1.- Mediante la Librera Arduino para Processing 2.- Mediante la lectura/escritura de datos a travs del puerto serie.
debemos descargar sobre Arduino. En este fichero estn las funciones que luego se utilizaran desde el ID Processing para poder dialogar con Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez Arduino
Referencia de las funciones de la librera Arduino para Processing Las siguientes funciones se encuentran en la Librera Arduino para Processing y comunican (a partir de Processing) con un Arduino, una vez que el Firmata se ha instalado en la tarjeta Arduino.list():devuelve una lista con los dispositivos serie (puertos serie) disponibles. Arduino(parent, name, rate): crea un objeto Arduino (objeto a nivel de elemento de programacin). parent debe aparecer sn comillas; name es el nombre del dispositivo serie (es decir, uno de los nombres devueltos por Arduino.list ()); rate es la velocidad de la conexin (57600 para la versin actual del de firmware). pinMode(pin, mode): pin configura un pin digital como entrada (input) o como salida (output) mode (Arduino.INPUT o Arduino.OUTPUT). digitalRead(pin): devuelve el valor ledo de una de las entradas digitales, Arduino.LOW o bien Arduino.HIGH (el pin debe estar configurado como entrada). digitalWrite(pin, value): escribe Arduino.LOW o Arduino.HIGH en un pin digital. analogRead(pin): devuelve el valor de una entrada analgica leda (de 0 a 1023). analogWrite(pin, value): escribe un valor analgico (seal tipo PWM) en un pin digital que soporta salida analgica (pines 3, 5, 6, 9, 10, y 11 para ATMEGA 168); valores debes estar comprendidos entre 0 (equivalente a off) y 255 (equivalente a on).
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
MTODO 1
Control de Arduino mediante la librera Arduino para Processing
Arduclema
Con este sencillo ejemplo se trata de comprobar si Procesing se comunica con Arduino. El programa lo que hace es imprimir en la ventana de datos los puertos detectados del ordenador y los numera dentro de un array
Prctica 1: Test de Funcionamiento de Arduino /* Test de Puertos utilizados */ import processing.serial.*; import cc.arduino.*; Arduino arduino; void setup() { size(200, 200); noLoop(); // Fuerza a no realizar el bucle del programa println(Arduino.list()); // Imprime la lista de puertos COM } void draw() { }
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Ventana de interaccin sobre la que debemos hacer clic con el ratn para activar y desactivar el LED conectado en el PIN13
Protoboard
Arduclema
Prctica 3: Control del valor de una salida analgica de Arduino mediante la posicin X e Y del ratn sobre la pantalla de ejecucin de Processing
Con este ejemplo se trata de conseguir variar el valor de la seal de salida (grado de iluminacin del LED) de dos salidas analgicas de Arduino (salida 9 y salida 11)
Prctica 3: Control del valor de una salida analgica de Arduino mediante la posicin X e Y del ratn sobre la pantalla de ejecucin de Processing
import processing.serial.*; import cc.arduino.*; Arduino arduino; void setup() { size(512, 512); // Definimos la ventana sobre la que se mover el ratn arduino = new Arduino(this, Arduino.list()[1], 57600); } void draw() { //Cambia el clor de la venta en funcin de la posicin X del ratn background(constrain(mouseX / 2, 0, 255)); // Recoge el valor de la posicin del ratn de la coordenada X y lo enva a la salida // analgica 11 arduino.analogWrite(11, constrain(mouseX / 2, 0, 255)); // Recoge el valor de la posicin del ratn de la coordenada Y y lo enva a la salida // analgica 9 arduino.analogWrite(9, constrain(255 - mouseY / 2, 0, 255)); }
Prctica 3: Control del valor de una salida analgica de Arduino mediante la posicin X e Y del ratn sobre la pantalla de ejecucin de Processing
Se trata de realizar la lectura de una seal de entrada digital de Arduino y visualizar su estado mediante el color de fondo de la pantalla de ejecucin de processing. Aspecto de la pantalla de ejecucin del IDE Processing
Botn pulsado
Montaje
Prctica 5:
Con este ejemplo se trata de realizar el encendido y apagado gradual de un LED que conectamos al PIN9 que en este caso actuar como salida analgica enviando a el un valor que oscilar entre 0-255 (encendido) y entre 255-0 (apagado) de manera cclica. En la ventana de datos de Processig se mostrara el valor que se este enviando
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Prctica 5:
/* encendido y apagado gradual de un LED */ import processing.serial.*; import cc.arduino.*; Arduino arduino; int pwm=0; //Variable nivel de iluminacin del LED int ledPin=9; boolean rising=true; // indica si el encendido es hacia arriba de 0-255 void setup() { size(200, 200); arduino = new Arduino(this, Arduino.list()[1], 57600); arduino.pinMode(ledPin, Arduino.OUTPUT); arduino.analogWrite(ledPin, pwm); }
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Prctica 5:
void draw() { arduino.analogWrite(ledPin, pwm); // Escribe el valor pwm en la salida PIN9 del LED println(pwm); // Escribe en la ventana de datos el valor de la variable pwm if(rising) { // contador ascendente hasta llegar a 255 pwm+=2; if(pwm>=255) { rising=false; } }else { pwm-=2; // contador descendente hasta llegar a 0 if(pwm<=0) { rising=true; } } }
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Prctica 5:
Montaje
Prctica 6:
Lectura de un valor analgico y representacin en modo grfico y texto del valor ledo
En este ejercicio se va a leer un valor de una seal analgica presente en la entrada analgica 0 y se va mostrar en la ventana de Processing su valor convertido (01024), su valor real en voltios (0-5) y su representacin grfica. En la figura se muestra lo que queremos conseguir.
Prctica 6:
Lectura de un valor analgico y representacin en modo grfico y texto del valor ledo
// Representacin de valor procedente de un sensor. import processing.serial.*; import cc.arduino.*; int[] xvals; // Array que almacenara los valores ledos int val; // Valor ledo int arrayindex = 0; // Puntero o ndice del array Arduino arduino; int potPin=0; void setup() { size(256, 256); xvals = new int[width]; arduino = new Arduino(this, Arduino.list()[1], 57600); PFont font; font = loadFont("sansserif-24.vlw"); textFont(font); }
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Prctica 6:
Lectura de un valor analgico y representacin en modo grfico y texto del valor ledo
void draw() { background(0); for(int i=1; i<width; i++) { xvals[i-1] = xvals[i]; } // aade un nuevo valor al final del array lee la entrada analgica (0..1024), divide su valor por 4 (0..255) val = arduino.analogRead(potPin); xvals[width-1] = val/4; // dibuja el array for(int i=1; i<width; i++) { stroke(255); point(i, 255-xvals[i]); } textAlign(RIGHT); text(val, 200, 30); text(5.0*(xvals[width-1]/255.0)+"V",200,60); }
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Prctica 6:
Montaje
Lectura de un valor analgico y representacin en modo grfico y texto del valor ledo
MTODO 2
Ejemplos de control de Arduino mediante Processing utilizando el intercambio de datos a travs del puerto serie
IDE Processing (Intercambiamos datos con Arduino)
Arduclema
Prctica 7: Control de tres LEDs desde las teclas 1,2 y3 En este ejemplo queremos controlar el encendido y apagado de cualquiera de los tres LEDs conectados a las salidas digitales PIN13, PIN12, PIN11 mediante las teclas 1, 2 y 3 respectivamente actuando estas en modo biestable (una pulsacin enciende la siguiente pulsacin apaga)
En este ejemplo se trata de controlar el brillo de un LED conectado en la salida PIN9 que actuar como salida Analgica PWM. El valor de la cantidad de brillo lo enva Processing en funcin de la posicin X del ratn sobre la ventana de ejecucin de Processing.
int ledPin= 9; // selecciona el PIN para el LED int val; void setup() { beginSerial(9600); pinMode(ledPin, OUTPUT); // declara el LED como salida } void loop(){ val= serialRead();// lee el valor del puerto if(val!= -1) { analogWrite(ledPin, val); } }
Prctica 8: Controlar el brillo de un led con el ratn Programa para Processing // Control del brilo de un led mediante el ratn import processing.serial.*; Serial port; void setup() {
size(255, 255); port = new Serial(this, Serial.list()[1], 9600); frameRate(10); }
void draw() {
background(0); port.write(mouseX); }
Montaje
PIN9
Con esta aplicacin se trata de cambiar el color de una circulo dibujado en la pantalla de ejecucin e Processing en funcin de la seal analgica leda a travs del puerto serie que la tarjeta Arduino lee de una de sus entradas analgicas (entrada0).
Programa para Arduino // Envo de Entrada analgica 0 al puerto serie int potPin=0; // Designa el numero de entrada analgica void setup(){ Serial.begin(19200); //Configura la velocidad de transmisin con el puerto } void loop(){ int val=analogRead(potPin); // Define val como el valor ledo del puerto val=val/4; //Acondiciona el valor ledo para ajustarse al tamao de ventana Serial.print(val,BYTE); // enva val al puerto en formato BYTE delay(75); // espera 75 ms }
/* Lectura Simple de una variable analgica * Lee el valor a travs del puerto serie y cambia el color del circulo */ import processing.serial.*; String portname = "COM4"; // Se selecciona el puerto por el que se realizar la comunicacin Serial port; // Crea un objeto de la clase Serial int val=100; // Valor recibido del puerto con un valor inicial void setup() { size(400, 400); colorMode(HSB, 255); ellipseMode(CENTER); // dibuja el centro de la elipse noStroke(); frameRate(30); smooth(); port = new Serial(this, portname, 19200); // Abre el puerto conectado a la tarjeta } void draw() { if (port.available() > 0) { // Si el dato a leer est disponible val = port.read(); // lee y almacena el valor } background(99); // Dibuja la figura fill(val,255,255); // este esta en formato HSB, el primer dato es el color ellipse(width/2, height/2, 250,250); }
Curso de Arduino. Nivel Bsico: Prcticas Jos Manuel Ruiz Gutirrez
Montaje
Prctica 10: Pelota cambiando de tamao y botando Con este ejemplo se va cambiar el tamao de una pelota mediante un potencimetro dibujndose como un crculo de color blanco en la pantalla que a la vez estar permanentemente movindose, rebotando en las paredes de la pantalla de ejecucin de Processing
Programa para cargar desde el IDE Arduino // Envo de Entrada analgica 0 al puerto serie int potPin=0; // Designa el numero de entrada analgica void setup(){ Serial.begin(19200); //Configura la velocidad de transmisin con el puerto } void loop(){ int val=analogRead(potPin); // Define val como el valor ledo del puerto val=val/4; //Acondiciona el valor ledo para ajustarse al tamao de ventana Serial.print(val,BYTE); // enva val al puerto en formato BYTE delay(75); // espera 75 ms }
Montaje
Vamos a realizar un ejemplo que consistir en manejar una pala de pin-pong mediante un potencimetro colocado a la entrada analgica 0 de la tarjeta Arduino. El mtodo que vamos utilizar es el mtodo 2 es decir el de intercambio de datos entre la tarjeta Arduino y Processing a traves del puerto de comunicacin serie en el que esta conectado Arduino
// Si la pelota toca la parte superior o inferior del borde, cambia direccin if(ball_y > height-ball_size) { dy = dy * -1; } if(ball_y < ball_size) { dy = dy * -1; } // Dibuja la pelota fill(255); ellipse(ball_x, ball_y, ball_size, ball_size); // Dibuja la paleta fill(153); rect(width-dist_wall, paddle_y, paddle_width, paddle_height); }
Montaje