Está en la página 1de 56

Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Departamento de Teoría de la Señal


y Comunicaciones

Integración de kits Arduinos enlazados


mediante Xbee para aplicaciones de
Cartomagia

Autor:
Javier Abascal Carrasco
Tutor:
Jose Ramón Cerquides Bueno
Fecha:
Miércoles, 24 de abril de 2013
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

0. Índice

0. Índice .................................................................................................................................... 2
1. Introducción ......................................................................................................................... 3
2. Antecedentes y motivaciones ........................................................................................... 5
3. Parte 1: Sensor y acondicionamiento de la señal. ........................................................ 7
3.1. Sensor .......................................................................................................................... 7
3.2. Acondicionamiento de la señal............................................................................... 13
3.3. Amplificador de instrumentación INA125.............................................................. 16
3.4. Diseño del pcb .......................................................................................................... 18
4. Parte 2: Procesamiento y envío de la señal. ................................................................ 22
4.1. Kits Arduino ............................................................................................................... 22
4.1.1. Arduino Duemilanove + Xbee Shield............................................................. 22
4.1.2. Arduino Fio ........................................................................................................ 24
4.1.3. Módulos Xbee ................................................................................................... 25
4.2. Configuración de los módulos Xbee ...................................................................... 26
4.3. Entorno de desarrollo Arduino ................................................................................ 28
4.4. Programación de los microcontroladores ............................................................. 29
5. Parte 3: Sistema completo. ............................................................................................. 31
5.1. Posicionamiento de los elementos ........................................................................ 31
5.2. Baterías ...................................................................................................................... 35
5.3. Camuflaje ................................................................................................................... 36
6. Funcionamiento y Aplicaciones mágicas. ..................................................................... 38
7. Futuras líneas de trabajo................................................................................................. 39
8. Conclusiones ..................................................................................................................... 40
9. Referencias. ...................................................................................................................... 41
9.1. Bibliografía ......................................................................................................................... 41
10. Apéndice. .......................................................................................................................... 43
10.1. Efectos explicados ..................................................................................................... 43
10.2. Códigos de programación ......................................................................................... 46

2
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

1. Introducción

La telecomunicación es según la ITU 1 , toda emisión, transmisión y


recepción de signos, señales, escritos e imágenes, sonidos e informaciones de
cualquier naturaleza, por hilo, radioelectricidad, medios ópticos u otros
sistemas electromagnéticos (ITU). Habitualmente las aplicaciones de los
sistemas de telecomunicación han sido los medios de transmisión de masas
como el telégrafo, radio, telefonía y televisión (Isabel Román Martinez y Rafael
Estepa Alonso, 2007/2008). Los nuevos servicios generados a través de
internet están revolucionando la sociedad como son las video-llamadas, el
streaming o el intercambio de archivos personales. A pesar de todo esto,
todavía hoy los sistemas disponen de una amplia función en campos de trabajo
que no estamos familiarizados. Cada vez más rápido, se descubren nuevas
ocupaciones en donde el uso de estos sistemas revoluciona la práctica y
posibilita una multitud de nuevos servicios al usuario (salud, educación,
administración… etc.). En este proyecto fin de carrera abordaremos un área de
trabajo poco común, la magia.

El proyecto consiste en el desarrollo y posterior realización de un


sistema para poder realizar efectos de cartomagia. Se basa en la construcción
de un soporte que permite el pesado ultrasensible de cartas de póker, en un
rango de 0 a 60 y posibilita la comunicación de forma instantánea a un receptor
instalado en algún lugar y mostrar los resultados correspondientes.

En primer lugar, analizaremos como generamos la señal para obtener el


pesado correcto bajo la superficie del soporte, que tendrá apariencia de mesa.
En segundo lugar, estudiaremos el procesamiento de la señal, programación
de los equipos y el envío de la información al receptor inalámbrico. Y en tercer
lugar, explicaremos como camuflar todo el sistema bajo una apariencia normal
y aprovechar el sistema realizado para ser capaz de realizar efectos mágicos.

Para comenzar, describiremos el sensor que hemos seleccionado,


destacando sus características, como funciona y cómo somos capaces de
realizar una lectura correcta de la medida. A su vez, conoceremos el diseño del
circuito PCB creado para el acondicionamiento de la señal, el programa
empleado y los resultados.

A continuación, abordaremos el procesamiento de los datos que nos


genera el sensor; para ello programaremos un microcontrolador ATmega328
instalado en un kit Arduino básico. El kit Arduino ha sido escogido por su
compatibilidad con módulos de Xbee ya prediseñados, la amplia variedad de
librerías de uso libre disponibles, así como su creciente popularidad. Una vez

1
ITU, siglas de International Telecommunication Union.

3
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

realizada la digitalización, gracias a los módulos Xbee podremos ser capaces


de realizar el envío del resultado al receptor.

Para finalizar, detallaremos las dificultades que hemos tenido para


esconder el soporte en una mesa y dar una apariencia normal a un simple
tapete de cartas. Además se explicara el uso correcto del dispositivo,
enunciaremos las posibles aplicaciones mágicas de éste y futuras ampliaciones
del sistema.

4
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

2. Antecedentes y motivaciones

La magia es un arte del entretenimiento que se apoya en determinados


juegos y experimentos con el fin de ser capaz de dar la apariencia de romper
las leyes naturales. Existe desde hace miles de años y la primera mención en
la historia fue realizada en el antiguo Egipto, alrededor del 2700 a.C.
(Harmening, ISSN 1406-0957) (Regling). El ilusionismo ha ido evolucionando a
la par que la sociedad y hoy en día existen multitud de disciplinas que van
desde la micromagia hasta las grandes ilusiones. En mi caso, la afición por la
magia se remonta al año 2006; un año antes de comenzar la carrera de
Ingeniero de Telecomunicación en Sevilla. A causa del gran ímpetu con el que
me inicié en este mundo, empecé a ver con claridad la idea de mi proyecto fin
de carrera tras tener mis primeros conocimientos en electrónica y señales.

Para poder entender rápidamente sin tener que estudiar a fondo la teoría
de la magia, nos gustaría explicar brevemente la diferencia que existe entre
técnica y trucaje. La parte técnica, consiste en un conjunto de movimientos,
gestos y hechos que ocultan o camuflan acciones normales con acciones
tramposas para ayudar a realizar un efecto mágico. El trucaje o ardid sin
embargo, es el conjunto de elementos y herramientas construidas y diseñadas
para poder realizar tales efectos (Nelms, 1969). Un sistema de
telecomunicaciones nunca nos ayudará a acrecentar nuestra técnica, sin
embargo, si nos ayudará a construir un gran trucaje.

Existen una gran variedad de especialidades dentro del mundo de la


magia en las que se podría insertar un sistema de telecomunicación y desde
hace relativamente poco tiempo, están empezando a proliferar de forma
creciente trucajes electrónicos realmente novedosos que consiguen ilusiones
mágicas muy impactantes. Es casi imposible saber con certeza quién fue el
primer ilusionista en adaptar y utilizar la electrónica en diferentes sistemas para
la magia ya que es un arte que se ha ido desarrollando en paralelo a lo largo y
ancho de los continentes y hasta fechas cercanas no ha habido mucho
intercambio de información. Además tiempo atrás la magia no era un bien
compartido y muchísimos ilusionistas se llevaron sus secretos a la tumba. Aún
así Juan Mayoral 2 (Mayoral, 2013) cree según sus conocimientos, que Rober
Houdin fue en el siglo XIX, el primero en utilizar la electrónica. Su juego más
famoso era la maleta pesada o liguera, en la que se empleaba un electroimán.
A continuación tendríamos a Anverdi, Klingsor y Christian Fechner (los tres ya
fallecidos), y después cronológicamente estaría él. Como él mismo comenta, él
ha podido aprovecharse de la miniaturización de los elementos detalle que sus

2
Juan Mayoral ha sido uno de los magos modernos en revolucionar el mundo de la magia utilizando
elementos electrónicos. Es conocido mundialmente por sus novedosas invenciones y posee el primer
premio FISM de 1991 en Suiza en la categoría de magia general.

5
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

predecesores no han podido disfrutar. A partir de entonces, la electrónica y


telecomunicaciones en general se pusieron al alcance de todo el mundo.
Teniendo en mente esto, decidí investigar y ponerme en contacto con
diferentes magos de España y pregunté por el tipo de dispositivos electrónicos
utilizados actualmente. Rápidamente nos dimos cuenta de que no existía gran
variedad. A excepción de algunos, todos consistían en un emisor/receptor de
radiofrecuencia (433Mhz habitualmente) conectados a algún tipo de
servomecanismo, el cuál movía o realizaba alguna acción. Como ejemplo,
podríamos citar una campana sostenida entre dos cuerdas que suena
misteriosamente a la orden del ilusionista. En este caso, el trucaje está en la
base donde cuelga la campana. Existe un pequeño motor que gira 45º un imán
y debido a que el badajo de la campana es de hierro es atraído por el imán. Al
golpear la superficie de la campana se produce el sonido.

Después de observar este patrón “emisor-receptor-servo” decidí buscar


ideas de trucos electrónicos que implicaran algún tipo de procesamiento de
señal. Y de momento, sólo unos pocos juegos son de este estilo. Así pues,
desarrollé unas cuantas ideas, me reuní con mis compañeros, comparamos las
ventajas y desventajas de las diferentes alternativas así como el rango de
aplicaciones mágicas de cada opción y elegimos la idea que a continuación os
presento como proyecto fin de carrera.

6
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

3. Parte 1: Sensor y acondicionamiento de la señal.


3.1. Sensor

Comenzamos con la elección del sensor que vamos a emplear para


