Ejercicio 21: Control de luz
Girando un potenciómetro se varía la intensidad de la luz que produce el LED.
| Novedades hardware | Novedades software |
| | Mapeado de señales analógicas. |
Requisitos:
- Un LED, una resistencias de 220 ohmios
- Un potenciómetro (ej.:100K)
Planteamiento: Regula la intensidad de luz manualmente.
Presentación: Mapeado de señales analógicas.
Ahora ya transformamos una señal analógica de entrada en una señal analógica de salida.
Como ya sabemos, las señales analógicas de entrada son transformadas en digitales por el conversor analógico-digital que tiene incorporado el microprocesador.
Por otro lado, para producir una señal de salida analógica, el micro usa un proceso de simulación que se denomina PWM que son las siglas en inglés de modulación de la anchura del pulso.
En este proceso se usan señales digitales para simular señales analógicas. Lo que hace es enviar pulsos digitales (de 5V y 0V) de forma que el promedio entre el tiempo que está a 5V y el que está a 0V da un voltaje efectivo intermedio. La salida analógica tiene un rango de valores entre 0 y 255, correspondiendo el 0 a 0V y el 255 a 5V.
De esta forma, internamente se transforman valores digitales.
Por lo tanto, tenemos que transformar valores entre 0 y 1024 en valores entre 0 y 255, lo que se consigue dividiendo entre 4.
Esta división la implementamos con una función.
Variantes:
- Haz un mapeado que resulta en salidas en la mitad inferior de los valores(de 0V a 2.5V) y otro en la mitad superior (de 2.5V a 5V) para todos los valores de las entradas.
VIDEO DEL EJERCICIO 21
CODIGO FUENTE
Copyright (C) 2006 Juan Carlos Alonso de Mena
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation;
See the GNU General Public License for more details?
int led=9;
int pot=0;
int medida=0; //variable que guarda el valor de la señal en la entrada analógica
//no se necesita setup, no se usa ningún PIN digital
mapa (int medida){ //función que traduce los valores de la entrada analógica(0-1024) a
return (medida/4); // valores en la salida analógica (0-255)
}
void loop(){
medida=analogRead(pot); //guarda en la variable medida el valor de la señal de la entrada analógica
analogWrite(led,mapa(medida)); //envía a la salida analógica el valor que devuelve la función mapa
} //aplicada sobre el valor de la variable medida
Volver?
Copyright (c) 2006 Juan Carlos Alonso de Mena
Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.2 or any later version published by the
Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts. A copy of the license is included in the section entitled
GNU Free Documentation License?.