Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Realizar proyectos complejos de programación y electrónica, como las interrupciones, _ltros y el prototipado del hardware de Arduino UNO, puede generar problemáticas difíciles de resolver. Si quieres ir un paso más allá con Arduino y dominar completamente su electrónica, su hardware y su programación, este es tu libro. Esta guía se adentra en las funcionalidades más complejas de Arduino, mediante 100 ejercicios prácticos, para llevar a cabo proyectos con una mayor robustez y un aspecto profesional. · Entenderás el funcionamiento y la programación de los distintos tipos de comunicación que integra Arduino. · Desmontarás un Arduino y serás capaz de diseñar su PCB con un entorno intuitivo. · Descubrirás las soluciones que ofrece un condensador. · Aprenderás recursos de programadores profesionales. · Mejorarás las prestaciones de un Arduino con módulos. · Aprenderás a programar tu propio interfaz de control para Arduino con Processing. Además, en la parte inferior de la primera página del libro encontrarás el código de acceso que te permitirá descargar de forma gratuita los contenidos adicionales del libro en marcombo.info.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 191
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
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
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 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
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 [email protected]
con 100 ejercicios prácticos
Acceda a www.marcombo.info para descargar gratis el contenido adicional complemento imprescindible de este libro
Código:APARDUINO2
con 100 ejercicios prácticos
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: Ma 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».
eISBN: 978-84-267-2740-4
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 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.
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.
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.
A mis padres, por su apoyo, y a laeditorial Marcombo, por su confianza.
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)
•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 .
•Con el siguiente programa , 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 ; 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 .
•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
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 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 .
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 .
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 ).
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 -> 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.
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 (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 .
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 .
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.
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).
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.
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.
•Si hacemos la operación: 4.294.967.295 / (1000000 * 60) el resultado aproximado será de 70 minutos.
•Por lo tanto, esta instrucción al cabo de 70 minutos se resetea (su valor interno) y vuelve a contar desde cero.
Nos ayudaremos de las instrucciones anteriores para comprobar las reglas que fijan el comportamiento de un condensador en el proceso de carga; de lo que se trata es de comprobar el tiempo que tarda el condensador en alcanzar los valores clave, que son los de la carga al 63,2 % y al 100 %.
1.Para medir los tiempos, es necesario muestrear el valor del condensador; esto se hará con la entrada A1 .
2.Según las ecuaciones vistas en el capítulo anterior y utilizando los mismos valores de resistencia y condensador, este alcanza el 63,2 % de la carga en 1 segundo y el 100 % en 5 segundos.
3.En el programa pondremos una pequeña tolerancia, de 0,05 V (10); por eso se considera que, cuando el condensador alcanza 4,95 (1013), se ha cargado totalmente y, con 0,05 V, está totalmente descargado.
4.El valor del 63,2 % de la carga lo alcanza cuando llega a un valor de tensión de 3,16 V cuyo valor de lectura equivale a 646.
5.Cuando visualizamos el resultado, vemos que se aproxima al resultado esperado y las pequeñas desviaciones que encontramos son normales.
En el capítulo anterior estudiamos cómo se comportaba un condensador en el proceso de carga y, en este capítulo, estudiaremos el proceso de descarga. Un condensador, cuando se descarga, se comporta del mismo modo que cuando se carga, es decir, se cumplen las mismas leyes y utilizaremos las mismas ecuaciones matemáticas, pero, antes de ver esto, tenemos una ecuación más compleja que las vistas anteriormente con la cual podemos obtener el valor de carga del condensador para cada instante o, lo que es lo mismo, saber en qué momento alcanzará un determinado valor de tensión.
Como el proceso de descarga de un condensador es similar al de carga, rigen las mismas ecuaciones, pero definirán un comportamiento inverso:
•Seguimos manteniendo el margen de tolerancia (0,05 - 4,95 V).
•El condensador tardará R * C segundos en descargarse un 63,2 % de su carga o, lo que es lo mismo que se descarga hasta el 36,8 %.
•Ese 36,8 % supone que el condensador tiene una carga de 1,84 V, que, si lo traducimos a la lectura de un Arduino, es un valor de 376.
•Teniendo esto en cuenta, cargamos el siguiente programa y analizaremos los resultados.
A vista de los resultados, podemos comprobar que el comportamiento del condensador, cuando se carga y cuando se descarga, es el mismo y se rige por los mismos principios. Con este capítulo, ya hemos visto el funcionamiento básico de un condensador.
En el siguiente capítulo veremos un uso práctico de un condensador, el cual nos va a permitir solucionar el problema que tenemos con los rebotes de las señales ya que, como los condensadores tienen un proceso no lineal de carga y descarga, aprovecharemos eso para diseñar un circuito que filtre estos rebotes. Los condensadores tienen diversas aplicaciones, como pueden ser:
•Baterías
•Filtros
•Energía solar
•Memorias
•Osciladores
•Compensación del factor de potencia
•…
Si analizamos el hardware del Arduino UNO , encontramos varios condensadores que se utilizan en la etapa de potencia; para evitar que la alimentación se corte bruscamente, se utilizan condensadores.
El término debounce significa rebotar en inglés y es el problema con el que partimos en este libro: la eliminación de los rebotes en una señal; para ello, tenemos dos posibles soluciones: por hardware o por software. Cada una tendrá sus ventajas e inconvenientes que, en función de las circunstancias, nos hará decantarnos por uno u otra.
Empecemos por la solución por hardware; como ya sabemos, tenemos varias opciones a la hora de conectar un pulsador: Pull-Up y Pull-Down. Solución antirrebote pulsador Pull-Down:
1.Conectamos el siguiente circuito .
2.El circuito estará formado por dos resistencias en serie y un condensador en paralelo con una de ellas .
3.Es importante el valor de cada componente y el criterio de conexión.
4.Si dejamos a un lado el condensador, vemos que lo que tenemos es un divisor de tensión con dos resistencias; en el primer tomo, ya vimos cómo solucionar este tipo de circuito.
5.