poder medir el peso de las cartas. Ya que una carta pesa aproximadamente
1.7𝑔𝑔 (Baraja de Póker Bycycle, la más utilizada mundialmente por los
ilusionistas) (Wikipedia), la selección del sensor es un punto principal del
proyecto. Necesitamos disponer de un sensor lo suficientemente sensible para
ser capaz de detectar la diferencia de ± 1 carta, pero a su vez lo
suficientemente robusto para poder extender y mover los naipes sin
limitaciones y sin riesgo de quebrar el sensor. Estas dos características son
difíciles de encontrar puesto que como regla general cuanta mayor sensibilidad
menor capacidad de carga. Con el fin de cumplir estos objetivos, en un
principio optamos por una sensibilidad mínima de 0.1 𝑔𝑔 y una capacidad de
carga entre 3 − 5 𝑘𝑘𝑘𝑘. Veamos las características de dos tipos de sensores de
peso: Sensores del tipo FSR y las células de carga.

Los sensores de tipo FSR (Force Sensitive Resistor) (Luis Carrión,


2009) son dispositivos de película de polímetro (PTF) y se fundamentan en una
superficie de resistencia variable según la presión que se ejerce sobre esa
superficie. A mayor fuerza sobre la superficie, se obtiene una lectura de
resistencia menor en sus terminales. Es decir, actúa como un simple
potenciómetro, pero debido principalmente a que no poseen una buena
sensibilidad no son de utilidad para nuestro propósito. Normalmente se utilizan
para detectar cambios y no para medirlos, como puede ser accionar
pulsadores. Están sobre todo optimizados para uso en el control por toque
humano de dispositivos electrónicos.

Figura 1. Construcción del FSR.

7
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 2. Sensor de presión IEE FSR-154NS 10g.

Las células de cargas o load cells. Son capaces de obtener una gran
sensibilidad, aunque su funcionamiento es complejo a causa de ser un
elemento activo y tener la necesidad de alimentación. Este transductor
convierte la fuerza ejercida en una señal eléctrica mediante el uso de cuatro
galgas extensiométricas colocadas en configuración tipo Puente de
Wheatstone. La salida eléctrica de este tipo de transductores son de muy bajo
rango y es necesario una etapa de amplificación posterior para su lectura
(Senel Technologies S.A, 2013).

Figura 3. Puente de Wheatstone. Texas Instruments.

Por razones de sensibilidad optamos por el uso de load cells. Sus


parámetros a tener en cuenta son:

a) Rated load: Carga nominal de la célula, es decir, el peso máximo que


es capaz de medir de forma lineal.

8
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

b) Rated output: Salida nominal de la célula. Su unidad es 𝑚𝑚𝑚𝑚/𝑉𝑉 que


nos genera 1 𝑚𝑚𝑚𝑚 por cada 𝑉𝑉 de alimentación cuando el sensor está a carga
máxima. A mayor valor, menor será la amplificación necesaria.

c) Zero output: Salida de la célula de carga sin estar sometida a ninguna


carga. Se mide en porcentaje del fondo de escala % 𝐹𝐹. 𝑆𝑆.

d) Overall precision: Precisión de sensibilidad que disponemos en


nuestro transductor. Al igual que el anterior se mide en porcentaje del fondo de
escala % 𝐹𝐹. 𝑆𝑆.

e) Precision temperature: Variabilidad de nuestra salida según la


temperatura a la que se encuentre el sensor. Al igual que los dos anteriores se
mide en porcentaje del fondo de escala % 𝐹𝐹. 𝑆𝑆.

f) Safety Overload: Sobrecarga máxima que aguanta el sensor sin


averiarse, generalmente es un 150 % del valor de carga nominal.

g) Recommend excitation Voltage: Voltaje de alimentación recomendado


por el fabricante del transductor. Es de vital importancia que esté conectado a
una fuente regulada de tensión, para evitar errores en la lectura del transductor.

Para ayudar a entender y afrontar qué nos encontramos en una load cell
estándar, véase el siguiente cálculo (Anastasios Karidis, 2011):

Especificaciones:

-Carga nominal de 3 𝑘𝑘𝑘𝑘


-Salida nominal de 1 𝑚𝑚𝑚𝑚/𝑉𝑉
-Alimentación de 10 𝑉𝑉
-Precisión 0.04 % 𝐹𝐹. 𝑆𝑆
-Precisión por temperatura 0.01 % 𝐹𝐹. 𝑆𝑆

A carga completa (3𝑘𝑘𝑘𝑘) el sensor generará 10 𝑚𝑚𝑚𝑚, es decir, una señal


de salida de:
10𝑚𝑚𝑚𝑚
3000 𝑔𝑔
= 0.0034 mV/g.

El error de precisión (0.04 % 𝐹𝐹. 𝑆𝑆) genera un error en la medida de:


10𝑚𝑚𝑚𝑚 ·0.04
100
= ±0.004 𝑚𝑚𝑚𝑚.

El error de precisión por temperatura lo podemos descartar por ser menor y fijo.
Por lo tanto el mínimo cambio de salida en el sensor que vamos a detectar es
0.004 𝑚𝑚𝑚𝑚 . Sin tener que analizar nada observemos que el mínimo cambio
distinguible es mayor que un gramo, debido a que el error es mayor que la
propia precisión por gramo. Con este sensor genérico encontraremos

9
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

problemas a la hora de poder diferenciar cartas, ya que el peso de una carta


(1.7 𝑔𝑔) será:

1.7𝑔𝑔 · 0.0034𝑚𝑚𝑚𝑚/𝑔𝑔 ≈ 0.0057 𝑚𝑚𝑚𝑚

y apenas superará en un 40 % el error de la medida. Si sumamos los futuros


problemas que tendremos con el CAD 3 del kit Arduino, más errores de
calentamiento y simples imprecisiones de la tensión de alimentación u
oscilaciones, hace que la load cell aquí expuesta no sea correcta al no disponer
de un amplio margen de sensibilidad.

Para poder disponer de un mayor margen leímos los catálogos de


fabricantes y nos pusimos en contacto con distintas empresas del sector con el
fin de localizar un sensor que se adapte a nuestras especificaciones.
Consultando el precio de un sensor que se adaptaba al proyecto, obtuvimos
una respuesta de 490 €. Finalmente decidimos ceder en los requerimientos de
carga nominal, la cual reduje hasta 1 𝑘𝑘𝑘𝑘, y calidad del sensor por el elevado
precio. La siguiente load cell fue comprada directamente a la distribuidora
AliExpress, la cual importa desde Mainland (China) a un precio de 9.89$/unidad
(Aliexpress, 2012).

Alluminium Alloy weighing Load Cell 1kg for Electronic Scale

Figura 4. Load cell de un kilogramo. Obsérvese el tamaño reducido, y los cuatro orificios para fijar
el sensor y la bandeja.

3
Conversor analógico digital. De aquí en adelante nos referiremos a el por sus siglas.

10
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Cuya reducida hoja de especificaciones podemos ver a continuación

Product Description
The 1Kg 2.2 lbs load cell is great for used in hopper scales, platform scales, platform balance, belt scales and other electronic
weighing devices.

Product Name Load Cell


Rated Load 1Kg/2.2lbs
Rated Output 1mV/V
Zero Output 0.05%F.S
Overall Precision 0.02%F.S
Precision Temperature 0.02%F.S
Working Temperature -10°C~+50°C
Compensated Temperature
-10°C~+40°C
Range
Safety Overload 150%
Recommend Excitation Voltage 10V DC
Max Excitation VoltageM 15V DC
80 x 13 x 12mm / 3.1" x 0.5" x
Total Size
0.47"(L*W*T)
3.5mm / 0.138"
Thead Hole Diameter
4.3mm / 0.169"
Cable Length 230mm/ 9''
Material Aluminium Alloy
Color Silver Tone
Weight 29g
Package Content 1 x Load Cell
Tabla 1. Hoja de especificaciones.

Si realizamos los mismos cálculos para la load cell adquirida:

A carga completa (1 𝑘𝑘𝑘𝑘) generamos una salida de 10 𝑚𝑚𝑚𝑚, o una señal de


salida de:
10𝑚𝑚𝑚𝑚
1000 𝑔𝑔
= 0.01 𝑚𝑚𝑚𝑚/𝑔𝑔.

El error de precisión (0.02 % 𝐹𝐹. 𝑆𝑆) produce un error en la medida de:


10𝑚𝑚𝑚𝑚 ·0.02
100
= ±0.002 𝑚𝑚𝑚𝑚.

Esta vez la lectura de un gramo supera en un 500 % la precisión del error que
disponemos, lo que no asegura un margen más amplio de error. Cabe remarcar
este margen de seguridad, ya que el comportamiento del sensor es bastante
diferente de la teoría que pone en los manuales. Gracias a que garantizamos
un gran rango de seguridad, hemos logrado conseguir que todo funcione según
lo previsto y ser capaz de distinguir las cartas sin fallos.

11
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Por último, añadimos una bandeja al sensor para poder situar el tapete
encima, y tener una superficie “de juego” para el correcto empleo de las cartas
y objetos. El material empleado será el metacrilato con el fin de no sobrecargar
el sensor y no reducir nuestro rango de funcionamiento.

12
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

3.2. Acondicionamiento de la señal

A continuación se enumeran los cuatro puntos que fueron estudiados


para alcanzar que la señal generada por el sensor sea de utilidad.

-Punto 1. Una referencia de tensión de 10 𝑉𝑉 fija y estable para el sensor


(excitación recomendada). Sin referencia de tensión, la salida de nuestro
sensor variaría a medida que se gastaran las baterías de la alimentación
(Areny, 1989).

-Punto 2. Requerimos de una amplificación de la señal de salida de la


load cell. Lo primero es advertir el CAD posterior en el kit Arduino, el cual está
referenciado a 5 𝑉𝑉. Si deseamos ajustar todo el rango de medida, es decir
hasta 1 𝑘𝑘𝑘𝑘, necesitamos que la amplificación de la salida máxima (10 𝑚𝑚𝑚𝑚 a
carga completa) se iguale a 5 𝑉𝑉. La amplificación mínima viable es de:
5𝑉𝑉
10𝑚𝑚𝑚𝑚
= 500 𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢.

Esta situación sería el caso ideal ya que hay que prestar atención a la
resolución disponible en el CAD. El CAD dispone de 10 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏, lo que supone
1024 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝. Si dividimos 1 𝑘𝑘𝑘𝑘 en 1024 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝, obtenemos que cada escalón en
el CAD supondrá:
1000 𝑔𝑔
210 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏
= 0.9765625 𝑔𝑔/𝑏𝑏𝑏𝑏𝑏𝑏.

