lunes, 11 de abril de 2016

Salidas PWM en arduino

Los pines pwm permiten simular una salida analógica con el arduino con valores de 0V a 5V, estos valores los produce activando el pin durante un tiempo determinado con una frecuencia de 500Hz, este tiempo vendrá determinado por el valor que escribamos en la salida con la función analogWrite(), en ella podremos escribir valores entre 0 y 255 siendo 0 siempre apagado y 255 siempre encendido, esto se entiende mejor en esta gráfica, las líneas verdes representan periodos de 2 milisegundos:

Bien ahora llega el momento del ejemplo. En esta entrada veremos como variar la intensidad de un led utilizando el valor de entrada de un potenciómetro y un pin pwm, los pines pwm son todos aquellos marcados con ~, o lo que es lo mismos los pines 3, 5, 6, 9, 10, y 11 en el arduino uno.

Al final de la entrada dejare el código completo del ejemplo:

Comencemos con el código:
Primero declaramos las variables que contendrán el valor de salida, el valor de entrada del potenciómetro y los pines que utilizaremos:

   int valor = 0; //Esta variable contendrá el valor del potenciómetro
   int VSalida  = 0; // Mientras que esta contendrá el valor de la salida
   int Led = 9;
   int poten = 0;

Ahora dentro del void setup() iniciamos el puerto serie para poder observar los valores del potenciómetro y de la salida desde el pc y declaramos el pin 9 como salida:

   void setup() 
   {
     pinMode(Led,OUTPUT);
     Serial.begin(9600); 
     Serial.println("Iniciando..."); 
     delay(50);
   }

Dentro del void loop leeremos la entrada analógica del potenciómetro y la convertiremos con la ayuda de la función map(), ya que los valores de salida van de 0 a 255 mientras que los valores de entrada van de 0 a 1023, para luego escribirlos en la salida utilizando la función analogWrite():

  void loop() 
  {
    valor = analogRead(poten);
    VSalida = map(valor,0,1023,0,255); /*En la función map() primero escribimos la variable que             queremos convertir seguido del valor mínimo y del valor máximo de dicha variable, después de           estos valores escribimos los valores a los que deseamos convertir nuestra variable comenzando           tambien por el valor mínimo y luego el máximo aunque estos valores se podrian invertir para              conseguir el efecto contrario por ejemplo: cuando el valor de la variable sea 0 la salida puede ser        255*/
    Serial.print("Valor del potenciómetro: ");
    Serial.println(valor);
    Serial.print("Valor de la Salida: ");
    Serial.println(VSalida);
    analogWrite(Led,VSalida); //Esta función trabaja de una manera parecida a la función                         //digitalWrite() solo que en ella se pueden escribir valores concretos
    delay(50);
  }

Aquí os dejo el cableado:


Código completo:

int poten = 0;
int valor = 0;
int Led = 9;
int VSalida = 0; 
void setup() 
{
 pinMode(Led,OUTPUT);
 Serial.begin(9600); 
 Serial.println("Iniciando..."); 
 delay(50);

}

void loop() 
{
  valor = analogRead(poten);
  VSalida = map(valor,0,1023,0,255);
  Serial.print("Valor del potenciómetro: ");
  Serial.println(valor);
  Serial.print("Valor de la Salida: ");
  Serial.println(VSalida);
  analogWrite(Led,VSalida);
  delay(50);
}

No hay comentarios:

Publicar un comentario