Sunteți pe pagina 1din 2

FUNCIN MAP DE ARDUINO EN SCRATCH 2.0.

Posted on 18/05/2014 by admin_expeduca


El entorno de programacin Arduino tiene una funcin muy til llamada map, aunque a buen seguro
la primera vez que te topes con ella te preguntars que para qu diblos sirve. Lo descubriremos en
seguida:
Imaginos que conectamos a nuestra placa Arduino una fotoresistencia (LDR para los amigos) a una
de sus entradas analgicas, las que nos sirven habitualmente para conectar sensores. E imaginemos
que tenemos una lmpara LED en alguna salida digital de las que permiten regular potencia con el
denominado modo PWM. Perfecto. Nuestro reto consistir en programar el LED para que luzca con
una intensidad inversamente proporcional a la iluminacin ambiental. Es decir, cuanto ms luz haya
en la sala, menos lucir el LED, y al contrario, cuanta menos luz tenga la habitacin, con ms
potencia lucir el LED. Podamos haberlo hecho ms fcil?, posiblemente, pero as ser ms
divertido. Adems, quin dijo miedo?.
Ya tenemos el reto y el montaje. Solo nos falta programarlo y aqu es donde aparece un problema
interesante de resolver: Mientras que los sensores en Arduino pueden diferenciar 1024 niveles o
valores distintos (en este caso, intensidades de luz ambiental), los pines PWM digitales pueden
graduarse entre 0 y 255 (la intensidad con que queramos que luzca el LED). Cmo hacemos para
respetar la proporcionalidad entre el dato de entrada y la potencia que corresponde aplicar?. Aqu es,
colegas, donde la funcin map nos rescata de sudar tinta. Tan solo necesitamos introducir en la
funcin los valores mximo y mnimo entre los que puede variar la entrada (LDR) as como el mximo
y mnimo del rango de salida (LED). Para cada valor medido en cada momento por el sensor
(LDR), map nos devuelve el valor proporcional de salida (PWM a aplicar al LED).
Pasamos ahora a la parte matemtica que hay detrs. En la pgina oficial de Arduino, sta es la
informacin de referencia. En la notacin utilizaremos Valor para la lectura de entrada del sensor que
queremos map-ear. Ent_m y Ent_M son los valores mnimo y mximo del rango en el que se
mueveValor. Del mismo modo, Sal_m y Sal_M son, respectivamente, los valores mnimo y mximo del
rango de salida. Las operaciones que efecta son las siguientes:
map = ( (Valor Ent_min) * (Sal_M Sal_m) / (Ent_M Ent_m) ) + Sal_m
Pongamos un ejemplo: si en la habitacin hubiese poca luz, la LDR puede darnos un valor (recordad,
entre 0 y 1024), por ejemplo de 120. Introduciendo ese valor en la funcin map, obtendremos 225. Si
nos fusemos a los extremos, en una habitacin a oscuras, la LDR nos dara una lectura de 0 (o casi
0), y la funcin map nos devolvera 255 (o casi casi), es decir, la luz a tope de potencia. Al contrario,
en una sala con mucha luz, el valor de la LDR se acercara a 1024 y la operacin map devolvera
prcticamente 0, que correspondera con el LED apagado (o muy flojito).
Hay que reconocer que la operacin es fea, pero en un plis-plas la dejamos mucho ms bonita en
Scratch. Como habris descubierto, Scratch 2.0 ha trado muchas novedades, entre ellas una muy
esperada: crear nuestros propios bloques de cdigo. sta es la pinta que tiene la funcin map que he
preparado

Esta funcin almacena en una variable que previamente he definido como map_valor, el resultado de
la funcin map de Arduino. Veris que al frente de la parte matemtica (en verde) se encuentra la
operacin round. Esto es debido a que la funcin map debe devolver valores enteros y round nos
redondea los decimales. En nuestro montaje de la LDR y el LED, utilizara el bloque recin creado de
esta forma. Los bloques negros son los que la extensin s2a_fm incorpora para el control de Arduino:

Os lo explico un poco. He conectado la LDR al pin analgico 1 y el LED al pin digital 9. El


bloque maptoma como dato de entrada el valor de la LDR y lo almacena en map_valor, que a su vez
se utiliza como salida PWM en el pin 9. Observad que he puesto el rango de lectura de la LDR de
mayor a menor. Con ese truco consigo que cuanta menos luz se detecte, ms potencia se suministra
al LED y viceversa.

Bonus:
En nuestra anterior entrada desarrollamos un juego en el que dos LDR nos servan como joystick
virtual para controlar a Scratch. En principio no utilic la funcin map, pero ya que la hemos
estudiado, he redefinido los bloques que controlaban el movimiento y ste es el resultado:

Las LDR estn conectadas a los pines analgicos 0 y 1. La posicin de Scratch la marca la diferencia
de lecturas de las resistencias. Por eso definimos los rangos de entrada desde -1024 (una marca 0 y
la otra 1024) hasta 1024 (situacin contraria). El rango de salida lo define la anchura del escenario,
que puede ir desde -240 pxeles hasta 240. Como hbiles observadoes que sois, ya os habris dado
cuenta de que la funcin map admite valores negativos (e incluso fuera de rango, pero eso ya lo
veremos en otra ocasin).
Espero no haberos aburrido. La funcin map es muy til en Arduino y ahora que la hemos convertido
en un bloque de Scratch 2.0, estoy convencido de que la usaremos mucho. Pasadlo bien
construyendo y programando.
Saludos.

S-ar putea să vă placă și