Si lo expresamos en Voltios:
5𝑉𝑉
210 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏
= 4.8828𝑚𝑚𝑚𝑚/𝑏𝑏𝑏𝑏𝑏𝑏.

Esto no es un buen dato, ya que la misma limitación del rango del CAD nos
deja muy poco rango para discernir entre varias cartas. Estamos restringiendo
la sensibilidad del sensor, imponiendo un rango de lectura del CAD demasiado
grande. Para ilustrar lo referido, hacemos esta pequeña tabla;

Número de Salida del sensor Salida del sensor tras


cartas sobre antes de la la amplificación Lectura del CAD
el sensor amplificación (multiplicamos por 500) (4.8828 𝑚𝑚𝑚𝑚/𝑏𝑏𝑏𝑏𝑏𝑏)
0.01𝑚𝑚𝑚𝑚
1.7𝑔𝑔 ·
1 (1.7 𝑔𝑔) 𝑔𝑔 8.5 𝑚𝑚𝑚𝑚 1.7408 = 2
= 0.017𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
3.4𝑔𝑔 ·
2 (3.4 𝑔𝑔) 𝑔𝑔 17 𝑚𝑚𝑚𝑚 3.4816 = 3
= 0.034𝑚𝑚𝑚𝑚

13
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

0.01𝑚𝑚𝑚𝑚
5.1𝑔𝑔 ·
3 (5.1 𝑔𝑔) 𝑔𝑔 25.5 𝑚𝑚𝑚𝑚 5.2224 = 5
= 0.051𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
6.8𝑔𝑔 ·
4 (6.8 𝑔𝑔) 𝑔𝑔 34 𝑚𝑚𝑚𝑚 6.9632 = 7
= 0.068𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
8.5𝑔𝑔 ·
5 (8.5 𝑔𝑔) 𝑔𝑔 42.5 𝑚𝑚𝑚𝑚 8.704 = 9
= 0.085𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
10.2𝑔𝑔 ·
6 (10.2 𝑔𝑔) 𝑔𝑔 51 𝑚𝑚𝑚𝑚 10.4448 = 10
= 0.102𝑚𝑚𝑚𝑚
… … … …
Tabla 2.Cálculo de la lectura del CAD en función de las cartas situadas sobre el sensor. Amplificación de 500
unidades.

La consecuencia es que cualquier mínimo error que modifique el último o


los dos últimos bits nos impedirá distinguir las cartas4. Después de esta tabla,
¿Qué debemos modificar para poder mejorar nuestra resolución en el CAD? La
respuesta es amplificar únicamente la región deseada, que hemos acotado de
0 𝑎𝑎 60 cartas5. El cálculo para amplificar solamente esa región es:

1.7𝑔𝑔
60𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 · = 102𝑔𝑔 ≈ 10% 𝑑𝑑𝑑𝑑𝑑𝑑 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑚𝑚á𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝 𝑒𝑒𝑒𝑒 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 (1𝑘𝑘𝑘𝑘)
𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐

Es decir, vamos a amplificar 10 veces más, o lo que es lo mismo


5000 𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢. Con este resultado una baraja de 60 cartas situada encima del
sensor, generará una salida de 5 𝑉𝑉 aproximadamente y si situásemos 1 𝑘𝑘𝑘𝑘 en
el sensor obtendríamos 10 𝑚𝑚𝑚𝑚 · 5000 = 50 𝑉𝑉 6. Al realizar esta modificación, la
lectura de nuestro CAD no va a disminuir la sensibilidad de nuestro sensor, es
decir, el que limita que no podamos discernir un peso más pequeño no va a ser
el CAD, sino el propio sensor. Esa amplificación nos permite obtener en la
lectura un máximo de tres bits del CAD incorrectos y aun así ser capaces de
dar una respuesta correcta, ya que las diferencias mostradas ahora en el CAD
entre carta y carta son unas 17 − 18 𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢 7. Reescribiendo la tabla anterior
6F

con la nueva amplificación podemos observar como disponemos de una gran


distancia entre las medidas.

4
Debido a la sensibilidad y calidad del sensor los últimos bits del CAD variarán arbitrariamente.
5
Con el objetivo de poder utilizar diferentes barajas que posean distinto peso.
6
Este resultado sería hipotético ya que estaría limitado por la alimentación y el amplificador.
7
A partir de cuatro bits, superaríamos la mitad de la distancia y no podríamos discernir correctamente;
24 = 16 > 9.

14
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Salida del
Número de Salida del sensor tras la
sensor antes Lectura del CAD
cartas sobre amplificación
de la (4.8828 𝑚𝑚𝑚𝑚/𝑏𝑏𝑏𝑏𝑏𝑏)
el sensor (𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎𝒎 𝒑𝒑𝒑𝒑𝒑𝒑 𝟓𝟓𝟓𝟓𝟓𝟓𝟓𝟓)
amplificación
0.01𝑚𝑚𝑚𝑚
1.7𝑔𝑔 ·
1 (1.7𝑔𝑔) 𝑔𝑔 85 𝑚𝑚𝑚𝑚 17.408 = 17
= 0.017𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
3.4𝑔𝑔 ·
2 (3.4𝑔𝑔) 𝑔𝑔 170 𝑚𝑚𝑚𝑚 34.816 = 35
= 0.034𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
5.1𝑔𝑔 ·
3 (5.1𝑔𝑔) 𝑔𝑔 255 𝑚𝑚𝑚𝑚 52.224 = 52
= 0.051𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
6.8𝑔𝑔 ·
4 (6.8𝑔𝑔) 𝑔𝑔 340 𝑚𝑚𝑚𝑚 69.632 = 70
= 0.068𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
8.5𝑔𝑔 ·
5 (8.5𝑔𝑔) 𝑔𝑔 425 𝑚𝑚𝑚𝑚 87.04 = 88
= 0.085𝑚𝑚𝑚𝑚
0.01𝑚𝑚𝑚𝑚
10.2𝑔𝑔 ·
6 (10.2𝑔𝑔) 𝑔𝑔 510 𝑚𝑚𝑚𝑚 104.448 = 104
= 0.102𝑚𝑚𝑚𝑚
… … … …
Tabla 3. .Cálculo de la lectura del CAD en función de las cartas situadas sobre el sensor. Amplificación de 5000
unidades.

-Punto 3. Es imprescindible colocar un limitador de tensión para


asegurar que la tensión recibida por el CAD no sea nunca superior a
5 𝑉𝑉 aunque añadamos más peso sobre la superficie de la mesa. Si superamos
ese límite podría causar daños en el kit Arduino.

-Punto 4. Por último necesitamos buscar la forma de realizar la llamada


“puesta a cero”. Con este recurso podemos quitar de nuestra medida el peso
inicial de la bandeja, el tapete, y todos aquellos elementos que influyan desde
el inicio en el sensor8.

Haber definido claramente los puntos a cumplir por el circuito de


acondicionamiento de la señal, nos ha facilitado enormemente la labor de
solventar los problemas. Solucionaremos el punto 3 por medio de la utilización
de un diodo Zenner a 5 𝑉𝑉, y el punto 1, punto 2 y punto 4 lo conseguimos
resolver gracias al amplificador de instrumentación INA125 y un pequeño
divisor resistivo, con alimentación regulada, que nos permitirá realizar la
“puesta a cero” generando la tensión deseada a restar en la salida del sensor.

8
Factores como la presión, viento o gravedad podrían causar cambios de gramos en el sensor.

15
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

3.3. Amplificador de instrumentación INA125

El datasheet puede obtenerse directamente en la web de Texas


Instruments (Burr-Brown INA125, 1997). Principales características:

-Precision voltaje reference 1.24 𝑉𝑉, 2.5 𝑉𝑉, 5 𝑉𝑉 y 10 𝑉𝑉 incorporado (sólo


se puede utilizar uno al mismo tiempo)

-Low offset Voltage. Muy positivo ya que introducirá poco error en la


amplificación y posterior medida.

-Amplificación desde 4 a 10000, regulada según una resistencia Rg


por la siguiente ecuación:
60𝑘𝑘Ω
𝐺𝐺 = 4 + 𝑅𝑅𝑅𝑅
.

El datasheet recomienda el uso de resistencias con tolerancias menores


o iguales al uno por ciento. Para una amplificación de 5000 𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢 debemos
disponer de una resistencia de 12 Ω.

Figura 5. Amplificador INA125 y ganancia en función del valor de la resistencia Rg.

-Offset trimming incorporado en el amplificador en uno de los pines del


encapsulado. Este pin nos posibilitará restar a la salida cualquier tensión para
poder alcanzar una correcta “puesta a cero”.

-Wide supply range, nos permite alimentar a Single Supply de 2.7 hasta
36 𝑉𝑉 o Dual Supply de ±1.35 𝑉𝑉 hasta ±18 𝑉𝑉. A causa de la utilización del Offset
trimming nos será obligatorio alimentar el circuito con una fuente dual.

Llegado a este punto del trabajo somos capaces de generar una señal
analógica variable entre 0 y 5 Voltios según qué cantidad de naipes sean

16
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

colocados en la plataforma. Para finalizar la información sobre el INA125,


expongo la configuración de pines y un esquema del mismo 9.

Figura 6. Configuración de pines.

Figura 7. Esquema del amplificador INA125.

9
Para más información consultar el datasheet del dispositivo

17
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

3.4. Diseño del pcb

Después de saber qué es lo que pretendemos hacer y con qué


elementos vamos a realizarlo, solo queda diseñar el esquemático del circuito y
el posterior PCB del mismo. Para ello hemos utilizado el programa de CAD 10
EAGLE v6.3.0. Debido a la baja complejidad del circuito, con la versión gratuita
nos es suficiente (tenemos restricciones en el número de capas, tamaño de la
placas… etc.). Tras diseñar y aprender a utilizar este programa, me gustaría
mencionar, que me ha sorprendido gratamente por su facilidad y similitud a
otros programas orientados al diseño.

