Archivo de la categoría: Arduino Day

Arduino y IoT

Que es el IoT

Internet de las cosas (en inglés Internet of things, abreviado IoT) es un concepto que se refiere a la interconexión digital de objetos cotidianos con Internet.

Definición de wikipedia: https://es.wikipedia.org/wiki/Internet_de_las_cosas

Arduino es un elemento que nos permite de forma sencilla y económica conectar cualquier cosa a Internet. Con un Arduino y un sencillo módulo ethernet o wifi podemos conectar a Internet sensores para informar, controlar motores o bombillas desde cualquier parte del mundo o mandar un SMS o email cada vez que se abra la puerta de casa.

Como afecta IoT a nuestro dia a dia: http://socialgeek.co/tecnologia/8-formas-que-the-internet-of-things-impactara-dia-dia

IoT en 5 minutos con Arduino: http://hackaday.com/2016/01/08/internet-of-things-in-five-minutes/

Aplicaciones de IoT: https://temboo.com/iot-applications

Temboo es una plataforma de IoT que nos permite conectar fácilmente mediante una API un Arduino con Internet, mostrar los datos recogidos e interactuar con ellos desde un navegador web.

Una visión del IoT aplicado a la industria es lo denominado como Industria 4.0 o Industria conectada o IIoT que deriva del concepto de M2M (machine to machine) que se refiere al intercambio de información o comunicación en formato de datos entre dos máquinas remotas sin necesidad de conexión a Internet sino que puede ser en una red privada y crear una industria inteligente donde todos los elementos están interconectados y comparten los datos.

Definiciones de wikipedia:

Diferencias entre IoT y M2M: https://www.pubnub.com/blog/2015-01-02-iot-vs-m2m-understanding-difference/

Telefónica y IoT: http://www.thinkingthings.telefonica.com/

El coche autónomo, en el que trabajan grupos como Google, BMW, Volvo o Tesla, es toda una proeza de la robótica.La conducción autónoma se basa en las comunicaciones máquina a máquina (M2M), por las que los vehículos pueden intercomunicarse con las señales, los semáforos y los otros automóviles. Todo esto también tiene mucho que ver con las smart cities.

Elementos que intervienen en el IoT

Explicación gráfica de los elementos necesarios en IoT: http://www.libelium.com/products/meshlium/wsn/

  • Qué quieres medir?
  • Cómo lo quieres conectar?
  • Qué quieres hacer con los datos?

Elementos en IoT:

  • Plataformas Software, para tratar los datos recogidos por nuestros sensores y almacenarlos. Pueden ser plataformas de terceros o plataformas propias desarrolladas por nosotros o simplemente guardar en BBDD propias. Por ejemplo: Carriots, Thingspeak, Temboo, Thinger, etc…
    Además todas estas plataformas SW que están en la nube, deben estar soportadas por un HW de servidores, unas BBDD de gran capacidad y una infraestructura segura que los hospede.
  • Servicios, son los servicios que ofrecen las plataformas como mostrar los datos recogidos, mandar avisos cuando se detecte un evento o la interconexión con otras plataformas o simplemente. Servicios ofrecidos por la plataforma carriots: https://www.carriots.com/que-es-carriots

A modo de resumen, estos son los elementos en el IoT:

Sensor — MCU — Comunicación — Protocolo — Plataforma — Servicios

Uno de los retos del IoT es mandar datos de cualquier sensor a través de cualquier protocolo a cualquier plataforma de forma inalámbrica y usando la menor energía posible (baterías) y todo esto mediante una comunicación segura.

Proyectos de IoT con Arduino

Ahora vamos a conectar Arduino a Internet o a cualquier otro tipo de red, es este caso usaremos ethernet y WiFi.

Cliente Web Arduino

Arduino puede navegar y obtener datos de Internet.

Explicación: https://www.arduino.cc/en/Tutorial/WebClient

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio25-EthernetClient

NOTA: poner cada una una MAC y una IP diferente para que funcione. Para usar DHCP simplemente usar Ethernet.begin(mac).

