Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Duración: 2 Sesiones
Contenidos
Objetivos de la práctica
-
Tutorial 1. Manual básico de Arduino
Características generales de la placa
Se trata de una placa open hardware por lo que su diseño es de libre distribución y utilización, que
incluso podemos construir nosotros mismos (En la Figura 1 se observa el aspecto de la placa). En
la siguiente web puede encontrarse mucha información relativa a la placa:
http://arduino.cc/
Entorno de desarrollo
FSI-33612 2/15
Figura 2. Entorno de desarrollo.
Lo primero que tenemos que hacer para comenzar a trabajar con el entorno de desarrollo de
arduino es configurar las comunicaciones entre la placa Arduino y el PC. Para ello deberemos
abrir en el menú "Tools" la opción "Serial Port". En esta opción deberemos seleccionar el puerto
serie al que está conectada nuestra placa. En Windows, si desconocemos el puerto al que está
conectado nuestra placa podemos descubrirlo a través del Administrador de dispositivos (Puertos
COM & LPT/ USB Serial Port).
El primer paso para comprobar que todo lo que hemos hecho hasta ahora está bien y
familiarizarnos con el interfaz de desarrollo, es abrir uno de los ejemplos. Se recomienda abrir el
ejemplo "Blink". Para ello debemos acceder a través del menú File -> Sketchbook -> Examples ->
Digital -> Blink.
El ejemplo "Blink" lo único que hace es parpadear un LED que está colocado en el pin número 13
de la placa. Vamos a ver qué hay que hacer para subir el programa a la placa Arduino. Primero
comprobamos que el código fuente es el correcto. Para ello pulsamos el botón de verificación de
código (Figura 2, botón A). Si todo va bien deberá aparecer un mensaje en la parte inferior de la
interfaz indicando "Compilación terminada". Una vez que el código ha sido verificado
FSI-33612 3/15
procederemos a cargarlo en la placa. Para ello tenemos que pulsar el botón de carga (Figura 2,
botón B).
Durante la carga del programa, en la placa USB, se encenderán los LED que indican que se están
enviando y recibiendo información por el puerto serie: TX/RX. Si todo se ha realizado
correctamente debe aparecer el mensaje "Carga finalizada". Ahora tan sólo queda esperar unos 8
segundos aproximadamente para comprobar que todo ha salido bien. Si el led colocado en el pin
13 de la placa se enciende y se apaga cada segundo entonces todo ha ido bien. Por fin tenemos
todo listo para empezar a trabajar con la placa Arduino.
void setup() {
inMode(pin, OUTPUT); // Establece 'pin' como salida
}
void loop() {
digitalWrite(pin, HIGH); // Activa 'pin'
delay(1000); // Pausa un segundo
digitalWrite(pin, LOW); // Desactiva 'pin'
delay(1000);
}
Como se observa en este bloque de código cada instrucción acaba con ; y los comentarios se
indican con //. Al igual que en C se pueden introducir bloques de comentarios con /* ... */.
Funciones
Una función es un bloque de código identificado por un nombre y que es ejecutado cuando la
función es llamada. La declaración de una función incluye en primer lugar el tipo de datos
que devuelve la función (e.j. int si lo que devuelve es un valor entero). Después del tipo de
datos se especifica el nombre de la función.
int delayVal()
{
int v; // crea una variable temporal 'v'
v = analogRead(pot); // lee el valor del potenciómetro
FSI-33612 4/15
v /= 4; // convierte los valores 0-1023 a 0-255
return v; // devuelve el valor final de la variable
}
Variables
int inputVariable = 0;
Una variable puede ser declarada en el inicio del programa antes de setup(), localmente a una
determinada función e incluso dentro de un bloque como pueda ser un bucle. El sitio en el que la
variable es declarada determina el ámbito de la misma. Una variable global es aquella que puede
ser empleada en cualquier función del programa. Estas variables deben ser declaradas al inicio
del programa (antes de la función setup()).
void setup()
{
// no se requiere setup
}
void loop()
{
for (int i=0; i<20;i++) // 'i' es visible solo en el bucle
i++;
float f; // 'f' es visible únicamente en la función loop()
}
Tipos de datos
FSI-33612 5/15
procederemos a cargarlo en la placa. Para ello tenemos que pulsar el botón de carga (Figura 2,
botón B).
Durante la carga del programa, en la placa USB, se encenderán los LED que indican que se están
enviando y recibiendo información por el puerto serie: TX/RX. Si todo se ha realizado
correctamente debe aparecer el mensaje "Carga finalizada". Ahora tan sólo queda esperar unos 8
segundos aproximadamente para comprobar que todo ha salido bien. Si el led colocado en el pin
13 de la placa se enciende y se apaga cada segundo entonces todo ha ido bien. Por fin tenemos
todo listo para empezar a trabajar con la placa Arduino.
void setup() {
inMode(pin, OUTPUT); // Establece 'pin' como salida
}
void loop() {
digitalWrite(pin, HIGH); // Activa 'pin'
delay(1000); // Pausa un segundo
digitalWrite(pin, LOW); // Desactiva 'pin'
delay(1000);
}
Como se observa en este bloque de código cada instrucción acaba con ; y los comentarios se
indican con //. Al igual que en C se pueden introducir bloques de comentarios con /* ... */.
Funciones
Una función es un bloque de código identificado por un nombre y que es ejecutado cuando la
función es llamada. La declaración de una función incluye en primer lugar el tipo de datos
que devuelve la función (e.j. int si lo que devuelve es un valor entero). Después del tipo de
datos se especifica el nombre de la función.
int delayVal()
{
int v; // crea una variable temporal 'v'
v = analogRead(pot); // lee el valor del potenciómetro
FSI-33612 4/15
Introduce un nivel alto (HIGH) o bajo (LOW) en el pin digital especificado. De nuevo, el pin puede
ser especificado con una variable o una constante 0-13. Ej. digitalWrite(pin, HIGH);
Función analogRead(pin)
Lee el valor desde el pin analógico especificado con una resolución de 10 bits. Esta función solo
funciona en los pines analógicos (0-5). El valor resultante es un entero de 0 a 1023. Los pines
analógicos, a diferencia de los digitales no necesitan declararse previamente como INPUT o
OUTPUT.
Escribe un valor pseudo-analógico usando modulación por ancho de pulso (PWM) en un pin de
salida marcado como PWM. Esta función está activa para los pines 3, 5, 6, 9, 10, 11. Ej
analogWrite(pin, v); // escribe 'v' en el 'pin' analógico. Puede especificarse un valor de 0 - 255. Un
valor 0 genera 0 V en el pin especificado y 255 genera 5 V. Para valores de 0 a 255, el pin alterna
rápidamente entre 0 V y 5 V, cuanto mayor sea el valor, más a menudo el pin se encuentra en
HIGH (5 V). Por ejemplo, un valor de 64 será 0 V tres cuartas partes del tiempo y 5 V una cuarta
parte. Un valor de 128 será 0 V la mitad del tiempo y 5 V la otra mitad. Un valor de 192 será 0 V
una cuarta parte del tiempo y 5 V tres cuartas partes.
FSI-33612 7/15
v /= 4; // convierte los valores 0-1023 a 0-255
return v; // devuelve el valor final de la variable
}
Variables
int inputVariable = 0;
Una variable puede ser declarada en el inicio del programa antes de setup(), localmente a una
determinada función e incluso dentro de un bloque como pueda ser un bucle. El sitio en el que la
variable es declarada determina el ámbito de la misma. Una variable global es aquella que puede
ser empleada en cualquier función del programa. Estas variables deben ser declaradas al inicio
del programa (antes de la función setup()).
void setup()
{
// no se requiere setup
}
void loop()
{
for (int i=0; i<20;i++) // 'i' es visible solo en el bucle
i++;
float f; // 'f' es visible únicamente en la función loop()
}
Tipos de datos
FSI-33612 5/15
Tutorial 2. Uso del simulador de Arduino
Antes de realizar un circuito real es posible simularlo previamente como manera de asegurar que
todo funciona correctamente. Para ello, existen herramientas como la ofrecida por Autodesk y
disponible de forma gratuita en la página https://tinkercad.com/. A continuación se muestra en
unas cuantos pasos como realizar un circuito básico con esta herramienta.
FSI-33612 9/15
Existen diferentes opciones dentro del circuito. Algunas de las más importantes:
5. Para introducir un componente en el circuito basta con pinchar en una vez en él y otra sobre el
esquema en la posición deseada. Para eliminarlo se puede pulsar sobre el componente y
presionar Suprimir o Retroceso. Los componentes con pines se pueden interconectar mediante
cables. Para ello, hay que pinchar sobre un pin y después pinchar en otro pin para cerrar la
conexión. Todos los elementos introducidos son fácilmente editables.
Como ejemplo se muestra el siguiente esquema que incluye una placa Arduino UNO, un LED y
una resistencia de 220 ohmios:
FSI-33612 10/15
6. Si se desea modificar el código, pulsamos sobre Code Editor, desactivamos el botón Block y
se accede al editor, como se muestra a continuación (en este ejemplo se ha introducido un código
que hace parpadear el LED verde cada 1 segundo).
7. Una vez introducido el código correspondiente se puede simular la ejecución real del circuito
seleccionando la opción Start Simulation y se observará como el LED verde del circuito se
apaga y se enciende a la frecuencia deseada.
FSI-33612 11/15
EJERCICIOS PROPUESTOS
Ejercicio 1
Encendido de un LED
El siguiente ejemplo muestra como activar un LED mediante la placa Arduino. El LED, conectado a uno
de los pines de salida de la placa (pin 13), parpadea con un período determinado (200 ms) y se
muestra por el puerto SERIAL cuando el LED está a nivel BAJO o ALTO.
CÓDIGO
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
FSI-33612 12/15
Se pide:
1. Simular el esquema propuesto con la herramienta online.
2. Modificar el circuito para que el LED se encienda al conectarlo al pin 12 y modificar el período
de parpadeo de 200ms a 1s.
3. Realizar un programa que ejecute el encendido correlativo de cuatro LEDs conectados a los
pins 10, 11, 12 y 13 con una período de 500 ms.
4. Realizar un programa que simule el comportamiento de un semáforo. Emplear para ello tres
LEDs de colores rojo, verde y naranja. La secuencia que deben seguir es la siguiente: Verde (8
segundos) – Naranja (3 segundos) – Rojo (10 segundos).
(Opcional) Hacer parpadear el LED durante el estado amarillo con un período de 500 ms.
Ejercicio 2
Utilización de pulsadores
El siguiente ejemplo muestra como utilizar un pulsador para variar el funcionamiento de un circuito. El
pulsador se conecta al pin 7 (configurado como pin de entrada) y actúa sobre el pin 13 (configurado
como pin de salida) que enciende y apaga el LED.
Componentes: placa ARDUINO UNO, resistencia 220 Ω (para el LED), resistencia 10 kΩ (para el
pulsador), pulsador y LED de color verde.
FSI-33612 13/15
CÓDIGO
int ledPin = 13; // choose the pin for the LED
int inPin = 7; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inPin, INPUT); // declare pushbutton as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(inPin); // read input value
Serial.println(val);
if (val == HIGH) { // check if the input is HIGH (button pressed)
digitalWrite(ledPin, HIGH); // turn LED ON
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
}
}
Se pide:
1. Simular el esquema propuesto con la herramienta online.
2. Realizar un programa que haga parpadear un LED con un período de 500 ms y que al activar el
pulsador cambie el período de parpadeo a 1 segundo.
3. Realizar un programa que simule el funcionamiento de un paso a nivel mediante un LED rojo y
un LED verde. El LED rojo permanece iluminado hasta que se active un pulsador, que apagará el
LED rojo y encenderá el LED verde. Cuando se suelte el pulsador, el LED rojo volverá a
iluminarse y el LED verde se apagará.
Ejercicio 3
Circuitos con sensores básicos analógicos (LDR)
El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (puede descender
hasta 50 ohms) y muy alto cuando está a oscuras (varios megaohmios).
El siguiente ejemplo realiza el encendido de un LED (pin 13) en función de la intensidad de luz
incidente sobre un fotorresitor. El LED permanece encendido cuando no hay luz y se apaga cuando la
intensidad supera un determinado nivel. El valor del fotorresistor se mide como una entrada analógica
(A0).
FSI-33612 14/15
Componentes: placa ARDUINO UNO, resistencia 220 Ω (para el LED), resistencia 1O kΩ (para el
LDR), sensor LDR y LED de color verde.
CÓDIGO
//Constants
const int pResistor = A0; // Analog pin A0
const int ledPin=13; // Led pin at Arduino pin 9
//Variables
int value; // Store value from photoresistor (0-1023)
void setup(){
pinMode(ledPin, OUTPUT); // Set pin 9 as an output
pinMode(pResistor, INPUT);// Set analog A0 pin as an input
Serial.begin(9600);
void loop(){
value = analogRead(pResistor);
Serial.println(value);
Se pide:
1. Simular el esquema propuesto con la herramienta online.
2. Realizar un programa que haga parpadear el LED con un período variable que sea dependiente
del valor del fotorresistor.
FSI-33612 15/15
Práctica 2. Procesado básico de señales
Duración: 2 Sesiones
Contenidos
Objetivos de la práctica
7. Una vez introducido el código correspondiente se puede simular la ejecución real del circuito
seleccionando la opción Start Simulation y se observará como el LED verde del circuito se
apaga y se enciende a la frecuencia deseada.
FSI-33612 11/15
Si se introduce el siguiente código se obtendrá el valor de entrada analógico (0-
1023) y se mostrará por el monitor serie. De esta manera, es posible hacer variar el
valor de la señal analógica de forma manual. Para ello basta con pinchar sobre el
potenciómetro en simulación y rotarlo.
//Constants
const int pResistor = A0; // Analog pin A0
//Variables
int value; // Store value from resistor (0-1023)
void setup()
{
pinMode(pResistor, INPUT);// Set analog A0 pin as an input
Serial.begin(9600);
}
void loop()
{
value = analogRead(pResistor);
Serial.println(value);
}
A la hora de tratar con señales en tiempo real es muy útil poder conocer el tiempo de
ejecución del programa para poder realizar determinadas acciones en un instante de
tiempo concreto. Existen dos funciones de tiempo principales en Arduino:
FSI-33612 3/6
EJERCICIOS PROPUESTOS
Ejercicio 1
Encendido de un LED
El siguiente ejemplo muestra como activar un LED mediante la placa Arduino. El LED, conectado a uno
de los pines de salida de la placa (pin 13), parpadea con un período determinado (200 ms) y se
muestra por el puerto SERIAL cuando el LED está a nivel BAJO o ALTO.
CÓDIGO
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
FSI-33612 12/15
EJERCICIOS PROPUESTOS
Ejercicio 1
Cálculo de máximos, mínimos y valor medio.
Se pide:
1. Simular el esquema propuesto con la herramienta online.
2. Mostrar el valor del potenciómetro por el monitor serie junto al mensaje: “Valor
actual de la señal”.
3. Modificar el código para que se muestre el valor máximo y mínimo de la señal.
Los valores máximos y mínimos serán los correspondientes a toda la ejecución del
programa. Mostrar el mensaje: “Valor máximo” y “Valor mínimo”.
4. Modificar el código para que se muestre el valor máximo y mínimo de la señal
cada 5 segundos (se recomienda utilizar la función millis). Los valores máximos y
mínimos se obtendrán para cada período de 5 segundos.
5. Modificar el código para que se muestre el valor medio de la señal cada 5
segundos. El valor medio se obtendrá para cada período de 5 segundos. Mostar el
mensaje: “Valor medio”.
FSI-33612 5/6
Ejercicio 2
Normalización de la señal y filtro de media móvil
2. Aplicar un filtro de media móvil simple (n=5) a la señal sin normalizar y mostrar el
valor original y filtrado de cada dato medido por el monitor serie.
3. Modificar el valor de n para ver que efectos se producen sobre la señal. Se debe
aplicar el filtro, con distintos valores de n, sobre la misma señal de entrada.
Nota: Para observar mejor este efecto se recomienda copiar los datos del monitor
serie en una hoja de cálculo en Excel y representar ambas señales.
FSI-33612 6/6
Práctica 3. Introducción a la plataforma de sensores
e-Health
Duración: 1 Sesión
Contenidos
Objetivos de la práctica
FSI-33612 2/11
Figura 2a. Estructura de la placa e-Health
FSI-33612 3/11
emergencias, pero también en otros entornos como en las cabinas de avión
despresurizadas, para poder evaluar el grado de oxigenación del piloto.
Los rangos aceptables en pacientes oscilan entre 95% y 99%. Un rango menor,
entre el 88% y el 94%, puede ser síntoma de hipoxia. Un porcentaje del 100% puede
indicar un envenenamiento por inhalación de monóxido de carbono.
Figura 3. Oxímetro
Respiración
Temperatura corporal
FSI-33612 4/11
La temperatura corporal depende del lugar del cuerpo en el que se realiza la medida
y de la hora del día y el nivel de actividad de la persona. La temperatura media
corporal comúnmente aceptada es de 37ºC. En adultos sanos, la temperatura del
cuerpo fluctúa unos 0.5ºC a lo largo del día, con temperaturas menores por la
mañana y temperaturas más altas por la tarde y por la noche, dependiendo de las
necesidades y los cambios de actividad.
En el campo médico, la monitorización de la temperatura es de gran importancia, ya
que una temperatura muy alta es síntoma de muchas enfermedades. En función de
ello, se pueden definir varios rangos de temperatura corporal:
Acelerómetro
FSI-33612 5/11
Figura 6. Acelerómetro
GSR
Electromiografía
FSI-33612 6/11
Figura 8. Electrodos EMG y placa e-Health
Se dispone de tres electrodos: MID, colocado sobre el centro del vientre del
músculo; END, colocado en el extremo del músculo; y GND, colocado en una zona
neutra, por ejemplo sobre el codo. Estos electrodos irán conectados a la placa e-
Health en los pines destinados a la lectura de señales EMG (ver Figura 9).
Adicionalmente, un potenciómetro situado en la placa permite cambiar la ganancia
de la señal para ajustarla a nuestras necesidades (Figura 10).
FSI-33612 7/11
Figura 10. Estructura de la placa e-Health. Conexión de electodos EMG.
Electrocardiograma
Para medir la señal ECG se utilizan un par de electrodos bipolares y una referencia.
La conexión de los electrodos en la placa e-Health se muestra a continuación:
FSI-33612 8/11
Figura 12. Conexión de los electrodos ECG
FSI-33612 9/11
Ejercicio 1
Utilización de sensores y placa e-Health
Materiales necesarios:
• 1x Arduino One
• 1x e-Health Sensor Shield
• Cable USB
• Sensores:
• 1x Oxímetro (código: PulsioximeterExample)
• 1x Sensor de temperatura (código: TemperatureExample)
• 1x Sensor de respuesta galvánica de la piel (código: GSRExampleSerial)
• 1x Acelerómetro (código: BodyPositionExample)
• 1x Sensor de flujo de aire (código: AirFlowExampleSerial)
• 1x Electrodos EMG
• 1x Electrodos ECG
Procedimiento
FSI-33612 10/11
- Seleccionar Herramientas->Tarjeta->Arduino One
- Seleccionar Herramientas->Puerto Serial->COM?
- Seleccionar Herramientas->Programador->AVR ISP
- Seleccionar Archivo->Ejemplos->eHealth->(código ejemplo)
- Conectar el sensor adecuado en la placa e-Health
- Compilar el código
- Cargar el código
FSI-33612 11/11