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:
- PIN D3: Botón B. Resistencia pulldown externa
- PIN D4: RGB Shield https://wiki.wemos.cc/products:d1_mini_shields:rgb_led_shield
- I2C (Pines SDA – D2 y SCL – A1): mini Oled Shield https://wiki.wemos.cc/products:d1_mini_shields:oled_shield
- PIN D1 (configurable): Relay Shield https://wiki.wemos.cc/products:d1_mini_shields:relay_shield
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:
- http://arduino.cc/en/Reference/Servo
- http://arduino.cc/en/Reference/ServoAttach
- http://arduino.cc/en/Reference/ServoWrite
- http://arduino.cc/en/Reference/ServoRead
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:
- simple-dht: https://www.arduinolibraries.info/libraries/simple-dht
- DHT Adafruit (necesita de otra librería): https://www.arduinolibraries.info/libraries/dht-sensor-library
- DHTlib: https://github.com/jecrespo/DHTlib
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:
- Copiar el código en el repositorio de cada alumno:
- (opción 1) Copiar el código copiado directamente de https://github.com/jecrespo/aprendiendoarduino-Curso_Programacion_Arduino_2019/blob/master/Ejercicio01-Comprueba_Entorno_Arduino/Ejercicio01-Comprueba_Entorno_Arduino.ino en la carpeta de repositorio de cada alummno “Curso Programacion Arduino 2019” en una carpeta llamado “Ejercicio01-Comprueba_Entorno_Arduino“
- (opción 2 – recomendada) Clonar el repositorio https://github.com/jecrespo/aprendiendoarduino-Curso_Programacion_Arduino_2019 donde copiar la tarjeta directramente. Esta opción es recomendada porque se podrá sincronizar con el código del profesor y coger lo que se necesite a lo largo del curso.
- Hacer commit y pull del ejercicio01 y comprobar que ha subido a github de cada alumno
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:
- Instalar drivers y soporte ESP8266 para el IDE de Arduino: https://www.aprendiendoarduino.com/2018/01/27/video-preparacion-ide-arduino-para-esp8266/Copiar el código en el repositorio de cada alumno como “Ejercicio02-Comprueba_Entorno_ESP8266“
- Hacer commit y pull del ejercicio02 y comprobar que ha subido a github
Ejecutar todos los test del Ejercicio02 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 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