Pic
shadow

Este circuito es un ejemplo de cómo utilizar las entradas y salidas analógicas de Arduino

Vamos a utilizar un ejemplo que viene ya con arduino, en el entorno de programación seleccionamos menú archivo =>ejemplos => Analog y hacemos clic sobre AnalogInOutSerial

echando un vistazo al código vemos que primero está la definición de los pines de entrada y salida. Vamos a utilizar una entrada analógica, así que el pin de entrada tendrá que estar en la tira de pines marcados como Analog. Y para la salida vamos a utilizar PWM, en Arduino las salidas que soportan PWM están marcadas con el símbolo ~.

También veremos dentro de setup que el puerto serie se inicializa a una velocidad de 9600 baudios

Si bajamos un poco más, veremos el loop del programa, lo primero que se hace es leer el pin analógico que hemos seleccionado unas lineas más arriba en la configuración, esto se hace usando la función "analogRead" y se almacena en una variable llamada sensorValue. Con estos datos se calcula el valor de la salida.

Para calcular este valor se utiliza la función map, cuya misión es adaptar los rangos de valores a diferentes variables. El ADC del chip ATMega que lleva Arduino permite lee valores analógicos con una resolución de 10 bits, lo que quiere decir que cuando lea la máxima tensión de entrada (5V) devolverá el valor 1023.

Por otro lado, la salida la vamos a dar con el generador de PWM de arduino, que funciona con un registro de 8bit, lo que significa que cómo máximo puede entregar el valor 255. Por eso es necesario utilizar la función map, que hará el calculo proporcional entre las dos escalas, de esta forma, cuando la entrada devuelva su valor máximo (1023), la salida entregará su valor máximo (255). Cuando la entrada sea 0 la salida también será 0, y map se encargara de calcular todos los valores intermedios de forma proporcional.

La sintaxis de map es esta:

		map(nombreDeLaVariable,valorMinimoEscala1,valorMáximoEscala1,valorMinimoEscala2,valorMáximoEscala2);
		

En el ejemplo:

		map(sensorValue,0,1023,0,255);
		

Cuando ya tenemos ese valor, que esta calculado en la line "outputValue = map(sensorValue,0,1023,0,255) escribiremos dicho valor en la salida utilizando la función analogWrite

  • Protoboard Ampliar
    Esquema Ampliar

Si ponemos el circuito en marcha, veremos que los leds (que en este caso son nuestras salidas), se comportan de forma diferente dependiendo de cómo giremos en potenciometro (nuestra entrada).

		//variables
		int plot,valor,led;
		
		//asignación de valores
		plot = 0;
		led = 9;

		void setup(){
			modePin(plot,INPUT);
			modePin(led,OUTPUT);
		}

	void loop(){
		//Leemos el valor de la resistencia variable
		valor = analogRead(plot);

		//la mapeamos a un valor entre 0 y 255
		liminosidad = map(valor,0,1023,0,255);

		//Transimitimos lo leido a la intensidad del led
		analogWrite(led,valor);

	}