También puedo obtener la fecha y hora de Internet mediante NTP: http://www.arduino.cc/en/Tutorial/UdpNtpClient

También puedo leer los datos de temperatura y humedad de aemet.es y mostrarlo por pantalla: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_1-Estacion_Meteorologica_Mejorada

Web Server embebido en Arduino

Instalar un servidor web embebido en Arduino y conectarse a Arduino a través de un navegador. El servidor muestra los valores leídos en las entradas analógicas y refresca el valor cada 5 segundos.

Explicación: http://www.arduino.cc/en/Tutorial/WebServer

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio26-EthernetServer

También puedo encender el built-in led desde una web embebida: https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Ejercicio27-Boton/Ejercicio27-Boton.ino

También se puede controlar los leds de un neopixel mediante una web en un Arduino Yun: https://github.com/jecrespo/NeoPixel

En este caso la web está en un servidor web del sistema operativo openWRT basado en linux y al interactuar con él la librería bridge se encarga de comunicar internamente linux con el microcontrolador del Arduino Yun.

Webserver con Ajax

Mediante Ajax podemos actualizar los datos de la web embebida en Arduino sin necesidad de cargar toda la web, sino solo mandando los datos actualizados, economizando los datos mandados a través de la red.

Ajax:

Ejemplo del webserver anterior que muestra los datos de las entradas analógicas pero con Ajax.

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_9-Servidor_Web_%20Embebido/EthernetServer-Ajax

Ejemplo avanzado de regulador de encendido con ajax, ejercicio 42: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio42-Ajax

Grabar datos de Arduino en un Ordenador (datalogger)

Con Arduino conectado a una red, se pueden recoger los datos (datalogger) y mandarlos a un servidor (p.e. una Raspberry Pi) y guardarlos en una Base de Datos. Con estos datos almacenados podemos mostrarlos, analizarlos, etc…

Grabar Datos leídos por Arduino en la entrada analógica A0 y grabarlos en una BBDD dentro de una Raspberry Pi o de un servidor público.

Arduino llama a un servicio (p.e. en PHP) pasándole las variables que quiero almacenar y ese servicio se encarga de grabar en la BBDD que puede estar en el mismo servidor.

Métodos POST y GET de HTTP: http://www.w3schools.com/tags/ref_httpmethods.asp

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_10-Grabar_Raspberry

BBDD: https://qvm602.aprendiendoarduino.com o IP Raspberry Pi

NOTA: modificar el sketch de Proyecto_10-Grabar_Raspberry.ino para que grabe solo el valor de la entrada analógica y el nº de Arduino con el de vuestro puesto. Probar a grabar tanto en la Raspberry Pi como en el servidor público www.aprendiendoarduino.com en la ruta que se indique.

Mandar mensajes de Arduino y visualizarlos en tiempo real

Arduino solicita un nombre y un mensaje que escribimos en el puerto serie y lo manda a un servidor. Desde el servidor vemos los mensajes en tiempo real. Por ejemplo serviría para enviar alarmas a un sistema de monitorización cuando Arduino detecta un evento (pulsar un botón, abrir una puerta, etc…).

Visualizar los mensajes: http://www.aprendiendoarduino.com/servicios/ o IP Raspberry Pi

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_10-Grabar_Mensajes

NOTA: el código de Arduino Proyecto_10-Grabar_Mensajes.ino tiene doserrores al compilar y no error al ejecutar, detectarlos y corregirlos. Veamos quién es el primero en mandar un mensaje.

Uso de plataformas de IoT con Arduino

Podemos usar de forma gratuita diversas plataformas para conectar nuestro Arduino con ellas y usarlas para mostrar datos, responder a ciertos eventos, realizar acciones, etc…

Algunas plataformas existentes son:

Más proyectos con Arduino en: https://aprendiendoarduino.wordpress.com/2015/04/16/tema-5-taller-de-proyectos-con-arduino/

Y para finalizar…

Recordad que para aprender más sobre Arduino hay muchos cursos y documentación en Internet y los cursos de http://www.aprendiendoarduino.com/.

Y también en las redes sociales:

Y todas las novedades sobre Arduino, futuros eventos, cursos, etc… mediante correo electrónico en la lista: http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias

Proyectos

ArduinoCommunityLogo_EPS

Vamos a experimentar con Arduino y comprobar su funcionamiento. El procedimiento a seguir en cada práctica es:

  • Entender que vamos a hacer y leer la documentación de las instrucciones que se van a usar.
  • Leer el código del sketch y tratar de entender lo que hace. No es necesario entender todo al 100% pero tenemos que intentar comprender lo que hace el programa según el enunciado.
  • Copiar el sketch y cargarlo en Arduino
  • Ejecutar el sketch y abrir el monitor serie. Comprobar cómo funciona.
  • Hacer pequeños cambios en el sketch para cambiar el comportamiento y comprobar si cambia el comportamiento según lo esperado.

Leer una entrada digital

Leer el estado de la entrada digital 2 (pin 2) y mandar por el puerto serie su estado.

Explicación: http://www.arduino.cc/en/Tutorial/DigitalReadSerial

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio04-DigitalReadSerial

Tabla ASCII

Escribir por el puerto serie la tabla ASCII con el carácter y su valor en decimal, hexadecimal, octal y binario.

Explicación: http://www.arduino.cc/en/Tutorial/ASCIITable y tabla ascii: http://www.asciitable.com/

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio06-ASCII

Regular la intensidad del built-in led

Regular la intensidad del led en función del valor que escribamos desde el monitor serie. Arduino va a leer los datos que recibe del puerto serie. A mayor valor más intensidad.

Instrucciones usadas:

Código ejemplo sencillo: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio07-dimmer

Instrucciones usadas:

Código mejorado: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio07b-dimmer_mejorado

Leer una entrada analógica

Leer de una entrada analógica y sacar por el puerto serie el valor leído y también el voltaje que está leyendo. Luego escribir en el built-in led el valor correspondiente a lo leído.

Explicación: http://www.arduino.cc/en/Tutorial/AnalogReadSerial

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio11-Analog

Blink sin delay

Hacer el programa blink pero sin usar la instrucción delay() ya que su uso supone que no es posible hacer otra cosa durante el tiempo que dura el delay.

Explicación y código: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Instrucciones usadas:

Otra opción usando librerías: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio19-BlinkSinDelay

Análisis de caracteres

Otro ejemplo más de lectura puerto serie: http://www.arduino.cc/en/Tutorial/CharacterAnalysis

Memoria Arduino

Medir el tiempo en milisegundos que tarda Arduino en leer de la memoria RAM un texto grande y luego escribirlo por el puerto serie y luego hacer lo mismo pero el texto está guardado en la memoria flash.

Al compilar fijarse en lo que ocupa la memoria dinámica.

Ver la macro F: https://www.arduino.cc/en/Reference/PROGMEM

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Otros/velocidadMemoria

Más información sobre la memoria de Arduino en: https://aprendiendoarduino.wordpress.com/2015/03/29/memoria-flash-sram-y-eeprom/

EEPROM

Leer y borrar la EEPROM de nuestro Arduino.

Leer: https://www.arduino.cc/en/Reference/EEPROM

Código:

Más ejemplos de Arduino en los built-examples que están en el IDE y están documentados en: http://www.arduino.cc/en/Tutorial/BuiltInExamples

Uso de Arduino en I+D

Veamos un ejemplo de uso de Arduino en una empresa riojana para desarrollo de nuevos productos. Artículos aparecidos en prensa:

Si analizamos los dispositivos que se ven en la imagen:

Presentación Taller Arduino Day 2016

GENUINODAY_banner_720x300

Toda la documentación está liberada con licencia Creative Commons: Reconocimiento – No Comercial – Compartir Igual (by-nc-sa): No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Aprendiendo Arduino by Enrique Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Comunidad Arduino