EAGLE dispone de tres módulos integrados en su programa. El editor de


Layout, el editor de esquemas y el autorouter, aunque este último no lo vamos
a utilizar por la sencillez del circuito (Cadsoft, 2008). Además de diseñar el
acondicionamiento de la señal realicé dos pequeños esquemas, para poder
colocar 2 displays de 7 segmentos en un espacio reducido. A continuación los
esquemas y tras ellos, sus posteriores explicaciones.

Figura 8. Esquemático del circuito diseñado para acondicionar la señal del sensor de carga. Realizado con el
programa EAGLE.

10
En este caso, las siglas provienen de Computer aided design.

18
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

En el esquemático 1 se localiza el amplificador INA125 en la parte


izquierda. Los Pines 6 y 7 son la entrada del amplificador. Estos 2 pines son la
pequeña señal que genera el puente de Wheatstone en la load cell. Entre los
pines 8 y 9 situamos la resistencia Rg 11. En el pin 12 vemos la referencia a
GND. El pin 4, es el que conectado con alguno de los pines 13, 14, 15 o 16
genera los correspondientes voltajes de referencia 1.24V, 2.5V, 5V o 10V
correspondientemente. En los pines 10 y 11 observamos la señal de salida tras
la amplificación de la entrada así como el diodo Zenner que limita la tensión de
salida a 5 𝑉𝑉, estos pines van unidos por definición. Y en los pines 1 y 3 se
encuentra la alimentación del amplificador. El pin 2 (sleep mode), no va a tener
uso, por lo que lo conectamos a 𝑉𝑉 +. Por último conectado al pin 5, tenemos
dos jumpers para poder elegir si restar una tensión positiva o negativa. Son dos
pequeños circuitos con dos reguladores de tensión (uno positivo y otro
negativo) y un divisor de tensiones. Según se rote la rueda del potenciómetro
correspondiente, sumaremos o restaremos la caída de tensión en JP1 y JP3 a
la señal de salida del INA125. Los 2 reguladores de tensión utilizados 12 son
LM337 (Texas Instruments, 2004) (negativo) y el uA7800 (Texas Instruments,
Revised 2012) (positivo). Tanto el INA125, y todos los reguladores de tensión
utilizados, fueron adquiridos de las muestras gratuitas cedidas por Texas
Instruments.

Figura 9. Esquemático del circuito diseñado para


facilitar las entradas a los displays 7-segmentos.
Realizado con el programa EAGLE.

El esquemático 2 es de los displays de 7-segmentos. Son displays AC


(Ánodo Común) y colocamos los pines correspondientes para poder conectar
directamente todos los cables al kit Arduino y ser capaces de controlarlos con
el microcontrolador. Se asignó la resistencia típica de valor 330 Ω en el pin de

11
Se colocaron cuatro espacios en el diseño para dar la posibilidad de ajustar la resistencia a un valor
muy concreto.
12
En los diferentes datasheets se puede consultar la posición y utilidad de los condensadores añadidos.

19
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

activación para alimentar los displays a 5 𝑉𝑉 sin quemarlos (salida de los pines
digitales de propósito general del kit Arduino).

Una vez diseñado el esquemático, la realización del Layout fue muy


sencilla, quedando como resultado el siguiente esquema, en donde las líneas
rojas marcan la capa superior, y las azules la capa inferior.

Figura 10. Layout del circuito acondicionador del sensor. Realizado con el programa EAGLE.

Figura 11. Layout del circuito para facilitar las entradas a los displays 7-segmentos.
Realizado con el programa EAGLE.

20
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Tras esquematizar el Layout, convertimos este diseño a formato


GERBER y de ahí a CircuitCAM, con el fin de poder elaborar el corte en el
laboratorio 13. Una vez impresos los circuitos, soldamos todos los componentes
a la placa, quedando el siguiente resultado;

Figura 12. Circuito acondicionador del sensor.

Figura 13. Circuito para faclitar las entradas a los displays 7-segmentos.

13
Agradezco a Luis Javier Reina Tosina la ayuda prestada para realizar en el laboratorio la placa de este
circuito (profesor titular de la Universidad y del departamento de Teoría de la señal y Comunicaciones).

21
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

4. Parte 2: Procesamiento y envío de la señal.


4.1. Kits Arduino

Arduino nació como un proyecto educativo en el año 2005 y a día de hoy


es el líder en el sector DIY (Do It Yourself). El proyecto recibió una mención
honorífica en la categoría de Comunidad Digital en el Prix Ars Electrónica de
2006.

Ellos mismos definen el concepto de este modo: Arduino es una


plataforma de electrónica abierta para la creación de prototipos basada en
software y hardware flexibles y fáciles de usar. Se creó para artistas,
diseñadores, aficionados y cualquiera interesado en crear entornos u objetos
interactivos.

Para realizar este proyecto se requería un microcontrolador instalado en


una pequeña placa ya preparada, con variedad de pines y compatibilidad con
telecomunicaciones inalámbricas. Arduino satisface todas nuestras
necesidades. En el envío y recepción de datos aprovecharemos la
compaginación existente entre Arduino y los módulos Xbee 14. En el mercado
actual del kit existen multitud de posibilidades diferentes focalizadas a distintos
objetivos (energía, compatibilidad, tamaño …etc.) y son de especial atractivo
debido a su facilidad de uso, reducido precio y su gran soporte técnico actual
que permite resolver cualquier tipo de duda en diversas webs, foros y proyectos
ya creados. Debido a la amplia información existente del entorno de desarrollo
Arduino, remitimos al lector a consultar la bibliografía en caso de desear
conocer más profundamente su historia, posibilidades y creadores (Arduino,
2005-2013), (Iglesias, 2013), (Wikipiedia, 2009).

Los productos adquiridos para completar este proyecto fueron el Arduino


Duemilanove y el Arduino Fio al precio de 23.00 € y 16.00 € respectivamente.
Además se compraron dos módulos Xbee por 18.00 € cada uno y el Xbee
Shield para el Duemilanove por 15.00 € 15.

4.1.1. Arduino Duemilanove + Xbee Shield

Arduino Duemilanove es la más avanzada revisión del primer entorno de


desarrollo básico creado por Arduino. Debe su nombre italiano al año 2009,
fecha en la cual fue lanzado el producto; sus características más importantes
son las siguientes:

14
Xbee será explicado en el siguiente punto
15
Ninguno de los precios contiene el IVA

22
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Microcontrolador ATmega368
Voltaje de funcionamiento 5V
Voltaje de entrada (recomendado) 7-12V
Voltaje de entrada (límite) 6-20V
Pines E/S digitales 14 (6 proporcionan salida PWM)
Pines de entrada analógica 6
Intensidad por pin 40 mA
Intensidad en pin 3.3V 50 mA
32 KB de las cuales 2 KB las usa el
Memoria Flash
gestor de arranque (bootloader)
SRAM 2 KB
EEPROM 1 KB
Velocidad de reloj 16 MHz
Tabla 4. Características del Arduino Duemilanove.

Figura 14. Esquema general Arduino Duemilanove.

A su vez Duemilanove es compatible con Xbee Shield, el cual es una


ampliación de la placa que puede ser emplazada encima de la anterior, dando
la posibilidad de conectar en un zócalo habilitado para ello un módulo Xbee.
Esta configuración es muy cómoda ya que permite conectar debidamente el
módulo sin necesidad de perder ningún pin. Este pack estará localizado dentro
de la mesa, al lado del sensor.

La función principal del dispositivo será la de ir leyendo constantemente


la señal analógica del sensor. Una vez recibida y digitalizada, el
microcontrolador trabajará con diferentes subrutinas según lo que se le
comande. Los objetivos primordiales son tener la capacidad de representar en
dos displays 7-segmentos el número de cartas leídas, realizar una puesta a

23
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

cero del sensor, enviar el resultado al Arduino Fio mediante Xbee y detectar el
número de naipes que han sido cortados 16 (Arduino, 2005-2013).

Figura 15. En la imagen izquierda se encuentra el Xbee Shield. A la derecha, la superposición de Xbee Shield y el
Arduino Duemilanove

4.1.2. Arduino Fio

Arduino Fio ha sido fundamentalmente desarrollado para el uso en


aplicaciones inalámbricas, donde el espacio y consumo son importantes. La
placa tiene incorporado un zócalo para un módulo Xbee, debido a eso no es
imprescindible el uso de una expansión (Shield) como en el caso anterior. Sus
principales características son:

Microcontrolador ATmega328P
Voltaje de trabajo 3.3V
Voltaje de Entrada 3.35 -12 V
Voltaje de Entrada en Carga 3.7 - 7 V
14 (6 proporcionan
Pines E/S Digital
salida PWM)
Pines de Entrada Analógica 8
Corriente DC por pin E/S 40 mA
32 KB de los cuales 2 KB las usa el
Memoria Flash
gestor de arranque (bootloader)
SRAM 2 KB
EEPROM 1 KB
Frecuencia de Reloj 8 MHz

Tabla 5. Características del Arduino Fio.

16
Cortar en este ámbito se refiere a la acción de levantar un grupo de cartas de la baraja, colocarlas al
lado y colocar las restantes encima de las anteriores.

24
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 16. En la imagen izquierda tenemos el esquema general del Arduino FIO. A la derecha, instalado con el
módulo Xbee

Además de por sus características, el Arduino Fio ha sido elegido por su


tamaño (1.1 x 2.6 pulgadas), el cual facilita su ocultamiento en diferentes
localizaciones. La función principal del segundo kit, será la de recibir a tiempo
real el resultado calculado por el Arduino Duemilanove y mostrarlo en dos
displays 7-segmentos. Simultáneamente dispondremos de la posibilidad de
mandar las diferentes órdenes al sistema situado en la mesa mediante el uso
de distintos pulsadores (Arduino, 2005-2013).

4.1.3. Módulos Xbee

Xbee es el nombre de fábrica de Digi International para una familia de


módulos compatibles de radio. El mayor productor de estos módulos es la
empresa MaxStream, que fue la primera en comenzar la distribución con la
homologación oficial en 2005. Están basados en el estándar IEEE 802.15.4,
que fija las comunicaciones por aire punto a punto y punto a multipunto a una
tasa variable de hasta 250 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘/𝑠𝑠. Sus características principales son parecidas
a las del protocolo de comunicaciones para redes de sensores Zigbee, es decir,
bajo consumo de potencia (1𝑚𝑚𝑚𝑚 − 100𝑚𝑚𝑚𝑚), capacidad para crear redes con
identificadores únicos bajo un coordinador y un rango de hasta 25 𝑘𝑘𝑘𝑘 en sus
últimas versiones. Además ofrecen una interfaz serial, 9 entradas/salidas
analógicas y digitales y un rango de 65.000 direcciones para cada uno de los
16 canales disponibles. Para el proyecto hemos seleccionado el Xbee 2mW
PCB Antena –Series 2-, que nos proporciona una distancia de hasta 120𝑚𝑚
(30 en interiores) con un consumo limitado en 2𝑚𝑚𝑚𝑚.

Xbee provee dos procedimientos de comunicación: transmisión serial


transparente (modo AT) y el modo API. En la primera de ellas, el módulo
sustituye una línea serie, encolando todo dato recibido por el UART a través del
pin DIN para transmitir por radio. La segunda opción trabaja con una interfaz

25
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

más compleja. Está basada en frames, y la interacción del módulo con el


sistema se realiza utilizando estructuras predefinidas para la entrada y salida
(Xbee, 2009-2013) (Digi Internacional, 1996-2013).

Figura 17. Módulo Xbee serie 2.

La compatibilidad existente entre los kits Arduino simplificará


enormemente la programación del sistema, y nos permitirá servirnos con
funciones ya predefinidas. Una vez conectados y configurados los módulos
Xbee podremos escribir y leer por el puerto serie asegurando que estaremos
estableciendo una comunicación directa, segura e inalámbrica entre los
Arduinos.

4.2. Configuración de los módulos Xbee

La única posibilidad existente de configurar nuestros módulos Xbee es


acceder a ellos a través de una comunicación serie. Esta conexión se puede
llevar a cabo remotamente o con el uso de un conector USB. Una vez realizado
el enlace, debemos comprender el direccionamiento para conseguir que los
distintos módulos puedan comunicarse entre ellos. Los parámetros internos son
los siguientes:

Comando Descripción Valores válidos Valor por


defecto
ID El ID de la red del módulo Xbee. 0 - 0xFFFF 3332
CH El canal del módulo Xbee. 0x0B - 0x1A 0X0C
SH y SL El número serie del módulo Xbee 0- Diferente para
(SH devuelve los 32 bits 0xFFFFFFFF cada módulo
superiores, SL los 32 inferiores). De solo- (para
lectura. ambos SH y SL)
MY La dirección de 16-bit del módulo. 0 - 0xFFFF 0

26
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

DH y DL La dirección de destino para las 0- 0 (para


comunicaciones inalámbricas (DH son 0xFFFFFFFF ambos DH y DL)
los 32 bits superiores, DL son los 32 (para
inferiores). ambos DH y DL)
BD La velocidad de transmisión usada para 0 (1200 bps) 3 (9600 bps)
las comunicaciones con el Arduino o el 1 (2400 bps)
ordenador. 2 (4800 bps)
3 (9600 bps)
4 (19200 bps)
5 (38400 bps)
6 (57600 bps)
7 (115200 bps)
Tabla 6. Principales parámetros internos a configurar dentro del módulo Xbee

En primer lugar los dos módulos Xbee tienen que situarse en la misma
red definida por el valor de ID, asimismo deben estar en el idéntico canal
precisado por el valor de CH. Finalmente la dirección destino será dada por DH
y DL y especificará qué módulo en esa red y canal recibirá los datos
transmitidos. Por supuesto existen posibilidades de enviar mensajes broadcast
a todos los módulos dentro de un canal y red determinado fijando valores
especiales en los registros DH y DL. En la bibliografía están disponibles todos
los casos posibles así como las órdenes de entrada, salida, restaurar valores
de fábrica y guardado para los Xbee.

Digi International suministra un software de configuración con el fin de


simplificar esta tarea. El programa X-CTU posee con una interfaz sencilla y una
amplia base de datos con los diferentes módulos existentes. Permite obtener el
valor de los registros, así como modificarlos en un instante sin necesidad de
conocer los comandos adecuados (Digi Internacional, 1996-2013).

Para el proyecto el módulo Xbee correspondiente a la mesa (localizado


en el Arduino Duemilanove) fue elegido como coordinador y todos los datos
emitidos son transmitidos a todo el canal (modo API). El planteamiento fue de
realizar la comunicación punto a multipunto para ser capaz de adaptar
cualquier ampliación del sistema, y permitir recibir los datos del sensor de la
mesa sin necesidad de modificar nada. También se escogió la velocidad más
rápida disponible 115200 𝑏𝑏𝑏𝑏𝑏𝑏 (BD 7) con el fin de evitar cualquier tipo de
retraso. El segundo módulo Xbee (Arduino Fio) fue definido como end device y
podrá comunicarse con el coordinador y recibir los mensajes de éste.

27
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 18.Entorno del software X-CTU.

4.3. Entorno de desarrollo Arduino

El entorno de Desarrollo Arduino está constituido por un editor de texto,


un área de mensajes, la consola de texto, una barra de herramientas con las
funciones comunes y una serie de menús. Permite la conexión con el hardware
Arduino para cargar los programas y comunicarse con ellos. El puerto serie y el
modelo de placa a utilizar se pueden especificar en uno de los menús.

Cada programa creado es denominado “sketch” y el propio entorno de


desarrollo provee un comprobador de errores, compilador y volcado del texto
creado en la placa. Como en cualquier otro entorno de desarrollo, se proveen
librerías y ejemplos ya creados. Éstos últimos están en las definidas “librerías
de sketches”. Además, en el programa se dispone de un Monitor Serie que
muestra los datos enviados desde la placa Arduino y simplifica el trabajo. El
lenguaje de programación empleado es C/C++ con excepciones (Arduino,
2005-2013).

28
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 19. Entorno de desarrollo del software Arduino.

4.4. Programación de los microcontroladores

En la labor del trabajo está incluida la programación de los sistemas


anteriores. Debido a la reducida dificultad de entendimiento de las rutinas
empleadas en el proyecto, destacaremos únicamente ciertas consideraciones
que se han tenido en cuenta a la hora de escribir el código y no los archivos
completos. No obstante, en el apéndice final se encuentra el código completo
de cada fichero.

Lectura Analógica

La velocidad de lectura de las placas Arduino es aproximadamente


10.000 lecturas por segundo. Con el fin de obtener una mejor medida y evitar
picos de errores, se realiza una media aritmética de muchas medidas tomadas
en un espacio corto de tiempo. Tras realizar unas pequeñas pruebas
experimentales, obtuve que a partir de las 2.000 lecturas la oscilación de la
señal digitalizada no mejoraba y se quedaba en un marco cercano a las 8
unidades.

29
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Activación de los displays de 7-segementos

Para evitar el uso de salidas digitales diferentes en cada display, éstos


nunca se encienden simultáneamente. La conmutación se realiza en intervalos
de 20 𝑚𝑚𝑚𝑚 para que sea imperceptible al ojo humano.

Puesta a cero digital

Con el objetivo de disponer de un valor digital lo más preciso posible de


una carta se realizan dos mediciones. La primera de ellas se realiza sin ningún
tipo de peso sobre el sensor (plataforma y el tapete), y la segunda lectura
añadiendo el peso de la baraja seleccionada para trabajar. Una vez realizado
esto, se restan los valores y se obtiene el valor digital de una carta. Ese
número será el escogido posteriormente en todos los cálculos.

30
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

5. Parte 3: Sistema completo.


5.1. Posicionamiento de los elementos

Todos los elementos del sistema a excepción del receptor serán


instalados dentro de un habitáculo hueco de madera de 60𝑥𝑥40𝑥𝑥4.6 𝑐𝑐𝑐𝑐. Para
obtener la suficiente robustez, los tableros poseen un espesor de 1 𝑐𝑐𝑐𝑐 17. 16F

En las siguientes imágenes se pueden observar con mejor detalle el


emplazamiento de cada una de las partes del circuito, además de mostrar las
perforaciones necesarias para los interruptores On/Off y los displays 7-
segmentos.

Figura 20. Sistema completo en el interior del tablero. De izquierda a derecha: Interruptores On/Off, circuito de
acondicionamiento de la señal, sensor, displays 7-segmentos, Arduino Duemilanove+ Xbee Shield, circuito
regulador de tensión y baterías.

17
La altura máxima permitida con estas medidas es de 2.6cm. El arduino Duemilanove + Xbee Shield
dispone de esa medida.

31
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 21. Vista lateral del tablero. Obsérvese las dos perforaciones realizadas para acceder a los interruptores.

Figura 22. Vista lateral del tablero. Perforación realizada para la colocación de los displays 7-segmentos.

El sensor está ubicado debajo de la plataforma de metacrilato 18 de 2mm


de espesor. La plataforma se divide en dos capas para adquirir una mayor
estabilidad. El segundo nivel sobresale ligeramente 1.5 mm por encima de la
superficie del habitáculo con el fin de focalizar el peso de los naipes sobre el
tapete. Además, existe una holgura aproximada de 0.5mm entre los 4 laterales
de la superficie y la plancha de metacrilato.

18
Como ya se comentó, el uso del metacrilato fue crucial para poder poseer una superficie resistente y a
la vez ligera.

32
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 23.Sistema cubierto con la tapa del tablero, en el medio se encuentra el sensor con la primera plancha de
metacrilato.

Figura 24. Vista interior de la tapa del tablero de madera.

33
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 25. Sistema cubierto con la tapa del tablero, en el medio el sensor ya queda cubierto por la segunda tapa
de metacrilato, ajustada por milímetros a los bordes de la tapadera.

Existen diversas alternativas donde ubicar el sistema receptor. No se


