Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

TALLER II - CLASE 07 - 2018 - SEM II

No description
by

Erick Araya

on 25 October 2018

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of TALLER II - CLASE 07 - 2018 - SEM II

Taller II - Clase 6
Erick Araya A.
2017
Objetivos de la Clase
Aprender a programar un módulo con un sensor de humedad y temperatura
Práctica 1
¿Usted sabe cómo está conectada la placa Arduino con su computador?
Usando un cable USB, por el puerto USB.
Práctica 2
Use la instrucción digitalWrite() para establecer el pin 13 en un valor alto (HIGH) y luego, use la misma instrucción para cambiarlo a un valor bajo (LOW)
Utilice delay() para retardar 0,5 seg entre HIGH y LOW. El LED conectado en el pin 13 debiera encenderse y apagarse cada 0,5 seg
El sensor de Humedad y Temperatura DHT11
DESAFÍO 5
Construya y programe un circuito que contenga el motor DC y el sensor HC-SR04, de modo que, cuando la distancia sea superior a 1 mt, el motor se mueva en un sentido y, cuando la distancia sea igual o inferior a 1 mt, el motor cambie de giro.
Módulo L298N
Práctica 02: Módulo 298N
Armar el siguiente circuito:
Puede usar cualquiera de las salidas para el motor
Se usará la siguiente configuración para alimentar el circuito:
Teclado Hexa
Sintaxis del lenguaje
Normas que establecen el orden de los elementos que componen un lenguaje de progamación.
Práctica 1
Escriba el siguiente código:
Qué es Serial?
Práctica 1
Sintaxis:
;
(punto y coma)--> Separa las instrucciones de un programa
{ }
(llaves)--> Marcan los límites de un bloque de código (inicio y fin)
//
--> Comentarios en una línea
La palabra Serial significa "uno después del otro". Se usa cuando queremos transferir datos, uno siguiendo al otro.
/* */
--> Comentarios en múltiples líneas
Ejemplo:
Grábelo con el nombre Hola_Mundo. Verifique que el código está bien escrito (Compilación)
Cargue en la placa Arduino el código. Qué sucedió? nada?
La información se transmite entre la placa Arduino y el computador, en forma de "bits" ( "unos" (1..) o "ceros" (0..)), en cualquier sentido.
Práctica 1
"Hola Mundo"
El objetivo de esta primera práctica es que la placa Arduino transmita al software Arduino IDE el mensaje "Hola Mundo" una sola vez y, posteriormente, varias veces.
El mensaje ha de transmitirse mediante una "comunicación serial", a una velocidad de transmisión de 9600 baudios
Los puertos seriales tradicionales están obsoletos (USB es lo que predomina)
Si bien la placa Arduino está conectada físicamente al computador mediante el puerto USB, el software Arduino IDE instalado en el computador "pensará" que ésta se encuentra conectada a un puerto COM.
El mensaje recibido se verá en el Arduino IDE en la herramienta “Monitor Serial”.
¿Que es la humedad relativa (RH)?
Mide la cantidad de agua en el aire en forma de vapor, comparándolo con la cantidad máxima de agua que puede ser mantenida a una temperatura dada (punto de saturación del vapor de agua).
Cuando usted escribe:
Práctica 1
hace uso de la "librería"
Serial
de Arduino
Serial.begin(9600);
Serial.println("Hola Mundo!!");
La librería Serial se usa para comunicar un Arduino con un computador, u otro dispositivo
Serial.begin(9600);
Serial.println("Hola Mundo!!");
se utiliza para
establecer la tasa de transferencia de datos serial entre el Arduino y el computador, en bits por segundo
envía un
mensaje al computador. Se imprime en la ventana "Monitor Serie" del programa Arduino (clic en y en la ventana que se abre aparecerá el mensaje, una única vez).
Módulo L298N
DESAFÍO 06
El sensor de Humedad y Temperatura DHT11
El DHT11 tiene un sensor, un sustrato especial conectado a dos electrodos, que detecta la humedad del aire. El cambio de resistencia producido en el sustrato es proporcional a la humedad relativa
El Motor de Corriente Contínua
Es el más común. No tiene polaridad. Gira en modo continuado en un sentido, o en el otro, si se invierte la energía aplicada.
Parpadeo de un LED por la salida digital 13
Grabe este archivo como Parpadeo_LED. Conecte el Arduino al computador y ejecute el programa
Parpadeo de tres LEDs secuencialmente
Desafío 1
Desconecte la placa Arduino de su computador
Proponga un circuito para conectar el LED rojo al pin 2, el LED verde al pin 4 y el LED azul al pin 7 (no olvide las resistencias!!!). Muestre al profesor su propuesta.
Desarrolle un programa que encienda primero el LED rojo por 1 segundo, lo apague, encienda a continuación el LED verde por 1 segundo, lo apague, encienda a continuación el LED azul por 1 segundo, lo apague y repita el proceso. Grabe este programa como Tres_Leds.
Simulación de un semáforo
Desafío 2
Desconecte la placa Arduino de su computador
Un semáforo sigue la secuencia típica Rojo - Verde - Amarillo. Los tiempos de encendido de las luces son: Rojo = 5 seg; Verde = 8 seg; Amarillo = 2 seg. Desarrolle un circuito que conecte el LED rojo al pin 12, el LED amarillo al pin 8 y el LED verde al pin 7.
Desarrolle un programa que simule el funcionamiento del semáforo. Grabe este programa como semáforo.
Solución
Simulación de un semáforo
Desafío 2
¿Qué cambios notó al comparar su código con el propuesto por el profesor?
¿Se acuerda de las 3 zonas de un programa Arduino?
Esto se mostró al inicio de la clase 2:
La zona Global permite DECLARAR nombres de variables (ver Guía N° 2).
También se pueden utilizar operaciones con las variables declaradas y usarse como parámetros de los comandos de Arduino
Práctica 02: Módulo L298N
El programa:
Circuito Temporizador
Práctica 3
¿Qué debe hacer este circuito?
Práctica 3
El código:
En su protoboard, arme el siguiente circuito (MANTENGA DESCONECTADA LA PLACA ARDUINO DE SU COMPUTADOR):
El LED permanecerá apagado, hasta que presione el pulsador. En ese caso, se enviará una señal de 5V por el pin 12 (debe configurarse como entrada). Al recibir la señal, se activa el pin13 para que se encienda el LED rojo durante 8 segundos. Transcurrido ese tiempo, el LED se apaga y no se encenderá hasta que se presione el pulsador.
Es preferible convertir las variables Salida, Entrada y tiempo en constantes. Nunca van a cambiar
La Sentencia de Control if - else
Variante de if. Dependiendo de la condición, tiene dos caminos a seguir.
Formato sentencia if - else:
Formato sentencia if - else - if:
Práctica 4
Se va a controlar la luz emitida por un LED rojo, utilizando una fuente luminosa y una fotocelda.
Control de intensidad de un LED
Práctica 4
Cambiando la duración del tiempo que la señal digital permanece en el '1', se puede generar valores medios entre 0V y +5V
La señal digital permite sólo dos niveles: 1 (+5V) y 0 (0V).
Control de intensidad de un LED
Para regular la luz del LED, tendremos que variar la corriente circulante por él. Conectar el LED a una salida digital no sirve, por cuanto la corriente circulante es fija (se está usando una resistencia de 330 ohms). Queda, por lo tanto, cambiar el voltaje aplicado. Pero la salida digital entrega +5 V (fijo).
La Modulación por Ancho de Pulso (PWM) es una técnica para conseguir resultados análogos, usando un medio digital... ¿Cómo?
¿Recuerda la diferencia entre una señal análoga y una digital?
Se debe usar una salida PWM
Salidas PWM: 3 - 5 - 6 - 9 - 10 - 11
Comando de Arduino:
analogWrite(
pin
,
valor
)
Control de intensidad de un LED
Práctica 4
Solución (para el circuito anterior):
Práctica 4
Control de intensidad de un LED
Cambiando
valor
en el comando anterior, pueden obtenerse distintos ciclos de trabajo. Esos ciclos de trabajo serán controlados por la entrada análoga, donde ha de estar conectada la fotocelda.
¿Qué valores entrega la fotocelda? A mayor intensidad luminosa, se reduce su resistencia. Construyamos un circuito básico para averiguarlo.
(Espere que el profesor revise el circuito, antes de conectar el Arduino al computador)
Proponga un programa en Arduino que lea e imprima valores cuando la fotocelda es expuesta a diferentes niveles de luz y sombra. Rango entre 0 (luz) y 1000 (oscuridad)
Ahora puede construir el circuito que ha de controlar la intensidad del LED rojo.
Note que, si la intensidad es muy intensa, pueden resultar valores negativos. Eso debe corregirse en el programa.
Práctica 4
Control de intensidad de un LED
Ahora el programa. Hay que considerar lo siguiente:
Cuando se utilice la función analogWrite() para controlar la intensidad del LED (oscuridad de la fotocelda ==> LED apagado), el valor a enviar no debe superar 255 (ver http://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix3 )
El programa propuesto sería:
Control de intensidad de un LED
Práctica 4
Dónde se verá el mensaje recibido? Buscar!!
Desafío 09
Escriba un programa que solicite al usuario (usando el display de 16 x 2) el ingreso de dos números enteros por el teclado hexa y muestre la suma de ellos en el display de 16 x 2
Sensor Ultrasónico HC-SR04
El HC-SR04 es un sensor ultrasónico de bajo costo que no sólo puede detectar si un objeto se presenta, sino que también puede "sentir" y transmitir la distancia al objeto.
Ángulo de medición efectivo: < 15º
Sensor Ultrasónico HC-SR04
Desafío 08
Arme el siguiente circuito:
Sensor Ultrasónico HC-SR04
Cómo funciona?
El pin TRIG es el canal de disparo. Desde el Arduino debe enviarse un pulso de aproximadamente 10 microsegundos al HC-SR04, para inicial el sincronismo (para que el módulo funcione).
El HC-SR04 responde enviando un tren de 8 pulsos de 40 KHz por su transmisor
Es un arreglo de 16 botones pulsadores, organizados en una matriz de 4 x 4
Los puntos de conexión son 8: 4 para las filas ( Ri) y 4 para las columnas (Ci)
De acuerdo a las especificaciones del sensor DHT11, escriba un programa para que mida la humedad relativa y la temperatura de la sala, cada 1 segundo. Entregue sus resultados en la ventana serie.
Probar el motor conectándolo directamente a 5V y GND
Sin embargo, NO SE PUEDE conectar este motor a los pines digitales del Arduino.
Los pines digitales no suministran suficiente corriente
Se necesita un "driver", o módulo con un transistor amplificador
Permite conectar hasta 2 motores DC a la vez, o un stepper motor.
Requiere una fuente de poder o batería, que puede compartir con el Arduino
Cuenta con jumpers de selección para habilitar cada una de las salidas del módulo (A y B).
El programa básicamente activa el motor en un sentido por 4 segundos, luego detiene el motor por 0.5 segundos, después activa el motor en sentido inverso por 4 segundos y por último detiene el motor por 5 segundos. Luego repite la acción indefinidamente.
Tiene dos transductores, básicamente, un altavoz y un micrófono.
Detección de 2cm a 400cm (probar!)
Frecuencia de trabajo: 40KHz
VCC: Alimentación +5V (4.5V min – 5.5V max)
TRIG: Trigger entrada (input) del sensor
ECHO: Echo salida (output) del Sensor
GND
A finalizar los 8 pulsos, el HC-SR04 envía por el pin ECHO un pulso entre 150 microsegundos y 25 milisegundos, equivalente al tiempo de envío - rebote - retorno de la señal, detectada por su sensor.
ECHO es la señal que recibirá el Arduino, para que el programa haga el cálculo de la distancia entre el sensor ultrasónico y el obstáculo.
Escriba un programa que muestre en pantalla (monitor serial) todo lo que usted ha de "escribir" con el teclado hexa
Las 16 teclas son 0, 1, ...,9, A, B, C, D, *, #.
Corriente en reposo (sin TX/RX) < 2 mA)
Corriente de trabajo 15 mA - equivalente a la circulante por un LED
Señal de alta frecuencia (4oKHz) viaja a 343 m/s por el aire, 34300 cm/s
1 cm es la distancia recorrida en 1/34300 seg, o sea en 29,15 useg
Pero en un sensor ultrasónico se mide el tiempo de ida y retorno de la onda..
Entonces, d = (V* t)/2, siendo V/2 = 34320/2 = 17,16 cm/seg = 0,01716 cm/useg
Si se mide, por ejemplo, 600 useg en ida y llegada, d = 600 * 0,01716 cm = 10,3 cm
Desafío 4: Control de velocidad
La Modulación por ancho de pulso permite controlar la velocidad del giro del motor. Mientras mayor es el ancho del pulso (valores entre 0 y 255), mayor será la velocidad de giro del motor.
Diseñe un circuito que permita controlar la velocidad de giro del motor usando la distancia a un obstáculo. Si la distancia al obstáculo es inferior a 70, PWM entregará un valor de 100. Si la distancia al obstáculo es igual o superior a 70 e inferior a 150, PWM entregará un valor de 150. Si la distancia al obstáculo es igual o superior a 150 e inferior a 200, PWM entregará un valor de 200. Finalmente, si la distancia es igual o superior a 200, PWM entregará un valor de 250. Programe con Arduino
Aprender a programar un display de 16 x 2 (2 versiones)
Aprender a usar un servomotor
goo.gl/ZywJuj
Aprender a interpretar señales en función del tiempo
USO DE SERVOMOTORES
Un SERVO --> tipo especial de motor?
DIAGRAMA DE TIEMPOS
Qué es?
Gráfico que relaciona ambos niveles de una señal digital con el tiempo
Muestra cambios de estado a través del tiempo
DESAFÍO 1
Se pretende medir cuál es la minima frecuencia requerida para que un LED aparezca como un brillo uniforme
a) Construya un circuito básico que permita ir cambiando la frecuencia de pulsos enviados a un LED por el pin 13, a fin de hacer finalmente que aparezca con un brillo continuo
USO DE SERVOMOTORES
En su interior hay un giro contínuo de su eje
Pero el giro es parcial!! La unidad de control define cuánto ha de girar. Y la posición final se mantiene!!
Una limitación: El servo tradicional sólo suele girar hasta 180 grados. Existen servos comerciales que giran los 360°
Según el número de impulsos es lo que gira.
El ancho de cada impulso puede variar entre 1000 y 2000 microsegundos, pero debe ser un valor fijo para todos los impulsos.
Este es un servo:
¿Qué tiene la caja negra?
Un motor de corriente contínua!!
Circuitería de control
Externamente, parece que el dispositivo funciona en base a "pasos", o impulsos
Pero no es así en la realidad.
USO DE SERVOMOTORES
Para controlar el servo, se utiliza una librería que controla el servo con facilidad:
Servo.h
Se usará el microservo SG90, que tiene 3 cables de diferente color:
Rojo: para conectar a 5V (alimentación)
Café: Para conectar a tierra (GND)
Naranja: Entrada desde Arduino - Normalmente Pin 9 (control)
USO DE SERVOMOTORES
Servo es una librería estándar en Arduino (viene incluida)
Para usar una librería estándar, basta con pedirle al IDE que la incluya en nuestro programa. ¿Cómo?
En el programa aparecerá:
Desafío 03
El circuito a construir regula el giro del servo con un potenciómetro de 10 KOhm. Los extremos fijos se conectan a 5V y GND. El extremo variable (medio) se conecta a la entrada Análoga A0
En el monitor Serie debe aparecer la conversión, esto es, el valor original (0 - 1023) y el ángulo a girar (0 - 179)
USO DE SERVOMOTORES
Desafío 02
Construya el siguiente circuito (sin conectar la tarjeta Arduino al computador):
Escriba un programa que primero calibre el servo; luego haga girar el servo en sentido horario en posiciones de 1 grado y en sentido antihorario, también en posiciones de 1 grado. Rebe repetir indefinidamente esto.
Este circuito es el más básico. Su movimiento sólo es controlado por el programa.
El programa hará uso de la función map() para convertir las escalas. Busque en https://www.arduino.cc/en/Reference/Map
USO DE SERVOMOTORES
A partir de ahora ya podemos utilizar las funciones disponibles en la librería.
Conecta la librería Servo con un pin del Arduino
Sintaxis:
Funciones de Servo.h
attach():
Para usar la biblioteca Servo, se debe crear una instancia (objeto) de ella:
Servo miServo;
miServo.attach(pin);
Establece el ángulo de desplazamiento en grados
Sintaxis:
write():
miServo.write(grados);
Lee el ángulo actual del servo en grados
Sintaxis:
read():
miServo.read();
USO DE SERVOMOTORES
Construya un circuito básico (sin el servo conectado) con un led en el pin 13. Pruébelo con el programa anterior y observe el led
La calibración se hará una única vez, esto es en la parte setup() del programa, una vez que se ha conectado un pin del Arduino al servo.
Escribe un valor en microsegundos al servo, para el control del desplazamiento
Sintaxis:
writeMicroseconds():
miServo.microSeconds();
Calibración del Servo
Para calibrar un servo, el programa debe enviar señales al servo, con duración del pulso de 1.5 ms (1500 microsegundos)
Desafío 03 (Continuado..)
En el Monitor Serie debe aparecer:
Escriba un programa que vaya mostrando el valor del potenciómetro y el ángulo que ha de girar el servo.
DESAFÍO 1
Investigue en internet por qué el ojo humano es capaz de "soportar" un parpadeo de un lLED a mayor frecuencia que la luz generada por ampolletas de filamentos
Un ejemplo de lo que debería aparecer en el monitor serial sería:
El Módulo Display LCD 16x2 con comunicación I2C
Un visor de cristal líquido
Una interface I2C, para simplificar la conexión con el Arduino
El Bus I2C
Norma de comunicación digital, entre los diferentes componentes de una sistema electrónico.
Inter Integrated Circuits bus, o IIC, o I2C
Protocolo de dos hilos de control, uno para transmitir los datos, SDA y otro, el reloj asíncrono que indica cuando leer los datos SCL. Mas GND y 5V
El Bus I2C
Programación del Módulo Display LCD 16x2 con comunicación I2C
Se necesita, entre otras cosas, una librería para el LCD I2C. Se llama
LiquidCrystal_I2C para Erick
para Arduino. Descárguela del Siveduc a su escritorio sin descomprimirla:
LiquidCrystal_V1.2.1.zip.
Programación del Módulo Display LCD 16x2 con comunicación I2C
begin()
Inicializa la interface a la pantalla LCD y especifica las dimensiones de la superficie de despliegue. Debe ser el primer comando LCD del programa
Sintaxis :
lcd.begin(cols, filas)
Parámetros:
cols
: Número de columnas del display
filas
: Número de filas del display
Ejemplo (de acuerdo a las conexiones anteriores):
lcd.begin(16,2);
// 2 filas, 16 columnas
Programación del Módulo Display LCD 16x2 con comunicación I2C
print()
Escribe texto en el LCD.
Sintaxis (la más simple):
lcd.print(datos)
Parámetros:
datos
: Texto a imprimir (char, byte, int, long, o string)
Ejemplo:
lcd.print("Hola, amigos");
El Display LCD 16 x 2
Contiene 2 filas, 16 caracteres por fila
Pantalla de Cristal Líquido
Este display requiere, además de los 5V y GND, 6 salidas digitles del Arduino UNO (ocupa 8 pines del Arduino) ==> Muchos pines
Se compone de dos sistemas:
Vista de frente:
Vista de atrás:
Estructura de pines del display:
Por fortuna, existe un módulo que permite reducir el número de pines: El bus I2C
Además, se necesitaría de un potenciómetro lineal de10 KOhm
Arduino lo soporta de fábrica con una librería estándar, (Wire.h) que utiliza dos de los pines analógicos para las funciones SDA (Datos) y SCL (Clock).
Importante:
Cada componente conectado al bus I2C tiene una
dirección única.
Cada mensaje y orden que transmitimos al bus, lleva anexa esta dirección
¿Como averiguar la dirección del componente (LCD) conectado?
Descargar del siveduc el archivo Escaner_direcciones_I2C.rar. Lo descomprime en su escritorio y abre el archivo
Escaner_direcciones_I2C.ino
. Al ejecutarlo, en el Monitor Serie aparecerá la dirección. Pruébelo!! y anote ese valor. Lo ocupará!!
Instale esta librería en su Arduino:
Programación del Módulo Display LCD 16x2 con comunicación I2C
Las funciones que utiliza esta librería son similares a la librería LiquidCrystal de Arduino. Veremos algunas:
LiquidCrystal_I2C lcd(lcd_Addr, lcd_cols, lcd_rows)
Función constructor, crea una variable de la clase LiquidCrystal_I2C, con dirección, columnas y filas indicadas.
Ejemplo:
LiquidCrystal_I2C lcd(
0x27
,16,2);
Así debe usarse. No hay comentarios al respecto.
Ejemplo de Programa (Display verde)
Programación del Módulo Display LCD 16x2 con comunicación I2C
setCursor()
Establece posición de inicio (col,fil) a escribir en el LCD
Sintaxis :
lcd.setCursor(col, fila)
Parámetros:
col
: Columna de inicio de escritura
fila
: Fila de inicio de escritura
Ejemplo:
lcd.setCursor(0,1);
Desafío 05
Escriba un programa que muestre el nombre de un integrante del grupo, a partir de la fila 0, columna 0. En la siguiente fila, columna 0, escriba la palabra "Tiempo:" y, a partir de la columna 13 escriba el tiempo cada segundo. Al llegar a los 2 minutos, el tiempo se resetea a 0 y comienza de nuevo con el nombre de otro integrante. Debe ir rotando cada 2 minutos con el nombre de un integrante distinto del grupo (Sugerencia: usar arreglos. Ver este link: https://www.arduino.cc/en/reference/array). Use el display que quiera.
Desafío 04
Modifique el programa anterior para que, cuando se abra el Monitor Serie y usted comience a escribir en él, cada vez que presione la tecla Intro, debe aparecer lo que usted escribió en la segunda línea del visor LCD. Debe mostrar este desafío para ambos displays (verde y azul).
Programación del Módulo Display LCD 16x2 con comunicación I2C
write()
Escribe un carácter o una secuencia de caracteres al LCD
Sintaxis :
lcd.write(dato)
Parámetro:
dato
: Carácter o secuencia de caracteres a escribir
backlight()
Enciende la Luz del Fondo del LCD
nobacklight()
Apaga la Luz del Fondo del LCD
Válido para el display verde
PRACTICA 01
Puede ver las siguientes ayudas:
https://www.geekfactory.mx/tutoriales/tutoriales-arduino/lcd-16x2-por-i2c-con-arduino/
https://geekytheory.com/tutorial-arduino-conectar-lcd-16x2-por-protocolo-i2c
¿Cómo medir la RH?
Además, el DHT11 ocupa un termistor, un material semiconductor de resistencia variable que cambia su valor con la temperatura
Existen dos diferentes versiones del DHT11: uno de 4 pines y el otro de 3 pines
Ustedes tienen un módulo. cuál versión del DHT11 viene en ese módulo?
DESAFÍO 07
Repita el desafío anterior, sólo que esta vez ha de desplegar los resultados en el visor LCD.

Aprender a programar un teclado hexa
Desafío 05-A (Sólo grupo Jueves)
Desafío 05-B (Sólo grupo Viernes)
Full transcript