ArduinoCommunityLogo_EPS

Un factor del éxito de Arduino ha sido la comunidad que está apoyando este proyecto y que día a día publica nuevo contenido, divulga y responde a las dudas. En Internet hay disponible todo tipo de cursos, tutoriales, herramientas de consulta, proyectos, etc… que ayudan a que se pueda usar Arduino con facilidad.

El primer sitio donde empezar para trabajar con Arduino es http://www.arduino.cc/ y despues seguir por el playground de Arduino.

Arduino playground es un wiki donde todos los usuarios de Arduino pueden contribuir. Es el lugar donde publicar y compartir código, diagramas de circuitos, tutoriales, trucos, cursos, etc.. y sobretodo el lugar donde buscar cuando tengamos dudas, un problema, una librería adecuada para nuestro proyecto, etc… Es la base de datos de conocimiento por excelencia de Arduino.

Arduino playground: http://playground.arduino.cc/

Algunos apartados importantes en playground.

Foro Arduino: http://forum.arduino.cc/. Otro lugar donde poder buscar información y preguntar las dudas que tengamos.

Más lugares donde resolver nuestras dudas o buscar soluciones a nuestros problemas:

También podemos seguir a Arduino en las redes sociales:

Otro lugar de encuentro de la comunidad son diversos portales donde se publican proyectos con Arduino:

Por último, también hay espacios locales para la comunidad, son los llamados hacklabs hackerspace, makerspace, etc.. que aunque hay ciertas diferencias entre unos y otros, se trata de un sitio físico donde gente con intereses en ciencia, nuevas tecnologías, y artes digitales o electrónicas se puede conocer, socializar y colaborar. Puede ser visto como un laboratorio de comunidad abierta, un espacio donde gente de diversos trasfondos puede unirse. Pone al alcance de aficionados y estudiantes de diferentes niveles la infraestructura y ambiente necesarios para desarrollar sus proyectos tecnológicos.

Hacklab: https://es.wikipedia.org/wiki/Hacklab

Mejores prácticas Hackerspaces: https://elplatt.com/new-hackerspace-design-patterns

Listado de Hackerspaces: https://hackerspaces.org/wiki/List_of_ALL_Hacker_Spaces

También hay otro espacio local algo diferente que son los fablabs: es un espacio de producción de objetos físicos a escala personal o local que agrupa máquinas controladas por ordenadores.

Fablab: https://es.wikipedia.org/wiki/Fab_lab

Qué es un fablab: http://fab.cba.mit.edu/about/charter/

Este podcast explica las diferencias entre estos espacios: http://make.cesargarciasaez.com/2016/02/01/la-hora-maker-010-fablabs-makespaces-hackerspaces-y-hacklabs/

Simulador Arduino

