Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arduino
Arduino
9 788426 721457
Iniciación a Arduino UNO
Miguel Pareja Aparicio
Iniciación a Arduino UNO
ISBN: 978-84-267-2145-7
Índice
Introducción ............................................................................................. 1
Capítulo 1. ¿Qué es arduino? ..................................................................... 3
1.1 Introducción ..................................................................................... 3
1.2 Software libre: qué es y qué me hace falta ...................................... 3
1.3 Hardware libre: ¿existe? .................................................................. 5
1.4 Pero ¿qué es arduino uno? ............................................................... 7
1.5 ¿Qué necesito para empezar?........................................................ 10
1.6 Programar: ¿qué necesito saber? .................................................. 15
1.7 Actividades propuestas .................................................................. 20
Capítulo 2. Primeros pasos ...................................................................... 23
2.1 Introducción ................................................................................... 23
2.2 Instalación de software y preparación de Arduino ........................ 23
2.3 Entorno Arduino ............................................................................. 28
2.4 Primer programa y práctica con Arduino ....................................... 30
2.5 Monitorización puerto Serial0........................................................ 35
Ejercicio resuelto 1: comunicación serial0 .............................. 36
2.6 Actividades propuestas .................................................................. 38
Capítulo 3. Entradas y salidas digitales .................................................... 39
3.1 Introducción ................................................................................... 39
3.2 Pines de entrada y salida digitales en Arduino .............................. 39
3.3 Montajes i: fundamentos de electrónica........................................ 41
3.4 Montajes ii: protoboard o placa de prototipos .............................. 42
3.5 Conexionado de leds como salida .................................................. 45
Ejercicio resuelto 2: semáforo ................................................. 48
3.6 Conexionado de pulsadores como entrada .................................... 50
Ejercicio resuelto 3: conmutada .............................................. 53
Ejercicio resuelto 4: semáforo controlado por un pulsador .... 55
3.7 Actividades propuestas. ................................................................. 59
Capítulo 4. Ampliación entradas y salidas digitales .................................. 61
4.1 Introducción ................................................................................... 61
4.2 Conectando sensores a las entradas digitales ............................... 61
Ejercicio resuelto 5: comprobación interruptor
de inclinación y reed................................................................ 64
Ejercicio resuelto 6: contador.................................................. 67
4.3 Conectando más receptores a las salidas digitales ........................ 72
Ejercicio resuelto 7: led multicolor .......................................... 76
Ejercicio resuelto 8: control iluminación tras apertura
de puerta ................................................................................. 78
4.4 Actividades propuestas .................................................................. 82
Capítulo 5. Salidas digitales PWM ............................................................ 85
5.1 Introducción ................................................................................... 85
5.2 Modulación por ancho de pulso (señal PWM) ............................... 85
Ejercicio resuelto 9: regulación iluminación led ...................... 87
5.3 Variar la velocidad de un motor de continua ................................. 88
Ejercicio resuelto 10: control de velocidad motor dc
con dos pulsadores.................................................................. 89
Ejercicio resuelto 11: motor con inversión
del sentido de giro................................................................... 92
5.4 Control de servomotores ................................................................ 96
Ejercicio resuelto 12: control serie posición servo ................... 99
5.5 Pines 1 y 2 .................................................................................... 100
5.6 Actividades propuestas ................................................................ 100
Capítulo 6. Entradas analógicas ............................................................. 101
6.1 Introducción ................................................................................. 101
6.2 Las entradas analógicas de Arduino ............................................ 101
Ejercicio resuelto 13: lectura potenciómetro ........................ 102
6.3 Medida de temperatura ............................................................... 105
Ejercicio resuelto 14: medida de temperatura
con LM35D ............................................................................ 107
Ejercicio resuelto 15: medida de temperatura
con TMP36 ............................................................................ 109
Ejercicio resuelto 16: medida con termistor. ......................... 109
6.4 Medida intensidad luminosa ........................................................ 111
Ejercicio resuelto 17: medida de resistencia LDR .................. 112
Ejercicio resuelto 18: interruptor crepuscular ....................... 114
Ejercicio resuelto 19: control de velocidad motor dc
con potenciómetro ................................................................ 116
6.5 Actividades propuestas ................................................................ 117
Introducción
1
Introducción
actividades propuestas para que sean realizadas por los alumnos para verificar la
asimilación de los conceptos vistos previamente.
Esta obra es la primera de una serie que pretende centrarse en el mundo de
Arduino UNO, puesto que se trata de un mundo bastante amplio y en continua
evolución. Dedicar un único libro puede tener un tamaño considerable y ello lo hace
menos práctico para su manejo, por lo que al distribuirlo por niveles y aplicaciones,
el usuario puede escoger el que más se adapte a sus necesidades.
2
1. ¿Qué es Arduino?
1.1 Introducción
Este primer capítulo pretende dar a conocer qué es Arduino, así como las
herramientas y material necesario para empezar a trabajar. Siguiendo una de las
principales filosofías asociadas a Arduino, el usuario o técnico debería empezar a
trabajar con este dispositivo con conocimientos básicos de electrónica y con un nivel
de usuario de programación. En este primer capítulo se va a presentar esta placa de
circuito impreso y se incluirán los fundamentos de programación a tener en cuenta.
Se incluyen a modo aclaratorio algunos conceptos sobre el término libre asociado
al hardware y al software. Los conceptos puramente electrónicos se irán tratando a lo
largo del texto. En los próximos capítulos se irán viendo en más detalle cada uno de los
componentes según sean necesarios para los montajes mostrados y propuestos.
La estructura de este capítulo es distinta a los próximos capítulos, ya que lo
hemos enfocado como una serie de preguntas a las cuales se les ha intentado dar
respuesta con la máxima claridad y con la mayor brevedad posible. Por el contrario,
los próximos capítulos serán mucho más prácticos.
3
1. ¿Qué es Arduino?
4
Iniciación a Arduino UNO
5
1. ¿Qué es Arduino?
http://arduino.cc/en/uploads/Main/arduino_Uno_Rev3-02-TH.zip
Los ficheros que se descargan han sido realizados con la aplicación Eagle a
partir de la versión 6.0 o superior. Además se indica que en el esquema se ha
utilizado el patillaje del microcontrolador Atmega8, pero el esquema es el mismo
para los modelos 168 o 328, porque la configuración de los pines es la misma.
6
Iniciación a Arduino UNO
7
1. ¿Qué es Arduino?
También existe otra versión de la misma placa, pero con la versión SMD
(montaje superficial) del microcontrolador, (figura 1.2).
Puede encontrar más información concreta de este microcontrolador en la
siguiente página web:
http://www.atmel.com/Images/doc8161.pdf
8
Iniciación a Arduino UNO
9
1. ¿Qué es Arduino?
• Arduino Pro Mini: versión mejorada del Arduino Mini, con mayor
memoria para programa al incluir el Atmega 328.
Otra de las ventajas de Arduino respecto a otros sistemas con
microcontroladores es la capacidad de colocar o disponer de placas o módulos que
le añaden mayores funcionalidades con una conexión prácticamente instantánea.
Son los denominados como shield. Por ejemplo, como algunas de las
funcionalidades para comunicaciones: conexión de red (Ethernet) o inalámbrica
(XBEE). Aunque como el objetivo del presente libro es a modo de iniciación no se
verán en el presente texto.
10
Iniciación a Arduino UNO
11
1. ¿Qué es Arduino?
• Fotorresistencia.
• Interruptores.
• Sensor de temperatura.
• Transistores, principalmente 2N2222 o similar.
12
Iniciación a Arduino UNO
13
1. ¿Qué es Arduino?
14
Iniciación a Arduino UNO
15
1. ¿Qué es Arduino?
Nota: como se habrá dado cuenta, para asignar un resultado de una operación
matemática o valor a una variable, se utiliza el símbolo =. No se debe confundir con
la condición de comparación que es = =.
16
Iniciación a Arduino UNO
17
1. ¿Qué es Arduino?
if ( condición ){
//Bloque que se ejecuta si se cumple la condición
} // Fin if
else{
//Bloque que se ejecuta si no se cumple la condición
} // Fin else
switch ( variable ){
case opción 1: //Si variable == 1* ejecutar siguiente código
break;
18
Iniciación a Arduino UNO
while ( condición ){
//Bloque de instrucciones a ejecutar
} //fin while
Comentar, llegado a este punto, que el código que se escribe se podría decir que
es secuencial; es decir, empieza por lo escrito por la línea 1 hasta la última línea escrita.
Aunque puede haber saltos condicionales utilizando las estructuras comentadas en los
párrafos anteriores. También se podrá encontrar con que dentro de una estructura hay
otra estructura distinta. Por ejemplo, dentro de un while encontrarme con un for; o
19
1. ¿Qué es Arduino?
encadenar estructuras, por ejemplo, dentro de una condición if encontrarse con otro
if. Como ya verá más adelante, a mayor dificultad de la aplicación, más condiciones
tendrá que cumplir y, en consecuencia, más líneas tendrá de código. Como
consecuencia, el tamaño del fichero será mayor. Pero por ahora no se preocupe, ya
veremos más adelante algunos y comenzará a practicar. Llegados a este punto, una
recomendación, que se irá repitiendo a lo largo del texto, es la de incluir todos los
comentarios que crea pertinentes porque lo escrito ya no se olvida.
20
Iniciación a Arduino UNO
6. Defina una variable denominada digital que solo puede tomar dos valores: 0
y 1.
7. Podría definir la variable suma sabiendo que solo puede tomar valores
enteros desde -1000 hasta 1000 como float. ¿Se podría definir de otro tipo
para que ocupe menos espacio?
8. ¿Qué estructura de control utilizarías si se desea que se active una salida
cuando una variable sea mayor que 10 y se desactive en caso contrario?
Intente escribir el código a continuación.
21
2. Primeros pasos
2.1 Introducción
En este capítulo se describen los primeros pasos a realizar para empezar a utilizar
Arduino, es decir, el software necesario y el proceso de comuniación entre placa y
ordenador.
Por tanto, este capítulo es una introducción al manejo de la aplicación y una
indicación de dónde se pueden obtener todos los ficheros. Finalmente se verá un
ejemplo que servirá como muestra de la estructura del código de un programa para
Arduino.
23
2. Primeros pasos
24
Iniciación a Arduino UNO
25
2. Primeros pasos
26
Iniciación a Arduino UNO
27
2. Primeros pasos
sketch+fecha+letra
28
Iniciación a Arduino UNO
• setup (): el código situado entre estos corchetes se ejecutará una sola
vez al iniciarse el sistema, es decir, cuando se ponga en marcha el
microcontrolador.
• loop (): el código incluido entre estos corchetes se ejecutará
indefinidamente.
29
2. Primeros pasos
30
Iniciación a Arduino UNO
31
2. Primeros pasos
32
Iniciación a Arduino UNO
33
2. Primeros pasos
34
Iniciación a Arduino UNO
Nota: por si no te hubieras dado cuenta hasta ahora, al final de cada línea de código
escrita se debe poner el punto y coma (;) o de lo contrario dará error.
35
2. Primeros pasos
Nota: comentar que las funciones mostradas se escriben tal cual se ha indicado,
respetando las mayúsculas y minúsculas.
36
Iniciación a Arduino UNO
37
2. Primeros pasos
38
3. Entradas y salidas digitales
3.1 Introducción
En este tercer capítulo se verán las nociones de programación para operar con los
pines de entrada y salida digital. Además, se mostrarán las nociones básicas a tener
en cuenta sobre fundamentos de electrónica necesarios para la realización de los
montajes propuestos.
En el próximo capítulo se mostrarán nuevas funciones de las conexiones
digitales.
39
3. Entradas y salidas digitales
40
Iniciación a Arduino UNO
l
R = ρ· [Ω]
S
41
3. Entradas y salidas digitales
V = R·I [V ]
Del mismo modo se establece para cargar resistivas que la potencia
consumida (P) por la misma es igual al producto de la caída de tensión (V) por la
corriente que lo atraviesa (I). Se indica en la siguiente ecuación:
P = V ·I [W ]
En la figura 3.3, se muestra el circuito más simple que representa la ley de
ohm, así como el círculo de equivalencias que sirve de guía para establecer
relaciones entre los términos de las ecuaciones mostradas anteriormente.
42
Iniciación a Arduino UNO
elemento que facilita el montaje y las conexiones entre los componentes. Este
dispositivo es la protoboard o placa de prototipos (figura 3.5). En el mercado existen
de varios tamaños y pueden incluir conexiones adicionales para facilitar la conexión
de una fuente de alimentación exterior, lo que va asociado a un aumento del coste.
Tanto la que se ha mostrado en la figura 3.5 como la que se distribuye en los
principales kits de Arduino es la de 400 pines, y con esta es suficiente para la
realización de los montajes que se van a realizar. De todos modos, si continúa en
su andadura por el mundo de Arduino puede necesitar unas placas de prototipo
con mayor número de conexiones.
43
3. Entradas y salidas digitales
44
Iniciación a Arduino UNO
45
3. Entradas y salidas digitales
Llegados a este punto hay que tener en cuenta que el diodo led tiene
polaridad, de tal forma que si se conecta al revés este no se encenderá. Para indicar
cuál es terminal de ánodo (A) y cátodo (K), hay que saber que la corriente tiene que
circular del ánodo al cátodo.
Para identificar los terminales hay que tener en cuenta que:
46
Iniciación a Arduino UNO
Negro 0 0 1 -
Marrón 1 1 10 ± 1%
Rojo 2 2 100 ± 2%
Naranja 3 3 1 000 -
Amarillo 4 4 10 000 ± 4%
Blanco 9 9 1000000000 -
Dorado - - 0,1 ± 5%
47
3. Entradas y salidas digitales
El valor típico de la resistencia utilizado para los diodos led suele ser de 330 Ω.
También es común encontrar valores de 220 Ω, para una tensión de alimentación
de 5 voltios.
48
Iniciación a Arduino UNO
49
3. Entradas y salidas digitales
50
Iniciación a Arduino UNO
Nota: para la resistencia con los pulsadores, tanto pull-up o pull-down, tiene valores
típicos de 10 o 22 kΩ.
Se puede implementar la resistencia pull-up mediante el propio hardware del
microcontrolador, utilizando el siguiente código en el setup():
void setup (){
pinMode (número del pin,INPUT); // Configura pin como salida
digitalWrite (número del pin, HIGH); // Activar R de pull-up
} //Fin setup
Mirando los pulsadores que hay en los kit y los utilizados para los montajes en
placas de circuito impreso (usados en electrónica), tienen 4 pines, y los símbolos
mostrados en las figuras 3.13 y 3.14, solo hay dos conexiones. Entonces, ¿cómo se
conecta?
Para los familiarizados con la electrónica puede ser una tarea obvia o recurrir
a utilizar un instrumento de medida para realizar comprobaciones, pero en realidad
no hace falta conociendo un poco más al componente en cuestión. Por ello se
muestra en la figura 3.15 las medidas y circuito interno de un pulsador. Ahora
observando el circuito interno (figura 3.15 parte inferior derecha) se puede
entender que dos terminales están interconectadas (la 4 con el 3 y el 2 con el 1) y
entre medio se encuentra la conexión que se cierra al pulsarlo; es decir, cuando se
pulsa los cuatro pines se encuentran interconectados.
51
3. Entradas y salidas digitales
Marrón-Negro-Amarillo
52
Iniciación a Arduino UNO
53
3. Entradas y salidas digitales
void setup() {
// Configuración de los pines 1 y 2 como entrada y 13 como salida
pinMode(rojo,OUTPUT);
pinMode(pulsador1,INPUT);
pinMode(pulsador2,INPUT);
} // Fin setup
void loop() {
//Detecta si se ha pulsado
if(digitalRead(pulsador1)==LOW ||digitalRead(pulsador2)==LOW){
if(encendido==0){ // Si está apagado el led se enciende
encendido=1;
digitalWrite(rojo,HIGH);}
else{ // Si está encendido el led se apaga
encendido=0;
digitalWrite(rojo,LOW);}
/* La siguiente línea es un bucle cerrado estará en él hasta que se suelte el
pulsador */
while(digitalRead(pulsador1)==LOW||digitalRead(pulsador2)==LOW){}
} // Fin if
} // Fin loop
Comentar que aunque se han incluido comentarios en el propio texto, se van
a comentar algunos puntos:
54
Iniciación a Arduino UNO
55
3. Entradas y salidas digitales
Para evitar eso se utiliza la función millis. Dicha función devuelve los
milisegundos transcurridos desde que se arrancó la placa Arduino con el programa
actual. Este número se desbordará (volverá a cero) después de aproximadamente
50 días. El valor se debe guardar en una variable tipo long (sin signo), utilizando el
siguiente código:
unsigned long tiempo=0;
tiempo=millis();
En consecuencia se puede utilizar la función millis en sustitución a la función
delay. Leyendo el valor de tiempo, se ejecuta un bucle hasta que pase el tiempo
prefijado, de tal forma que no se pare el sistema y pueda leer el estado de las
entradas. El código utilizado sería el siguiente para un tiempo de 500 milisegundos
de retardo para la lectura de las pulsaciones (por ejemplo, para un contador) y
utilizando resistencia de pull-up:
unsigned long tiempoPrevio=0;
tiempoPrevio=millis();
digitalRead(pin) //leer dato
// Si han pasado 500 ms de la lectura y el pulsador no está pulsado
if (millis()-tiempoPrevio>500 && digitalRead(pin)==HIGH){
// Entonces continúa con el código para incrementar variable
} // fin if
Otro método en el cual se puede utilizar lo indicado anteriormente es
mediante while para que realice la misma función que el delay. Pero si mientras está
esperando si se pulsa una entrada externa, deje de esperar y continúe ejecutando el
56
Iniciación a Arduino UNO
57
3. Entradas y salidas digitales
58
Iniciación a Arduino UNO
59
3. Entradas y salidas digitales
60
4. Ampliación entradas y salidas digitales
4.1 Introducción
En este capítulo no encontrará nuevos fundamentos sobre programación sino que
se centra en el aspecto más electrónico, destacando cómo conectamos otros tipos
de receptores (salidas) y sensores (entradas).
El objetivo es que se familiarice más con el montaje de componentes
electrónicos en la placa de prototipos y al mismo tiempo que repase los fundamentos
de programación vistos, analizando los ejemplos resueltos e intentando resolver los
problemas propuestos.
Se ampliará con otros sensores en el capítulo 6 con las entradas analógicas.
61
4. Ampliación entradas y salidas digitales
Figura 4.1. Tilt switch o conmutador de inclinación (cortesía de light country Co.).
62
Iniciación a Arduino UNO
63
4. Ampliación entradas y salidas digitales
64
Iniciación a Arduino UNO
dos leds conectados a los pines 12 y 13, de tal forma que el interruptor de
inclinación accione el led conectado al pin 13 y el interruptor de lengüeta accione
el led conectado al pin 12.
El funcionamiento consiste en que cuando se detecte cualquiera de los dos
sensores se encienda el led correspondiente. Es decir, que si no hay modificación
de la inclinación o no se acerca el imán, no se encenderá ningún led (no habrá
tensión en el pin 2 o 3 correspondiente). Por el contrario, si se modifica la
inclinación o se acerca el imán, se encenderá el led (en ese caso habrá tensión en
el pin 2 o 3 correspondiente). Ello se consigue colocando una resistencia de pull-
down; es decir, la resistencia de 10 kΩ se conectará entre el pin de entrada y masa
para que cuando no se accione el sensor no haya tensión, y el sensor se conectará
entre la alimentación de 5 voltios y el pin de entrada para que cuando se accione el
sensor haya tensión. El esquema del montaje a realizar se muestra en la figura 4.6.
65
4. Ampliación entradas y salidas digitales
int ledReed=12;
int sensorInclinacion=3;
int sensorReed=2;
void setup() {
// Configuración de los pines 11 al 13 como salidas
pinMode(ledInclinacion,OUTPUT);
pinMode(ledReed,OUTPUT);
// Configuración de los pines 2 y 3 como salidas
pinMode(sensorInclinacion,INPUT);
pinMode(sensorReed,INPUT);
} // Fin setup
void loop() {
// Si está activa la entrada 3 activa salida 13
if(digitalRead(sensorInclinacion)==HIGH){
digitalWrite(ledInclinacion,HIGH);}
else{
digitalWrite(ledInclinacion,LOW);}
// Si está activa la entrada 2 activa salida 12
if(digitalRead(sensorReed)==HIGH){
digitalWrite(ledReed,HIGH);}
else{
digitalWrite(ledReed,LOW);}
} // Fin loop
Nota: aunque habrá comprobado que el programa no es complicado, el objetivo del
mismo es que trabaje con ambos sensores y se dé cuenta de cómo funcionan. El
sensor de inclinación si lo coloca sobre la placa de prototipos tendrá que modificar
la inclinación y oirá el movimiento de la pieza interna y cómo realiza la conexión
porque en cuanto haya contacto se encenderá el led. Del mismo modo verá como al
acercar al interruptor reed se desplazan las lengüetas y se encenderá el led.
66
Iniciación a Arduino UNO
67
4. Ampliación entradas y salidas digitales
68
Iniciación a Arduino UNO
69
4. Ampliación entradas y salidas digitales
70
Iniciación a Arduino UNO
71
4. Ampliación entradas y salidas digitales
72
Iniciación a Arduino UNO
El diodo RGB, a diferencia de los diodos que se han visto hasta el momento,
tiene 4 terminales, y ello es porque su constitución interna es como si se tratará de
3 diodos led con el cátodo común (figura 4.11). El método de conexionado es similar
al diodo, teniendo en cuenta que el terminal más largo se corresponde con el
cátodo. Otro método de identificar este terminal es colocando la muesca a la
izquierda y sigue la siguiente correspondencia:
1: cuando se alimenta se ilumina el color rojo.
2: común a los 3 diodos.
3: cuando se alimenta se ilumina el color verde.
4: cuando se alimenta se ilumina el color azul.
73
4. Ampliación entradas y salidas digitales
74
Iniciación a Arduino UNO
75
4. Ampliación entradas y salidas digitales
Rojo→Magenta→Azul→Cian→Verde→Amarillo→Blanco
76
Iniciación a Arduino UNO
77
4. Ampliación entradas y salidas digitales
Figura 4.18. Montaje con relé e interruptor reed para control iluminación.
78
Iniciación a Arduino UNO
79
4. Ampliación entradas y salidas digitales
80
Iniciación a Arduino UNO
Figura 4.21. Montaje punto de luz con relé de estado sólido (cortesía Seed studio).
81
4. Ampliación entradas y salidas digitales
82
Iniciación a Arduino UNO
83
5. Salidas digitales PWM
5.1 Introducción
En este capítulo se verá otra funcionalidad más de los pines digitales de Arduino,
de tal forma que mediante una función se puede controlar una señal PWM
(modulación por ancho de pulso). Lo primero que habrá que tener en cuenta es que
solo los pines 3, 5, 6, 9, 10 y 11 tienen esta funcionalidad. Lo segundo es saber qué
es modulación por ancho de pulsos. Y tercero qué receptores o cómo se conectan
a dichas salidas.
85
5. Salidas digitales PWM
para la señal cuyo ciclo de trabajo sea mayor (es decir 75 %), de ahí el nombre
utilizado por la función en Arduino, puesto que Arduino no es capaz de suministrar
un valor analógico de salida.
En Arduino se utiliza la siguiente función:
analogWrite(número de pin, valor);
En donde el número pin tiene que ser uno de los 6 pines comentados (figura
5.1) y el valor tiene que ser un número entero de 0 hasta 255, de tal forma que el
cero corresponde a un ciclo de trabajo del 0 % y 255 corresponde a un ciclo de
trabajo del 100 %. Todo lo comentado se muestra gráficamente en la figura 5.2.
86
Iniciación a Arduino UNO
87
5. Salidas digitales PWM
delay(retardo);}
} // Fin loop
Para visualizar los cambios en la variable intensidad, la cual ajustará el valor
del ciclo de trabajo y la intensidad del led, se utiliza la visualización del monitor por
serial0. En la figura 5.3 se puede ver cómo va variando este valor.
88
Iniciación a Arduino UNO
89
5. Salidas digitales PWM
90
Iniciación a Arduino UNO
91
5. Salidas digitales PWM
92
Iniciación a Arduino UNO
Figura 5.8. Conexionado puente H con dos relés controlados por Arduino.
93
5. Salidas digitales PWM
94
Iniciación a Arduino UNO
int pulsadorDerecha=3;
int pulsadorIzquierda=2;
int marcha = 0; // variable marcha-paro
void setup() {
// Configuración pines 13 y 12 como salida
pinMode(motorDerecha,OUTPUT);
pinMode(motorIzquierda,OUTPUT);
// Configura pines 2, 3 y 4 como entradas
pinMode(pulsadorParada,INPUT);
pinMode(pulsadorIzquierda,INPUT);
pinMode(pulsadorDerecha,INPUT);
Serial.begin(9600); // Configuración comunicación
} // Fin setup
void loop() {
/* Mientras que no se pulse la parada y esté parado el motor, se podrá poner en
marcha en cualquier sentido */
while(digitalRead(pulsadorParada)==HIGH&&marcha==0){
// Pone en marcha en sentido a la izquierda
if(digitalRead(pulsadorIzquierda)==LOW&&digitalRead(pulsadorDerecha)==HIGH){
digitalWrite(motorIzquierda,HIGH);
Serial.println("Izquierda"); // Envía texto
marcha=1;} //Fin if
// Pone en marcha en sentido a la derecha
if(digitalRead(pulsadorIzquierda)==HIGH&&digitalRead(pulsadorDerecha)==LOW){
digitalWrite(motorDerecha,HIGH);
Serial.println("Derecha");
marcha=1;} //Fin if
} // Fin while
95
5. Salidas digitales PWM
96
Iniciación a Arduino UNO
97
5. Salidas digitales PWM
98
Iniciación a Arduino UNO
99
5. Salidas digitales PWM
5.5 Pines 1 y 2
Llegados a este punto se habrá preguntado cómo hemos llegado al último punto,
en donde se menciona las entradas y salidas digitales, si no se ha hablado nada de
ellas. Además le habrá resultado curioso que cada vez que se empezaba a nombrar
los pines que iban a ser utilizados se iniciaba a partir del 2. ¿Por qué?
Esto es porque dichos pines son las mismas conexiones que se utilizan para
la comunicación serie, para la transmisión y recepción de datos. Por ello estos pines
no pueden ser utilizados como entradas y salidas cuando se utiliza la comunicación
serie mediante serial0. Por ello se decidió no utilizarlos en ningún ejercicio resuelto,
debido a que a lo largo del libro se está utilizando en varios ejercicios resueltos el
serial0, de tal forma que no hubiera confusión por el hecho de que unas veces se
utilizara y otras no.
100
6. Entradas analógicas
6.1 Introducción
En este último capítulo se muestra el uso de las entradas analógicas en Arduino
(figura 6.1). Del mismo modo se muestra cómo conectar y obtener datos de
sensores que proporcionan valores variables, tales como: temperatura e intensidad
lumínica.
En este caso utilizará como valor de referencia el valor que se introduzca por
el pin AREF que se encuentra junto a los pines de entrada y salida digitales.
La resolución de estas entradas analógicas (qué valores puede tomar) viene
determinada por la tensión de referencia y la cantidad de valores que se puede
101
6. Entradas analógicas
102
Iniciación a Arduino UNO
103
6. Entradas analógicas
Habrá podido observar en el monitor que toma valores entre 0 y 1023 (figura
6.3 izquierda), pero no el valor medido de tensión. Para ello se incluyen las
siguientes líneas de código que realizan la conversión para enviar el valor de tensión
(figura 6.3 derecha) y, además, se incluye la condición para que solo envíe datos si
el valor cambia. El código resultante es el siguiente:
/* Capítulo 6 libro curso de introducción Arduino.
Manejo entrada analógica: Lectura valor de tensión utilizando potenciómetro, se
añade al anterior la conversión valor de tensión*/
int potenciometro=0; // Pin conexión potenciómetro
int valor=0; // Variable para almacenar medida
int valorPrevio=10; // Saber si hay que enviar dato
float conversion=0; // Variable de conversión a tensión
void setup(){
Serial.begin(9600); // Configuración comunicación
} // Fin setup
void loop(){
valor=analogRead(potenciometro); // Lee valor
conversion=valor*(0.00488); //Relación lineal de conversión
// Envía dato si se ha realizado modificación
if(valor!=valorPrevio){
Serial.println(valor); // Envía datos medido
Serial.println(conversion,4); // Envía datos tras conversión
}// Fin if
valorPrevio=valor; // Guardar dato medido
delay(10); // Pequeño retardo
} // Fin loop
104
Iniciación a Arduino UNO
105
6. Entradas analógicas
Nota: otro dispositivo similar incluido también en varios kits es el TMP36 con
características similares. Incluso mantiene el mismo orden de conexiones de
los terminales. Cambia el valor de tensión que entrega en función de la temperatura.
Para una temperatura de 0 °C hay un offset de 500 mV. A partir de este valor las
variaciones de temperatura son a 10 mV por cada 1 °C. Por ejemplo, para 25 °C se
tendrá7 50 mV.
En consecuencia para realizar una medida correcta, hay que realizar primero
la lectura a través del puerto analógico. Después hay que cambiar del valor medido
al valor de tensión y, a partir de dicho valor de tensión, se obtiene el valor de
temperatura.
El LM35D dispone de un encapsulado TO92; es decir, que si lo observa será
igual que el transistor 2N2222 montado en el capítulo anterior. Dispone de un
terminal que se alimenta a tensión positiva (5 voltios) otro que se conecta a masa
(GND) y un tercero que proporciona un valor de tensión proporcional a la
temperatura (figura 6.4).
Figura 6.5. Módulo medida de temperatura con termistor (cortesía Seeed studio).
106
Iniciación a Arduino UNO
107
6. Entradas analógicas
void setup(){
Serial.begin(9600); // Configuración comunicación
} // Fin setup
void loop(){
valor=analogRead(temperatura); // Lee valor
conversion=valor*(0.00488); // Convierte valor a tensión
conversion=100*conversion; // Convierte a temperatura
if(valor!=valorPrevio){ // Envía dato si cambia
Serial.print("Temperatura: "); // Envía datos medido
Serial.print(conversion); // Envía datos tras conversión
Serial.print(grados); // Arreglo muestra de datos
Serial.println("C");
}// Fin if
valorPrevio=valor; // Guardar dato medido
delay(100); // Pequeño retardo
} // Fin loop
108
Iniciación a Arduino UNO
109
6. Entradas analógicas
110
Iniciación a Arduino UNO
void loop(){
valor=analogRead(pinTemperatura); // Lee valor
resistencia=(1023-valor)*10000/valor; // Obtener valor de resistencia
// Conversión según hojas de características
temperatura=1/(log(resistencia/10000)/B+1/298.15)-273.15;
// Envía dato si se ha realizado modificación
if(valor!=valorPrevio){
Serial.print("Temperatura: "); // Envía datos medido
Serial.print(temperatura); // Envía datos tras conversión
Serial.print(grados); // Arreglo muestra de datos
Serial.println("C");
} // Fin if
valorPrevio=valor; // Guardar dato medido
delay(100); // Pequeño retardo
} // Fin loop
111
6. Entradas analógicas
Nota: cuando esté realizando las medidas de resistencia tape el sensor y verá cómo
va variando su valor.
112
Iniciación a Arduino UNO
113
6. Entradas analógicas
114
Iniciación a Arduino UNO
115
6. Entradas analógicas
116
Iniciación a Arduino UNO
Como los valores que puede tomar a través de los pines analógicos van de 0
hasta 1023, y el valor de regulación de una salida digital PWM es de 0 hasta 255, y
como se busca una relación directa (para 1023 de valor en la entrada analógica le
corresponde 255 de valor de ajuste de la señal PWM) se utiliza la siguiente función:
map (xx, origen mínimo, origen máximo, destino mínimo, destino máximo);
La función map consiste en ajustar un valor (xx) comprendido entre dos
rangos (origen) al mismo situado entre dos rangos distintos (destino). La función
devuelve el mismo valor pero mapeado; es decir, para el nuevo rango (según
valores mínimo y máximo).
El esquema del montaje se muestra en la figura 6.13, y el código a
implementar es el siguiente:
/* Capítulo 6 libro curso de introducción Arduino.
Varia velocidad de motor con un potenciómetro */
int potenciometro=0; //Asignación pin potenciómetro
int motor=6 // Asignación pin salida motor
int velocidad=0; // Variable velocidad del motor
void setup() {
// Configuración pin como salida
pinMode(motor,OUTPUT);
} // Fin setup
void loop() {
velocidad=analogRead(potenciometro); // Lee valor
velocidad=map(velocidad,0,1023,0,255);// mapear valor
analogWrite(motor,velocidad); // Ajustar velocidad
} // Fin loop
117
6. Entradas analógicas
118