debe de olvidar que será con el que podamos controlar la mesa y por ello debe
de ser accesible en todo momento. Por todo lo anterior, localizamos el receptor
en el interior de la chaqueta del ilusionista. Los displays 7-segmentos y el
Arduino Fio serán cosidos y fijados en la manga izquierda de la chaqueta.
Además se colocarán varios interruptores en el lado izquierdo y uno de los
pulsadores dentro del zapato derecho. Como se explicará en un apartado
posterior, esta configuración permitirá el manejo sin sospechas del conjunto.

34
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 26. Botones de funcionamiento del receptor instalados en la chaqueta.

5.2. Baterías

Para el correcto funcionamiento del equipo es imprescindible el uso de


tres fuentes de alimentación. Las baterías del circuito de acondicionamiento de
la señal y sensor son cuatro pilas recargables 9.0 𝑉𝑉 350 𝑚𝑚𝑚𝑚ℎ Ni-MH 17R8H.
Obtendremos una tensión de ±18 𝑉𝑉 que, tras ser regulada, alimentará al
amplificador INA125 a ±12.35 V. Para los dos kits Arduinos serán destinadas 2
baterías recargables AA 7.2 𝑉𝑉 1800 𝑚𝑚𝑚𝑚ℎ Ni-MH.

35
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Figura 27. A la izquierda se muestran las pilas de 9V para alimentar el circuito acondicionador del sensor, a la
derecha la batería del Arduino.

Debido al elevado consumo de los Arduinos 19 el tiempo práctico de


funcionamiento es de 8 horas. Sin embargo, las baterías de 9V perduran hasta
un máximo de 24 horas (10mAh de consumo).

No hay que olvidar fijar una tierra común en el circuito instalado en la


mesa. De otra manera, sería imposible realizar la correcta lectura de la señal
analógica.

5.3. Camuflaje

Uno de los aspectos primordiales en el mundo de la magia al manejar


objetos poco comunes, es transmitir la sensación de claridad. En nuestro caso,
una mesa es un elemento ya conocido por los espectadores y eso es una gran
ventaja. La mayoría de las personas están familiarizadas con la idea de los
naipes, los casinos, tapetes de cartas…etc. Gracias a esto, forraremos nuestra
superficie con una tela. Este tejido camuflará diferentes cosas:

-Ocultará los pulsadores de encendido y apagado. También esconderá


los displays 7-segmentos cuando estén apagados.

19
Existen pocos datos técnicos del consumo del dispositivo. Alrededor de 100 mAh.

36
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

-Hará inexistente la división del tablero de madera, evitando así la


presencia de que la mesa está construida en dos partes.

Por último situamos un tapete de cartas por estética y para focalizar la


atención al centro. Como puede observarse en la imagen, se hace totalmente
imperceptible el sistema creado.

Figura 28. Situación final del tablero. Obsérvese como son imperceptibles los orificios laterales.

37
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

6. Funcionamiento y Aplicaciones mágicas.

El ilusionista dispone de dos grupos de displays 7-segmentos donde


poder mirar el número de cartas sobre el sensor para dar la posibilidad al mago
de actuar tanto de pie ante el público como sentado. Los displays son activados
con un interruptor localizado encima del dedo pulgar del pie derecho, dentro del
calcetín. Esta preparación es forzosa puesto que al actuar de pie focalizamos
más la atención en nosotros, y nos es mucho más difícil ocultar el movimiento
de pulsar un botón con las manos. De esta forma, nuestras manos quedan
libres. Mediante uno de los pulsadores de la chaqueta podemos alternar entre
mostrar los resultados en la manga, o en el borde de la mesa.

Para la ejecución perfecta de los efectos hay muchos factores que


entran en juego. Empezando por la construcción del efecto mágico a la correcta
utilización del sistema, por ejemplo, se debe de explicar perfectamente al
espectador la manera y forma de manejar y colocar las cartas sobre la mesa,
para facilitar esto, podemos realizar nosotros antes los movimientos y así el
público copiará nuestras acciones. También tenemos que aprovechar los
momentos de distracción generados para hacer los vistazos a los displays y
averiguar el número de cartas sin que puedan llegar a descubrir el secreto.

Llegar a entender en un primer instante todas las aplicaciones mágicas


del proyecto realizado implicaría poseer un entendimiento muy elevado en el
arte del ilusionismo. Como ejemplo el dispositivo nos permite localizar cartas,
realizar forzajes, distinguir entre diferentes objetos, adivinaciones directas de
cartas… etc. Ya que éste no es el objetivo primordial del trabajo, pasaremos
por alto la explicación detallada de cada aplicación. No obstante, en el
apéndice final pueden consultarse pequeños ejemplos con el fin de ilustrar al
lector la potencia del sistema desarrollado.

38
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

7. Futuras líneas de trabajo.

Después de haber elaborado este proyecto fin de carrera queda todavía


un largo camino por recorrer. Para empezar, reunir todos los efectos, técnicas y
usos posibles en una mini enciclopedia sería un buen comienzo. Además, al
realizar esta labor, obtendríamos muchísimas opciones e ideas de ampliación
del sistema para ser capaces de añadir rutinas de juego que actualmente no se
puedan realizar con nuestro circuito. Contar con la ayuda de algunos maestros
cartomagos que utilicen y pongan a prueba las diferentes posibilidades
mejoraría de forma abismal las aplicaciones que hasta hoy en día hemos
encontrado.

Somos conscientes de que existe una gran mejoría en el ámbito de la


programación. Gracias a los kits Arduinos, podemos ser capaces de realizar
rutinas de magia completas paso a paso y obtener un único resultado final.
Hasta ahora sólo nos hemos aventurado a crear un corte 20 y que el sistema
sea capaz de contar las cartas, pero si se programa una secuencia de cortes y
mezclas, estoy seguro de que la potencia de los efectos aumentaría
enormemente.

Otras de las ideas sugeridas ha sido la de aumentar la cantidad de


sensores utilizados. Si dividiéramos la superficie de trabajo en una matriz de
3x3, podríamos detectar casi cualquier cambio producido en la mesa.
Averiguaríamos en que parte de la mesa está ocurriendo el movimiento y
podríamos aprovecharlo para obtener efectos mágicos basados en eso.
Asimismo, se podrían combinar diferentes sensores de sonido o magnéticos
con el fin de adquirir nuevas captaciones de datos del exterior.

En determinadas situaciones el tener que mirar a la manga o al borde de


la mesa puede obligar a realizar alguna acción que deteriore la limpieza del
juego. Ocultar otro receptor en objetos comunes al público puede ayudar a
superar este obstáculo. Por ejemplo, en la magia con hilos, existen carretes
ocultos en los propios estuches de cartas. Introducir un Arduino con una
pequeña batería y sus correspondientes displays dentro de un estuche nos
permitiría poder mover nuestra pantalla dónde ver los resultados. Esta idea
también sería aplicable a monederos, vasos, botellas… etc.

En definitiva, investigando cualquiera de los puntos anteriores,


lograríamos un progreso continuo en la magia con electrónica. Nada de lo que
hemos realizado será permanente y estoy seguro de que actualmente se está
avanzando para alcanzar el perfeccionamiento.

20
Cortar en este ámbito se refiere a la acción de levantar un grupo de cartas de la baraja, colocarlas al
lado y colocar las restantes encima de las anteriores.

39
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

8. Conclusiones

Tras los resultados obtenidos, manifestamos nuestra plena satisfacción


por todo lo ejecutado. La resolución obtenida, la velocidad de transmisión, la
duración de las baterías y la cantidad aplicaciones mágicas descubiertas,
superan con creces la idea inicial del proyecto planteado.

Pese a que existen una multitud de mejoras ya comentadas, y si


volviéramos a comenzar el proyecto modificaríamos el diseño, la elaboración
de este trabajo nos ha permitido adquirir una gran cantidad de conocimientos
prácticos sobre las materias recibidas durante los estudios universitarios.
Hemos reafirmado los conocimientos sobre electrónica, diseño de circuitos,
instrumentación, envío y recepción de señales y programación. Además
también son de gran valor las competencias conseguidas en el contacto con
diferentes proveedores y en la búsqueda y recopilación de datos para el
proyecto. Por último, en Junio pretendo presentar el proyecto en el 32º
Congreso Nacional de magia en la categoría de invención.

Me gustaría agradecer enormemente la oportunidad recibida para


realizar algo que quizás está algo apartado de un clásico “proyecto fin de
carrera”, pero que me ha generado ilusión y ganas para crear algo nuevo.

40
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

9. Referencias.

9.1. Bibliografía
Aliexpress, S. o. (2012). Aliexpress. Recuperado el November de 2012, de
http://www.aliexpress.com/store/product/Aluminium-Alloy-Weighing-Load-Cell-1Kg-for-
Electronic-Scale/319674_561592896.html

Anastasios Karidis, R. G. (20 de October de 2011). Hardware to Software. Recuperado el


February de 2013, de http://www.hw2sw.com/2011/10/20/weight-sensors-and-arduino/2/

Arduino. (2005-2013). Arduino. Recuperado el 2012/2013, de


http://arduino.cc/en/Guide/HomePage

Areny, R. P. (1989). Transductores y acondicionadores de señal. 08007 Barcelona (España):


MARCOMBO, S.A.

Burr-Brown INA125. (1997). Texas Instruments. Recuperado el November de 2012, de Texas


Instruments: http://www.ti.com/lit/ds/symlink/ina125.pdf

Cadsoft. (2008). Cadsoftusa. Retrieved December 2013, from


http://www.cadsoftusa.com/eagle-pcb-design-software/?language=en

Digi Internacional. (1996-2013). Digi. Recuperado el November de 2012, de


http://www.digi.com/support/productdetail?pid=3352

Harmening, D. (ISSN 1406-0957). THE HISTORY OF WESTERN MAGIC. the Folk Belief and Media
Group of ELM (-ISSN 1406-0957-).

Iglesias, P. F. (25 de February de 2013). Pablo Yglesias. Recuperado el March de 2013, de


http://www.pabloyglesias.com/arduino-i-do-it-yourself/

