2-ARDUINO Aprendiendo Arduino
2-ARDUINO Aprendiendo Arduino
Ver los directorios de configuración del software de Arduino, para ello entrar en el
menú Archivo → preferencias
Windows: https://www.arduino.cc/en/Guide/Windows
Mac OSX: http://arduino.cc/en/Guide/MacOSX
Linux: https://www.arduino.cc/en/Guide/Linux y http://playground.arduino.cc/Learnin
g/Linux
Recientemente se ha liberado una versión del IDE para dispositivos Linux con HW
basados en ARM como Raspberry Pi: http://hackaday.com/2016/04/12/arduino-comes-to-
the-raspberry-pi-linux-arm-devices/ y otra versión como app de
windows: https://www.microsoft.com/es-es/store/p/arduino-ide/9nblggh4rsd8
NOTA: para usuarios de linux/debian, el IDE Arduino está en los repositorios oficiales, pero
instalará una versión antigua del IDE. Por lo tanto aunque funcione “apt-get install arduino
“, es recomendable hacer la instalación según https://www.arduino.cc/en/Guide/Linux. Para
ver qué versión se instalará desde el repositorio oficial usar el comando “apt-cache
showpkg arduino”
Actualizar el IDE de Arduino
Para actualizar una versión anterior del IDE de Arduino, el procedimiento es el mismo que
el de una instalación inicial, puesto que el instalador detecta una versión anterior y la
desinstala manteniendo todas nuestras configuraciones, librerías y sketches anteriores.
En caso que queramos mantener varias versiones del IDE en el mismo ordenador,
simplemente hacemos la instalación manual en directorios diferentes y las configuraciones,
librerías y sketches son compartidas por las diferentes versiones del IDE instaladas.
A la hora de actualizar, el instalador de Arduino lo que hace es borrar toda la ruta completa
donde hemos instalado Arduino e instala la nueva versión. Por lo tanto cualquier
modificación o librería instalada en el directorio de instalación se perderá en la
actualización.
Es importante que cualquier sketch que hagamos y cualquier librería que instalemos se
haga en la ruta indicada en las propiedades, de esta forma mantendremos nuestra
configuración al actualizar el IDE.
https://aprendiendoarduino.wordpress.com/2017/06/18/instalacion-software-arduino/
Aprendiendo Arduino
Aprendiendo a manejar Arduino en profundidad
HW Arduino a Fondo
Deja un comentario
SRAM: donde Arduino crea y manipula las variables cuando se ejecuta. Es un recurso
limitado y debemos supervisar su uso para evitar agotarlo.
EEPROM: memoria no volátil para mantener datos después de un reset o apagado. Las
EEPROMs tienen un número limitado de lecturas/escrituras, tener en cuenta a la hora de
usarla.
Flash: Memoria de programa. Usualmente desde 1 Kb a 4 Mb (controladores de familias
grandes). Donde se guarda el sketch.
http://arduino.cc/en/Tutorial/Memory
https://aprendiendoarduino.wordpress.com/2015/03/29/memoria-flash-sram-y-eeprom/
Operating Voltage 5V
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
http://www.pighixxx.com/test/
https://www.kickstarter.com/projects/pighixxx/abc-basic-connections-the-essential-book-
for-maker
HW de Arduino a fondo: https://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-uno-
faq
Más información:
http://tallerarduino.com/2013/06/28/arduino-pinout-y-conexiones-basicas/
https://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-uno-faq
Si nos fijamos en el pequeño integrado que hay en la placa de Arduino UNO junto al conector USB,
se trata de un ATmega16u2 cuya misión es dar el interfaz USB al Arduino UNO y comunicar los
datos con el ATmega328p mediante el puerto serie. Se podría usar como microcontrolador
completamente funcional y no solo un conversor de USB a Serial con ciertas modificaciones.
Podríamos usar ambas MCUs en la misma placa, pudiendo descargar trabajo de la MCU principal en
la secundaria.
HoodLoader2: https://github.com/NicoHood/HoodLoader2
Además usaremos el microcontrolador ATmega16U2 para poder programar y conectar por USB el
módulo ESP8266 ESP-01 que disponemos para prácticas.
En este esquema estamos conectando directamente los puertos Tx y Rx del ATmega16u2 con los del
ESP8266 (puertos serie), de forma que el ATmega16U2 hace de conversor USB a TTL para poder
acceder al ESP8266 desde USB. Debe tenerse en cuenta que el ATmega328p de Arduino también
está conectado a Tx y Rx, por lo que habrá que tener cargado algún programa que no use la UART
de Atmega328p (cualquiera que con tenga Serial.begin).
En este pdf podemos ver el esquema de un Arduino UNO, muy importante conocerlo para evitar
hacer maniobras que lo dañen: http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
También es importante conocer cómo están distribuidos los pines del MCU en Arduino:
Pin Mapping: http://arduino.cc/en/Hacking/PinMapping168
http://www.umsats.ca/wp-content/uploads/2013/02/Arduino_uno_Pinout.pdf
http://pighixxx.com/atmega328v3_0.pdf
http://pighixxx.com/unov3pdf.pdf
Y más pinout de diversas placas, MCUs, etc… http://www.pighixxx.com/test/pinoutspg/
Para saber todo sobre el HW de Arduino ver este tutorial donde desglosa todo el HW de Arduino
para construir un Arduino UNO desde cero y crear tu propio
clon: https://rheingoldheavy.com/category/education/fundamentals/arduino-from-scratch-series/
Diseño PCB Arduino
La placa de Arduino:
Están disponible los esquemas y diseño en formato Eagle para Arduino UNO
en http://arduino.cc/en/uploads/Main/arduino_Uno_Rev3-02-TH.zip. Por supuesto para el resto de
Arduinos también disponemos de sus diseños de PCB.
Para ver los esquemas podemos usar Eagle, se trata de un programa de diseño de diagramas y PCBs
con autoenrutador:
http://www.cadsoftusa.com/eagle-pcb-design-software/product-overview/
Versión Freeware http://www.cadsoftusa.com/download-eagle/freeware/
La versión freeware de Eagle es perfecta para diseños pequeños y sencillos, se trata de una licencia
para uso no comercial y gratuita para todos. La versión freeware tienen todas las funcionalidades de
la versión de pago pero tiene ciertas limitaciones:
PRÁCTICA: Instalar eagle y ver algunos de los planos de arduino que nos podemos descargar y ver
algunos ejemplos. También probar a modificar algún elemento de los planos.
Webinar de Eagle: https://www.youtube.com/watch?v=2aFNypxILu0
Para programación en tiempo real el HW a utilizar es el Arduino, para programación intensiva con
gran cantidad de datos usaríamos una Raspberry Pi o un PC.
En un proyecto grande la elección es usar ambos, cada uno en la tarea que mejor hace. Por ejemplo,
la recolección de datos, supervisión del entorno, envío de alarmas, accionar motores, etc.. lo
dejaremos para el arduino, el tratamiento de los datos recogidos, el interfaz gráfico de usuario, envío
de correos, etc… lo dejaremos para un ordenador o una raspberry pi o similar.
CPU
Memorias RAM y ROM
Velocidad de Operación
Tamaño
Costes
Interferencias (ruido)
Tiempo de desarrollo
El uso de una u otra tecnología depende del fin que se espera, pues debido a sus características
propias, los microcontroladores y los microprocesadores pueden adquirir variados y diferentes
espacios de implementación, por ejemplo, los microprocesadores se han desarrollado
fundamentalmente orientados al mercado de los ordenadores personales y las estaciones de trabajo,
pues allí se requiere una elevada potencia de cálculo, el manejo de gran cantidad de memoria y una
gran velocidad de procesamiento. Mientras que los microcontroladores están concebidos
fundamentalmente para ser utilizados en aplicaciones puntuales, es decir, aplicaciones donde el
microcontrolador debe realizar un pequeño número de tareas, al menor costo posible. En estas
aplicaciones el microcontrolador ejecuta un programa almacenado permanentemente en su memoria,
el cual trabaja con algunos datos almacenados temporalmente e interactúa con el exterior a través de
las líneas de entrada y salida de que dispone.
Microprocesadores Microcontroladores
con lo que tiene (datos) y su algoritmo o programa Es una de sus partes principales, la cual se encarga de
RAM y ROM para su óptimo funcionamiento. Las incluye en un solo circuito integrado.
Velocidad de
Microprocesador está constituida por un un solo Circuito Integrado por lo que implica una gran
Microprocesador, una memoria RAM, una memoria ventaja en varios factores, como por ejemplo, la
ROM, un decodificador de direcciones, lo cual lo disminución en el tamaño del circuito impreso por la
Para el Microprocesador, el costo es muy alto en la El costo para un sistema basado en Microcontrolador es
cableado externo que lo hace más propenso al El alto nivel de integración reduce los niveles de
Raspberry Pi es un ordenador de placa reducida o (placa única) (SBC) de bajo coste, desarrollado en
Reino Unido por la Fundación Raspberry Pi. El diseño incluye un System-on-a-chip Broadcom
BCM2837, que contiene un procesador central (CPU) ARM1176JZF-S a 1.2 GHz quad-core
ARMv8, un procesador gráfico (GPU) VideoCore IV, y 1GB de memoria RAM.
Los sistemas operativos soportados son distribuciones Linux para arquitectura ARM, Raspbian
(derivada de Debian), RISC OS 5, Arch Linux ARM (derivado de Arch Linux) y Pidora (derivado de
Fedora)
Web principal: http://www.raspberrypi.org/
Especificaciones
técnicas: http://es.wikipedia.org/wiki/Raspberry_Pi#Especificaciones_t.C3.A9cnicas
Raspberry Pi:
GPIO:
Más información: https://aprendiendoarduino.wordpress.com/2016/06/25/arduino-vs-raspberry-pi-2/
Salida TV:
https://code.google.com/p/arduino-tvout/
http://playground.arduino.cc/Main/TVout
https://code.google.com/archive/p/arduino-tvout/wikis/FunctionalDescription.wiki
http://www.instructables.com/id/TV-Out-with-Arduino/
Pantalla tactil: http://tienda.bricogeek.com/shields-arduino/521-arduino-tft-touch-shield-
v20.html
Teclado: http://playground.arduino.cc/code/Keypad,http://abedulengenharia.blogspot.com.e
s/2011/07/arduino-y-teclado-3×4.html
Separar los procesos en diferentes MCUs, mejor con chips específicos, pero se puede hacer
usando varios microcontroladores, uno ejecuta el SO, otros acceso a disco (controladora),
otro muestra datos por pantalla (tarjeta gráfica), tarjeta de sonido, etc…
Disco Duro, leer y escribir ficheros. Acceso a una tarjeta SD. El sketch compilado se podría
guardar en una tarjeta SD y un bootloader adecuado podría leer de la tarjeta SD y cargarlo
en la memoria de programa para ejecutarlo. Ver ejemplo http://baldwisdom.com/bootdrive/
Sistema Operativo: un sketch diseñado para interaccionar con el HW y poder correr
aplicaciones sobre el. Ver http://antipastohw.blogspot.com.es/2009/11/4-operating-systems-
for-arduino.html
A principios de 1970 TI produjo el primero de los microcontroladores el TMS 1000. Aunque Intel
hizo anteriormente el microcontrolador de 4 bits Intel 4004, necesitaba de una circuitería externa
para funcionar, por lo que el TMS 1000 es considerado el primer microcontrolador completo en un
chip.
También los valores que pueden tomar las variables dependen del tamaño de la
palabra. http://es.wikipedia.org/wiki/Palabra_%28inform%C3%A1tica%29
Arduino Due: http://www.arduino.org/products/boards/4-arduino-boards/arduino-due
Arduino 101: https://www.arduino.cc/en/Main/ArduinoBoard101
Arduino ZERO: https://www.arduino.cc/en/Main/ArduinoBoardZero
Arduino MKR1000: https://www.arduino.cc/en/Main/ArduinoMKR1000
ESP8288: http://espressif.com/en/products/hardware/esp8266ex/overview
STM32F103C8: http://wiki.stm32duino.com/index.php?title=Blue_Pill
setup() – http://arduino.cc/en/Reference/Setup
loop() – http://arduino.cc/en/Reference/Loop
setup() es la parte encargada de recoger la configuración y loop() es la que contiene el programa que
se ejecuta cíclicamente (de ahí el término loop –bucle-). Ambas funciones son necesarias para que el
programa trabaje.
La función de configuración (setup) debe contener la inicialización de los elementos y esta función
sólo se ejecuta una vez justo después de hacer el reset y no se vuelve a ejecutar hasta que no haya
otro reset. Es la primera función a ejecutar en el programa y se utiliza para configurar, inicializar
variables, comenzar a usar librerías, etc…
La función bucle (loop) contiene el código que se ejecutará continuamente (lectura de entradas,
activación de salidas, etc). Esta función es el núcleo de todos los programas de Arduino y se usa para
el control activo de la placa. La función loop se ejecuta justo después de setup.
Una vez tenemos el programa hay que compilarlo y mandarlo a Arduino para que se ejecute de
forma infinita.
Pasos a seguir:
En arduino para tratar las entradas y salidas digitales usamos las siguientes funciones:
En la imagen siguiente se muestra el estado por defecto de una I/O digital en un microcontrolador de
Arduino. Se ha simplificado con interruptores la compleja electrónica que hay dentro. Por defecto
los digital I/O pins están configurados como inputs en un estado de alta impedancia (equivalente a
una resistencia de 100 Mohms en frente del pin), es decir, SW3 a ON y no hace falta llamar a la
función pinMode() aunque es recomendable para aclarar el código.
PinMode(x, INPUT) –> SW3 = ON (resto a OFF). Los valores leídos serán aleatorios si el
pin de Arduino está al aire. El pin está en un estado de alta impedancia (resistencia de 100
Mohms).
PinMode(x,INPUT_PULLUP) –> SW3 = ON & SW4 = ON (resto a OFF). Los valores
leídos sin nada conectado al pin es HIGH. La Resistencia R1 tiene un valor dependiendo del
microcontrolador, pero tiene un valor entre 20kOhm y 150kOhm.
PinMode(x, OUTPUT) & digitalWrite(x,HIGH) –> SW2 = ON & SW1 = +5V (resto a
OFF). Estado de baja impedancia, no hay resistencia interna y es necesario poner una
resistencia adecuada a la salida el pin para no superar los 40mA (source) máximos
admitidos
PinMode(x, OUTPUT) & digitalWrite(x,LOW) –> SW2 = ON & SW1 = GND (resto a
OFF). Estado de baja impedancia, no hay resistencia interna y es necesario poner una
adecuada para no superar los 40mA (sink) máximos admitidos
En arduino para tratar las entradas y salidas digitales usamos las siguientes funciones:
PWM
Arduino Uno tiene entradas analógicas que gracias a los conversores analógico digital puede
entender ese valor el microcontrolador, pero no tiene salidas analógicas puras y para solucionar esto,
usa la técnica de PWM.
Las Salidas PWM (Pulse Width Modulation) permiten generar salidas analógicas desde pines
digitales. Arduino Uno no posee salidas analógicas puras.
La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-width
modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo
de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea para transmitir
información a través de un canal de comunicaciones o para controlar la cantidad de energía que se
envía a una carga.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el
período. duty cycle = (tiempo que la salida está a uno o HIGH)/ (periodo de la función)
Una vez instalado el el IDE, configurado y conocido como es el entorno, podemos instalar las
prácticas que haremos en el curso y verlas en nuestro entorno de trabajo para acceder a ellas más
rápidamente.
¿Que es github? https://es.wikipedia.org/wiki/GitHub
GitHub es una plataforma de desarrollo colaborativo para alojar proyectos utilizando el sistema
de control de versiones Git. El código se almacena de forma pública, aunque también se puede hacer
de forma privada, creando una cuenta de pago.
Git es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y
la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número
de archivos de código fuente.
Para saber más sobre Git y Github
ver:https://aprendiendoarduino.wordpress.com/2017/07/03/c
ontrol-de-versiones/
Kit de Prácticas
Deja un comentario
Las prácticas de este curso están diseñadas para usar con los elementos disponibles en el kit de
prácticas. Todo el material entregado es en préstamo y debe cuidarse al máximo, a la hora del
montaje de las prácticas se seguirán las instrucciones para evitar dañar los componentes.
Todos los Kits, Arduinos y Shields en préstamo tienen un número de serie entre el 1 y 21. A cada
alumno se le asignará uno de ellos y es el que usará durante todo el curso.
Se entregará una hoja de préstamo de material que deberá estar rellenada con el número de kit
entregado y firmada. Al final del curso se entregará otra hoja de devolución de material
comprobando que todo el material está correcto.
Cada alumno tiene su propio kit con el número de kit. Recordad este número porque se usará durante
las prácticas.
Arduino UNO
El Arduino que usaremos durante el curso es el Arduino UNO. Es el Arduino más conocido y usado.
Arduino UNO: https://www.arduino.cc/en/Main/ArduinoBoardUno
Un shield es una placa de circuito modular que se montan unas encima de otras para dar
funcionalidad extra a un Arduino. Esta Shields son apilables.
Durante el curso usaremos el Ethernet Shield para conectar Arduino a una red interna o a Internet.
Componentes:
El Arduino Starter Kit viene con un libro de ejercicios, es posible ver este libro en castellano en la
url: http://www.slideshare.net/TinoFernndez/libro-de-proyectos-del-kit-oficial-de-arduino-en-
castellano-completo-arduino-starter-kit-arduino-projects-book
En esta lista de youtube hay varios video tutoriales de los proyecto propuestos por el Arduino Starter
Kit: https://www.youtube.com/playlist?list=PLT6rF_I5kknPf2qlVFlvH47qHvqvzkknd
Arduino Leonardo
También disponemos de 10 unidades de Arduino Leonardo incluidos en el Kit
XBee: http://www.digikey.es/product-detail/en/digi-international/XKB2-AT-WWG/602-1550-
ND/5271212
Arduino Leonardo es otro de los Arduinos más usados y tiene como principal característica que el
propio microcontrolador ya integra el interfaz USB.
Disponemos de otros módulos que aunque no se usarán en este curso, puesto que son para el curso
avanzado, están disponibles y si hay alguien interesado puede verse su uso y funcionamiento.
Programador
FTDI: http://www.tinyosshop.com/index.php?
route=product/product&product_id=600
Kit XBee: http://www.digikey.es/product-
detail/en/digi-international/XKB2-AT-WWG/602-
1550-ND/5271212
Datasheet: http://media.digikey.com/pdf/Dat
a%20Sheets/Digi%20International
%20PDFs/XBee_Arduino_Compatible_Coding_Platform.pdf