Usaremos como referencia un tutorial anterior (ver el siguiente link: "Comunicación serial (Primera parte)"), vamos a leer el valor de la resistencia de un potenciómetro conectado al pin A0 de Arduino. Éstos datos se van a mostrar a través de Processing usando una librería graficadora para mostrar los datos usando dos ejes Y y X tal como sería el caso de una función.
La conexión es la siguiente:
La conexión es la siguiente:
# PIN A0 : Arduino UNO => PIN CENTRAL : Potenciómetro
# GND : Arduino UNO => EXTREMO : Potenciómetro
# 5V : Arduino UNO => EXTREMO : Potenciómetro
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL CONEXION: Arduino (A0) : Pin central potenciometro Arduino (GND): Pin extremo potenciometro Arduino (5V) : Pin extremo potenciometro El siguiente programa nos ayuda a realizar la lectura del votlaje del potenciometro y mostrarlo por puerto serial. Autor: Carolina G. http://beetlecraft.blogspot.pe/ El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor */ int sensor = 0; // Indica el pin de entrada analogico int val = 0; // Variable de almacenamiento del valor del potenciometro void setup() { Serial.begin(9600); // Inicia el Puerto Serial } void loop() { val = analogRead(sensor) / 4; // Lee el valor del potenciometro y lo convierte en 1 byte (0 a 255) Serial.write(val); // Envia la variable al puerto serial delay(100); // Espera 100 milisegundos }
Al abrir el Monitor Serial de Arduino obtenemos el siguiente resultado:
La librería que buscaremos es "gwoptics", para ello, debemos la buscaremos en "Sketch - Import library - Add library" para saber un poco más puede entrar al siguiente link "Descargar librerías en Processing".
Luego damos click en "Install".
Esperamos que la librería se descargue.
El programa que usaremos en Processing es el siguiente:
/* PROGRAMA PARA GRAFICACION CON PROCESSING CONEXION: Arduino (A0) : Pin central potenciometro Arduino (GND): Pin extremo potenciometro Arduino (5V) : Pin extremo potenciometro El siguiente programa nos ayuda a realizar la lectura del voltaje del potenciometro. El sketch de graficos usa cadenas en código ASCII desde el puerto serial a 9600 baud y la grafica. Debe recibir valores de 0 a 255 y luego pasar a una nueva línea Autor: Carolina G. http://beetlecraft.blogspot.pe/ El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor */ // Configuracion de la libreria de Graph2D import org.gwoptics.graphics.graph2D.Graph2D; import org.gwoptics.graphics.graph2D.LabelPos; import org.gwoptics.graphics.graph2D.traces.Line2DTrace; import org.gwoptics.graphics.graph2D.traces.ILine2DEquation; Graph2D g; // Creacion del objeto para Graph 2D import processing.serial.*; // libreria para uso de puerto serial Serial puerto; // El puerto serial int xPos = 70; // Posicion horizontal del grafico float val; // Data que se recibe del puerto serial, tipo float void setup () { size(500, 370); // Tamano de la pantalla background(100); // Color de la pantalla de fondo String ArduinoPuerto = Serial.list()[0]; // Encuentra el primer puerto serial para iniciar la comunicacion puerto = new Serial(this, ArduinoPuerto, 9600); // Inicio de la comunicacion con el primer puerto encontrado g = new Graph2D(this, 400, 300, false); // Definicion de los ejes Y y X g.setYAxisMin(0); // Valor minimo del eje Y g.setYAxisMax(5); // Valor maximo del eje Y g.setYAxisLabel("Voltaje"); // Rotulado del eje Y g.setXAxisMin(0); // Valor minimo del eje X g.setXAxisMax(5); // Valor maximo del eje X g.setXAxisLabel("Tiempo"); // Rotulado del eje X g.setXAxisTickSpacing(0.5); // Resolucion del espaciamiento del eje X g.setYAxisTickSpacing(0.5); // Resolucion del espaciamiento del eje Y g.position.x = 70; // Offset del eje X g.position.y = 20; // Offset del eje Y } void draw () { lectura(); // Rutina de adquisicion de datos del potenciometro float val_mod = val; // Modificacion del dato leido val_mod = 50 + (350 - 50)/(5 - 0) * val_mod; // Extrapolacion lineal para poder ubicar el grafico println("Valor del potenciometro: " + val); // Muestra el dato en el puerto serial println("Valor modificado: " + val_mod); // Muestra el dato en el puerto serial modificado g.draw(); // Graficacion de los ejes stroke(24, 237, 235); // Color de la linea // Tipos de graficaciones // line(xPos, height - val_mod, xPos, height - 50); // Dibuja la linea // point(xPos, height - val_mod); // Dibuja puntos // ellipse(xPos, height - val_mod, 0.5, 0.5); // Dibuja por elipses println("Valor modificado: " + val_mod); // Muestra el dato en el puerto serial modificado if (xPos >= 470) { // Verifica que hemos llegado al limite de pantalla xPos = 70; // Reseteo de la posicion a la posicion inicial background(100); // Fondo de pantalla } else { xPos++; } // Nos movemos en la posicion horizontal } void lectura() { if (puerto.available() > 0) { // Si hay datos en el buffer del puerto serial val = puerto.read(); // Lectura de los datos del puerto serial val = map(val, 0, 255, 0, 5); // Conversion del valor leido } }
El primer resultado es el siguiente:
Si quitamos "//" a la línea siguiente:
// Tipos de graficaciones line(xPos, height - val_mod, xPos, height - 50); // Dibuja la linea // point(xPos, height - val_mod); // Dibuja puntos // ellipse(xPos, height - val_mod, 0.5, 0.5); // Dibuja por elipses
El resultado es:
Si quitamos "//" a la línea siguiente:
// Tipos de graficaciones // line(xPos, height - val_mod, xPos, height - 50); // Dibuja la linea point(xPos, height - val_mod); // Dibuja puntos // ellipse(xPos, height - val_mod, 0.5, 0.5); // Dibuja por elipses
El resultado es:
Si quitamos "//" a la línea siguiente:
// Tipos de graficaciones // line(xPos, height - val_mod, xPos, height - 50); // Dibuja la linea // point(xPos, height - val_mod); // Dibuja puntos ellipse(xPos, height - val_mod, 0.5, 0.5); // Dibuja por elipses
El resultado es:
Autor:
No hay comentarios:
Publicar un comentario