Archivo de la etiqueta: Wemos D1 mini

Prácticas: Funciones Definidas por Usuario

Montaje Arduino UNO:

Montaje Wemos:

Ejercicio15 – Funciones

Hacer un menú interactivo con Arduino. Con todo lo visto anteriormente, hacer un ejemplo de un menú interactivo donde se dan 4 opciones y pulsando cada una de ellas se ejecuta una acción concreta. Si el valor pulsado no es ninguna de las opciones avisar y volver a mostrar el menú hasta que se pulse una opción correcta. Usar funciones para cada una de las opciones.

Opciones:

  • 1 – Encender led siguiente (paso por referencia la posición del led)
  • 2 – Sacar por pantalla el LCD que está encendido
  • 3 – Sonar el buzzer 5 segundos
  • 4 – Fin (entra en un bucle infinito y no sale)

Solución: https://codeshare.io/5NYRvm

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio15-Funciones

Ejercicio16 – Función Detecta flanco

Señales digitales:

Hacer una función que detecte flancos ascendentes y otras flancos descendentes, para ser reutilizada en otros proyectos.

Unificar estas dos funciones en una única función llamada detectaFlanco() donde le paso el pin y devuelve 1 si es flanco ascendente, -1 si es flanco descendente y 0 si no hay cambio de estado.

Ponerla en un ejemplo con alguno de los botones, usando este loop:

 
void loop() {
  int flanco = detectaFlanco(PIN_BOTON_A);
  if (flanco == 1)
    Serial.println("flanco ascendente");
  if (flanco == -1)
    Serial.println("flanco descendente");
}

Solución: https://codeshare.io/amkrV1

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio16-Funcion_Detecta_Flanco

Ejercicio17 – Función Detecta flanco dos pines

Para ejercicio detecta flanco, probar la función con los dos botones en los pines 2 y 3. La función detecta flanco solo funciona con un pulsador, pero cuando se intenta usar con dos pulsadores ya no funciona. Comprobar porqué.

Solución: https://codeshare.io/5NYrqr

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio17-Funcion_Detecta_Flanco_2Pines

La función para detectar flanco es la base para luego entender las clases y objetos y luego las librerías.

La solución es crear un objeto detecta flanco, para ello crear una clase y se puede distribuir mediante una librería como https://github.com/jecrespo/Detecta_Flanco_Libreria que se puede descargar desde https://github.com/jecrespo/Detecta_Flanco_Libreria/releases/tag/Version_1.0:

#include <DetectaFlanco.h>
#define PIN_BOTON_A 2
#define PIN_BOTON_B 3

DetectaFlanco df1(PIN_BOTON_A);
DetectaFlanco df2(PIN_BOTON_B);

