This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

viernes, 1 de septiembre de 2017

GRAFICANDO SEÑAL DEL ADC DE ARDUINO EN PROCESSING PARTE 1

GRAFICANDO SEÑAL DEL ADC DE ARDUINO EN PROCESSING PARTE 1




En este tutorial veremos cómo graficar el voltaje leido por el adc de arduino en processing. Aquí usaremos la comunicación serial para mandar el valor de la conversión a processing para que se pueda graficar.

Aquí el truco consiste en ir leyendo y almacenando los valores en un array cuyo tamaño es igual al ancho de la pantalla creada en processing. Cada vez que llegue un nuevo valor desde arduino a processing iremos eliminando el el valor mas antiguo del array y almancenando en dicha posicion el valor actual. Esto hará que la gráfica se vaya desplazando.

El código en arduino se muestra a continuación:

void setup()
{
Serial.begin(9600);
}

void loop()
{

int valor=analogRead(A0);
Serial.println(valor);

}




El código en processing se muestra a continuación:

///////////////////////////////////////////////////////////
// TALLER DE ARDUINO 2014
// Grafica de una señal de voltaje
//////////////////////////////////////////////////////////
import processing.serial.*;

float adc0; //variable que almacena el valor del adc0 actual
float[] xvals; // arreglo que almacena los valores del adc0 de arduino
float voltaje; //variable que contiene el voltaje actual medido
Serial port; // creamos un objeto serial puerto

void setup()
{
size(400, 400); //frame de 400x400

// la longitud del arreglo sera el ancho del frame
xvals = new float[width];
// creamos una variable font y asignamos un tipo de font
PFont font;
font = loadFont("Arial-Black-30.vlw");
textFont(font); //cargamos el font a nuestro texto
///////////////////////////////////////////////////////

//defininimos parametros para la comunicacion serial
port = new Serial(this, "COM21", 9600);
port.bufferUntil('\n');
////////////////////////////////////////////////////
}


void draw()
{
background(0); //fondo negro
strokeWeight(2);
stroke(0,255,255);


//////////////////////////////////////////////////////////
// deplazamos a la izquierda nuestro arreglo //
// con el objetivo de introducir un nuevo valor al final//
//////////////////////////////////////////////////////////

for(int i=1;i<width;i++)
{
xvals[i-1]=xvals[i];

}
/////////////////////////////////////////////////////////
//graficamos la señal
//////////////////////////////////////////////////////////
for(int i=1;i<width;i++)
{
strokeWeight(5);
stroke(255,0,0);
point(i, height -xvals[i]);//invertimos

}
//nota: recordar que el eje y en processing es invertido
//por ello hay que hacer height-xvals
//////////////////////////////////////////////////////////

//mostramos los voltajes correspondientes a las señales
fill(255,255,0);
textAlign(CENTER);
text(voltaje+" VOLTIOS",200,320);
///////////////////////////////////////////////////////////

}


///////////////////////////////////////////////////////////
//////////////////EVENTO POR SERIAL////
///////////////////////////////////////////////////////////

void serialEvent (Serial port)
{
//leemos los datos hasta encontrar un '\n'
//almacenamos en string cadena
String cadena = port.readStringUntil('\n');

//si la cadena no esta vacia(es decir que recibio datos) entonces
if (cadena!= null)
{
//quitamos los espacios en blanco de la cadena en caso los tenga
cadena = trim(cadena);

float senal=float(cadena);
voltaje = map(senal, 0, 1023, 0, 5);
//mapeamos el valor leido del adc (0-1023) a la escala de nuestro frame
//los valors se mostraran en el ejey "y", asi que debemos escalar respecto a height
adc0 = map(senal, 0, 1023, 0, height);

}
//añadimos los nuevos valores que han llegado al final de arreglo
xvals[width-1]=adc0;

}



Aqui mostramos un video de lo que sería :