SAQUE EL MÁXIMO RENDIMIENTO A ESTE MANUAL CON EL
· Disponible en www.marcombo.com (se recomienda realizar la búsqueda con el código ISBN)
· Código ISBN de referencia: 9788426727176
· Componentes del KIT Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos:
Arduino UNOAdaptador Jack pilaAtemga328pCables cocodriloCables protoboard macho-hembraCables protoboard macho-machoCondensador 1000 µFCondensador 0,1 µF y 25 VCondensador 0,33 µF y 25 VCondensador 100 µF y 25 VCondensador 22 pFConversor de nivel lógicoDiodo 1N4007Entrada analógica ADS1115Expansor GPIO PCF8574Interruptor protoboardLed amarilloLed verdeMemoria EEPROM AT24C25
MultímetroMultiplexor CD74HC4067Oscilador 16 MhzPila 9 VPotenciómetroPower supply breadboard Programador ftdiProtoboard PulsadoresRegistro de desplazamiento 74HC164 Regulador lm7805Resistencia 1000Resistencia 10000Resistencia 1 MΩResistencia 330Resistencia 470Resistencia 4700 ΩSalida analógica MCP4725
KITAprender Arduino,
prototipado y programación
avanzada con 100 ejercicios prácticos
Si necesita iniciarse en la electrónica y la programación para adentrarse
en Arduino desde cero, le interesará el libro escrito por el mismo autor:
Aprender Arduino, electrónica y programación con 100 ejercicios prácticos
ISBN: 9788426726483
Puede sacar el máximo provecho a este otro libro de Rubén con el KIT Aprender Arduino,
electrónica y programación con 100 ejercicios prácticos (ISBN: 9788426727169), disponible en
www.marcombo.com. Se recomienda realizar la búsqueda con el código ISBN.
· Componentes del KIT Aprender Arduino, electrónica y programación con 100 ejercicios prácticos:
Arduino UNOAdaptador Jack pilaAND (74HC08)Buzzer EL0503Cables cocodriloCables protoboard macho-hembraCables protoboard macho-machoDHT11Display 7 segmentosDS18B20+JoystickLCDLDRLed amarilloLed RGBLed verdeMultímetroNAND (74HC132)NOR (74HC02)
También puede conseguir en www.marcombo.com el PACK Aprender Arduino, electrónica y
programación con 100 ejercicios prácticos (ISBN: 9788426727039) que incluye:
> Libro Aprender Arduino, electrónica y programación con 100 ejercicios prácticos
> KIT Aprender Arduino, electrónica y programación con 100 ejercicios prácticos
> ¿Quiere conseguir una base sólida de Arduino y electrónica?
NOT (74HC04)OR (74HC32)Pila 9 VPila rtc Potenciómetro Protoboard PulsadoresResistencia 1000 Resistencia 10000 Resistencia 330 Resistencia 470 Resistencia 4700 Ω Sensor llama Sensor PIR Teclado matricial Transistor 2n2222 XNOR (74HC266)XOR (74HC86)
Consiga el KIT DE ARDUINO Y ELECTRÓNICA (ISBN: 9788426727022) en www.marcombo.comSe recomienda realizar la búsqueda con el código ISBN.
· Componentes del KIT de Arduino y electrónica:
Arduino UNOAdaptador Jack pilaAND (74HC08)Atemga328pBuzzer EL0503Cables cocodriloCables protoboard macho-hembraCables protoboard macho-machoCondensador 1000 µFCondensador 0,1 µF y 25 VCondensador 0,33 µF y 25 VCondensador 100 µF y 25 VCondensador 22 pFConversor de nivel lógicoDHT11Diodo 1N4007Display 7 segmentosDS18B20+Entrada analógica ADS1115Expansor GPIO PCF8574Interruptor protoboardJoystickLCDLDRLed amarilloLed RGBLed verdeMemoria EEPROM AT24C256Multímetro
> Para más información sobre los kits y las condiciones de envío, entre en www.marcombo.com o envíe un correo a [email protected]
> ¿Desea un kit completo para empezar desde cero y alcanzar un nivel alto?
Multiplexor CD74HC4067NAND (74HC132)NOR (74HC02)NOT (74HC04)OR (74HC32)Oscilador 16 MhzPila 9 VPila rtcPotenciómetroPower supply breadboard Programador ftdiProtoboard PulsadoresRegistro de desplazamiento 74HC164 Regulador lm7805Resistencia 1000Resistencia 10000Resistencia 1 MΩResistencia 330Resistencia 470Resistencia 4700 ΩSalida analógica MCP4725Sensor llama Sensor PIRTeclado matricial Transistor 2n2222XNOR (74HC266)XOR (74HC86)
Aprender
Arduino, prototipado y programación avanzada
con 100 ejercicios prácticos
Acceda a www.marcombo.info para descargar gratis
el contenido adicional complemento imprescindible de este libro
Código: APARDUINO2
Aprender
Arduino, prototipado y programación avanzada
con 100 ejercicios prácticos
Pantone 383 100% Negre
Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos
© 2019 Rubén Beiroa Mosquera
Primera edición, 2019
© 2019 MARCOMBO, S.A.
www.marcombo.com
Diseño de la cubierta: ArteMio
Maquetación: ArteMio
Correctoras: Mónica Muñoz Marinero y Laura Seoane Sánchez Majano
Directora de producción: Mª Rosa Castillo Hidalgo
Director de colección: Pablo Martínez Izurzu
«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».
ISBN: 978-84-267-2680-3
D.L.: B-25495-2018
Impreso en Ulzama Digital
Printed in Spain
APRENDER ARDUINO, PROTOTIPADO Y PROGRAMACIÓN AVANZADA CON 100 EJERCICIOS PRÁCTICOS
Los 100 capítulos que contiene este libro tratan las problemáticas que cualquier desarrollador o maker se encuentra al realizar sus proyectos más complejos.
A partir de casos prácticos, se abordan temas como el filtrado de señales, la comuni-cación I2C y SPI (presentes en muchos de los módulos o sensores compatibles con Arduino), la creación de una librería, el diseño del hardware de un Arduino para poder adaptarlo y la programación de interfaz de control, entre otros.
A QUIÉN VA DIRIGIDO
A todo desarrollador o maker que tenga unos conocimientos mínimos sobre Arduino, electrónica y programación, y quiera entender la arquitectura y programación de las comunicaciones presentes en cualquier Arduino.
También está dirigido a todo profesional que requiera integrar Arduino en pro-yectos complejos y necesite comunicarse con sensores o módulos de los que carezca de ejemplos.
LA FORMA DE APRENDER
Nuestra experiencia en el ámbito de la enseñanza nos ha llevado a diseñar este tipo de manual, en el que cada una de las funciones se ejercita mediante la realización de un ejercicio práctico. Dicho ejercicio se halla explicado paso a paso y pulsación a pulsación, a fin de no dejar ninguna duda en su proceso de ejecución. Además, lo hemos ilustrado con imágenes descriptivas de los pasos más importantes o de los resultados que deberían obtenerse y con recuadros IMPORTANTE que ofrecen información complementaria sobre los temas tratados en los ejercicios.
LOS ARCHIVOS NECESARIOS
En la parte inferior de la primera página del libro encontrará el código de acceso que le permitirá acceder de forma gratuita a los contenidos adicionales del libro en www.marcombo.info.
Presentación
En la parte inferior de todas las páginas puede seguir el ejercicio de forma gráfica, paso a paso. Los números de los pies de foto le remiten a entradas en el cuerpo de texto.
El título de cada ejercicio expresa sin
lugar a dudas en qué consiste este. De esta forma, si
le interesa, puede acceder directamente a la acción que desea aprender o refrescar.
El número a la derecha de la página le indica claramente en qué ejercicio se encuentra en todo momento.
Los ejercicios se han escrito
sistemáticamente, paso a paso, para
que nunca se pierda durante su
realización.
Cómo leer los libros “Aprender...”
A mis padres, por su apoyo, y a la editorial Marcombo, por su confianza.
Índice
001002003004005006007008009010011012013014015016017018019020021022023024025
La electrónica no es ideal .......................................................14
Introducción a los condensadores .........................................16
Propiedades de un condensador ............................................18
Gestión de tiempo: millis() y micros() ...................................20
Descarga de un condensador .................................................22
Debounce (I) ..........................................................................24
Debounce (II) .........................................................................26
De PWM a señal analógica con filtro paso bajo ....................28
Interrupciones ........................................................................30
Interrupciones por evento .....................................................32
Interrupciones por tiempo. Parpadeo de un led ....................34
Interrupciones por tiempo. Timer2 y 3 .................................36
Interrupción del puerto serie .................................................38
Comunicación serie Serial.flush, Serial.availableForWrite ....40
Comunicación serie Serial.end, Serial.setTimeout.................42
Comunicación serie Serial.parseInt .......................................44
Comunicación serie Serial.parseFloat, Serial.readBytes .........46
Comunicación serie(V) Serial.readBytesUntil, Serial.readString .....48
Comunicación serie (VI) Serial.readStringUntil, Serial.find .... 50
Comunicación I2C. Introducción .........................................52
Comunicación I2C. Wire.begin .............................................54
Comunicación I2C. Comunicación del maestro al esclavo ..56
Comunicación I2C. Controlar al esclavo con un maestro ....58
Comunicación I2C. Comunicación esclavo maestro ............60
SPI Introducción ....................................................................62
Índice
026027028029030031032033034035036037038039040041042043044045046047048049050
SPI en Arduino .......................................................................64
Comunicación SPI. Comunicación maestro esclavo .............66
Comunicación SPI. Comunicación esclavo maestro .............68
Memoria EEPROM. EEPROM.read .........................................70
Memoria EEPROM (I). EEPROM.write ...................................72
Memoria EEPROM (II). EEPROM.put, EEPROM.get ..............74
Memoria EEPROM. Almacenar datos correctamente ............76
Memoria EEPROM. Alargar la vida útil ..................................78
Sensor de temperatura interno ..............................................80
Arduino modo Sleep. Librería LowPower ..............................82
Arduino modo Sleep. IdleWakePeriodic ................................84
Arduino modo Sleep. PowerDownExternalInterrupt ............86
Watchdog ...............................................................................88
Simulador Tinkercad. Crear cuenta, interfaz .........................90
Simulador Tinkercad. Montar el primer circuito ...................92
Simulador Tinkercad. Programación .....................................94
Simulador Tinkercad. Opciones avanzadas ...........................96
Debugger. FiILE, LINE, FUNTION, DATE, TIME ....................98
Debugger. Funciones de depuración ....................................100
Crear librerías. Archivo .h ....................................................102
Crear librerías. Archivo .cpp ................................................104
Arduino Web Editor .............................................................106
Diseño y fabricación de un Arduino ....................................108
Hardware Arduino................................................................110
Hardware de alimentación. Análisis ....................................112
Índice
051052053054055056057058059060061062063064065066067068069070071072073074075
Hardware de alimentación. Diodo y regulador de tensión ..... 114
Hardware de alimentación. Montaje en protoboard ...........116
Hardware de alimentación. USB y alimentación externa ....118
ATmega328. Señal de reloj ...................................................120
ATmega328. Reset ................................................................122
ATmega16U2 ........................................................................124
Grabar gestor de arranque ...................................................126
Arduino protoboard. Programador ......................................128
De la protoboard al PCB. Un poco de teoría .......................130
De la protoboard al PCB. Herramientas ...............................132
Conceptos generales de una PCB .........................................134
Encapsulados ........................................................................136
PCB. Huella, pads, pistas ......................................................138
Consideraciones de diseño Fritzing, barra de menú ...........140
Diseño PCB. Fritzing, primeros pasos ..................................142
Diseño PCB. Montar los primeros componentes ................144
Diseño PCB. Hardware de alimentación ..............................146
Diseño PCB. Alimentación, reset, reloj .......... 148
Diseño final PCB .................................................................. 150
Fabricación PCB Opciones ................................................... 152
Fabricación PCB y ensamblado ............................................ 154
Fabricar mi propia shield para Arduino ...............................156
Diseñar y fabricar un dispositivo basado en Arduino .........158
Multiplexores, Demultiplexores ..........................................160
CD74HC4067 como multiplexor .........................................162
PATmega328
Índice
076077078079080081082083084085086087088089090091092093094095096097098099100
CD74HC4067 como demultiplexor .....................................164
Registro de desplazamiento. Teoría .....................................166
Registro de desplazamiento. 74HC164 ................................168
PCF8574. Teoría ...................................................................170
PCF8574. Ampliar salidas digitales ......................................172
PCF8574. Ampliar entradas digitales ...................................174
Ampliar entradas analógicas con ADS1115 .........................176
Salida analógica con MCP4725 ............................................ 178
Amplia la memoria EEPROM con AT24C256................ 180
Processing ............................................................................. 182
Conectar Processing con Arduino .......................................184
Parpadeo de led con Processing ...........................................186
Ratón Processing ..................................................................188
Teclado Processing ...............................................................190
Monitorización de datos por consola ..................................192
Interfaz gráfica de usuario(GUI) con Processing ..................194
Processing Text Field ............................................................196
Processing button.................................................................198
Processing checkbox ............................................................200
Processing slider ...................................................................202
Processing knob ...................................................................204
Processing toggle ..................................................................206
Processing GUI(I) .................................................................208
Processing GUI(II) ................................................................210
Processing GUI(III) ...............................................................212
r
14
La electrónica no es ideal• Cuando trabajamos con un componente electrónico, ya sea una resistencia, un led o los pro-
pios cables, tenemos que partir de la premisa de que no son ideales.• Esto significa que, cuando utilizamos una resistencia de 1 kΩ, su valor real no es ese. Y ¿cuál es?
Cada fabricante vende resistencias con una tolerancia.• La tolerancia es el valor que nos dice cuánto puede variar el valor de una resistencia de lo espe-
rado; es decir, cuál puede ser su valor máximo y mínimo, que suele expresarse en porcentaje.• De tal modo que, si comparamos una resistencia de 1 kΩ con una tolerancia del 2 %, su valor
real oscila entre 1020 y 980 Ω; por lo tanto, siempre será importante medir el valor de la resis-tencia con un multímetro.
• Este hecho que ocurre con las resistencias se puede extender al resto de la electrónica y, como la base de la electrónica son las señales eléctricas, estas también tendrán sus «tolerancias».
• Esto nos lleva a realizar un pequeño caso de demostración: montamos un simple circuito en donde conectaremos un pulsador y un Arduino 1.
• Con el siguiente programa 2, contabilizaremos el número de pulsaciones.• Si pulsamos muy rápido, veremos cómo el contador alcanza un valor superior al número de
pulsaciones reales; este fenómeno se conoce como «efecto rebote».• Esto se produce por el mecanismo del pulsador 3; es un elemento mecánico que consta de una
lámina de metal que hace contacto con sus patillas. Al pulsar la unión entre la lámina de metal y las patillas, sufre una serie de vibraciones o rebotes.
• Estos rebotes repercuten en la señal 4.• El Arduino considerará estos rebotes como pulsaciones y es por eso que el contador no refleja
el número real de pulsaciones que hemos efectuado.• Pero este fenómeno tiene una solución tanto por software como por hardware lo que nos lle-
vará en los próximos capítulos a estudiar los condensadores.• La solución a este fenómeno se conoce como pulsador antirebore (Debounce):
• Debounce por hardware• Debounce por software
3
15
001Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos
1 2
4
16
1
Introducción a los condensadoresUn condensador es un componente electrónico ampliamente usado; para empezar a entender lo que es un condensador, podemos compararlo con una pila o batería ya que, como veremos, es capaz de almacenar carga eléctrica. Se fabrican diferentes tecnologías de condensadores que se diferencian, básicamente, por el tipo de material:
• A lo largo de este capítulo y de los siguientes nos centraremos en el estudio de los condensa-dores electrolíticos.
• Estos condensadores tienen polaridad, por lo que hay que tener especial cuidado a la hora de realizar las conexiones.
• Los condensadores electrolíticos 1 disponen de dos patillas, una más larga que la otra y que, si revisamos el encapsulado, veremos una franja, por lo general, de un color gris en el lado de la patilla corta.
• En el caso de los condensadores electrolíticos, el símil con una pila es muy aproximado ya que, al igual que esta, dispone de dos polos (patillas).
• La patilla larga representa el polo positivo y la corta, el negativo; por lo tanto, debemos respetar su polaridad.
• Si un condensador se encuentra sometido a una diferencia de tensión, iniciará un proceso de carga hasta que iguale el valor de la tensión a la que se encuentre sometido.
Con el siguiente caso práctico, comprobaremos el funcionamiento de un condensador:
1. Conectamos el condensador de 1000 μF y 25 V y una resistencia de 330 Ω en serie y a 5 V 2.
2. Al cabo de un instante el condensador se habrá cargado hasta alcanzar los 5 V, podemos hacer una comprobación con un multímetro.
3. Ahora conectamos el condensador y la resistencia a un diodo led 3.
4. Veremos cómo rápidamente el led empezará encendido y, según se vaya descargando el condensador, el led se irá apagando.
5. Si esto se produce muy rápido, podemos cargar el condensador con una pila de 9 V, para que el led no se apague tan rápido.
Con este simple caso, hemos comprobado el funcionamiento de un condensador, es un compo-nente simple pero con el que conseguiremos realizar circuitos complejos.
17
002Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos
La importancia de un condensador viene en sus características de carga y descarga. Con los con-densadores, podemos realizar filtros para, por ejemplo, eliminar los rebotes de una señal, pero, para eso, debemos profundizar más en su estudio y lo haremos a lo largo de los siguientes capítu-los. Aun así, ya tenemos conceptos que podemos analizar:
• La unidad de los condensadores son los faradios (F); en el caso anterior, 0,001 F.• Todos los condensadores soportan una tensión máxima; en el caso anterior era de 25 V.• Como existen diferentes condensadores, cada uno de ellos tiene su propia representación
(en el caso del electrolítico, es la siguiente 4).
2 3 4
18
Propiedades de un condensador
La capacidad es una propiedad de los condensadores, que nos indica la cantidad de carga eléctrica que pueden almacenar, que dependerá de la tensión de carga.
La fórmula que define un condensador es la siguiente:
• Q = C * V
• Q -> carga (culombios)• C -> capacidad (faradios)• V -> voltios
De la expresión anterior deducimos que la carga que almacena un condensador dependerá de la ca-pacidad de este por la tensión de carga; por lo tanto, en el capítulo anterior que teníamos un con-densador de 1000 μF a una tensión de carga de 5 V, la carga que almacena es de 0,005 culombios.
• Un culombio es la cantidad de carga transportada por segundo (1 C = 1 A * s), y a su vez 1 C = 6,24 * 10 ^ 18 electrones.
Hasta aquí hemos estudiado el comportamiento básico del condensador, así que pasemos a anali-zar sus características de carga y descarga.
Cuando un condensador se carga o descarga, no lo hace de forma lineal. Si tuviéramos que hacer una gráfica que represente este proceso, se mostraría una gráfica en forma de curva; para entender este fenómeno, será necesario un ejemplo de la carga de un condensador:
1. Conectamos una resistencia de 1 kΩ en serie con un condensador de 1000 μF al pin A0 1 (val-dría cualquier otro pin).
2. Una vez activemos la salida, el condensador se empezará a cargar: la intensidad inicial a la que lo haga será la intensidad máxima. A medida que se vaya cargando, irá disminuyendo 2.
3. Esta intensidad se puede calcular por la ley de Ohm, V = R * I -> I = V / R -> I = 5 / 1000 = 5 mA.
4. Este efecto es debido a la conexión en serie entre la resistencia y el condensador. Inicialmente, la tensión del condensador será 0 V, por lo tanto, la diferencia de tensión en la resistencia es de 5 V, lo que haría que la intensidad fuese de 5 mA 3.
5. El condensador se irá cargando por el flujo de intensidad, al igual que un vaso cuando abrimos un grifo y se va llenando de agua.
6. Supongamos que el condensador acaba de llegar a los 2,5 V, pues resulta que, si analizamos el circuito 4, la resistencia ya no tiene una caída de tensión de 5 V sino de 2,5 V, por lo tanto, la intensidad será de I = 2,5 / 1000 = 2,5 mA.
7. Esto se producirá a lo largo de la carga del condensador. Entonces, ¿cómo podemos saber en qué momento se cargará el condensador? Existe una fórmula matemática que nos dice que el condensador llegará al 63,2 % de la carga en un tiempo tau (t).
t = R * C
19
003
1
Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos
8. La unidades con las que debemos trabajar en la ecuación anterior son Ω y F, para que el resul-tado sea en segundos.
9. El tiempo final para el cual el condensador estará cargado totalmente será 5 * t.
Vamos a realizar un caso práctico para comprobar estas leyes, pero, para ello, tenemos que ampliar nuestro lenguaje de programación.
3 4
2