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
La conexión es la siguiente:
# PIN D11 : Arduino UNO => Resistencia => LED : Ánodo
# GND : Arduino UNO => LED : Cátodo
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL CONEXION: Arduino (D11) : Anodo del led (pin positivo) Arduino (GND): Catodo del led (pin negativo) 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) 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 } void loop() { 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 } }
El programa en Processing que vamos a probar es un sketch en el cual creamos un campo de texto con un nombre dado "PWM", y detectamos el momento en el que se da un "enter". El valor ingresado se verá en el visualizador serial que posee Processing en la parte inferior de la pantalla del IDE y se enviará al Arduino para ser convertido en la señal PWM.
El programa en Processing es el siguiente:
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL El siguiente programa nos ayuda a escribir un dato en un campo de texto correspondiente al PWM que va de 0 a 100 %, este va asignado al pin 11 del Arduino 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 controlP5.*; // Importacion del la libreria ControlP5 ControlP5 cp5; // Creacion del objeto cp5 String[] cabeceraCT = {"PWM"}; // Cabecera del campo de texto String pwm; // Variable de almacenamiento del PWM short LF = 10; // ASCII linefeed import processing.serial.*; //Inicio de la comunicación serial Serial puerto; // Crea el puerto serial void setup() { size(200,100); // Tamano del canvas ancho, alto 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 PFont fuente = createFont("arial",20); // Tamano de la fuente cp5 = new ControlP5(this); // Inicializacion de la funcion cp5 for(String nombre: cabeceraCT){ // Orden de campo de texto y cabecera cp5.addTextfield(nombre) // Crea un campo de texto .setPosition(20,20) // Ubicacion del texto en coordenadas x, y .setSize(100,40) // Tamano del campo de texto ancho, alto .setFont(fuente) // Fuente del texto .setColor(color(255,255,255)) // Color de la fuente r, g, b ; } textFont(fuente); } void draw() { String mensaje = puerto.readStringUntil(LF); // Lee todo el mensaje hasta encontrar el linefeed if (mensaje != null) { // Si el dato no es null print(mensaje); // Muestra en pantalla del mensaje original de Arduino } background(0); // Rellena el espacio de trabajo de color negro } void controlEvent(ControlEvent evento) { // Control de evento de entrada de texto if(evento.isAssignableFrom(Textfield.class)) { // Revisa si se ha ingresado un texto y apretado "enter" // Muestra nombre de la cabecera del campo de texto y el texto escrito println("Texto introducido: '" + evento.getName()+"': " + evento.getStringValue()); // Lectura del valor del PWM ingresado y muestra de PWM por monitor serial pwm = evento.getController().getStringValue(); println("PWM enviado: " + pwm); puerto.write(pwm); // Escritura del valor del PWM } }El resultado es el siguiente:
Autor:
No hay comentarios:
Publicar un comentario