void setup() {
  Serial.begin(9600);
  df1.inicio(INPUT_PULLUP);
  df2.inicio(INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int flanco1 = df1.comprueba();
  int flanco2 = df2.comprueba();

  if (flanco1 == 1)
    Serial.println("Flanco asc A");

  if (flanco1 == -1)
    Serial.println("Flanco desc A");

  if (flanco2 == 1)
    Serial.println("Flanco asc B");

  if (flanco2 == -1)
    Serial.println("Flanco asc B");

  delay(50); //Evitar rebotes
}

Ejercicio18 – Dado Digital

Usando las funciones de números aleatorios hacer un dado digital que genere un número aleatorio entre 1 y 6 y encienda un led aleatorio cada vez que se pulse el botón A. Usar el montaje del Wemos D1 mini

Usar la función de detección de flanco hecha en el anterior ejercicio.

Random Numbers

  • randomSeed() – Inicializa el generador de número pseudo-aleatorios
  • random() – Genera números pseudo-aleatorios

Paso 1 – Generar un valor aleatorio entre 1 y 6 al pulsar el botón

Paso 2 – Hacer girar el anillo led haciendo el efecto y que baje la velocidad

Paso 2 – Dejar fijo el nuevo número aleatorio

Solución: https://codeshare.io/anmypv

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio18-Dado

Prácticas: Variables y Tipos de Datos en Arduino

Montaje Arduino UNO:

Montaje Wemos:

Ejercicio07 – Ámbito Variables

Ámbito de las variables en C++

Ejercicio07: Mover el servo mediante el botón A. Para ello cada vez que se pulse mover 10 grados y cuando llegue a 170 grados volver a la posición inicial de 10 grados.

Usar una una variable llamada “grados” que aumente su valor cada vez que se detecte un flanco ascendente. Hacerlo como variable local y global.

Hacer una función “detectaFlanco” que use una variable local para detectar flanco.

Sacar por el puerto serie el ángulo que está, por la pantalla LCD y por el Serial Plotter

Solución: https://codeshare.io/GAoV7v

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio07-Ambito_Variables

Ejercicio08 – Puntuaciones

Hacer un programa,de forma que muestre por la pantalla LCD el valor del LDR y un contador de puntos. Al pulsar un botón A, acumule el valor del LDR multiplicado por 10 hasta un máximo de 8 pulsaciones y luego empiece en cero. Ver quién consigue más puntos. ¿Quién llegará a 80000 puntos?

Solución: https://codeshare.io/5OY4ZP

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio08-Puntuaciones

Ejercicio09 – Puntuaciones Wemos

Adaptar el código del Ejercicio09-Puntuaciones_Wemos para el Wemos D1 Mini con la pantalla oled.

Comprobar cómo adaptar un código de una placa a otra y con componentes diferentes

NOTA: conectar el LDR al pin A0 del Wemos D1 Mini

Solución: https://codeshare.io/5eey47

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio09-Puntuaciones_Wemos

Prácticas: Ejemplos Sencillos Programación Arduino

Hacer unos ejemplos sencillos de programación para evaluar el conocimiento de cada alumno con el montaje de prácticas.

Todos los ejercicios se subirán al repositorio llamado “Curso Programacion Arduino 2019” de cada alumno haciendo un commit y un Pull.

Luego todos los alumnos podrán ver las soluciones propuestas por cada uno y comprobaremos que para un mismo problema hay muchas soluciones diferentes. También el profesor pondrá su solución (no tiene porque ser la mejor) y hacer correcciones a los códigos propuestos por los alumnos.

Montaje Arduino UNO:

Montaje Wemos:

Ejercicio03 – Leer LDR y mostrar Gráfica

Ejercicio03. Leer el valor del LDR cada 500ms y mostrarlo por el Serial Monitor y Serial Plotter. Usar delay para grabar cada 500ms.

También calcular el máximo y mínimo, mostrándolo por la pantalla LCD. Usar las funciones:

Esto nos puede servir para calibrar un elemento y conocer su máximo y mínimo para luego en función de esos valores regular otro elemento como la intensidad de un LED.

Solución: https://codeshare.io/5zeYvb

Hacer commit y pull del código en el repositorio de cada alumno “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio03-LDR

Ejercicio04 – Contar pulsos

Ejercicio04. Contar las veces que se pulsa (flanco ascendente) del botón A y B y mostrar por el monitor serie el total de pulsaciones de ambos botones cada vez que cambia el valor de alguno de los contadores.

Mostrar también los datos por la pantalla LCD.

Solución: https://codeshare.io/ad9x4Z

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio04-Cuenta_Pulsos

Ejercicio05 – Mover Servo

Ejercicio05. Mover el servo entre las posiciones de 10º a 170º en función del valor leído en el potenciómetro.

Imprimir por la pantalla LCD la posición del servo.

Solución: https://codeshare.io/G86LVD

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio05-Servo

Ejercicio06 – Contar Pulsos Wemos D1 Mini

Ejercicio06. Contar las veces que se pulsa el pulsador y mostrar por la pantalla oled el número de pulsaciones y el tiempo entre pulsaciones.

También crear un servidor web que muestre los datos de pulsaciones. 

Solución: https://codeshare.io/axwpzN

Hacer commit y pull del código en el repositorio “Curso Programacion Arduino 2019” que esté en una carpeta llamada Ejercicio06-Cuenta_Pulsos_Wifi

Montaje Prácticas

Para el curso vamos a usar un entorno de trabajo fijo con diversas entradas y salidas analógicas y digitales, que una vez montado se usará en diferentes prácticas.

Para hacer el montaje se usará una protoboard por separado y no la protoboard que viene con el kit de Arduino. Este montaje no se desmontará durante todo el curso.

Esquemas fritzing disponibles en: https://github.com/jecrespo/aprendiendoarduino-Curso_Programacion_Arduino_2019/tree/master/Esquemas%20Montajes%20Pr%C3%A1cticas%20Fritzing

Montaje Arduino UNO

Elementos:

  • PIN 2: Botón A. Resistencia pullup interna
  • PIN 3: Botón B. Resistencia pulldown externa
  • PIN 4: LED 1
  • PIN 5: LED 2 (PWM)
  • PIN 6: LED 3 (PWM)
  • PIN 7: LED 4
  • PIN 8: Buzzer
  • PIN 9: Servo
  • PIN 11: Sonda DHT11
  • PIN A0: Potenciómetro (Usar potenciómetro grande)
  • PIN A1: LDR
  • I2C (Pines SDA – A4 y SCL – A5): Pantalla LCD I2C

Montaje Wemos D1 Mini

Pines Wemos D1 Mini: https://steve.fi/Hardware/d1-pins/

Elementos:

Botones/Pulsadores

Botón A con resistencia pull-up interna.

Botón B con resistencia de pull-down externa de 10 Kohms

NOTA: Muy buen tutorial para entender las resistencias de pullup y pulldown http://www.instructables.com/id/Understanding-the-Pull-up-Resistor-With-Arduino/ 

LEDs

Un LED al ser un diodo tiene una caída de tensión que depende del tipo y del color del LED. Para usar un LED es imprescindible poner una resistencia adecuada a cada led. Según la ley de ohm: V = I * R, si el voltaje es de 5 V y queremos que al LED sólo le lleguen entre 5 mA (0.005 A) y 20 mA (0.02 A), entonces usar una resistencia entre 250 y 1000 ohms.

Circuito LED: https://es.wikipedia.org/wiki/Circuito_de_LED 

La fórmula a usar para calcular el valor correcto de la resistencia del circuito es:

Donde:

  • Voltaje de la fuente de alimentación, es el voltaje aplicado al circuito (5 voltios en el caso de Arduino)
  • Caída de voltaje del LED, es el voltaje necesario para el funcionamiento del LED, generalmente está entre 1.7 y 3.3 voltios, depende del color del diodo y de la composición de metales.
  • Rango de corriente del LED, es determinado por el fabricante, usualmente está en el rango de unos pocos miliamperios. A más corriente más iluminación. Para Arduino el valor máximo será de 20 mA.

Buzzer

Zumbador, buzzer en inglés, es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente

El zumbador usado es: https://www.arduino.cc/documents/datasheets/PIEZO-PKM22EPPH4001-BO.pdf

Para usar el buzzer usaremos la función Tone() de Arduino. Tone() genera una onda cuadrada de una frecuencia específica y con un 50% de duty cycle en el pin especificado. La duración del tono puede ser especificado o en caso contrario continúa hasta llamar a la función noTone().

Para más información: Función tone(): https://www.arduino.cc/en/Reference/Tone

Servomotor

Servomotor (o también llamado servo) es similar a un motor de corriente continua pero con la capacidad de posicionarse en una posición determinada y permanecer fija en esta. Normalmente el ángulo es de 0 a 180 grados y se alimentan a 5 voltios mínimo.

Para controlar un servo, se usa el PWM. La mayoría de los servos trabaja en una frecuencia de 50 Hz (20ms). Cuando se manda un pulso, la anchura de este determina la posición angular del servo. La anchura varía según el servomotor pero normalmente es entre 0,5ms a 2,5ms.

En Arduino se utiliza la librería <Servo.h> para controlar los servos y generar las señales adecuadas para manejarlos. Dispone entre otras de las siguientes funciones:

Potenciómetro

Un potenciómetro es una resistencia cuyo valor de resistencia es variable. De esta manera, indirectamente, se puede controlar la intensidad de corriente que fluye por un circuito si se conecta en paralelo, o la diferencia de potencial al conectarlo en serie.

LDR

Se trata de un sensor que actúa como una resistencia variable en función de la luz que capta. A mayor intensidad de luz, menor resistencia: el sensor ofrece una resistencia de 1M ohm en la oscuridad, alrededor de 10k ohm en exposición de luz ambiente, hasta menos de 1k ohm expuesto a la luz del sol.

El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:

Donde Vout es el voltaje leído por el PIN analógico del Arduino y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.

El LDR que usamos: Photoresistor [VT90N2 LDR]

Sensor DHT11

Sensor de humedad y temperatura DHT11. Es lo suficientemente exacta para la mayoría de los proyectos que necesitan hacer un seguimiento de las lecturas de humedad y temperatura. Es unas de las sondas más populares.

Parámetros del producto:

  • Humedad relativa:
    • Resolución: 16 bits
    • Repetibilidad: ±1% H.R.
    • Precisión: 25 ° C ± 5% hr
    • Histéresis: < ± 0.3% RH
    • Estabilidad a largo plazo: < ± 0.5% hr / año
  • Temperatura:
    • Resolución: 16 bits
    • Repetibilidad: ±0. 2 ° C
    • Precisión: 25 ° C ± 2° c
  • Características eléctricas
    • Fuente de alimentación: DC 3.5 ~5.5V
    • Corriente: medición 0.3mA
    • Espera 60μA
    • Periodo de muestreo: más de 2 segundos
  • Descripción pines:
    • VDD alimentación 3,5~5.5V DC
    • serie de datos, un solo bus
    • NC, pin vacío
    • GND tierra, la energía negativa

Datasheet y protocolo sonda DHT11: https://akizukidenshi.com/download/ds/aosong/DHT11.pdf

Librerías:

Pantalla LCD I2C

Pantalla LCD I2C. La pantalla tiene una retroiluminación de LED y puede mostrar dos filas con hasta 16 caracteres en cada fila.

El controlador de LCD I2C es un dispositivo que nos permite controlar una pantalla a través del bus I2C, usando únicamente dos cables.

Librería LiquidCrystal_I2C del gestor de librerías: https://github.com/marcoschwartz/LiquidCrystal_I2C

La dirección I2C por defecto del módulo puede ser 0x3F o en otros casos 0x27. Es muy importante identificar correctamente la dirección I2C de nuestro módulo, pues de otra forma nuestro programa no funcionará correctamente. Para identificar la dirección específica de nuestro módulo podemos utilizar un pequeño sketch de prueba llamado: I2C Scanner, el cual nos permite identificar la dirección I2C del dispositivo conectado al Arduino.

Más información: https://www.naylampmechatronics.com/blog/35_Tutorial–LCD-con-I2C-controla-un-LCD-con-so.html

Wemos D1 Mini

Wemos son una serie de placas de prototipado con chip ESP8266 integrado para conexión WiFi. Hay varios modelos y la página web oficial es https://www.wemos.cc/

Vamos a usar la Wemos D1 Mini: https://wiki.wemos.cc/products:d1:d1_mini 

Shields Wemos D1 Mini

Fritzing parts: https://github.com/mcauser/Fritzing-Part-WeMos-D1-mini-Shields

Relay Shield

Web: https://wiki.wemos.cc/products:d1_mini_shields:relay_shield

Por defecto usa el pin D1, pero es configurable.

Wemos RGB LED Shield

Web: https://wiki.wemos.cc/products:d1_mini_shields:rgb_led_shield

Por defecto usa el pin D4, pero es configurable.

NOTA: La shield led RGB de un pin va al pin D2: https://wiki.wemos.cc/products:d1_mini_shields:ws2812b_rgb_shield

Wemos mini Oled Shield

Web: https://wiki.wemos.cc/products:d1_mini_shields:oled_shield

Pantalla I2C – Pines SDA – D2 y SCL – A1

Librería Pantalla: https://github.com/mcauser/Adafruit_SSD1306/tree/esp8266-64×48

Librería Botones: https://github.com/wemos/LOLIN_OLED_I2C_Button_Library (En la versión disponible para prácticas no dispone de los botones)

Características

  • Screen Size: 64×48 pixels (0.66” Across)
  • Operating Voltage: 3.3V
  • Driver IC: SSD1306 (I2C Address: 0x3C or 0x3D)
  • 2x I2C Button (customizable I2C Address, default:0x31)

Ejercicio01 – Testeo del Circuito Arduino

Para comprobar que todo funciona ejecutar el programa de testeo. Para ello coger el código de https://github.com/jecrespo/aprendiendoarduino-Curso_Programacion_Arduino_2019/blob/master/Ejercicio01-Comprueba_Entorno_Arduino/Ejercicio01-Comprueba_Entorno_Arduino.ino.

Todo el código que haga cada alumno lo guardará en su repositorio de github llamado: “Curso Programacion Arduino 2019”. Cada ejercicio se guardará en un directorio con el nombre EjercicioXX y dentro el código.

Pasos a seguir:

Ejecutar todos los test del Ejercicio01 y comprobar que funciona todo correctamente.

En caso que algo no funcione a lo largo del curso, usar este sketch para comprobar que la parte hardware funciona correctamente.

Tests:

  • 1 – Muestra Texto Pantalla
  • 2 – Prueba Botones (comprobar pulsaciones correctas)
  • 3 – Prueba LEDs (Iluminación LEDs)
  • 4 – Prueba PWM LEDs (No todos los LEDs son PWM)
  • 5 – Prueba Potenciómetro (comprobar que va de 0 a 1023)
  • 6 – Prueba LDR (ver valores máximo y mínimo. Anotarlos)
  • 7 – Sonda temperatura (comprueba valores) DHT11
  • 8 – Test Servo (comprobar el movimiento completo)
  • 9 – Test Buzzer (comprobar sonido)

IMPORTANTE: después de ejecutar los test o mientras se ejecutan, leer el código, entenderlo y preguntar todo aquello que no se entienda.

NOTA:  Las funciones de testeo de cada componente se pueden usar como plantilla para los ejercicios propuestos a lo largo del curso.

Ejercicio02 – Testeo del Circuito Wemos D1 Mini

Pasos a seguir:

Ejecutar todos los test del Ejercicio02 y comprobar que funciona todo correctamente.

Código: https://github.com/jecrespo/aprendiendoarduino-Curso_Programacion_Arduino_2019/blob/master/Ejercicio02-Comprueba_Entorno_ESP8266/Ejercicio02-Comprueba_Entorno_ESP8266.ino

En caso que algo no funcione a lo largo del curso, usar este sketch para comprobar que la parte hardware funciona correctamente.

Tests:

  • 1 – Muestra IP Arduino
  • 2 – Test Cliente Web (comprobar respuesta del servidor)
  • 3 – Test Servidor Web (comprobar servidor embebido en Arduino)
  • 4 – Prueba Pulsador (comprobar pulsaciones correctas)
  • 5 – Prueba Relé Shield
  • 6 – Prueba Neopixel Shield
  • 7 – Prueba Pantalla Oled Shield

Shields Arduino

Las shields son placas de circuitos modulares que se montan unas encima de otras para dar funcionalidad extra a un Arduino. Esta Shields son apilables.

Las shields se pueden comunicar con el arduino bien por algunos de los pines digitales o analógicos o bien por algún bus como el SPI, I2C o puerto serie, así como usar algunos pines como interrupción. Además estas shields se alimenta generalmente a través del Arduino mediante los pines de 5V y GND.

En muchos casos nos encontraremos que los shields vienen sin soldar las patillas o en algunos casos sin algunos componentes soldados.

Cada Shield de Arduino debe tener el mismo factor de forma que el estándar de Arduino con un espaciado de pines concreto para que solo haya una forma posible de encajarlo.

Debemos tener en cuenta que cuando instalemos un shield, habrá que leer su documentación que nos dirá si inhabilita algunas de los pines I/O o si usa un bus y que requisitos tiene para su utilización. Generalmente las shields vienen con un ejemplo o una librería para su uso.

En algunos casos los shields pueden tener el pineado que no permite apilar más.

Ejemplo de 25 shields útiles: https://randomnerdtutorials.com/25-arduino-shields/

Todas las shields de Arduino pueden verse en:

Ethernet Shield V1

Web: https://www.arduino.cc/en/Main/ArduinoEthernetShieldV1

Esta shield ha sido retirada en sustitución de la Ethernet Shield V2 https://www.arduino.cc/en/Main/ArduinoEthernetShield

Este Shield es el usado en el curso.

La placa Arduino se comunica con el módulo W5100 y la micro-SD utilizando el bus SPI (mediante el conector ICSP). Esto se encuentra en los pines digitales 11, 12 y 13 en el modelo UNO y en los pines 50, 51 y 52 del modelo MEGA. En ambas placas, el pin 10 es utilizado para seleccionar el W5100 y el pin 4 para la micro-SD. Estos pines no pueden ser utilizados para otros fines mientras la Ethernet Shield esté conectada. El en MEGA, el pin SS (53) no es utilizado pero debe dejarse como salida para que el bus SPI funcione correctamente.

Ethernet Shield 2

Web: https://www.arduino.cc/en/Main/ArduinoEthernetShield

Se trata de una versión mejorada del Ethernet Shield V1 con el chip ethernet W5500 en lugar del W5100. Aporta mejoras a la versión 1 y se usa con la librería ethernet2 en lugar de la librería ethernet. https://www.arduino.cc/en/Reference/Ethernet

Chip W5500: http://wizwiki.net/wiki/lib/exe/fetch.php?media=products:w5500:w5500_ds_v106e_141230.pdf

Arduino Wifi Shield

Web: http://arduino.cc/en/Main/ArduinoWiFiShield

Permite conectar un Arduino a Internet mediante Wifi y hace uso de la librería WiFi Library http://arduino.cc/en/Reference/WiFi. También dispone de un slot para una tarjeta micro SD.

Este shield se comunica con Arduino a través del bus SPI mediante los pines ICSP y usa los pines 4 y 10 al igual que la Shield Ethernet. También hace uso del pin 7 que no puedes ser usado.

Debe tenerse en cuenta que dado que la tarjeta SD y la wifi usan el mismo bus SPI, no pueden trabajar simultáneamente, lo que es un punto importante durante la programación si usamos ambos periféricos. Esta tarjeta también dispone de unos interfaces en placa para actualizaciones de firmware y diagnósticos.

Este shield ya está descatalogado y ha sido sustituido por el Arduino WiFi Shield 101

Arduino WiFi Shield 101

Web: https://www.arduino.cc/en/Main/ArduinoWiFiShield101

Este nuevo shield es una mejora de la anterior wifi shield desarrollada junto con Atmel que usa el módulo WINC1500 y también añade funciones de cifrado hardware gracias al chip de cifrado ATECC508A diseñado para el mercado de IoT. Los pines 5 y 7 son usados por este shield.

Usa una nueva librería llamada WiFi101 https://www.arduino.cc/en/Reference/WiFi101 que también usan otros Arduinos con wifi integrado como el MKR1000. Esta librería es muy compleja y ocupa más del 60% de la memoria disponible en el Arduino UNO, dejando poco espacio para los sketches. Si se van a realizar programas complejos, este shield es recomendable usarlo con Arduino Zero, 101 o Mega.

Arduino GSM Shield V2

Web: http://arduino.cc/en/Main/ArduinoGSMShield

Esta placa sustituye a la GSM Shield V1: https://www.arduino.cc/en/Main.ArduinoGSMShieldV1

Conecta Arduino a Internet mediante GPRS, usando una tarjeta SIM. También permite enviar y recibir mensajes y llamadas de voz (SMSs)

Telefónica presentó la nueva versión del proyecto Arduino GSM/GPRS Shield, un dispositivo que incorpora conexión GPRS/GSM a una placa base de hardware libre, dando como resultado un dispositivo de bajo coste conectado gracias a la tecnología machine to machine (M2M) de Telefónica. ¿El fin? Abrir nuevas posibilidades para que el llamado internet de las cosas pueda prosperar de forma sencilla y económica con la colaboración de Arduino.

Como cualquier otro elemento de Arduino, está disponible la documentación de HW y SW y es open source. Usa los pines 2 y 3 (software serial) y el pin 7 (reset), pero hay una serie de condicionantes para su uso con los Arduinos Mega, Yun y Leonardo debido a que los pines que se usan para comunicar deben tener implementada interrupción en el pin 2.

Para su uso es necesaria la librería GSM Library: http://arduino.cc/en/Reference/GSM

En este caso por el consumo de esta shield, se hace necesario alimentar a Arduino mediante una fuente externa y no desde el USB ya que no es capaz de proporcionar suficiente energía. También es posible hacer llamadas de voz haciendo unas pequeñas modificaciones, añadiendo un micrófono y un altavoz.

Arduino Motor Shield

Web: http://arduino.cc/en/Main/ArduinoMotorShieldR3.

Permite manejar dos motores DC, controlando su dirección y velocidad. Está basado en un chip de doble puente H L298:

Como veremos en este curso manejaremos un motor DC con otro integrado de puente H el L293 (http://www.ti.com/lit/ds/symlink/l293.pdf), pero este shield nos facilita mucho su uso.

Este shield usa dos canales y cada canal usa 4 pines, en total nos ocupa 8 pines del Arduino

Un módulo con el mismo puente H pero sin formato shield: http://tienda.bricogeek.com/motores/285-controlador-de-motores-doble-puente-h-l298.html

Arduino 4 Relay Shield

Web: https://www.arduino.cc/en/Main/Arduino4relayShield

Este shield permite usar 4 relés para manejar cargas mayores de las que soporta Arduino. Soporta cargas de hasta 2A a 30V DC

Nuevas Shields Incorporadas Recientemente

MKR Relay Proto Shield

Web: https://www.arduino.cc/en/Main/MKRRelayProtoShield

Con este shield se pueden usar 2 relés son cualquier placa de la familia MKR

Arduino Yun Shield

Web: https://www.arduino.cc/en/Main/ArduinoYunShield

Este shield permite ampliar las capacidades del arduino YUN a cualquier Arduino, es decir, añadir un microprocesador para realizar cálculos más potentes y conexión wifi y ethernet.

Getting started: https://www.arduino.cc/en/Guide/ArduinoYunShield

MKR ETH Shield

Web: https://store.arduino.cc/mkr-eth-shield

MKR IMU Shield

Web: https://store.arduino.cc/mkr-imu-shield

MKR ENV Shield

Web: https://store.arduino.cc/mkr-env-shield

MKR Therm Shield

Web: https://store.arduino.cc/mkr-therm-shield

MKR Can Shield

Web: https://store.arduino.cc/arduino-mkr-can-shield

MKR 485 Shield

Web: https://store.arduino.cc/arduino-mkr-485-shield

MKR Mem Shield

Web: https://store.arduino.cc/arduino-mkr-mem-shield

MKR Connector Carrier Shield

Web: https://store.arduino.cc/arduino-mkr-connector-carrier

MKR RGB Shield

Web: https://store.arduino.cc/mkr-rgb-shield

Otras Shields Oficiales

Shields retiradas

Algunas shields han sido retiradas por versiones mejoradas:

Shields no oficiales

Además de las shields oficiales vistas, existen múltiples shields no oficiales de Arduino (no fabricadas por Arduino) que nos permiten ampliar las capacidades de la placa Arduino. Veamos unos ejemplos:

EmonTx Shield

Web: https://shop.openenergymonitor.com/emontx-arduino-shield-smt/

Wiki: https://wiki.openenergymonitor.org/index.php/EmonTx_Arduino_Shield

Github: https://github.com/openenergymonitor/emontx-shield

Un shield para medir corriente eléctrica bajo el proyecto open energy monitor: http://openenergymonitor.org/emon/

Posee 4 entradas para conectar 4 toroidales abiertos y una entrada para conectar el sensor de voltaje mediante un transformador AC-AC, también tiene la posibilidad de montar un transmisor RF.

Grove Shield

Web: https://www.seeedstudio.com/Base-Shield-V2-p-1378.html.

Un Shield para el sistema grove que facilita la conexión de sensores y actuadores.

Relay Shield

Web: https://www.seeedstudio.com/Relay-Shield-v3.0-p-2440.html

Wiki: http://wiki.seeed.cc/Relay_Shield_v3/

Este shield proporciona 4 relés para manejar dispositivos que no pueden controlarse directamente con las I/O de Arduino. Dispone de unos indicadores de uso de los relés.

En este caso se usan 4 pines digitales para usar cada uno de los relés.

¿Y si necesitamos más de 4 relés?

Shield Relay Driver de 8 canales

Web: http://www.freetronics.com.au/collections/shields/products/relay8-8-channel-relay-driver-shield#.VQxwlo5k6t8.

Este shield permite manejar hasta 8 relés (que no están en el shield) usando solo dos pines de I/O del Arduino. Se comunica con Arduino usando el bus I2C, de forma que apilando varias de estas shields podemos manejar 16, 24 y más relés.

Guía de uso: http://www.freetronics.com.au/pages/relay8-8-channel-relay-driver-shield-quickstart-guide#.VQyBVI5k6t8

GPS Shield

Web: http://www.adafruit.com/products/1272. Con un slot para micro SD donde guardar logs. No es compatible con Arduino Mega ni Due, RTC incluido. Conexión por puerto serie o conexión directa.

Más información en: https://learn.adafruit.com/adafruit-ultimate-gps-logger-shield

Xbee Shield

Webs:

Para comunicación inalámbrica mediante Xbee. Conexión a UART de la MCU o a cualquier otro puerto por software serial. Más información: http://www.seeedstudio.com/wiki/XBee_Shield_V2.0

TFT Shield

Web:  https://www.seeedstudio.com/28-TFT-Touch-Shield-V20-p-1286.html

Wiki: http://wiki.seeed.cc/2.8inch_TFT_Touch_Shield_v2.0/

Pantalla TFT táctil resistiva con un slot para micro SD integrado. Comunicación a Arduino a través de bus SPI.

Bluetooth Shield

Web: https://www.seeedstudio.com/Bluetooth-Shield-V2-p-2416.html

Wiki: http://wiki.seeedstudio.com/wiki/Bluetooth_Shield_V2.0

Comunicación inalámbrica por bluetooth. Conecta con la UART del Arduino o software serial con selector de puerto serie.

Se trata de un shield al que le han incorporado un módulo bluetooth HC-05: http://tienda.bricogeek.com/modulos-bluetooth/800-modulo-bluetooth-hc-05.html

Terminal Shield

Web: http://www.freetronics.com.au/collections/shields/products/terminal-shield-for-arduino#.VQxwn45k6t8.

Shield con borneros y placa de prototipado que nos permite conectar fácilmente cualquier sensor o actuador a un Arduino.

GSM shield

Web: https://www.sparkfun.com/products/13120

Este Shield usa el módulo SM5100B y es similar al shield oficial de Arduino y usa comandos AT a través del puerto serie para manejar la comunicación.

LTE Shield

Web: http://www.gemalto.com/m2m/development/cinterion-connect-shield

Brochure: http://www.gemalto.com/brochures-site/download-site/Documents/m2m-connect-shield.pdf

Tools and documentation: https://developer.gemalto.com/documentation/cinterion%C2%AE-connect-shield-tools-documentation

Uso con raspberry Pi: https://developer.gemalto.com/tutorial/using-connect-shield-raspberry-pi

Otras Shields Interesantes

Existen muchísimos shields que seguro que se adaptan a nuestro proyecto. En cada web de los fabricantes tenemos variedad donde elegir.

Un listado completo donde encontrar cualquier tipo de shield aunque no actualizado desde hace tiempo: http://shieldlist.org/

Para aprender más sobre los shields: https://learn.sparkfun.com/tutorials/arduino-shields

Breakout Boards

Además de los Shield, también tenemos disponibles módulos independientes (breakout boards) para conectar directamente a Arduino:

Y por supuesto tenemos kits de robótica:

También hay Shields para Raspberry Pi llamadas hats:

GrovePi

Y una librería en C++ para manejar las GPIO de Raspberry Pi para los que están familiarizados con Arduino: http://wiringpi.com/

Shields Wemos D1 Mini

La placa Wemos D1 Mini también usa el modelo de shields apilables, existen bastante modelos de shields disponibles.

Placas de Expansión

También hay disponibles placas de expansión de puertos para diversas placas de forma que podamos acceder más fácilmente a sus pines,

Node MCU:

Arduino Nano: