Curso Arduino
Curso Arduino
CURSO BÁSICO
Impartido a distancia
18 / 04 / 2016 -- 29 / 05 / 2016 ( 30 HORAS )
SILLA 2016
INDICE DE CONTENIDOS
Objetivos 1
Planificación de contenidos 2
Arduino Shields. 22
Manejo de Motores. 74
Rebotes 105
Bibliografía 134
Objetivos
Planificación de contenidos
Manejo de Motores.
Como usar la memoria EEPROM de Arduino.
Práctica 2.
Sensores I : Luminosidad (LDR) y ultrasonidos (HC-SR04).
Práctica 3.
Todas las prácticas deben ser entregadas (subidas) antes de finalizar la fecha que el
ponente indicará en la plataforma Moodle.
Como ocurre con las distribuciones Linux, Arduino también cuenta con multitud de
ediciones, cada una pensada para un público concreto o para una serie de tareas específicas.
Existen tal variedad de modelos oficiales, no oficiales y compatibles que es normal que la
gente no sepa diferenciar con exactitud las características de cada una de estas maravillosas
placas.
Vamos a detallar todos los modelos oficiales existentes hoy por hoy, así como exponer
algunos de los no oficiales y compatibles interesantes. Debemos tener presente que los
modelos oficiales de Arduino ascienden más de 16 por el momento y que pueden haber
cientos si sumamos los compatibles y los no oficiales.
Haremos una distinción entre oficiales, no oficiales o compatibles, puesto que no son lo
mismo. Veamos las diferencias entre estos grupos de placas:
Oficiales : son aquellas placas oficiales manufacturadas por la compañía italiana Smart
Projects y algunas han sido diseñadas por la empresa estadounidense SparkFun
Electronics (SFE) o por la también estadounidense Gravitech. Arduino Pro, Pro Mini y
LilyPad son las manufacturadas por SFE y Arduino Nano por Gravitech, el resto se
crean en Italia. Estas placas son las reconocidas oficialmente, incluyen el logo y son las
únicas que pueden llevar la marca registrada de Arduino.
No oficiales o compatibles : son placas compatibles con Arduino pero no pueden estar
registradas bajo el nombre de Arduino. Por supuesto son diseñadas y fabricadas por
otras compañías ajenas. Estos desarrollos no aportan nada al desarrollo propio de
Arduino, sino que son derivados que han salido para cubrir otras necesidades. Estas
frecuentemente utilizan un nombre que integra el sufijo “duino” para identificarlas,
como por ejemplo Freeduino del que ya hablaremos.
Nosotros mismos podemos crearnos nuestra propia placa compatible con Arduino a
medida y en este caso pasaría a ser una placa no oficial. Y el nombre bajo el que registremos
nuestro invento no puede contener la
palabra Arduino. Incluso puede que
nuestro diseño sea lo suficientemente
atractivo y llamativo que los
miembros de la comunidad de
desarrollo de Arduino lo incluyan
como una placa oficial. Están
esperando con los brazos abiertos a
recibir otras placas mejores y basadas
en otro tipo de arquitecturas (por
ejemplo, distintas a ARM y a ATmega
AVR, como x86, PIC, …).
Incluso en el menú Herramientas de Arduino IDE existe una opción que se llama Grabar
secuencia de arranque. Esta opción puede servir para grabar la secuencia de bootloader
(cargador de inicio) en el microcontrolador de Arduino oficial que por algún motivo ha
quedado desconfigurado o se ha sustituido el chip microcontrolador por otro. Pero también es
una práctica herramienta para programar un microcontrolador nuevo que hemos introducido
en nuestra propia placa “duino”.
Por ejemplo, existen placas compatibles a nivel del entorno de desarrollo, es decir,
solo nivel de software (pudiendo emplear Arduino IDE para programarlas). Otras son
compatibles a nivel de hardware y eléctricamente para poder emplear los shields y módulos
existentes para Arduino sin problema.
A la hora de seleccionar la placa para nuestro proyecto tenemos que tener esto muy
presente para no llevarnos sorpresas. Puede que nos interese una placa compatible por ciertas
cualidades del hardware que no posee Arduino o por cuestiones de licencias y sin embargo
querer que sea compatible con el entorno de desarrollo Arduino IDE. En otras ocasiones puede
que simplemente se desee compatibilidad en cuanto a los shields pero se tiene la necesidad de
emplear otro compilador (AVR Studio, Makefiles,…).
Características generales
Lo principal que debemos saber es que tipo de proyectos vamos a implementar. Con
esto nos da una idea de la cantidad de pines analógicos y digitales (normales y de tipo PWM o
modulados por ancho de pulso para simular una salida analógica) que necesitamos para
nuestro trabajo. Este primer escrutinio nos permite descartar algunas placas más simples que
no tengan suficientes pines o, al contrario, descartar las de mayor número de ellos para
reducir los costes puesto que con menos pines nos conformamos.
También podemos deducir el tamaño de código que vamos a generar para nuestros
sketchs. Un programa muy largo, con muchas constantes y variables demandará una cantidad
mayor de memoria flash para su almacenamiento, por lo que se debe elegir una placa
adecuada para no quedarnos cortos.
La placa más vendida y que es la más aconsejable para la mayoría de proyectos, sobre
todo si estás empezando, es la Arduino UNO. Es suficiente para la mayoría de proyectos, tiene
un buen precio y dispone de unos parámetros equilibrados.
Placas oficiales
De entre las placas oficiales puedes encontrar multitud de modelos. Todos especialmente
pensados para un fin, compatibles con los shields y módulos oficiales, así como con Arduino
IDE. Vamos a intentar detallar sus principales características para poder diferenciarlos entre sí:
Arduino UNO : es la plataforma más extendida y la primera que salió al mercado, por
ello nos podemos basar en esta para hacer la
comparativa con el resto de placas. Todas las
características de esta placa estarán
implementadas en casi todas las placas
restantes, a excepción de algunas que ya
veremos. Se basa en un microcontrolador
Atmel ATmega320 de 8 bits a 16Mhz que
funciona a 5v. 32KB son correspondientes a la
memoria flash (0,5KB reservados para el
bootloader), 2KB de SRAM y 1KB de EEPROM.
En cuanto a memoria es una de las placas más limitadas, pero no por ello resulta
insuficiente para casi todos los proyectos que rondan la red. Las salidas pueden
trabajar a voltajes superiores, de entre 6 y 20v pero se recomienda una tensión de
trabajo de entre 7 y 12v. Contiene 14 pines digitales, 6 de ellos se pueden emplear
como PWM. En cuanto a pines analógicos se cuenta con hasta 6. Estos pines pueden
trabajar con corriente de hasta 40mA.
Arduino Zero : en aspecto es similar a Arduino UNO, pero esta placa esconde
sorpresas con respecto a la plataforma UNO.
En vez del microcontrolador Atmel ATmega
basado en arquitectura AVR de 8 bits, el Zero
contiene un potente Atmel SAMD21 MCU de
48Mhz con un core ARM Cortex M0 de 32 bits.
Con 256 KB de memoria flash, 32 KB de SRAM y
una EEPROM de más de 16KB por emulación. El
voltaje en el que opera es de 3v3/5v (7mA) y
contiene 14 pines E/S digitales, de los cuales 12
son PWM y UART. En el terreno analógico se
dispone de 6 entradas para un canal ADC de 12 bits y una salida analógica para DAC de
10 bits. En definitiva, esta placa va destinada para los que Arduino UNO se les quede
corto y necesitan algo más de potencia de procesamiento.
Arduino Due : es una placa con un microcontorlador Atmel SAM3X8E ARM Cortex-M3
de 32 bits. Este chip que trabaja a 84 Mhz
(3,3v) aporta una potencia de cálculo bastante
superior a los anteriores microcontroladores
vistos. Por eso es idóneo para todos aquellos
que necesiten de un proyecto con alta
capacidad de procesamiento. Al tener un core
a 32 bits permite realizar operaciones con
datos de 4 bytes en un solo ciclo de reloj.
Además, la memoria SRAM es de 96KB, superior al resto de placas vistas
anteriormente e incorpora un controlador DMA para acceso directo a memoria que
intensifica el acceso a memoria que puede hacer la CPU. Para el almacenamiento se
dispone de 512KB de flash, una cantidad muy grande de memoria para cualquier
código de programación. En cuanto a soporte de voltajes en intensidades es idéntica a
UNO, solo que el amperaje de los pines se extiende hasta los 130-800mA (para 3v3 y
5v respectivamente). El sistema dispone de 54 pines de E/S digitales, 12 de ellos
pueden ser usados como PWM. También tiene 12 analógicos, 4 UARTs (serie, frente a
los dos de UNO), capacidades de conexión USB OTG, dos conexiones DAC (conversión
digital a analógico), 2 TWI, un power jack, SPI y JTAG. Como vemos en cuanto a interfaz
de conexionado está muy completo y permite multitud de posibilidades.
Arduino Fio : Es una placa Arduino reducida a la mínima expresión. Por su tamaño es
especialmente considerado para proyectos
móviles inalámbricas o para ser insertados en
espacios reducidos. Funciona con un
microcontrolador ATmega328P, una versión
similar a la del Ethernet pero que trabaja a una
frecuencia inferior, 8Mhz. Al ser tan reducida
carece de ciertas comodidades, por ejemplo,
para subir los sketches hay que usar un cable FTDI o una placa adicional adaptadora
Sparkfun. Igualmente, las tensiones con las que se trabaja se ven mermadas hasta los
3.35-12v máximo. 14 pines digitales (6 PWM) y 8 pines analógicos serán los únicos
disponibles en esta placa. Tampoco ayuda sus 2KB de SRAM, 32KB de flash y 1KB de
EEPROM, todo esto limitará mucho el tamaño de los sketchs y del circuito del
proyecto.
Arduino LilyPad : Especial para ser integrado en prendas y textiles, es decir, es una
versión de Arduino “ponible”. Fue desarrollado
por Leah Buechley y SparkFun Electronics para
ser empleado con los mismo fines que otros
Arduino’s solo que con ciertas limitaciones a
cambio de sus capacidades de integración y su
base flexible. Se basa en dos versiones de
microcontrolador diferentes, ambas de bajo
consumo denominadas Atmega168V y
ATmega328V, esta segunda más potente.
Ambos trabajan a 8Mhz, pero la primera
trabaja a solo 2,7v y a segunda a 5,5v. Dispone
de 14 pines digitales (6 PWM) y 6 analógicos a
lo largo de su perímetro. Además integra 16KB
de memoria flash para el código del programa, 1KB de SRAM y 512 bytes de EEPROM.
Arduino Mega ADK : Placa basada en un ATmega2560 como la versión Mega vista
anteriormente. Pero su principal ventaja
es que dispone de una interfaz preparada
para ser conectada mediante USB a
dispositivos móviles basados en Android,
gracias a su IC MAX3421e. Esto permite
contar con todas las capacidades de una
placa Arduino Mega (igual en cuanto al
resto de características) más las
posibilidades de desarrollo conjuntas con
una plataforma Android.
Arduino Micro : Diseñado por Adafruit y pensado para una autonomía elevada y con
un reducido tamaño. Su precio es
bajo con respecto a otros modelos.
Sin embargo cuenta con
características similares a otros
diseños, como un microcontrolador
ATmega32u4 a 16Mhz, 20 pines
digitales (7 de ellos PWM) y 12
analógicos. En muchos aspectos es similar a Leonardo, pero con capacidad de
comunicación USB built-in, eliminando la necesidad de un segundo procesador.
Solo analizaremos las más famosas puesto que como ya comenté existen centenares de
ellas y probablemente cada día nazcan más de estas placas. Sí que es verdad que la mayor
atención la debemos tener sobre los modelos oficiales por cuestiones de soporte y de
comunidad de desarrolladores que resultan obvias, pero hay que reconocer que algunas placas
compatibles son ciertamente interesantes:
AVR.duino U+: SlicMicro es el creador de esta placa compatible, tanto en hardware como
en software, con Arduino UNO Rev3. Esta
plataforma de hardware open source añade
características frente al oficial. Para pasar el código
desde Arduino IDE debemos seleccionar la opción
Arduino UNO Rev3 como si ésta fuese nuestra
placa y el código cargará sin problemas. Las
características adicionales que integra (SlicBus
Port, un LED adicional, potenciómetro, pulsador).
El resto es igual al Arduino, incluido su ATmega328
que comparte con algunas versiones oficiales. Esta
placa es interesante para aquellos que buscan las características combinadas de Arduino
UNO y de Esplora, aunque más limitada en gadgets onboard que esta última. Lo que sí es
una ventaja es su puerto SlicBus que permite conectar módulos especiales fabricados por
SlicMicro.
SainSmart UNO y Mega : son dos placas SainSmart totalmente compatibles con Arduino
UNO y con Arduino Mega que han seguido a la rama oficial
paso a paso, incluso en las revisiones (véase SainSmart UNO
Rev3). Incluso en el aspecto físico y color son bastante
idénticas a las oficiales, por no decir en sus características
técnicas, empleando hasta el mismo microcontrolador. El
precio de Mega ronda los 15 euros y la versión UNO los 8
euros. Podemos comprobar que la gran baza de estas placas es
su precio frente a las oficiales. Algunas características es la
utilización de un chip ATmega8u2 programado para controlar
el USB y convertirlo a serie en vez del método empleado
anteriormente con chip controlador. También es distinta el
encapsulado de los chips, que en estas placas es más avanzado que el primitivo DIP del
UNO oficial.
ChibiDuino2: creado por los nipones de TiisaiDipJp. Es compatible con UNO e incluye dos
mini-USB B, un puerto para un LCD 1602 y un área breadboard.
Por el resto es de características similares al oficial, excepto en
su tamaño, que es más reducido, por su distribución y su
precio es bastante económico.
Diavolino: Creado por Evil Mad Scientist Laboratories es una versión compatible con el
layout (es decir, los pines se encuentran en el mismo sitio y
por tanto es compatible con los shields oficiales) de Arduino
UNO y diseñada para el uso de un cable USB-TTL serial. Su
diseño es atractivo porque rompe con el colorido
convencional. El diseño surge de la necesidad de un hacker
de San Francisco de tener una placa de bajo coste para la
enseñanza.
Rascal: Compatible con los shields de Arduino oficiales, pero se programa en lenguaje de
programación Python. Esto hace que sea
interesante para los iniciados en el mundo de la
programación, ya que Python posiblemente sea el
mejor lenguaje para comenzar a programar,
sencillo y simple. Esto contrasta con las
posibilidades avanzadas que permite
implementar. Rascal Micro ha creado esta placa
con un microcontrolador basado en ARM, el
AT91SAM9G20. Esta placa nació en Massachusetts, en 2011 y aunque su precio es elevado
(unos 175 dólares), puede ofrecer posibilidades que ninguna oficial tiene. Se podría decir
que es una mezcla entre un mini-PC con posibilidad de ejecutar Linux, con puertos de red y
slot SD para el almacenamiento, y una placa de Arduino compatible con sus shields.
Además incluye software para crear un servidor web con ella. Desde el propio sistema se
puede programar usando un editor basado en web muy sencillo y practico.
Romeo 2012: DFRobot ha creado esta placa especialmente pensada para los amantes
de la robótica o la mecatrónica. Es totalmente
compatible con Arduino UNO Rev3 pin a pin y
sus características electrónicas y de
programación son similares. Lo interesante es
que incluye una serie de características
onboard que no tienen los oficiales,
destacando por ejemplo el controlador de
motores (de dos direcciones y hasta 2A). Otra
características es un socket Xbee que permite
iniciar el proyecto inmediatamente, sin
necesidad de un controlador de motor
adicional o shields Wireless. Funciona además con un microcontrolador Atmega32u4,
acompañado de multitud de pulsadores programables y un socket para un módulo
APC220 y Bluetooth.
Seeeduino : SeeedStudio ha creado esta placa compatible, tanto a nivel físico como a
nivel de software, con Arduino Diecimila oficial.
Por tanto no habrá problema al emplear
Arduino IDE y los shields oficiales. En su versión
primera poseía un ATmega168, pudiendo optar
por un ATMega328 a partir de la v2.21. Ciertas
partes han sido remodeladas para aportar
mayor flexibilidad y una buena experiencia de
usuario.
Zigduino: Logos Electromechanical ha creado este kit que es más que una simple placa. Integra
un microcontrolador ATmega128RFA1, un ZigBee para
conexiones a red inalámbrica (IEEE 802.15.4). También
incluye un jack externo RPSMA y es totalmente
compatible con Arduino Duemilanove. Al implementar
estas funcionalidades de red sin necesidad de shields
externos, el precio de la placa supera los 50 euros.
Banguino: es una placa diseñada por Dimitech y con un ATmega328 como base. Esta
placa es compatible a nivel de software, pero no a nivel físico.
Se trata de una placa con un reducido tamaño. En cuanto a
características es similar a Arduino UNO, solo que mejorado
en un socket estándar PLCC68 para ser integrado en proyectos
de reducido tamaño.
Boarduino : es una placa creada por Adafruit y compatible a nivel de software con
Arduino, pero no a nivel físico. Así que no
podrá ser usada con los shields oficiales. Sus
características son similares a un Arduino
Diecimila, pero su tamaño es más reducido y
su precio bastante más barato. Está
especialmente pensado para ser pinchado en
una placa tipo breadboard.
Femtoduino: placa ultra pequeña de tan solo 20.7×15.2mm, apenas es mayor que una
moneda. Esta placa fue diseñada por Fabio
Varesano para proyectos muy pequeños.
Integra un ATMega3298P-MU y es compatible
a nivel de software con Arduino.
Moteino: LowPowerLab ha creado una mini placa del tamaño de una tarjeta SD con
posibilidades de comunicación sin cables gracias al chip RFM12B o RFM69W/HW/CW
de HoperRF. Es compatible a nivel de software,
así que se puede programar con Arduino IDE
empleando un adaptador FTDI o directamente
mediante interfaz USB en la versión Moteino
USB.
TinyLily : del mismo fabricante que TinyDuino nos llega esta versión
que pretende sustituir a LilyPad oficial o por lo menos competir en el
mismo sector. Es muy pequeño y diseñado para el diseño de e-
textiles. Contiene unas pestañas para la comunicación y
programación.
Leaflabs Maple : casi todos los modelos se basan en chips Atmega AVR o chips de
Atmel basados en ARM. Pero esta placa rompe
con ese esquema e integra un ARM STM32 (ARM
Cortex-M3 de 32 bits y a 72MHz) fabricado por
STMicroelectronics. Leaflabs ha creado esta placa
con diseño compacto que es compatible con los
shields, a pesar de su arquitectura. La
programación puede hacerse empleando Open
Source Maple IDE que implementa el lenguaje
Arduino para no tener que re-aprender otro
lenguaje de programación, así como librerías
nativas a bajo nivel.
Goldilocks: Thin Layer Embedded diseñó esta placa basada en un FPGA (Altera Cyclone
IV, con RAM DDR2, SRAM, flash, oscilador y un
Atmel ATSHA204 Authentication IC/EEPROM)
para ofrecer una flexibilidad extrema. Es
compatible con los shields de Arduino, pero en
este caso no solo podrás programarlo a nivel de
software, sino también a nivel de hardware
gracias a su FPGA. Esta misma compañía también
tiene otro modelo muy similar denominado
Breadstick con unos pines macho especialmente
pensados para insertarlo en una protoboard.
pcDuino : es un miniPC como la Raspberry Pi, solo que combina las características de
una placa de desarrollo como Arduino. Dispone de un puerto HDMI para conectarlo a
una pantalla o a tu TV para usarla como monitor
del sistema, además de otros puertos USB y slot
para tarjetas de memoria microSD Así podrás
conectar periféricos como en el caso de la Raspi,
incluidos los que agregan funcionalidades de red.
Puede arrancar sistemas operativos como Ubuntu
o Android ICS, entre otras distribuciones Linux.
Para mover estos sistemas holgadamente dispone
de 1GB de RAM, 2GB flash onboard, procesador
ARM Cortex A8 (basado en ARM11) de 1Ghz y una
GPU Mali 400 (la misma que integran los Samsung
Galaxy S3). Todo esto la hacen la compañera perfecta de los usuarios más avanzados
que quieran un todo en uno (plataforma duino + miniPC) y con un hardware superior
al de la Raspberry Pi.
Ruggeduino: es una placa compatible con Arduino UNO (incluido a nivel de software) e
igual en casi todos los aspectos a la oficial. Tan
solo encontramos algunas variaciones muy
interesantes para los electrónicos, como son la
integración de protección electrónica contra ESD
en sus pines y conexiones eléctricas, cosa de la
que UNO oficial carece. Su precio asciende a los
39,95$.
Cada vez aparecen más y más placas basadas en Arduino, sobre todo no oficiales. Pero
como se puede comprobar en lo que hay que fijarse a la hora de adquirir una placa es si
queremos tenemos compatibilidad hardware, compatibilidad software o ambas.
Seguidamente veremos si la placa que queremos adquirir dispone del hardware que
queremos utilizar. No obstante a día de hoy, para educación y por la diferencia de precio,
yo recomiendo adquirir o la Arduino UNO, o la Arduino Mega 2560 con mayores
prestaciones.
http://shieldlist.org/
Introducción al Arduino
Arduino es una plataforma de desarrollo de computación física (physical computing)
de código abierto, basada en una placa con un sencillo microcontrolador y un entorno de
desarrollo para crear software (programas) para la placa.
Podemos usar Arduino para crear objetos interactivos, leyendo datos de una gran
variedad de interruptores y sensores y controlar multitud de tipos de luces, motores y otros
actuadores físicos. Los proyectos con Arduino pueden ser autónomos o comunicarse con un
programa (software) que se ejecute en un ordenador.
Especificaciones técnicas
El Arduino UNO
La constitución de la placa Arduino UNO es la siguiente :
3.- ICSP : Conector para la programación ICSP (In Circuit Serial Programming, o Programación
Serial en circuito). El ICSP es el sistema utilizado para poder programar los dispositivos sin
necesidad de tener que retirar el chip del circuito del que forma parte.
4, 5, 6 y 7 : Pines Digital Inputs/Outputs :
Pin 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y transmitir (TX) datos serie TTL.
Pines 2 y 3. Interrupciones externas. Se trata de pines encargados de interrumpir el
programa secuencial establecido por el usuario. Pueden ser configurados para
activar una interrupción en un valor bajo, un flanco ascendente o descendente, o
un cambio en el valor.
Pines 3, 5, 6, 9, 10 y 11. PWM (modulación por ancho de pulso, en inglés pulse-
width modulation).
Constituyen 6 bits de salida PWM con la función analogWrite ().
Pin 13. LED. Existe un LED SMD con su resistencia limitadora conectado a este
pin. Además es el único pin que contiene una resistencia limitadora integrada en la
placa Arduino en serie con el pin. Pudiendo conectar un Led externo entre este pin y
GND directamente.
SPI : 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines sirven de apoyo a la
comunicación SPI con la biblioteca de SPI. El Bus SPI (del inglés Serial Peripheral
Interface) es un estándar de comunicaciones, usado principalmente para la
transferencia de información entre circuitos integrados en equipos electrónicos.
VIN: Pin de entrada para una fuente tensión externa que servirá para
alimentar al Arduino.
5V: Pin de salida, fuente de tensión regulada de 5V, esta tensión puede
provenir ya sea de pin VIN, del conector USB o de otra fuente de 5V
regulada.
3.3V: Pin de salida, fuente de 3.3 voltios generados por el chip FTDI
integrado con un consumo máximo de corriente de 50mA.
GND: pines de tierra.
Reset : Se puede aplicar un valor LOW(0V) para reiniciar el
microcontrolador. Típicamente usado para añadir un botón de reset a los
shields que no dejan acceso a este botón en la placa.
No obstante, a lo largo de este curso es posible que se haga alguna mención de alguna
característica de este microcontrolador y debamos consultar el datasheet para aclarar el
funcionamiento.
IMPORTANTE :
Según la placa que dispongamos, tendremos que seleccionarla en el IDE de Arduino.
En este manual se ha utilizado la placa de Arduino UNO y la placa de Arduino Mega.
http://arduino.cc/en/Main/Software
- Menú Archivo :
Posee las mismas opciones que cualquier programa
basado en Windows (Nuevo, Abrir, Cerrar, etc…) y
algunas opciones añadidas como por ejemplo:
Sketchbook : Si nos situamos encima se desplegarán
todos los Sketch que hemos guardado dentro de nuestro
Sketchbook.
Ejemplos : Si nos situamos encima se desplegarán todos
los ejemplos que trae el IDE de Arduino por defecto.
Cargar : Sirve para enviar el sketch a la placa Arduino.
Cargar usando Programador : Sirve para enviar el sketch
a la placa Arduino usando un programador externo.
- Menú Editar :
- Menú Sketch :
Este menú dispone de las opciones de
Agregar Archivo e Importar Librería,
añaden a nuestro Sketch un archivo o
una librería.
Formato Automático :
Establece
adecuadamente las
tabulaciones para
nuestro sketch
Archivar el Sketch : Comprime todos los sketch abiertos en el IDE y los guarda por defecto
en la carpeta Arduino de la carpeta documentos de nuestro PC. Crea un único archivo *.zip
Monitor Serial : Abre un sistema de monitorización que nos permite visualizar datos
enviados por el microcontrolador o enviarlos al microcontrolador.
- Menú Ayuda :
La área de notificaciones es la zona del IDE de Arduino donde el compilador nos dará
información sobre posibles errores, qué placa tenemos conectada y a qué puerto. También nos
indica en que línea tenemos el cursor dentro del área de trabajo.
El área de trabajo es la zona editable del IDE de Arduino donde escribiremos nuestro
código para posteriormente, compilarlo y transferirlo a la placa. En el entorno Arduino
podemos tener tantas funciones como queramos (definidas por el usuario) pero como mínimo
tendremos dos: setup( ) y loop( ).
El IDE de Arduino,
asigna un nombre
automático al sketch
compuesto por “sketch_”
seguido de los 3 primeros
caracteres del mes “mar”,
seguido de 2 dígitos
numéricos de la fecha “10”
y seguido de una letra comenzando por “a” e incrementándose según vayamos creando
nuevos sketch. En el ejemplo de la figura es el primer sketch “a”, que se ha realizado el día 10
de Marzo “mar”. Por supuesto, el nombre se puede modificar.
Los nombres que llevan el carácter § al final, es porque han sido modificados y no han
sido guardados.
El código situado en la función setup(), se ejecutará solo una vez, al iniciarse el sistema,
es decir, al arrancar el microcontrolador (no confundir con el bootloader). Se suelen configurar
los pines como entradas o salidas en esta función o inicializar algún dispositivo. El código que
situemos en la función loop() en cambio, se ejecutará indefinidamente (loop significa lazo en
inglés).
Función setup( ) : Esta función se ejecuta solo una vez al arrancar el sistema. En este caso solo
la utilizamos para configurar el pin 13 de nuestro Arduino UNO, como salida. Utilizamos la
función pinMode para ello. Cuando el comentario ocupa una sola línea utilizamos la doble
barra “//”. El pin 13 tiene un led conectado en la propia placa en casi todos los modelos de
Arduino.
Función loop( ) : Esta función se ejecutará mientras la placa esté alimentada y no esté en
reset. Con la función digitalWrite ( led, HIGH ), escribimos un estado alto en el pin 13 (si
medimos la tensión en el pin, mediremos 5V). Después hacemos que el microcontrolador
espere un tiempo con la función delay. Esta función provoca una espera en milisegundos en
función del parámetro utilizado en su llamada. Más adelante comentaremos cosas de esta
famosa pero peligrosa función. Pasada la espera, escribimos un estado bajo en el mismo pin
con la función digitalWrite ( led, LOW ), (si medimos la tensión en el pin, mediremos 0V) y
antes de volver a escribir un estado alto, volvemos a realizar una pequeña espera de 1000
milisegundos.
Si consideramos que esta función se ejecuta indefinidamente, ya tenemos el parpadeo del pin
como queríamos.
A partir de ahora, todos los sketch que hagamos se cargarán en Arduino de la misma
manera, por lo que ya no se volverá a explicar el proceso de carga de un sketch en Arduino.
Minibloq
Modkit (alpha)
S4A
S4A o Scratch for Arduino es una modificación del popular Scratch pensada
exclusivamente para placas Arduino. S4A busca ofrecer una plataforma de iniciación al
mundo de la programación, así como una herramienta potente y de alto nivel para
programadores que usen Arduino. Es totalmente gratuito y se puede descargar desde la
web oficial del proyecto.
Scratch 4 Arduino
Ardublock
Physical Etoys
Es una aplicación web que permite crear proyectos de arduino con layout de
protoboard o PCB. Dichos proyectos pueden ser compartidos de manera que se hagan
cooperativos, se pueden encargar los PCBs que hagamos de manera muy parecida a la
que nos ofrece Fritzing y además tenemos un IDE de programación online, de manera
que podemos seguir picando código desde nuestra tablet.
Es una plataforma muy atractiva por lo fácil y potente al mismo tiempo que
resulta. Además es muy buena herramienta para la enseñanza, ese espíritu que tanto
gusta a la comunidad Arduino. ¡Y por supuesto puedes simular tu código online!
Como podemos ver nos ofrecerá empezar con layout de protoboard estilo
Fritzing o bien con aspecto de PCB, esta última es buena opción si queremos encargar
una shield personalizada de Arduino que diseñemos nosotros. Si queremos acceder a
nuestros proyectos hacemos click en nuestra fotográfica. Y si queremos ver proyectos
que ha hecho la comunidad podemos verlos haciendo scroll en la web, esto es
interesante ya que como si de git se tratara podemos hacer “fork” de proyectos ajenos
y así basarnos en sus diseños.
Una vez que nos decidimos a crear un proyecto accedemos a la siguiente pantalla.
Y una vez hayamos terminado el código, es tan fácil como dar a “upload &
run” para empezar a ver como tu creación cobra vida. La única pega que tiene la
plataforma es que si tu código no compila no te va a decir dónde está el error, aunque
este sea pura sintaxis. Si no encuentras tu error, puedes dar a “download code” o un
simple copiar y pegar en nuestro IDE arduino para verificar, corregir y volver a copiar.
Como vemos simula muchos componentes y además también simula una terminal serie.
Fritzing
La vista de Protoboard (Placa de Prototipos), esta vista está diseñada para verse como
un protoboard Real.
Vista de PCB, donde se pueden ver o realizar las conexiones de nuestro esquema
en PCB.
VBB simula muchos microcontroladores de las líneas PIC16 y PIC18, ahora también
con la emulación de Arduino. En adición se encuentran una amplia variedad de
componentes simulados como LCDs, servos, lógica y otros dispositivos de E/S que
pueden ser usados para modelar y simular circuitos de alto nivel."
En sus primeras versiones, VBB era libre, ahora se ha convertido en una aplicación de
pago.
Proteus
Se tratará de resumir lo máximo posible y hacer referencia a los matices que son
necesarios para desarrollar sketch lo más claros posibles.
void setup( )
{
estamentos;
}
void loop( )
{
estamentos;
}
Setup ( )
void setup( )
{
pinMode(pin, OUTPUT); // configura el 'pin' como salida
}
Loop ( )
Funciones
type funcion( )
{
estamentos;
}
Una llave de apertura “{“ siempre debe ir seguida de una llave de cierre “}”, si
no es así el programa dará errores. El entorno de programación de Arduino incluye una
herramienta de gran utilidad para comprobar el total de llaves. Sólo tienes que hacer
click en el punto de inserción de una llave abierta e inmediatamente se marca el
correspondiente cierre de ese bloque (llave cerrada).
; El punto y coma
Nota: Olvidarse de poner fin a una línea con un punto y coma se traducirá en un error
de compilación. Las instrucciones pueden estar escritas una en cada línea o varias en
una misma línea, pero siempre separadas por ‘ ; ‘.
Línea de comentarios //
// esto es un comentario
Variables
Nota: Las variables deben tomar nombres descriptivos, para hacer el código más
legible. Nombres de variables pueden ser “contactoSensor” o “pulsador”, para ayudar
al programador y a cualquier otra persona a leer el código y entender lo que
representa la variable. Nombres de variables como “var” o “valor”, facilitan muy poco
que el código sea inteligible. Una variable puede ser cualquier nombre o palabra que
no sea una palabra reservada en el entorno de Arduino.
Declaración de variables
Todas las variables tienen que declararse antes de que puedan ser utilizadas.
Para declarar una variable se comienza por definir su tipo como int (entero), long
(largo), float (coma flotante), etc, asignándoles siempre un nombre, y, opcionalmente,
un valor inicial. Esto sólo debe hacerse una vez en un programa, pero el valor se puede
cambiar en cualquier momento usando aritmética y reasignaciones diversas.
int entradaVariable = 0;
Una variable puede ser declarada en una serie de lugares del programa y en
función del lugar en donde se lleve a cabo la definición esto determinará en que partes
del programa se podrá hacer uso de ella.
Una variable puede ser declarada al inicio del programa antes de la parte de
configuración setup( ), a nivel local dentro de las funciones, y, a veces, dentro de un
bloque (no recomendable), como para los bucles del tipo if.. for.., etc.
En función del lugar de declaración de la variable así se determinara el ámbito
de aplicación, o la capacidad de ciertas partes de un programa para hacer uso de ella.
Una variable global es aquella que puede ser vista y utilizada por cualquier
función y estamento de un programa. Esta variable se declara al comienzo del
programa, antes de setup( ).
Una variable local es aquella que se define dentro de una función o como parte
de un bucle (no recomendable). Sólo es visible y sólo puede utilizarse dentro de la
función en la que se declaró.
void loop( )
{
Int variable2;
Int i; float f;
for (i=0; i<20;)
{
i++;
}
}
Tipos de variables ( ver todos en : http://arduino.cc/es/Reference/Extended )
Byte : Almacena un valor numérico de 8 bits sin decimales. Tienen un rango entre 0 y
255.
Char : Es un tipo de dato que ocupa un byte de memoria con signo Tienen un rango
entre -128 y 127. Para un dato de un byte (8bits), utilice el tipo de dato "byte".
Int : Enteros son un tipo de datos primarios que almacenan valores numéricos de 16
bits sin decimales comprendidos en el rango -32768 y 32767.
Long : Enteros (tipo 32 bits) sin decimales que se encuentran dentro del rango
-2147483648 a 2147483647.
Float : Números con decimales. Los números de punto flotante tienen una mayor
resolución que los de 32 bits con un rango comprendido entre
-3.4028235E+38 a 3.4028235E+38.
Nota: Los números de punto flotante no son exactos, y pueden producir resultados
extraños en las comparaciones. Los cálculos matemáticos de punto flotante son
también mucho más lentos que los del tipo de números enteros, por lo que debe
evitarse su uso si es posible.
Arrays
Del mismo modo es posible declarar una matriz indicando el tipo de datos y el tamaño
y posteriormente, asignar valores a una posición especifica :
Aritmética
Las operaciones se efectúa teniendo en cuenta el tipo de datos que hemos definido
para los operandos (int, dbl, float, etc..), por lo que, por ejemplo, si definimos 9 y 4 como
enteros “int”, 9 / 4 devuelve de resultado 2 en lugar de 2,25 ya que el 9 y 4 se valores
de tipo entero “int” (enteros) y no se reconocen los decimales con este tipo de datos.
Si los operandos son de diferentes tipos, para el cálculo se utilizará el tipo más grande
de los operandos en juego. Por ejemplo, si uno de los números (operandos) es del tipo
float y otra de tipo integer, para el cálculo se utilizará el método de float es decir el
método de coma flotante.
Asignaciones compuestas
Las asignaciones compuestas combinan una operación aritmética con una variable
asignada. Estas asignaciones compuestas pueden ser:
Operadores de comparación
Las comparaciones de una variable o constante con otra se utilizan con frecuencia en
las estructuras condicionales del tipo if.. para testear si una condición es verdadera. Tipos de
operadores :
x == y // x es igual a y
x != y // x no es igual a y
x<y // x es menor que y
x>y // x es mayor que y
x <= y // x es menor o igual que y
x >= y // x es mayor o igual que y
Operadores lógicos
Los operadores lógicos sirven para comparar dos expresiones y devolver un valor
‘VERDADERO’ o ‘FALSO’ dependiendo del operador. Existen tres operadores lógicos, AND (&&),
OR (||) y NOT (!), que a menudo se utilizan en estamentos de tipo if.. :
if (x > 0 && x < 5) // cierto sólo si las dos expresiones son ciertas
if (x > 0 || y > 0) // cierto si una cualquiera de las expresiones es cierta
if (!x > 0) // cierto solo si la expresión es falsa
Constantes
if (unaVariable ?? valor)
{
ejecutaInstrucciones;
}
En el ejemplo anterior se compara una variable con un valor, el cual puede ser una
variable o constante. Si la comparación, o la condición entre paréntesis se cumple (es
cierta), las declaraciones dentro de las llaves se ejecutan. Si no es así, el programa
salta y continúa.
Nota: Tenga en cuenta el uso especial del símbolo '=', poner dentro de if (x = 10),
podría parecer que es válido pero sin embargo no lo es ya que esa expresión asigna el
valor 10 a la variable x, por eso dentro de la estructura if se utilizaría x==10 que en
este caso lo que hace el programa es comprobar si el valor de x es 10.
‘if… else’ viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se
cumple haz esto otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una
cosa si la entrada fue alto o hacer otra cosa si la entrada es baja, usted escribiría que de
esta manera:
‘Else’ puede ir precedido de otra condición de manera que se pueden establecer varias
estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que
sean mutuamente excluyentes pudiéndose ejecutar a la vez.
La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves
un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se
vuelve a testear la condición. La declaración for tiene tres partes separadas por ( ; )
La inicialización de una variable local se produce una sola vez y la condición se testea cada vez
que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue
cumpliéndose, las instrucciones del bucle se vuelven a ejecutar.
Cuando la condición no se cumple, el bucle termina.
El bucle ‘do…. While’ funciona de la misma manera que el bucle while, con la salvedad
de que la condición se prueba al final del bucle, por lo que el bucle siempre se ejecutará al
menos una vez. do
{
Instrucciones;
} while (unaVariable ?? valor);
Es importante darse cuenta del ‘ ; ‘ del final del bucle, detrás de la comparación.
digitalRead ( pinDigital )
Lee el valor de un pin (definido como digital) dando un resultado HIGH (alto) o LOW
(bajo). El pin se puede especificar ya sea como una variable o una constante (0-13).
valor = digitalRead(Pin); // hace que 'valor sea igual al estado leído en ´Pin´
Envía al ´pin´ definido previamente como OUTPUT el valor HIGH o LOW (poniendo
en 1 o 0 la salida). El pin se puede especificar ya sea como una variable o como una
constante (0-13).
digitalWrite(pin, HIGH); // deposita en el 'pin' un valor HIGH (alto o 1)
analogRead(pin)
Lee el valor de un determinado pin definido como entrada analógica. La placa Arduino
posee 6 canales conectados a un conversor analógico digital de 10 bits. Esto significa que
convertirá tensiones entre 0 y 5 voltios a un número entero entre 0 y 1023. Esto proporciona
una resolución en la lectura de :
5 voltios / 1024 unidades, es decir, 0.0049 voltios (4.9mV) por unidad.
Nota: Los pins analógicos (0-5) a diferencia de los pines digitales, no necesitan ser
declarados como INPUT u OUPUT ya que son siempre INPUT´s. El rango de entrada
puede ser cambiado usando la función analogReference( ).
analogWrite(pin,valor)
Escribe un valor analógico (PWM) en un pin. Puede ser usado para controlar la
luminosidad de un LED o la velocidad de un motor. Después de llamar a la función
analogWrite( ), el pin generará una onda cuadrada estable con el ciclo de trabajo especificado
hasta que se vuelva a llamar a la función analogWrite( ) ( o una llamada a las funciones
digitalRead( ) o digitalWrite( ) en el mismo pin ).
Parámetros :
pin: Es el pin en el cual se quiere generar la señal PWM.
valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado)
y 255 (siempre encendido).
val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
analogReference(EXTERNAL)
Con esta instrucción le estamos diciendo a nuestro Arduino, que no use su tensión de
referencia por defecto ( +5 V ), sino la que nosotros introduzcamos por el pin AREF de nuestra
placa.
Comunicación Serie
Serial.begin (velocidad)
Imprime los datos al puerto serie como texto ASCII seguido de un retorno de
carro (ASCII 13, o '\r') y un carácter de avance de línea (ASCII 10, o '\n').
Serial.available( )
if (Serial.available( ) > 0)
{
//realiza la lectura del puerto serie
}
min ( x, y )
max ( x, y )
randomSeed(valor)
valor = random(100, 200); // asigna a la variable 'valor' un numero aleatorio comprendido entre 100-200
El siguiente ejemplo genera un valor aleatorio entre 0-255 y lo envía a una salida
analógica PWM :
int randNumber; // variable que almacena el valor aleatorio
int led = 10; // define led como 10
void setup() { } // no es necesario configurar nada
void loop()
{
randomSeed(millis( )); // semilla aleatorio a partir de la función millis()
randNumber = random(255); // genera número aleatorio entre 0-255
analogWrite(led, randNumber); // envía a la salida led de tipo PWM el valor
delay(500); // espera 500 ms = 0,5 s.
}
Switch / Case
Como las sentencias if, switch...case controla el flujo de programas permitiendo a los
programadores especificar diferentes códigos que deberían ser ejecutados en función de
varias condiciones.
En particular, una sentencia switch compara el valor de una variable con el valor
especificado en las sentencias case. Cuando se encuentra una sentencia case cuyo valor
coincide con dicha variable, el código de esa sentencia se ejecuta.
#define
La principal página de referencia para librerías AVR C (AVR hace referencia a los chips Atmel en
los cuales se basa Arduino) se encuentra en :
http://www.nongnu.org/avr-libc/user-manual/modules.html
Los operadores bit a bit realizan sus cálculos a nivel de los bits de las variables. Ayudan
a resolver muchos de los problemas más comunes a nivel de programación. La mayoría del
material que sigue está sacado de un excelente tutorial de matemática lógica, que puede ser
encontrado en ( http://www.arduino.cc/playground/Code/BitMath )
& ( and )
| ( or )
~ ( not )
^( xor )
<< ( desplazamiento a la izquierda )
>> ( desplazamiento a la derecha )
PORTD es una constante definida para referirse a los estados de salida de los pines
digitales 0, 1, 2, 3, 4, 5, 6 y 7. Si hay un 1 en una determinada posición, ese pin se encuentra a
nivel alto (HIGH). (Los pines necesitan estar declarados como salida usando la instrucción
pinMode). Entonces, si escribimos PORTD = B00010100; , pondremos los pines 2 y 4 a nivel
alto. Un ligero problema es que, al asignarle un valor al puerto directamente, se puede
modificar el valor de otro pin, por ejemplo, el valor del bit 0 y 1 del puerto D, usados por el
Arduino en comunicaciones serie, por lo que podríamos estar interfiriendo en esa
comunicación.
Bits y bytes
valor = lowByte(x);
valor = highByte(x);
bitSet(x, n);
bitClear(x, n);
bit( posición) : Calcula el valor del bit especificado (bit 0 es el 1, bit1 es el 2, bit2 es 4,
etc.).
bit(n);
Todas las prácticas y/o proyectos que se realicen, se tendrán que montar de forma
práctica en la placa de Arduino, sobre una placa board y/o diseñando el PCB adecuado.
RESET
“R1” en configuración pull-
PB5/SCK
PB4/MISO
53/26
52/25
51/24
~PB3/MOSI/OC2A
50/23
DIGITAL (~PWM)
PD7/AIN1
46/19
7/34 ~ PD6/AIN0
PC0/ADC0 45/18
8/35 ~ PD5/T1
PC1/ADC1 44/17
9/36
10/37
11/38
PC2/ADC2
PC3/ADC3
D1
5V (+Vcc) por la patilla digital 5 de Arduino.
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
43/16
42/15
PC4/ADC4/SDA 41/14
12/39 TX PD1/TXD
PC5/ADC5/SCL
R2
R1
El led “D1”, dispone de una resistencia RX PD0/RXD
40/13 LED-GREEN
10k
220
ARDUINO UNO R3
limitadora “R2” conectado a la patilla digital
2 de Arduino.
Una vez diseñado el circuito, lo grabaremos en la carpeta “C:\MisSketch\P1”, con el
nombre “P1.dsn”. A continuación procederemos a escribir el programa en el entorno de
Arduino y lo grabaremos con el nombre P1 en la misma carpeta.
Como recomendación siempre que tengamos código que se
encuentre entre llaves ( { , } ), insertaremos un tabulador, de
esa forma podremos tener el código más legible.
En todos nuestros proyectos, intentaremos tener siempre la
misma estructura en el programa, es decir, todas las variables
las escribiremos al principio del programa, si son globales (
“pinPulsador” y “pinLed”) y al principio de la función
correspondiente, si son locales ( “pulsador” ).
Siempre que podamos, usaremos variables para los pines que
vamos a usar, con el nombre “pin” seguido del nombre que
queramos.
Cuando dispongamos de entradas, en la función loop después
de la definición de las variables, asignaremos todas las
funciones que lean entradas (digitalRead en nuestro caso), a sus variables correspondientes
(“pulsador” en nuestro caso). Todas las funciones de salida (digitalWrite en nuestro caso),
intentaremos escribirlas al final de la función loop y entre medias de las funciones de lectura y
de escritura, incluiremos el resto de nuestro programa (decisiones, bucles, asignaciones, etc….)
Pero siempre, intentaremos que nuestro programa, bien si está escrito entero en la función
loop o bien si está escrito en varias funciones, nunca debe hacer que el microcontrolador deje
de leer las entradas o que tarde un tiempo excesivo en volver a leer las entradas, es decir, que
nuestro programa debe entrar en la función loop, llegar hasta el final donde normalmente se
encontrarán nuestras asignaciones de las salidas y volver a ejecutar la función loop.
Por tal motivo, debemos tener especial cuidado con las variables locales que se definan, ya
que siempre que comience la ejecución dela función loop, las variables locales, volverán a
inicializarse. Si usamos funciones como delay(), haremos que el microcontrolador espere un
determinado tiempo y no ejecute ninguna instrucción durante ese tiempo, por tanto, las
entradas serán leídas con un retardo y en la práctica se traduce que nuestro circuito no
responderá inmediatamente ante un evento externo, por lo tanto intentaremos no usar
funciones ni bucles de este tipo.
A continuación compilaremos nuestro sketch, ejecutando nuestro proyecto para ver el
funcionamiento.
Como podemos observar, al pulsar “P”, el Led se enciende y al soltar “P”, el led se apaga.
P. MARCHA P. PARO
reducimos el cableado en el AREF
53/26
RESET
esquema. En este caso elPB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
52/25
51/24
marcha paro
50/23
~ PB2/SS/OC1B
terminal “marcha” del~ PB1/OC1A
PB0/ICP1/CLKO
49/22
48/21
ATMEGA328P-PU
1121
DIGITAL (~PWM)
R1 R3 47/20
ANALOG IN
7/34
8/35
PC0/ADC0
pulsador es un terminal de ~
PD7/AIN1
~ PD6/AIN0
PD5/T1
46/19
45/18
marcha
paro 10k 10k
PC1/ADC1 44/17
9/36 D1 PD4/T0/XCK
10/37
11/38
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
salida que se encuentra ~ PD3/INT1
PD2/INT0
43/16
42/15
41/14
12/39 TX PD1/TXD
PC5/ADC5/SCL 40/13
R2 conectado con el terminal RX PD0/RXD LED-GREEN
220
ARDUINO UNO R3
If (pulsadorMarcha==1) { salida=1; }
If (pulsadorParo==1) { salida=0; }
Compilar el sketch, montar el circuito en una placa board y comprobar el funcionamiento real.
En las siguientes prácticas se intentará usar los mismos criterios explicados y se utilizará
preferentemente la configuración de resistencia pull-down, de forma que en el estado de
reposo, es decir sin pulsar, introduciremos un “0” al Arduino y al pulsar el pulsador, se
introducirá un “1” al arduino, pero es posible que en algún proyecto debamos usar la
configuración de resistencia pull-up.
Existen multitud de librerías que permiten dotar a arduino de nuevas funcionalidades, como
por ejemplo crear un GPS, enviar mensajes SMS, manejar pantallas LCD o TFT, etc.
Podemos crear nuestras propias librerías para no reescribir código o bien usar otras creadas
por terceras personas. En cualquier caso, una vez se dispone de ellas, hay que instalarlas.
Observación:
Otra opción es instalarlas como administrador en la carpeta donde están las librerías que trae
por defecto el software Arduino (los pasos son los mismos): /usr/share/arduino/libraries
El procedimiento para usar la librería añadida es el mismo que para usar cualquier otra
de las que vienen con Arduino por defecto:
Librerías estándar
Esplora - this library enable you to easily access to various sensors and actuators
mounted on the Esplora board.
Robot - this library enables easy access to the functions of the Arduino Robot
Bridge Library - Enables communication between the Linux processor and the Arduino
on the Yún.
Contributed Libraries
Sensing:
GFX - base class with standard graphics routines (by Adafruit Industries)
GLCD - graphics routines for LCD based on the KS0108 or equivalent chipset.
Improved LCD library fixes LCD initialization bugs in official Arduino LCD library
LedControl - for controlling LED matrices or seven-segment displays with a MAX7221
or MAX7219.
LedControl - an alternative to the Matrix library for driving multiple LEDs with Maxim
chips.
LedDisplay - control of a HCMS-29xx scrolling LED display.
Matrix - Basic LED Matrix display manipulation library
PCD8544 - for the LCD controller on Nokia 55100-like displays (by Adafruit Industries)
Sprite - Basic image sprite manipulation library for use in animations with an LED
matrix
ST7735 - for the LCD controller on a 1.8", 128x160 TFT screen (by Adafruit Industries)
Timing:
DateTime - a library for keeping track of the current date and time in software.
Metro - help you time actions at regular intervals
MsTimer2 - uses the timer 2 interrupt to trigger an action every N milliseconds.
Utilities:
Como podrá comprobar librerías existen muchas, y siguen apareciendo muchas más
a medida que van saliendo más componentes y/o shields para arduino, por lo que en este
curso nos dedicaremos a utilizar las librerías más importante y se explicarán a medida
que nos hagan falta.
Manejo de Motores
Vamos a dar un repaso breve a los distintos tipos de motores que vamos a utilizar y sus
circuitos de control más habituales. Podemos encontrarnos con motores de corriente continua
y motores de corriente alterna.
Según la construcción de las bobinas del estator, podemos distinguir dos tipos:
Bipolares :
La corriente que circula
por los bobinados cambia de
sentido en función de la
tensión que se aplica, por lo
que un mismo bobinado
puede tener en uno de sus extremos, distinta
polaridad (bipolar).
T
i
e
n
Unipolares :
Se llaman así porque
la corriente que circula por los
diferentes bobinados siempre
circula en el mismo sentido.
a3) Servomotores
Un servomotor (también llamado Servo) es un
dispositivo similar a un motor de corriente continua,
que tiene la capacidad de ubicarse en cualquier
posición dentro de su rango de operación, y
mantenerse estable en dicha posición.
Está conformado por un motor, una caja
reductora (Engranajes), un potenciómetro y un
circuito de control. Los servos se utilizan
frecuentemente en sistemas de radio control y en
robótica, pero su uso no está limitado a estos. Es
posible modificar un servomotor para obtener un
motor de corriente continua que, si bien ya no
tiene la capacidad de control del servo, conserva la fuerza, velocidad y baja
inercia que caracteriza a estos dispositivos.
Según el fabricante, el color del terminal varía, aquí expongo los fabricantes
más conocidos.
En los servos digitales, la señal está separada por unos 3,3 ms. La
separación entre pulsos varía en cada marca de servo digital, pero el ritmo de
llegada de los pulsos es de al menos 300 veces por segundo versus 50 a 100 en
un analógico.
Para que un servo pueda girar 360 º, igual que un motor c.c. pero
manteniendo el torque, debemos desmontar el sistema actual, por lo que
tenemos que quitar los cuatro tornillos que sujetan la tapa inferior del
conjunto servo y sacaremos con cuidado la tapa superior del servo que,
contiene el reductor de velocidad, en ningún momento se debe forzar ninguna
pieza, todas se desmontan sin esfuerzo.
Para que gire 360º, debemos cortar o limar el tope plástico del
engranaje, de manera que no quede ninguna rebaba ni deformar los dientes
del engranaje, en la imagen de abajo, un detalle comparativo de cómo deberá
quedar el engranaje.
Por lo tanto a partir de ahora y durante todo este manual, se aplicará este criterio y en
caso contrario se indicará debidamente.
Vamos a ver cómo usar la memoria EEPROM de Arduino para reutilizar los
datos importantes, recuperar la configuración de Arduino o incluso pasar datos de un
sketch a otro.
Cada modelo de placa posee una EEPROM distinta. con las diferentes
capacidades de las memorias EEPROM:
Programando la EEPROM
1 //Se tiene una variable compuesta por 2 bytes, por ejemplo un tipo int.
2 int A =800;
3
4 //Se crean dos variables de tipo byte para almacenar la información.
5 byte L;
6 byte H;
7
8 //Se almacenan los bytes más y menos significativos.
9 H = highByte(A);
10 L = lowByte(A);
11
12 //Se escriben los bytes en direcciones de memoria contiguas.
13 EEPROM.write(Direccion, H);
14 EEPROM.write(Direccion+1, L);
Componiendo Bytes
Crear una variable del tipo que queramos recuperar y asignarla el valor 0 (de
forma que todos sus bits seran 0).
Definir otra variable igual a la anterior (la variable auxiliar).
Leer un byte de la memoria EEPROM y almacenarla en la variable auxiliar
utilizando la instrucción OR, con lo que el byte queda almacenado en los ocho
bits menos significativos de la variable auxiliar.
Desplazar los bits de la variable auxiliar hacia la izquierda de modo que queden
en la posición que nos interese.
Realizar una nueva operación OR entre la variable auxiliar y la final.
Limpiar la variable auxiliar y repetir el proceso tantas veces como sea necesario.
P2b) Modificar el ejercicio P2a para que cuando el gancho active “Fb” se pare, pero no
Se ponga en marcha hasta que el operario vuelva a pulsar Ma.
P2c) Modificar el ejercicio P2b, añadiendo el pulsador de paro “P”, de tal forma que,
cuando se pulse “P”, el gancho deberá detenerse en cualquier lugar, esperando
que el operario pulse de nuevo “Ma”, en cuyo caso el gancho se desplazará en el
sentido en el que se había detenido.
Sensores ( I )
Luminosidad - Resistencia LDR
El rango de resistencia que nos puede dar un LDR desde la total oscuridad
hasta la plena luz, nos va a variar de un modelo a otro, pero en general oscilan entre unos 50 Ω
a 1000 Ω cuando están completamente iluminadas y entre 50 KΩ y varios MΩ cuando está
completamente a oscuras.
Una de las cosas a tener en cuenta es el tiempo que tarda en variar la resistencia
cuando cambia la luz que recibe, hay modelos con diferentes tiempo de respuestas, además
no varía de igual manera de luz a oscuridad, que de oscuridad a luz. De todas maneras, salvo
que necesitemos una respuesta de variación extremadamente rápida y precisa, el LDR nos
servirá para la mayoría de proyectos que vayamos a utilizar.
Ultrasonidos - HC-SR04
Alimentación : 5V
Angulo de sensado : 15°
Rango de distancia : 2 a 500 cm
Número de pines : 4 ( Vcc,Trig,Echo,Gnd )
Si la velocidad del sonido a 20ºC en el aire es de 343 m/s y sabiendo que el eco debe ir
y volver tardando “t” segundos. Entonces tenemos que la distancia “d” en metros es :
Para hacer una lectura con el HC-SR04 basta con seguir estos pasos :
1) Enviar un pulso de mínimo 10 µs por el pin TRIG (disparo) para iniciar la lectura.
2) El sensor enviara 8 pulsos de ultrasonido y colocara su salida ECHO a alto,
debemos detectar este evento e iniciar un "conteo de tiempo".
3) La salida ECHO se mantendrá en alto hasta recibir el eco reflejado por el obstáculo
a lo cual el sensor pondrá su pin ECHO a bajo, es decir, terminaremos de "contar el
tiempo".
4) La distancia es proporcional a la duración del pulso y podemos calcularla con las
siguientes formulas:
d (m) = (343 · t(s) ) / 2 = 171,5 · t(s)
Esto es la teoría y no nos va a hacer falta para utilizar este sensor ya que hay
una librería que nos devuelve la distancia en centímetros o en pulgadas llamada
Ultrasonic.
Después se puede comprobar que se hace uso del Monitor Serial, el cual se
comunica con Arduino a través del puerto serie RX (pin 0 de Arduino) y TX (pin 1 de
Arduino , por lo que esos pines no debemos usarlos. El puerto serie del Arduino se
comunica con el PC a través del cable USB, por lo que no debemos desconectarlo
cuando usemos el puerto serie. Además vemos que ha configurado la velocidad del
puerto serie en 9600 bps (baudios).
Esta librería tal cual viene tiene un timeout o tiempo de espera de 3 ms por lo
que la distancia máxima que medirá será de 51 cm algo escaso. La ventaja de tener un
timeout tan bajo es que se pueden hacer muchas mediciones en poco tiempo.
Podemos modificar este timeout, en el fichero “Ultrasonic.cpp”.
Nota importante :
El IDE de Arduino está en constante desarrollo, saliendo versiones nuevas cada cierto
tiempo. Hasta antes de la versión 1.0, las librerías necesitaban incluir el archivo “WProgram.h”,
pero a partir de la versión 1.0, se modificó el nombre del archivo por “Arduino.h”, y además se
incluyó varias funciones más, con la aparición del Arduino Due, se prevé que habrá una nueva
modificación, pero a fecha de hoy, aún no existe ninguna información. Muchas aplicaciones
para Arduino que encontramos por Internet se desarrollaron para las primeras versiones del
IDE de Arduino, por lo que en los ficheros “.cpp” y “.h” contienen la llamada al archivo
“WProgram.h”, si utilizamos la versión 1.0 o posterior del IDE de Arduino, al compilar nos dará
un error, indicando que no encuentra el fichero “WProgram.h”, la solución a este problema es,
editar el fichero “.cpp” o “.h” afectado, y sustituir la línea #include "WProgram.h" por
#include "Arduino.h".
Otra solución más elegante y que hará que el compilador decida por sí solo, que
fichero incluir, en función de la versión del IDE de Arduino utilizado es borrar la línea #include
"WProgram.h" y en su lugar escribir este código :
Prácticas ( III )
Vamos a utilizar una LDR, para simular una hipotética compensación lumínica
de 5 niveles, es decir, a través de una resistencia que varía su valor dependiendo de la
luz recibida, aprovecharemos dicha variación para hacer un programa que nos
encienda o apague una serie de LEDs dependiendo de si hay más luz o menos luz, esto
podríamos extrapolarlo a un sistema de regulación de luz de un jardín con cinco líneas
de luz que se vayan encendiendo según va cayendo la noche compensando
progresivamente la deficiencia de luz.
Debemos tener en cuenta que este pin lleva internamente una resistencia de
32 KΩ para evitar dañar el chip, de manera que si vamos a conectar el pin mediante
una resistencia fija, se va a producir un nuevo divisor de tensión, con lo que habrá que
calcular la resistencia adecuada para la tensión exacta que queremos introducir
mediante una sencilla fórmula :
Dónde:
Vin = Tensión que introducimos a Aref
Rinterna = Resistencia interna de Arduino de 32 KΩ
Rexterna = Resistencia mediante la cual alimentamos Aref
Vrefencia = La tensión sobre que tomará referencia nuestro programa.
Si ponemos esa referencia muy baja, empezará a funcionar los leds con menos
luz ambiente que si ponemos una señal muy alta, recordemos:
RV1
10k
+5V
50%
+88.8
Volts
ARDUINO
microcontrolandos.blogspot.com
+5V R1 D1 LED-RED
AREF 220
53/26 R2 LED-RED
PB5/SCK
52/25 D2
1
PB4/MISO
RESET 51/24
~PB3/MOSI/OC2A 220
LDR1 ~ PB2/SS/OC1B
50/23
49/22 R3 LED-RED
TORCH_LDR ~ PB1/OC1A
48/21
D3
PB0/ICP1/CLKO
ATMEGA328P-PU
1121
220
DIGITAL (~PWM)
47/20
ANALOG IN
PD7/AIN1
2
46/19 R4 LED-RED
7/34
PC0/ADC0
~ PD6/AIN0
45/18
D4
8/35 ~ PD5/T1
PC1/ADC1 44/17
9/36 PD4/T0/XCK 220
PC2/ADC2 43/16
10/37 ~ PD3/INT1
+88.8 R6 11/38
PC3/ADC3
PD2/INT0
42/15 R5 D5 LED-RED
Volts 1k PC4/ADC4/SDA 41/14
12/39 TX PD1/TXD
PC5/ADC5/SCL 40/13
RX PD0/RXD 220
ARDUINO UNO R3
Especificaciones :
Tipo de emisor infrarrojo LED
Longitud de onda λ 950 nm
Lente de diodo transparente, azul
Ángulo de visión 44°
Para nuestro propósito, podemos unir los dos emisores, con lo que tendremos el
terminal del centro que sería el colector y los otros 2 unidos que serán el emisor.
D1
Q1 1
J1 diseñar de forma que tanto los
FotoTransistor R4 2
LED_IR
470
Salida
fotodiodos como los
fototransistores se puedan colocar
en los lugares a detectar.
Rebotes
Hemos visto cómo podemos realizar la lectura del estado del pin, pero, ¿ qué pasa si
deseamos contar el número de veces que cambia de estado ?. No queremos detectar el
estado en el que se encuentra el pin sino que queremos contar el número de veces
que cambia de estado. Esto puede ser necesario cuando un mismo pulsador nos debe
determinar comportamientos diferentes o simplemente, para implementar un contador.
Una forma de minimizar los rebotes es utilizar hardware externo, por ejemplo :
Aquí podemos ver un circuito R-C conectado al circuito
típico de resistencia pull-down, de forma que cuando
accionemos el pulsador, el condensador C1, se cargará de 0V a5V
a través de R1, con una constante de tiempo Ƭ=R1 · C1, como
vemos esa señal es llevada a un inversor 7414 Trigger Smith.
Cuando llega a 1.7 V, el inversor convierte a un estado bajo que
leerá el pin del Arduino.
Cuando el pulsador se desactiva, C1 pasa de 5V a 0V. Al
llegar a 0.9V, la puerta Trigger Smith convierte ese estado a un
estado alto. Este estado alto es el que lee el pin de nuestro
Arduino.
Otra forma de minimizar el efecto de los rebotes es usar software, podemos crear un
algoritmo basado en temporizadores (millis( )…..), usando interrupciones o mediante la
siguiente función :
Como podemos
observar, la función la
he llamado antirebotes y
como parámetros de
entrada recibe una
variable de tipo byte y
devuelve el resultado
también como un byte.
Si tenemos una variable (“miVariable”) a la cual debemos quitar los rebotes, haremos
la llamada a esta función de la siguiente forma ;
if ( antirebotes ( miVariable ) )
{
…………………….
Este código, sólo se ejecuta una vez
…………………….
}
Prácticas ( IV )
D2
señal del emisor que se encontrará colocado en el R5
P0
R6
P1
R7
P2
R8
P3
R9
P4
M2
R2
220
LED-BLUE
1k 1k 1k 1k 1k
microcontrolandos.blogspot.com
En su estado de reposo, el ascensor se AREF
CABINA 53/26
ATMEGA328P-PU
1121
DIGITAL (~PWM)
R3 47/20
ANALOG IN
PD7/AIN1
1k 46/19
7/34 ~ PD6/AIN0 P4
PC0/ADC0 45/18
ARDUINO UNO R3
Como mejora, se deja como ejercicio extra, el añadir las puertas en la cabina de forma
que al llegar a la planta desde la cual se le ha llamado, se abran las puertas de la cabina. Por lo
que las puertas deben disponer de sus finales de carrera correspondientes. Además se puede
añadir una barrera de luz infrarroja en la puerta como medida de seguridad para que no se
puedan cerrar las puertas si existe algún obstáculo.
Para definir una variable de tipo char o un string, lo haremos de una de estas
dos formas :
Antes de usar los String, tenemos que incluir la librería String, de la forma
siguiente :
#include <String.h>
Al incluir esta librera, obtenemos varias funciones que podemos utilizar sobre
cualquier variable de tipo string.
StringConstructors
StringAdditionOperator
StringIndexOf
StringAppendOperator
StringLengthTrim
StringCaseChanges
StringReplace
StringRemove
StringCharacters
StringStartsWithEndsWith
StringComparisonOperators
StringSubstring
Haga click sobre el enlace de cada función para ver cómo se utilizan. En este
curso utilizaremos algunas de estas funciones.
Usaremos una shield que además de una LCD de 16x2, dispone también de 6
pulsadores, se trata del LCD Keypad Shield. Para el control se usan 4 bits.
Los pines 4, 5, 6, 7, 8, 9 y 10 son usados para la con el
LCD. El pin análogo 0 es usado para leer los 5 botones. El LCD
soporta ajuste de contraste y backlit on/off.
Esta shield, viene con una librería llamada “LCD KeyPad”, la cual se debe copiar en la
carpeta libraries del IDE de Arduino, esta librería utiliza a su vez la librería estándar de control
de LCDs llamada “Liquid Crystal”, la cual ya viene incluida por defecto en el IDE de Arduino.
Sintaxis : LiquidCrystal (Rs, Rw, Enable, d0, d1, d2, d3, d4, d5, d6, d7)
Rs : número del pin de Arduino que está conectado al pin RS del LCD
Rw : número del pin de Arduino que está conectado al pin RW del LCD
Enable : número del pin de Arduino que está conectado al pin Enable del LCD
d0, d1, d2, d3, d4, d5, d6, d7 : números de pines de Arduino que están
conectados a los correspondientes pines de datos del LCD.
d0, d1, d2, y d3 son opcionales, si se omiten, el LCD será controlado usando
solamente cuatro líneas de datos ( d4, d5, d6, d7 ).
Clear : Borra la pantalla del display LCD y posiciona el cursor en la esquina superior
izquierda.
Sintaxis : Lcd.clear( )
Sintaxis: Lcd.home( )
BASE (opcional) : La base en la que se van a imprimir los números: BIN, DEC,
OCT, HEX.
Módulo TX Módulo RX
Tensión de trabajo 3V~12V Tensión de trabajo 5.0Vdc + 0.5V
Corriente max≤40mA (12V), min≤9mA(3V) Corriente ≤ 5.5mA ( 5.0VDC )
Modulación ASK / OOK Modulación ASK / OOK
Frecuencia 315MHz - 433.92MHz Frecuencia 315MHz - 433.92MHz,
Velocidad ≤ 10 Kbps Velocidad < 9.6 Kbps
Para máxima distancia,
20-200 m ( según la tensión de
Distancia TX Distancia RX poner antena de alambre
trabajo )
de 23cm
Vienen emparejados TX y RX
Para usar estos módulos en Arduino, debemos añadir una librería llamada “RCswitch”
a la carpeta “libraries”del IDE del Arduino y nos aparecerán unos ejemplos de utilización.
Esta librería utiliza la interrupción externa 0 ( pin digital 2 ), que estudiaremos más
adelante, de momento únicamente la utilizaremos
Otra marca comercial es por ejemplo “dinuy”, cuyo catálogo de productos podemos
visualizar en : http://www.dinuy.com/
Prácticas ( V )
LCD1
LM016L Utilizaremos Putty (Software que simula
un terminal, parecido al HyperTerminal, pero de
licencia libre) para enviar un texto a nuestro
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
+5V
E
4
5
6
7
8
9
10
11
12
13
14
RIGHT
R1
2k
RV1 16x2 (módulo LCD Keypad Shield ). También se
40%
AD0
10k puede usar el Serial Monitor que viene
D8
D9
D4
D5
D6
D7
R2
+5V
UP
330
+88.8
integrado en el IDE de Arduino aunque este no
Volts
R3
ARDUINO
envía la información hasta que no se pulsa
microcontrolandos.blogspot.com
620
DOWN
ARDUINO UNO R3
AREF “Enviar”.
53/26
PB5/SCK
52/25
PB4/MISO
R4 RESET
~PB3/MOSI/OC2A
51/24
1k 50/23
LEFT
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
49/22
48/21
D9
D8
La configuración del puerto serie será :
ATMEGA328P-PU
1121
DIGITAL (~PWM)
47/20
ANALOG IN
PD7/AIN1 D7
46/19
AD0 7/34 ~ PD6/AIN0 D6
R5 8/35
PC0/ADC0
~ PD5/T1
45/18
D5
3.3k PC1/ADC1 44/17
9/36 PD4/T0/XCK D4
PC2/ADC2 43/16
SELECT 10/37
PC3/ADC3
~ PD3/INT1
42/15
11/38 PD2/INT0
PC4/ADC4/SDA 41/14
12/39 TX PD1/TXD
PC5/ADC5/SCL 40/13
RX PD0/RXD
CTS
RTS
TXD
RXD
El código ASCII :(American Standard Code for Information Interchange — Código Estándar
Americano para el Intercambio de Información ).
El código ASCII utiliza 7 bits para representar los caracteres, aunque inicialmente
empleaba un bit adicional llamado bit de paridad, que se usaba para detectar errores en la
transmisión.
Se dispone de un final de
carrera “Fc” para detectar
cunado la puerta se encuentra
cerrada, otro final de carrera
“Fa” para detectar cuando la
puerta está abierta, una barrera
de luz infrarroja, que sin
detectar ningún obstáculo, envía un “1” y cuando detecta algún obstáculo el haz de luz
infrarroja se corta enviando un “0”. La puerta en estado de reposo se encuentra cerrada y
accionando “Fc”, cuando un vehículo quiere entrar o salir, el conductor envía una señal de
radiofrecuencia de 433,92 MHz modulado en ASK y la puerta se abre hasta accionar “Fa”. En
ese momento un temporizador comienza a contar.
Si transcurren “t” segundos sin que “FIR” detecte algún obstáculo, la puerta debe
cerrarse.
Si mientras se está cerrando “FIR” detecta algún obstáculo o algún conductor pulsa el
mando a distancia, la puerta debe abrirse.
Si no hay ningún obstáculo que corte el haz de luz infrarroja y el mando a distancia no
se pulsa, la puerta debe cerrarse completamente, accionando a “Fc” y quedando en reposo
hasta una nueva pulsación del mando a distancia.
Si mientras la puerta está abierta, accionando “Fa”, la barrera infrarroja “FIR” detecta
algún obstáculo, no debe de transcurrir ningún tiempo “t”, empezando a contar en el instante
que “FIR” deje de detectar el obstáculo. Para simular el mando a distancia, utilizar un pulsador,
tal que cuando se pulse, se supone que se ha pulsado el mando y se ha transmitido el código
correctamente.
Se debe modificar la variable “Código Permitido” por el código del mando a distancia
de RF utilizado, para ello se debe visualizar en el Monitor Serial el código que se transmite
cuando se pulsa el pulsador del mando y substituir “ long CodigoPermitido=263507; “ por el código
transmitido por el mando RF.
Sensores ( III )
Este sensor DHT11 nos va a servir para medir tanto la humedad relativa como la
temperatura. Lo malo de este sensor es que solo nos va a dar medidas enteras, es decir sin
decimales, ya que la resolución que
presenta es de 1% para la humedad relativa
y de 1ºC para la temperatura.
Puede medir la humedad entre el rango 20% – 90% y la temperatura entre el rango
0ºC – 50ºC.
La conexión del sensor a Arduino (sensor solo sin módulo), debemos añadir una
resistencia de pull-up :
El segundo es alimentación de
los sensores mediante una fuente de
alimentación externa conectada a la
patilla VDD del DS18B20, y la patilla
GND al pin GND de Arduino.
Para utilizar este componente en Arduino, debemos añadir las librerías “OneWire” y
“DallasTemperature” dentro de la carpeta “Libraries”.
Prácticas ( VI )
Pero antes de estudiar la shield de Ethernet, necesitamos saber el lenguaje HTML que
és en el que se basan las páginas webs.
Podemos utilizar algún programa del tipo Dreamweaver u otro similar en el que
podamos sin tener conocimientos de HTML realizar una página WEB en modo diseño y
posteriormente mediante un botón, visualizar el código que dicho programa ha generado para
crear el fichero HTML correspondiente.
Está basada en el chip ethernet Wiznet W5100. Soporta hasta cuatro conexiones de
sockets simultáneas.
Usa la librería Ethernet para escribir programas que se conecten a internet usando la
shield. La ethernet shield dispone de unos conectores que permiten conectar a su vez otras
placas encima y apilarlas sobre la placa Arduino.
Importante :
Podemos observar que la shield Ethernet, dispone de una pegatina en la parte inferior,
donde nos indica la MAC (Media Access Control, "control de acceso al medio") es un
identificador de 48 bits (6 bloques hexadecimales) que corresponde de forma única a una
tarjeta o dispositivo de red. Se conoce también como dirección física. Más información en :
http://es.wikipedia.org/wiki/Direcci%C3%B3n_MAC
Las shields que no dispongan de ninguna pegatina indicando la MAC, se puede asignar
una MAC al azar, pero todas las MAC de los dispositivos de la red local deben ser distintas.
También podemos observar que el Ethernet Shield dispone de un conector para alojar
una tarjeta de memoria microSD, la cual podemos usarla para almacenar o leer los datos que
queramos.
Para analizar con más detalle este shield, se adjunta un documento en el curso,
llamado “Arduino + Ethernet Shield”, en el cual se estudia con mayor detalle.
Prácticas ( VII )
P7a) Servidor Web : Control de un dispositivo desde una página Web HTML.
Lo que vamos a crear con el Ethernet Shield, es un servidor Web, el cual nos
proporcionará el código HTML para poder verlo en nuestro navegador y poder, así, interactuar
con él.
Un servidor sirve información a los ordenadores que se conecten a él. Cuando los
usuarios se conectan a un servidor, pueden acceder a programas, archivos y otra información
del servidor.
Para acceder a la página Web que creemos, deberemos acceder con una dirección IP
perteneciente a nuestra red, que será la que le hayamos asignado al Ethernet Shield. En el
código que podréis ver más abajo, veréis que la dirección IP que he asignado es
192.168.0.200/24.
Es la máscara de red, al ser /24, quiere decir que tendremos 24 bits a ’1′ y 8 a
’0′, es decir, que será 255.255.255.0.
P7b) Control automático de la temperatura de una habitación con visualización por Web.
Comentarios finales
Para finalizar comentaré que cada día surgen nuevas aplicaciones, nuevos proyectos,
nuevos módulos y nuevas investigaciones acerca de Arduino que hace que esta placa tenga
mucha aceptación sobre todo en la Docencia, ya que con poco esfuerzo es posible realizar
proyectos bastante atractivos.
Los alumnos de este nivel, cuando comienzan a realizar proyectos con sensores,
motores, finales de carrera, relés, móviles, etc…. adquieren una alta motivación y esto conlleva
a que el alumnado se interese por el módulo e incluso algunos alumnos adquieren por su
cuenta la placa Arduino, shields, módulos y componentes electrónicos para realizar proyectos
individuales en su hogar.
Bibliografía
Instalaciones Domóticas.
Molina
McGraw-Hill
Instalaciones Domóticas.
Miguel Moro Vallina
Paraninfo
Principios de electrónica.
Malvino
McGraw-Hill
Arduino : http://www.arduino.cc/
BricoGeek : http://blog.bricogeek.com/
Arduteka : http://www.arduteka.com/arduino/
INDICE DE PRÁCTICAS