image

SAQUE EL MÁXIMO RENDIMIENTO A ESTE MANUAL CON EL

KIT

Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos

·Código ISBN de referencia: 9788426727176

·Disponible en www.marcombo.com (se recomienda realizar la búsqueda con el código ISBN)

·Componentes del KIT Aprender Arduino, prototipado y programación avanzada con 100 ejercicios prácticos:

Arduino UNO

Adaptador Jack pila

Atemga328p

Cables cocodrilo

Cables protoboard macho-hembra

Cables protoboard macho-macho

Condensador 1000 µF

Condensador 0,1 µF y 25 V

Condensador 0,33 µF y 25 V

Condensador 100 µF y 25 V

Condensador 22 pF

Conversor de nivel lógico

Diodo 1N4007

Entrada analógica ADS1115

Expansor GPIO PCF8574

Interruptor protoboard

Led amarillo

Led verde

Memoria EEPROM AT24C25

Multímetro

Multiplexor CD74HC4067

Oscilador 16 Mhz

Pila 9 V

Potenciómetro

Power supply breadboard

Programador ftdi

Protoboard

Pulsadores

Registro de desplazamiento 74HC164

Regulador lm7805

Resistencia 1000

Resistencia 10000

Resistencia 1 MΩ

Resistencia 330

Resistencia 470

Resistencia 4700 Ω

Salida analógica MCP4725

> ¿Quiere conseguir una base sólida de Arduino y electrónica?

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:

image

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 UNO

Adaptador Jack pila

AND (74HC08)

Buzzer EL0503

Cables cocodrilo

Cables protoboard macho-hembra

Cables protoboard macho-macho

DHT11

Display 7 segmentos

DS18B20+

Joystick

LCD

LDR

Led amarillo

Led RGB

Led verde

Multímetro

NAND (74HC132)

NOR (74HC02)

NOT (74HC04)

OR (74HC32)

Pila 9 V

Pila rtc

Potenciómetro

Protoboard

Pulsadores

Resistencia 1000

Resistencia 10000

Resistencia 330

Resistencia 470

Resistencia 4700 Ω

Sensor llama

Sensor PIR

Teclado matricial

Transistor 2n2222 XNOR

(74HC266)

XOR (74HC86)

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

> ¿Desea un kit completo para empezar desde cero y alcanzar un nivel alto?

Consiga el KIT DE ARDUINO Y ELECTRÓNICA (ISBN: 9788426727022) en www.marcombo.com Se recomienda realizar la búsqueda con el código ISBN.

·Componentes del KIT de Arduino y electrónica:

Arduino UNO

Adaptador Jack pila

AND (74HC08)

Atemga328p

Buzzer EL0503

Cables cocodrilo

Cables protoboard macho-hembra

Cables protoboard macho-macho

Condensador 1000 µF

Condensador 0,1 µF y 25 V

Condensador 0,33 µF y 25 V

Condensador 100 µF y 25 V

Condensador 22 pF

Conversor de nivel lógico

DHT11

Diodo 1N4007

Display 7 segmentos

DS18B20+

Entrada analógica ADS1115

Expansor GPIO PCF8574

Interruptor protoboard

Joystick

LCD

LDR

Led amarillo

Led RGB

Led verde

Memoria EEPROM AT24C256

Multímetro

Multiplexor CD74HC4067

NAND (74HC132)

NOR (74HC02)

NOT (74HC04)

OR (74HC32)

Oscilador 16 Mhz

Pila 9 V

Pila rtc

Potenciómetro

Power supply breadboard

Programador ftdi

Protoboard

Pulsadores

Registro de desplazamiento

74HC164 Regulador lm7805

Resistencia 1000

Resistencia 10000

Resistencia 1 MΩ

Resistencia 330

Resistencia 470

Resistencia 4700 Ω

Salida analógica MCP4725

Sensor llama

Sensor PIR

Teclado matricial

Transistor 2n2222

XNOR (74HC266)

XOR (74HC86)

> 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 info@marcombo.com

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

image

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.

Diseño de la cubierta: ArteMio

«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».

eISBN: 978-84-267-2740-4

Presentación

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 comunicació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 proyectos 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.

Cómo leer los libros “Aprender…”

image

A mis padres, por su apoyo, y a la
editorial Marcombo, por su confianza
.

Índice

001La electrónica no es ideal

002Introducción a los condensadores

003Propiedades de un condensador

004Gestión de tiempo: millis() y micros()

005Descarga de un condensador

006Debounce (I)

007Debounce (II)

008De PWM a señal analógica con filtro paso bajo

009Interrupciones

010Interrupciones por evento

011Interrupciones por tiempo. Parpadeo de un led

012Interrupciones por tiempo. Timer2 y 3

013Interrupción del puerto serie

014Comunicación serie Serial.flush, Serial.availableForWrite

015Comunicación serie Serial.end, Serial.setTimeout

016Comunicación serie Serial.parseInt

017Comunicación serie Serial.parseFloat, Serial.readBytes

018Comunicación serie(V) Serial.readBytesUntil, Serial.readString

019Comunicación serie (VI) Serial.readStringUntil, Serial.find

020Comunicación I2C. Introducción

021Comunicación I2C. Wire.begin

022Comunicación I2C. Comunicación del maestro al esclavo

023Comunicación I2C. Controlar al esclavo con un maestro

024Comunicación I2C. Comunicación esclavo maestro

025SPI Introducción

026SPI en Arduino

027Comunicación SPI. Comunicación maestro esclavo

028Comunicación SPI. Comunicación esclavo maestro

029Memoria EEPROM. EEPROM.read

030Memoria EEPROM (I). EEPROM.write

031Memoria EEPROM (II). EEPROM.put, EEPROM.get

032Memoria EEPROM. Almacenar datos correctamente

033Memoria EEPROM. Alargar la vida útil

034Sensor de temperatura interno

035Arduino modo Sleep. Librería LowPower

036Arduino modo Sleep. IdleWakePeriodic

037Arduino modo Sleep. PowerDownExternalInterrupt

038Watchdog

039Simulador Tinkercad. Crear cuenta, interfaz

040Simulador Tinkercad. Montar el primer circuito

041Simulador Tinkercad. Programación

042Simulador Tinkercad. Opciones avanzadas

043Debugger. FiILE, LINE, FUNTION, DATE, TIME

044Debugger. Funciones de depuración

045Crear librerías. Archivo .h

046Crear librerías. Archivo .cpp

047Arduino Web Editor

048Diseño y fabricación de un Arduino

049Hardware Arduino

050Hardware de alimentación. Análisis

051Hardware de alimentación. Diodo y regulador de tensión

052Hardware de alimentación. Montaje en protoboard

053Hardware de alimentación. USB y alimentación externa

054ATmega328. Señal de reloj

055ATmega328. Reset

056ATmega16U2

057Grabar gestor de arranque

058Arduino protoboard. Programador

059De la protoboard al PCB. Un poco de teoría

060De la protoboard al PCB. Herramientas

061Conceptos generales de una PCB

062Encapsulados

063PCB. Huella, pads, pistas

064Consideraciones de diseño Fritzing, barra de menú

065Diseño PCB. Fritzing, primeros pasos

066Diseño PCB. Montar los primeros componentes

067Diseño PCB. Hardware de alimentación

068Diseño PCB. Alimentación, reset, reloj ATmega328P

069Diseño final PCB

070Fabricación PCB Opciones

071Fabricación PCB y ensamblado

072Fabricar mi propia shield para Arduino

073Diseñar y fabricar un dispositivo basado en Arduino

074Multiplexores, Demultiplexores

075CD74HC4067 como multiplexor

076CD74HC4067 como demultiplexor

077Registro de desplazamiento. Teoría

078Registro de desplazamiento. 74HC164

079PCF8574. Teoría

080PCF8574. Ampliar salidas digitales

081PCF8574. Ampliar entradas digitales

082Ampliar entradas analógicas con ADS1115

083Salida analógica con MCP4725

084Amplia la memoria EEPROM con AT24C256

085Processing

086Conectar Processing con Arduino

087Parpadeo de led con Processing

088Ratón Processing

089Teclado Processing

090Monitorización de datos por consola

091Interfaz gráfica de usuario(GUI) con Processing

092Processing Text Field

093Processing button

094Processing checkbox

095Processing slider

096Processing knob

097Processing toggle

098Processing GUI(I)

099Processing GUI(II)

100Processing GUI(III)

001

La electrónica no es ideal

Cuando trabajamos con un componente electrónico, ya sea una resistencia, un led o los propios 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 esperado; 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 resistencia 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 image.

Con el siguiente programa image, 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 image; 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 image.

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 llevará 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

image

image

image

image

002

Introducción a los condensadores

Un 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 condensadores 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 image 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:

1Conectamos el condensador de 1000 μF y 25 V y una resistencia de 330 Ω en serie y a 5 V image.

2Al cabo de un instante el condensador se habrá cargado hasta alcanzar los 5 V, podemos hacer una comprobación con un multímetro.

3Ahora conectamos el condensador y la resistencia a un diodo led image.

4Veremos cómo rápidamente el led empezará encendido y, según se vaya descargando el condensador, el led se irá apagando.

5Si 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 componente simple pero con el que conseguiremos realizar circuitos complejos.

La importancia de un condensador viene en sus características de carga y descarga. Con los condensadores, 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ítulos. 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 image).

image

image

image

image

003

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 capacidad de este por la tensión de carga; por lo tanto, en el capítulo anterior que teníamos un condensador 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 analizar 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 image (valdrí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 image.

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 image.

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 image, 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

8.La unidades con las que debemos trabajar en la ecuación anterior son Ω y F, para que el resultado 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.

image

image

image

image

004

Gestión de tiempo: millis() y micros()

El lenguaje de programación, aparte de las instrucciones ya conocidas como <<delay()>> y <<delayMicrosenconds()>>, dispone de otras para la gestión de tiempo.

millis()

Esta instrucción no necesita parámetros y nos devuelve el tiempo que lleva encendido el Arduino; este tiempo viene expresado en milisegundos.

Nos devuelve un valor tipo unsigned long, lo que quiere decir que el valor devuelto varía entre 0 y 4.294.967.295.

Si hacemos la operación: 4.294.967.295 / (1000 * 60 * 60 * 24), el resultado aproximado será de 50 días.

Por lo tanto, esta instrucción al cabo de 50 días se resetea (su valor interno) y vuelve a contar desde cero.

micros()

Esta instrucción no necesita parámetros y nos devuelve el tiempo que lleva encendido el Arduino; este tiempo viene expresado en microsegundos.

Nos devuelve un valor de tipo unsigned long, lo que quiere decir que el valor devuelto varía entre 0 y 4.294.967.295.