Ejercicio 21: Control de luz

Girando un potenciómetro se varía la intensidad de la luz que produce el LED.

Novedades hardwareNovedades 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?.