Fritzing es el programa por excelencia para la realización de esquemas eléctricos en proyectos con Arduino. Es software open source. Dispone bibliotecas con la mayoría de componentes (http://fritzing.org/parts/), incluido por supuesto los propios Arduinos, placas de conexiones, led, motores, displays, etc. Además permite hacer esquemas eléctricos, diseñar nuestro PCB final… un sinfín de opciones que convierten a este programa en una herramienta muy útil.

También nos permitirá obtener el esquema eléctrico, listado de componente usados y el diagrama para poder fabricar la PCB. Luego podemos solicitar que nos hagan la pcb con el servicio Fritzing Fab: http://fab.fritzing.org/fritzing-fab. Por ejemplo, nos permitiría diseñar un shield propio.

También podemos explorar proyectos: http://fritzing.org/projects/

Para aprender más sobre Fritzing: http://fritzing.org/learning/

Fritzing no es un simulador, pero las nuevas versiones de Fritzing permite guardar el código de un diseño e incluso cargarlo en Arduino.

Web Principal: http://fritzing.org/home/

Descarga: http://fritzing.org/download/

Solicitar fabricar diseño realizado con Fritzing: http://fab.fritzing.org/fritzing-fab

123D Circuit.io: Herramienta online gratuita de Autodesk que permite dibujar esquemas de forma similar a Fritzing. Además permite simulación de circuitos, e incluso podemos realizar la “programación virtual” de las placas Arduino y comprobar el funcionamiento, es un simulador online.

Una genial iniciativa que, de momento, aún tiene unos cuantos problemas. La simulación es lenta y como programa de dibujo sigue siendo mejor Fritzing. No obstante, una aplicación muy interesante que desde luego merece la pena echar un vistazo.

Web principal que merece la pena ser visitada y ver todo lo que ofrece: http://123d.circuits.io/

Web del simulador: http://www.123dapp.com/circuits

Una herramienta muy interesante que ofrece 123d.circuits es el debugger, con ella podemos parar la ejecución de un programa y ver los valores de las variables, algo que con arduino no podemos hacer.

Los ejemplos de #aprendiendoarduino para parcticar: https://123d.circuits.io/users/127626/designs

Para más información consultar la ayuda: https://support.circuits.io/hc/en-us

Otras herramientas: existen muchas otras herramientas para diseño de circuitos y pcbs, así como para simulación.

Práctica: Simulación en 123d.circuits.

Librerías (Gestor de Librerías)

Las librerías son trozos de código hechos por terceros que usamos en nuestro sketch. Esto nos facilita mucho la programación y hace que nuestro programa sea más sencillo de hacer y de entender. Debemos ser capaces de buscar una librería, instalarla, aprender el funcionamiento y usarla en un sketch.

Las librerías son colecciones de código que facilitan la interconexión de sensores, pantallas, módulos electrónicos, etc. El entorno de arduino ya incluye algunas librerías de manera que facilita, por ejemplo, mostrar texto en pantallas LCD.

Existen infinidad de librerías desarrolladas por terceros en internet con sus correspondientes forks, que nos ayudarán a conectar prácticamente cualquier dispositivo a los Arduinos de forma muy sencilla.

Las librerías normalmente incluyen los siguientes archivos comprimidos en un archivo ZIP o dentro de un directorio.

  • Un archivo .cpp (código de C++)
  • Un archivo .h o encabezado de C, que contiene las propiedades y métodos o funciones de la librería.
  • Un archivo Keywords.txt, que contiene las palabras clave que se resaltan en el IDE (opcional).
  • Muy posiblemente la librería incluye un archivo readme con información adicional de lo que hace y con instrucciones de como usarla.
  • Directorio denominado examples con varios sketchs de ejemplo que nos ayudará a entender cómo usar la librería (opcional).

Como instalar librerías: http://arduino.cc/en/Guide/Libraries

Hay varios métodos de instalar librerías:

  • Mediante el IDE de Arduino de forma automática. Admite la instalación desde un fichero zip o desde una carpeta ya descomprimida.

instalar libreria

  • Instalación Manual. Descomprimiendo en un directorio la librería y copiandolo en el directorio de librerías. Generalmente Mis Documentos – Arduino – libraries, pero la ruta se define desde propiedades. En esta ruta se guardan las librerías “contribuidas por el usuario” como lo denomina el IDE.
  • Desde el gestor de librerías. A partir de la versión 1.6.2 del IDE de Arduino se incorpora el gestor de librerías que facilita el trabajo. Esta herramienta es accesible desde Programa → Incluir Librería → Gestionar Librerías. Desde aquí podemos ver las librerías instaladas, buscar librerías disponibles, instalar librerías y actualizarlas.
    Esta herramienta también nos permite gestionar las librerías instaladas manualmente.
    Desde C:\Users\nombre_usuario\AppData\Local\Arduino15, podemos ver en formato json el listado de librerías y placas disponibles desde el gestor de librerías y tarjetas.

Este enlace explica como actualizar una librería: https://github.com/firmata/arduino#updating-firmata-in-the-arduino-ide—arduino-164-and-higher

El propio IDE de Arduino ya trae integradas varias librerías, pero además podemos descargar otras e incorporarlas a nuestro IDE y luego usarlas en nuestros programas.

Las librerías instaladas por nosotros se guardan en el directorio indicado desde las preferencias del IDE.

2016-03-19 (7)

El listado de librerías incluidas en el IDE y algunas de terceros podemos verlo en este enlace y acceder a la documentación de cada una de ellas para saber como usarlas: http://arduino.cc/en/Reference/Libraries

La librerías incluidas en el IDE tienen ejemplos para comprender su uso. Toda la información en: http://www.arduino.cc/en/Tutorial/LibraryExamples

Por ejemplo, la librería para trabajar con pantallas LCD. En este enlace está la ducumentación para el uso de esta librerías así como los métodos que nos facilita para trabajar con este tipo de pantallas: http://arduino.cc/en/Reference/LiquidCrystal

En el Arduino Playground también tenemos un listado mucho más amplio de librerías, ordenadas por categorías: http://playground.arduino.cc/Main/LibraryList

También tenemos información de como interactuar con diferente HW en http://playground.arduino.cc/Main/InterfacingWithHardware y un conjunto de ejemplos y snippets para usar con Arduino en http://playground.arduino.cc/Main/InterfacingWithHardware

IMPORTANTE: Para añadir una librería a nuestro proyecto simplemente se añade a nuestro código la palabra clave #include seguido del nombre de la librería.

Para finalizar con las librerías, generalmente cada dispositivo que compramos, shield, sensor, actuador, etc… viene con su propia librería que debemos instalar para poder usarlo. Estas librerías podemos verlas, modificarlas o incluso añadir funcionalidades.

Por ejemplo si compramos una sonda de temperatura y humedad de tipo DHT11 como esta: http://www.adafruit.com/product/386, para usarla necesitaremos su libreria correspondiente.

En la web del fabricante o el vendedor deberemos tener disponible la librería y el datasheet del dispositivo, en este caso.

Práctica: Instalar mediante cualquiera de los tres métodos la librería MSTimer2:

Ver los ejemplos incluidos en la librería MSTimer2 y como hacer el programa blink con MSTimer2.

Primer programa/sketch de Arduino

En lugar del clásico “hola mundo” que es el primer programa cuando se aprende un lenguaje de programación, en Arduino el equivalente es el sketch blink.

Nuestro primer programa será hacer parpadear el led integrado que lleva Arduino (built-in led).

Este es el esquema a usar, pero el led marcado como L está también conectado al pin 13 (en el caso del Arduino UNO) y no es necesario poner un led adicional.:

Pasos a seguir:

  • Abrir la aplicación Arduino
  • Abrir el ejemplo blink

blink

  • Seleccionar la placa y el puerto adecuado

blink2

  • Cargar el programa pulsando el botón “subir”. El programa se compilará y luego se verá parpadeando los leds Tx y Rx de Arduino, indicando que se está cargando el fichero binario (.hex) en la flash del Arduino. Cuando aparezca el mensaje “subido” habremos acabado.
  • Unos segundos después veremos el LED parpadeando.

Una explicación completa del proyecto y enlaces a las funciones usadas está en: http://arduino.cc/en/Tutorial/Blink

Constantes definidas en el IDE Arduino: https://www.arduino.cc/en/Reference/Constants

Demos un paso más y modifiquemos el sketch para que parpadee más rápido y más lento. Modificar el valor de delay y volver a compilar y subir a Arduino.

Vamos a ampliarlo y modificar el programa para que cada vez que encienda y apague saque por el puerto serie la cadena “encendido”, “apagado” cuando corresponda. Luego guardarlo en nuestro entorno de trabajo.

Será necesario usar la librería Serial: http://arduino.cc/en/Reference/Serial

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Ejercicio01-Blink/Ejercicio01-Blink.ino

El IDE trae muchos ejemplos que podemos ver y probar: https://www.arduino.cc/en/Tutorial/BuiltInExamples