Isabel Román Martinez y Rafael Estepa Alonso. (2007/2008). Trajano. Recuperado el February
de 2013, de http://trajano.us.es/~isabel/publicaciones/ARSS/0708/01_07_08.pdf

ITU. (s.f.). International Telecommunication Union. Recuperado el 2013, de International


Telecommunication Union: http://www.itu.int/es/Pages/default.aspx

Luis Carrión, D. O. (2009). ANALISIS DEL FUNCIONAMIENTO DEL SENSOR DE FUERZA RESISTIVO
(FSR) CON LabVIEW. Cuenca: Programa de Pasantías Académicas.

Mayoral, J. (March de 2013). Questions by e-mail. (J. Abascal, Entrevistador)

Nelms, H. (1969). Magia y Presentación. Barcelona: Editorial CYMYS -ISBN: 978-84-85-060-01-


6.

Regling, D. (s.f.). Bella Online. Recuperado el 2013, March, de


http://www.bellaonline.com/articles/art28692.asp

41
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Senel Technologies S.A. (25 de Februar de 2013). http://celdasdecarga.blogspot.com.es/.


Recuperado el March de 2013, de http://celdasdecarga.blogspot.com.es/

Texas Instruments. (2004). Texas Instruments. Retrieved December 2012, from


http://www.ti.com/lit/ds/symlink/lm137.pdf

Texas Instruments. (Revised 2012, August). Texas Instruments. Retrieved December 2012, from
http://www.ti.com/lit/ds/symlink/ua7805.pdf

Wikipedia. (s.f.). Bicycle. Recuperado el February de 2013, de Playing card:


http://en.wikipedia.org/wiki/Playing_card

Wikipiedia. (2009). Wikipedia. Recuperado el December de 2012, de


http://es.wikipedia.org/wiki/Arduino

Xbee. (2009-2013). Xbee.CL Módulos de transmisión inalámbrica. Recuperado el December de


2012, de http://www.xbee.cl/

42
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

10. Apéndice.

10.1. Efectos explicados

Localización de Cartas: Existen multitud de técnicas para lograr el


perfecto control de un naipe dentro de una baraja. Algunas de ellas son
totalmente técnicas, mientras otras se fundamentan en distracciones o
confusiones visuales. Gracias al sistema diseñado, el procedimiento sería el
siguiente:

1º) Una vez seleccionada una carta por el espectador, pedirle que
levante un número cualesquiera de cartas.

2º) Realizar la medición del número de cartas sin cortar. Ese valor será
X.

3º) Introducir la carta del espectador en la posición correspondiente al


corte

4º) Depositar el resto de cartas encima de la carta escogida.

5º) Una vez realizado esto, habremos obtenido un número de la


medición. Sumándole uno a ese número adquirimos la posición de la carta
elegida por el espectador empezando a contar desde las caras de las cartas. Si
queremos saber en qué posición se encuentra desde los dorsos, tendremos
que realizar el cálculo 52 – X (o 54 si la baraja contiene los comodines), siendo
X la lectura de la medición. Con todo lo anterior logramos localizar
perfectamente cualquier carta sin necesidad de técnica.

Forzajes: En el argot mágico un forzaje es la acción de entregar una


carta a un espectador, conocida anteriormente por el mago, con la convicción
de que ésta ha sido elegida libremente. Al igual que en el caso anterior, hay
cientos de maneras de efectuar estas maniobras. Suponiendo que quisiéramos
forzar el As de corazones, el procedimiento sería el siguiente:

1º) Colocar el As de corazones en la última posición de la baraja y pedir


al espectador que escoja un grupito de cartas de arriba de la baraja (tiene que
ser inferior a 26).

2º) A continuación dirigirse al espectador y comentarle que tiene que


contar el número de cartas que ha cogido. Mientras tanto, leer el dato del
sensor de las cartas restantes de la baraja. Ese valor será X.

43
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

3º) Mientras el espectador cuenta coger el resto de la baraja y contar


desde abajo 52 – X cartas. Cortar por las cartas contadas, quedando así el As
de corazones en la posición correcta. Colocar de nuevo la baraja en la mesa

4º) Pedir al espectador que cuente el número de cartas que cortó en el


otro montón. Y que seleccione la carta. La carta que elegirá el espectador no
será otra que el As de corazones.

Diferenciación de objetos: Con esta idea somos capaces de averiguar


que objeto falta de un grupo dentro de un habitáculo cerrado. Como ejemplo,
pensemos en un monedero y en 3 monedas. Una de plata, otra de cobre y otra
de oro. Es importante que las monedas posean un peso muy diferente entre
ellas. Anteriormente medimos el monedero con todas las combinaciones
posibles de monedas en su interior. Es decir, medimos el monedero con la/s
moneda/s:

-Vacío.

-Plata.

-Cobre.

-Oro.

-Plata y cobre.

-Plata y oro.

-Cobre y oro.

Plata, cobre y oro.

Memorizar cada resultado no será problema debido a la gran diferencia


de pesos de las monedas. Una vez sabido esto, tan solo queda contar al
espectador que puede escoger cualquier combinación de monedas del interior
y guardárselas en el bolsillo, mientras nosotros nos damos la vuelta y no
miramos. Con tan solo mirar el resultado de la medición sabremos que moneda
escogió el espectador.

Adivinación inmediata de la carta elegida: En este efecto vamos a


combinar nuestro proyecto con las barajas en posición de mnémonica. En el
mundo de la Cartomagia existen multitud de barajas ordenadas de diferentes
maneras, que ofrecen la posibilidad al ilusionista de saber la carta seleccionada
del espectador con tan sólo mirar la carta anterior o posterior a esta o saber la
posición de la carta en la baraja. Como ejemplo pensemos en que tenemos una
baraja ordenada de As a Rey y por palos Picas, Corazones, Diamantes y
Tréboles. Nadie sabe que la baraja está ordenada, y sabemos que la carta de

44
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

abajo es el As de picas. A continuación pedimos al espectador que corte por


donde quiera, y escoja la caja de corte. En el momento del corte realizamos la
medición y obtenemos que sobre la mesa todavía quedan 33 cartas. Con ese
número ya podemos saber que la carta elegida será la número 34, es decir, el
8 de Diamantes (13+13+8).

Con todos estos efectos, hemos intentado que el lector comprenda las
posibilidades que ofrece el proyecto. En definitiva, esta parte del proyecto entra
más profundamente en el mundo del ilusionismo y por ello consideramos que
no es adecuado desarrollarlo extensamente. En las futuras líneas de trabajo
queda pendiente realizar una recopilación de todas las técnicas, efectos y usos
posibles.

45
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

10.2. Códigos de programación

Rutina del Arduino UNO

// Arduino controlador interior a la mesa


int activacion1 = 11; //Activación del primer display 7-segmentos
int activacion2= 12; //Activación del segundo display 7-segmentos
int barra1 = 2; //Variables para manejar las barras de los displays 7-segmentos
int barra2 = 3;
int barra3 = 4;
int barra4 = 5;
int barra5 = 6;
int barra6 = 7;
int barra7 = 8;

int analogPin=5; //Pin de entrada de la señal analógica


int valor_analogico=0; //Valor leído del sensor
int cartas_enviadas=0; //Valor enviado al receptor
int valor_recibido=0; //Valor de lectura de los pulsadores del receptor
int numero_carta_baraja=52; //Número de cartas de la baraja a utilizar
int cartas_cortadas=0; //El número que queda en la mesa tras hacer el corte
int cartas_antes_de_cortar=0; //El número de cartas

int visualizar=1; //Si su valor es 0, no se muestra en el borde de la mesa, si es 1 si se


//muestra
float frontera=00; // Número de cartas que tiene que sobrepasar para que se considere
//"corte"

float peso_base=0; //Variables utilizadas para la calibración del sensor


float peso_carta=0;
float numero_cartas=00;

int cifra1; // primera cifra a mostrar en los displays


int cifra2; // segunda cifra a mostrar en los displays
int i; //variable para bucle
int a; //variable para bucle

// La rutina setup solo se inicia una vez al resetar


void setup() {

// Inicializamos los pines como salidas y entradas


pinMode(barra1, OUTPUT);
pinMode(barra2, OUTPUT);
pinMode(barra3, OUTPUT);
pinMode(barra4, OUTPUT);
pinMode(barra5, OUTPUT);
pinMode(barra6, OUTPUT);
pinMode(barra7, OUTPUT);
pinMode(activacion1,OUTPUT);
pinMode(activacion2,OUTPUT);

46
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

// Fijamos la velocidad de la conexión serie


Serial.begin(115200);
delay(5000);

//Calculamos el peso base de la plataforma sin cartas.


for(a=0; a<10000;a++)
{
valor_analogico= analogRead(analogPin);
numero_cartas=numero_cartas+valor_analogico;
}
numero_cartas=numero_cartas/10000;
peso_base=numero_cartas;
mostrar_numero(round(peso_base));

//Calculamos el peso de una carta


delay(5000);
numero_cartas=0;
for(a=0;a<10000;a++)
{
valor_analogico=analogRead(analogPin);
numero_cartas=numero_cartas+valor_analogico;
}
numero_cartas=numero_cartas/10000;
peso_carta=(numero_cartas-peso_base)/numero_carta_baraja;

//Función para mostrar los dígitos en los displays 7-segmentos


void mostrar_numero(float numero)
{
numero=round(numero);
cifra1=floor((numero)/10);
cifra2=round(((numero/10)-cifra1)*10);

for (i=0; i < 20; i++)


{
digitalWrite(activacion1,HIGH);

switch (cifra1)
{
case 0:
display(1,0,0,0,0,0,0);
break;
case 1:
display(1,1,1,0,1,1,0);
break;
case 2:

47
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

display(0,1,0,0,0,0,1);
break;
case 3:
display(0,1,0,0,1,0,0);
break;
case 4:
display(0,0,1,0,1,1,0);
break;
case 5:
display(0,0,0,1,1,0,0);
break;
case 6:
display(0,0,0,1,0,0,0);
break;
case 7:
display(1,1,0,0,1,1,0);
break;
case 8:
display(0,0,0,0,0,0,0);
break;
case 9:
display(0,0,0,0,1,0,0);
break;
}
delay(10);
digitalWrite(activacion1,LOW);
digitalWrite(activacion2,HIGH);

switch (cifra2)
{
case 0:
display(1,0,0,0,0,0,0);
break;
case 1:
display(1,1,1,0,1,1,0);
break;
case 2:
display(0,1,0,0,0,0,1);
break;
case 3:
display(0,1,0,0,1,0,0);
break;
case 4:
display(0,0,1,0,1,1,0);
break;
case 5:
display(0,0,0,1,1,0,0);
break;
case 6:
display(0,0,0,1,0,0,0);
break;

48
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

case 7:
display(1,1,0,0,1,1,0);
break;
case 8:
display(0,0,0,0,0,0,0);
break;
case 9:
display(0,0,0,0,1,0,0);
break;
}
delay(10);
digitalWrite(activacion2,LOW);
}
digitalWrite(activacion1,LOW);
digitalWrite(activacion2,LOW);
}

//Función que enciende los displays


void display(int a,int b, int c, int d, int e, int f, int g)
{
digitalWrite(barra1,a);
digitalWrite(barra2,b);
digitalWrite(barra3,c);
digitalWrite(barra4,d);
digitalWrite(barra5,e);
digitalWrite(barra6,f);
digitalWrite(barra7,g);
}

// Rutina principal, se ejecuta en bucle.


void loop()
{

// La rutina principal consiste en leer el peso del sensor, enviarlo por el puerto serie,
// mostrarlo en los displays si procede y ver si tenemos alguna señal de los interruptores del
//receptor.
numero_cartas=0;
for(a=0; a<1000; a++)
{
valor_analogico=analogRead(analogPin);
numero_cartas=(numero_cartas+valor_analogico);
}
numero_cartas=numero_cartas/1000;
cartas_enviadas=round((numero_cartas-peso_base)/peso_carta);
Serial.write(cartas_enviadas);
if(visualizar==1)
{
mostrar_numero(cartas_enviadas);
}
else

49
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

delay(200);
if(Serial.available()>0) {

valor_recibido= Serial.read();
switch(valor_recibido)
{
case 1: //Este caso es el RESET
delay(2000);
//Calculamos el peso base de la plataforma sin cartas.
for(a=0; a<10000;a++)
{
valor_analogico= analogRead(analogPin);
numero_cartas=numero_cartas+valor_analogico;
}
numero_cartas=numero_cartas/10000;
peso_base=numero_cartas;
mostrar_numero(round(peso_base));

//Calculamos el peso de una carta


delay(5000);
numero_cartas=0;
for(a=0;a<10000;a++)
{
valor_analogico=analogRead(analogPin);
numero_cartas=numero_cartas+valor_analogico;
}
numero_cartas=numero_cartas/10000;
peso_carta=(numero_cartas-peso_base)/numero_carta_baraja;
break;

case 2: //Este caso es el corte


numero_cartas=0;
frontera=0;
cartas_cortadas=0;
for(a=0; a<1000; a++) { //aquí vemos cuantas hay ahora mismo (por si la hay
//un grupito de cartas)
valor_analogico=analogRead(analogPin);
numero_cartas=numero_cartas+valor_analogico;
}
numero_cartas=numero_cartas/1000;
numero_cartas=round(((numero_cartas-peso_base)/peso_carta));
cartas_cortadas=numero_cartas;
cartas_antes_de_cortar=numero_cartas;
if(visualizar==1);
{
mostrar_numero(99);
}
//Medimos una frontera de +/- 5 cartas.
for(a=0;a<100;a++) {
valor_analogico=analogRead(analogPin);

50
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

frontera=frontera+valor_analogico;
}
frontera=frontera/100;
frontera=round(((frontera-peso_base)/peso_carta));
while(((numero_cartas-5)<=frontera)&&(frontera<=(numero_cartas +5)))
{
frontera=0;
for(a=0;a<100;a++) {
valor_analogico=analogRead(analogPin);
frontera=frontera+valor_analogico;
}
frontera=frontera/100;
frontera=round(((frontera-peso_base)/peso_carta));
}

//Necesitamos los valores más pequeños, para saber cual es el número menor de cartas
//que ha habido en la mesa.
for(i=0; i<10; i++){ //De este número depende de que salga bien si corta
//pocas cartas o muchas.
numero_cartas=0;
for(a=0; a<1000; a++) {
valor_analogico=analogRead(analogPin);
numero_cartas=numero_cartas+valor_analogico;
}
numero_cartas=numero_cartas/1000;
numero_cartas=round(((numero_cartas-peso_base)/peso_carta));

cartas_cortadas=min(cartas_cortadas,numero_cartas);
}

//Aquí ya sabremos cuantas cartas se han cortado


cartas_cortadas=cartas_antes_de_cortar-cartas_cortadas;

//Mandamos 5 veces esas cartas cortadas


for (a=0;a<5;a++)
{
Serial.write(cartas_cortadas);
if (visualizar==1)
{
mostrar_numero(cartas_cortadas);
}
delay(200);
}
break;

case 3: //Este caso muestra o no en los displays situados en la mesa.


visualizar = !visualizar;
if (visualizar==0)
{
mostrar_numero(00);

51
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

}
else
mostrar_numero(11);
break;
}

52
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

Rutina del Arduino FIO (inalámbrico)

// Arduino FIO (exterior a la mesa)


int activacion1 = 11; //Activación del primer display 7-segmentos
int activacion2= 12; //Activación del segundo display 7-segmentos
int barra1 = 2; //Variables para manejar las barras de los displays 7-segmentos
int barra2 = 3;
int barra3 = 4;
int barra4 = 5;
int barra5 = 6;
int barra6 = 7;
int barra7 = 8;

int pulsador1= 9; //Pulsadores a utilizar. Sirven para mandar órdenes a la mesa y manejar
//la visibilidad del display
int pulsador2= 10;
char pulsador3= A3;
char pulsador4= A4;

float numero_cartas=00; //Número de cartas recibido.


int cifra1;
int cifra2;
int i; //variable para bucle 1
int a; //variable para bucle 2

// La rutina setup solo se inicia una vez al resetar


void setup() {

// Inicializamos los pines como salidas y entradas


pinMode(barra1, OUTPUT);
pinMode(barra2, OUTPUT);
pinMode(barra3, OUTPUT);
pinMode(barra4, OUTPUT);
pinMode(barra5, OUTPUT);
pinMode(barra6, OUTPUT);
pinMode(barra7, OUTPUT);
pinMode(activacion1,OUTPUT);
pinMode(activacion2,OUTPUT);
pinMode(pulsador1,INPUT);
pinMode(pulsador2,INPUT);
pinMode(pulsador3,INPUT);
pinMode(pulsador4,INPUT);

// Fijamos la velocidad de la conexión serie


Serial.begin(115200);
}

//Función para mostrar los dígitos en los displays 7-segmentos


void mostrar_numero(float numero)
{

53
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

numero=round(numero);
cifra1=floor((numero)/10);
cifra2=round(((numero/10)-cifra1)*10);

for (i=0; i < 20; i++)


{
digitalWrite(activacion1,HIGH);

switch (cifra1)
{
case 0:
display(1,0,0,0,0,0,0);
break;
case 1:
display(1,1,1,0,1,1,0);
break;
case 2:
display(0,1,0,0,0,0,1);
break;
case 3:
display(0,1,0,0,1,0,0);
break;
case 4:
display(0,0,1,0,1,1,0);
break;
case 5:
display(0,0,0,1,1,0,0);
break;
case 6:
display(0,0,0,1,0,0,0);
break;
case 7:
display(1,1,0,0,1,1,0);
break;
case 8:
display(0,0,0,0,0,0,0);
break;
case 9:
display(0,0,0,0,1,0,0);
break;
}
delay(10);
digitalWrite(activacion1,LOW);
digitalWrite(activacion2,HIGH);

switch (cifra2)
{
case 0:
display(1,0,0,0,0,0,0);
break;

54
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

case 1:
display(1,1,1,0,1,1,0);
break;
case 2:
display(0,1,0,0,0,0,1);
break;
case 3:
display(0,1,0,0,1,0,0);
break;
case 4:
display(0,0,1,0,1,1,0);
break;
case 5:
display(0,0,0,1,1,0,0);
break;
case 6:
display(0,0,0,1,0,0,0);
break;
case 7:
display(1,1,0,0,1,1,0);
break;
case 8:
display(0,0,0,0,0,0,0);
break;
case 9:
display(0,0,0,0,1,0,0);
break;
}
delay(10);
digitalWrite(activacion2,LOW);
}
digitalWrite(activacion1,LOW);
digitalWrite(activacion2,LOW);
}

//Función que enciende los displays


void display(int a,int b, int c, int d, int e, int f, int g)
{
digitalWrite(barra1,a);
digitalWrite(barra2,b);
digitalWrite(barra3,c);
digitalWrite(barra4,d);
digitalWrite(barra5,e);
digitalWrite(barra6,f);
digitalWrite(barra7,g);
}

55
Proyecto fin de carrera de Ingeniería de Telecomunicaciones

// Rutina principal, se ejecuta en bucle.


void loop()
{

//La rutina principal consiste en leer los datos recibidos y obedecer a los distintos pulsadores.
if (Serial.available() > 0) {

numero_cartas = Serial.read();
if (digitalRead(pulsador1)== HIGH)
{
mostrar_numero(numero_cartas);
}
}

if (digitalRead(pulsador2)== HIGH) //Enviamos la orden RESET


{
delay(1000);
Serial.write(1);
delay(1000);
}
if (digitalRead(pulsador3)== HIGH) //Enviamos la orden CORTE
{
delay(1000);
Serial.write(2);
delay(1000);
}
if (digitalRead(pulsador4)== HIGH) //Enviamos la orden para VISUALIZAR en la mesa
{
delay(1000);
Serial.write(3);
delay(1000);
}
numero_cartas=0;

56

También podría gustarte