Tutorial - Comunicación serial: Parte 1 (Envío y recepción de datos) / Streaming

Para el siguiente experimento, enviaremos un dato que varía entre 0 a 100 que corresponde de 0 a 100%, que es análogo de los 0 a 255 bits que maneja la salida PWM a través de la función "AnalogWrite()", y que se distingue en la intensidad de luz del led, siendo 0% un led apagado y 100% un led totalmente prendido.

Los únicos pines que pueden usar la función de salida PWM en el caso del Arduino UNO de manera nativa son:
# 11
# 10
# 9
# 6
# 5
# 3

A la vez, se leerá en paralelo el valor del voltaje del potenciómetro con formato decimal que se mostrará en pantalla a través del Monitor Serial de Arduino.

La conexión es la siguiente:
# PIN D11 : Arduino UNO => Resistencia => LED : Ánodo
# PIN A0 : Arduino UNO => Potenciómetro : Pin central
# 5V : Arduino UNO => Potenciómetro : Extremo
# GND : Arduino UNO => LED: Cátodo => Potenciómetro : Extremo


El programa usado para el Arduino es el que se muestra:
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL
   CONEXION:
             Arduino (D11) : Anodo del led (pin positivo)
             Arduino (GND) : Catodo del led (pin negativo), extremo del potenciometro
             Arduino (A0)  : Pin central del potenciometro
             Arduino (5V)  : Extremo del potenciometro
     
   El siguiente programa nos ayuda a enviar una trama ingresada por puerto serial para ser leida por el Arduino y 
   ser convertida en el valor del PWM de 0 a 100% (0 - 255 bits) y lee a la vez el potenciometro que va
   al pin A0 de Arduino y lo convierte de 0 a 5V

   NOTA: Los pienes que poseen salida PWM son 3, 5, 6, 9, 10 y 11
     
   Autor: Renato Hurtado
   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
*/

const int led = 11; // Variable asignada al pin led
int data;           // Variable de almacenamiento del dato por puerto serial

void setup() {
  pinMode(led, OUTPUT); // Configuracion del pin led como salida
  Serial.begin(9600);   // Comunicacion serial a 9600 bps
  Serial.println("Ingresar un valor de 0 a 100"); // Mensaje inicial 
  delay(1000);
}

void loop() {
  int pot = analogRead(A0);             // Lecutra del potenciometro
  float pot_mod = pot * (5.0 / 1023.0); // Conversion de 0 - 1023 bits a 0 - 5V en decimales

  // Muestra del potenciometro por pantalla
  Serial.print("Voltaje: "); 
  Serial.println(pot_mod); 
  delay(1000);
  
  if(Serial.available() > 0){ // Lectura del puerto mientras sigue abierto
    data = Serial.parseInt();            // Extraccion del integer del dato leido
    int pwm = map(data, 0, 100, 0, 255); // Cambio de formato del dato de 0 - 100%, a 0 - 255

    // Muestra del dato en pantalla
    Serial.print("Porcentaje: "); Serial.print(data); Serial.println(" %");
    Serial.print("PWM: "); Serial.println(pwm);
    
    analogWrite(led, pwm); // Salida PWM en el led de 0 a 255
    
    while (Serial.available() > 0){Serial.read();} // Rutina de limpieza del buffer del puerto serial
  }
}
Los resultados son los siguientes:




Autor: 

No hay comentarios:

Publicar un comentario