|   FOROS      |     Tutoriales    |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 WAMP - PHP - MySQL
   Elastix - VoIP Cosas de Windows Webs interesantes Arduino
  Estación meteorológica      

 


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial                    Return to index tutorial

____________________________

Arduino. Button. PWM.

 

6.- Modulación por Anchura de Pulso. PWM.

Hemos visto que en Arduino podemos configurar los ter minales del 0 al 13 como entradas o salidas DIGITALES.

También hemos visto que disponemos de 6 entradas ANALÓGICAS.

Pero en principio no disponemos de salidas ANALÓGICAS. Para solventarlo utilizamos el PWM.

El nivel de salida se obtiene mediante PWM, modulación por anchura de pulso, cuanto más áncho es el pulso más tiempo hay voltios en la salida. Al LED le estamos aplicando siempre la misma tensión, lo que ocurre que se la aplica pulsos muy rápidos, de unos 500 Hz, por eso no se ve el parpadeo.

En PWM la frecuencia se mantiene, en nuestro caso 500 Hz. La amplitud del pulso también se mantiene 5 V. Lo que cambia es la anchura del pulso.

El Duty Cycle es la anchura del pulso, en realidad es la relación entre el tiempo de pulso y el período en porcentaje.

Imagínate que le aplicamos esa serie de pulsos muy rápidos a un LED. Si el Duty Cycle es 0% el LED no encenderá, si el Duty Cicle es del 50% se iluminará y si el Duty Cicle es del 100% iluminará lo máximo en este circuito.

De manera que cuando mayor sea el número que pongamos en el analogWrite(LED9, DutyCycle), más ancho será el pulso y más iluminará.
Podemos entregar al analogWrite un número del 0 al 255 y obtendremos en su correspondiente Pin unos pulsos como indica esta imagen. De tal manera que cuando el número sea 255, se está estableciendo un Duty Cycle de 100%. Cuando el número sea 125, el Duty Cycle será del 50% y cuando le número se 0, el Duty Cycle será 0.

Según el número del 0 al 255, el Duty Cycle variará de 0 a 100.

Los teminales marcados con virgulilla (~) pueden actuar con PWM.
Son el 3, 5, 6, 9, 10 y 11.

____________________________________
Regulación de la lumininosidad de un LED

Disponemos de un potenciómetro y un LED conectado a la ~9. Al cambiar el valor del potenciómetro cambiará la luminosidad del LED.

Recordamos que cuando movemos el potenciómetro podemos obtener 1024 niveles distintos.

Al PWM le aplicamos 255 niveles distintos de Duty Cycle.

Sí, es un poco lioso de entender:

- Con el potenciómetro conseguimos 1024 niveles distintos.
- Mediante el map cambiamos esos niveles a 255 que son los que le vamos a aplicar a la salida D9
- Estos 255 niveles el 100% de todos los niveles que podemos aplicar con un PWM.

- Es decir, el nivel que de tensión que el potenciómetro le aplica a la entrada Analógica A2 cuando está a su mitad es de 512.
- Ese nivel produce en la salida PWM D9 127, es decir el 50% del pulso.

- Fíjate que la línea del #define no termina en punto y coma; en cambio el int sí termina en punto y coma;

#define LED9 9
int P2 = A2;

Código
/*
  Juan A. Villalpando
  kio4.com
 */
 
// Movemos un potenciómetro conectado a la entrada Analógica A2.
// Obtenemos 1024 valores distintos.
// Eso valores con lo cambiamos a 255 mediante map.
// Le aplicamos al LED9 una PWM con el Duty Cycle correspondiente.

#define LED9 9 // 
int P2 = A2; // ANALOG IN: A2, va al terminal intermedio del potenciómetro.
int entrada; int DutyCycle; void setup() { // Los terminales ANALOG IN no hay que configurarlos porque siempre son de entrada. pinMode(LED9, OUTPUT); Serial.begin(9600); } void loop() { entrada = analogRead(P2); // Obtenemos 1024 valores DutyCycle = map(entrada, 0, 1023, 0, 255); // Cambiamos los 1024 valores a 255. analogWrite(LED9, DutyCycle); // Enviamos a LED9 un Duty Cycle del 0 al 255. Serial.print("Entrada: "); Serial.print(entrada); Serial.print(" Duty Cycle: "); Serial.print(DutyCycle); Serial.println();
// Línea repetida, mejor así... Probar esta forma: Serial.println("Entrada: " + entrada + " Duty Cycle: " + DutyCycle); delay(20); }

____________________________________
PWM

- Los motores de los ventiladores de ordenadores están alimentados mediante PWM, les llega una señal pulsatoria, dependiendo de la anchura del pulso, el motor irá más rápido o más lento.

- Duty Cycle es la anchura del pulso, la relación entre el tiempo de estado alto y el tiempo total.

- Fíjate que la tensión siempre es 5V, lo que cambia es la anchura del pulso, cuando más ancho sea más tiempo habrá tensión en el LED y se verá más iluminado.

____________________________________
Resumen de entradas y salidas digitales y analógicas.

En ANALÓGICO (A0, A1, A2, A3, A4, A5)

IMPORTANTE: analogRead(P2); para leer el terminal 2 analógico. Importante que lo recuerdes.

En DIGITAL (2.... 13)

IMPORTANTE: digitalWrite(pin13, HIGH); para escribir en el terminal 13 digital. Importante que lo recuerdes.

IMPORTANTE: digitalRead(pin2); para leer el terminal 2 digital. Importante que lo recuerdes.

En DIGITAL (3, 5, 6, 9, 10, 11)

IMPORTANTE: analogWrite(LED9, DutyCycle); para escribir en el terminal 9 un cierto Duty Cycle.

________________________________

Si quieres que este tutorial se mantenga y lo actualice con más programas, escríbeme un correo a Juan Antonio: juana1991@yahoo.com

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información