Tutorial - Comunicación serial (Cuarta parte - Multivariable)

DESARROLLO DEL EXPERIMENTO
Para esta experiencia, realizaremos la lectura de dos potenciómetro que lo realizará un Arduino que tendrá la función de mandar los datos a la computadora por puerto serial y lo mostrará por medio de un gráfico en Processing. Las conexiones se muestran a continuación:

# PIN A0 : Arduino UNO => PIN CENTRAL : Potenciómetro 1
# PIN A1 : Arduino UNO => PIN CENTRAL : Potenciómetro 2
# GND : Arduino UNO => EXTREMO : Potenciómetro 1 y 2
# 5V : Arduino UNO => EXTREMO : Potenciómetro 1 y 2


El programa usado para Arduino es el siguiente:
/*
   PROGRAMA DE PRUEBA DE COMUNICACION SERIAL CON MULTIVARIABLE
   CONEXION:
             Arduino (A0) : Pin central potenciometro 1
             Arduino (GND): Pin extremo potenciometro 1
             Arduino (5V) : Pin extremo potenciometro 1

             Arduino (A1) : Pin central potenciometro 2
             Arduino (GND): Pin extremo potenciometro 2
             Arduino (5V) : Pin extremo potenciometro 2
             
   El siguiente programa nos ayuda a realizar la lectura del votlaje de 2 potenciometro y mostrarlo por
   puerto serial.
   
   Autor: Renato H.
   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 POT_1 = 0, POT_2 = 0; // Variable de almacenamiento del valor del potenciometro

void setup(){
  Serial.begin(9600); // Inicio de comunicacion a 9600 bps
}

void loop(){
  POT_1 = analogRead(A0);              // Lectura del pin A0 correspondiente al voltaje
  POT_2 = analogRead(A1);              // Lectura del pin A0 correspondiente al voltaje  
  POT_1 = map(POT_1, 0, 1023, 0, 100); // Conversion de datos a formato de 0 a 100%
  POT_2 = map(POT_2, 0, 1023, 0, 100); // Conversion de datos a formato de 0 a 100%  
  Serial.print('P');                   // Cabecera de inicio de comunciacion
  Serial.print(",");                   // Separacion de la cabecera
  Serial.print(POT_1, DEC);            // Envio del dato de lectura del potenciometro 1
  Serial.print(",");                   // Separacion del primer dato
  Serial.print(POT_2, DEC);            // Envio del dato de lectura del potenciometro 2
  Serial.print(",");                   // Separacion del segundo dato
  Serial.println();                    // Manda un LF (Line feed)
  delay(100);                          // Espera de 100 ms
}
El resultado abriendo el Monitor Serial se muestra a continuación:


El programa en Processing es el siguiente:
/* 
   PROGRAMA DE PRUEBA DE COMUNICACION SERIAL CON MULTIVARIABLE
   CONEXION:
             Arduino (A0) : Pin central potenciometro 1
             Arduino (GND): Pin extremo potenciometro 1
             Arduino (5V) : Pin extremo potenciometro 1

             Arduino (A1) : Pin central potenciometro 2
             Arduino (GND): Pin extremo potenciometro 2
             Arduino (5V) : Pin extremo potenciometro 2
             
   El siguiente programa nos ayuda a realizar la lectura del voltaje de 2 potenciometro y mostrarlo por
   puerto serial.
   
   Autor: Renato H.
   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
*/

import processing.serial.*; // Inicio de la comunicación serial
Serial puerto;              // Crea el puerto serial
char cabecera = 'P';        // Cabecera de inicio de mensaje
short LF = 10;              // ASCII linefeed
int POT_1, POT_2;           // Variable de almacenamiento del potenciometro

void setup() {
  size(100, 150); // Tamaño de la pantalla

/* NOTA IMPORTANTE:

   El primer puerto serial reconocido por Serial.list() deberia ser tu Arduino. Si no es asi, borra los 
   "//" de la ultima linea de este comentario. Ponle PLAY al sketch de nuevo para ver la lista de puertos 
   seriales. Entonces, cambia el 0 al numero de puerto al que está conectado tu arduino
*/

  // println(Serial.list());
  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
}

void draw() {
  String mensaje = puerto.readStringUntil(LF); // Lee todo el mensaje hasta encontrar el linefeed
  
  if (mensaje != null) { // Si el dato no es null
    
    // Muestra en pantalla del mensaje original
    print("Mensaje original: ");
    print(mensaje);
    
    String [] data = mensaje.split(","); // Division del mensaje a partir de la coma ","
    
    if (data[0].charAt(0) == cabecera && data.length > 3){ // Verifica la cabecera y el tamaño del dato
      
      // Lectura de los datos divididos
      for (int i = 1; i < data.length - 1; i++){ 
        println("Valor potenciometro " + i + ": " + data[i]); 
        POT_1 = Integer.parseInt(data[1]); // Conversion del dato 1 del String a Integer 
        POT_2 = Integer.parseInt(data[2]); // Convserion del dato 2 del String a Integer 
      }
      
      println(); // Espacio de division para el siguiente mensaje
    }
  }
  background(167);         // Rellena el espacio de trabajo de color plomo
  fill(0);                 // Llena el espacio del rectangulo dibujado en negro
  rect(0, 0, POT_1, 50);   // Dibujo del rectangulo 1
  rect(0, 100, POT_2, 50); // Dibujo del rectangulo 2
}
El resultado que nos muestra en pantalla es el siguiente:




Autor: 

No hay comentarios:

Publicar un comentario