Download - Guion Practicas Arduino

Transcript
  • 8/17/2019 Guion Practicas Arduino

    1/25

    !"#$% '( )*+,-#,./ 

    !"#$%&' " !"# !"#$%& 

    #$%& '( )*+%,-./

    Arduino es una plataforma electrónica de prototipos de códigoabierto (open-source) basada en hardware y software flexible yfácil de usar. Está pensado para artistas, diseñadores, comohobby o para cualquier interesado en crear objetos o entornosinteractivos.

    Arduino nos permite “sentir” el entorno mediante la recepción dedatos desde una variedad de sensores y puede interactuar con sualrededor mediante el control de luces, motores o casi cualquier

    cosa que imaginemos.

    ARDUINO frente a otros microcontroladores:

    •  Barato.

    •  Multiplataforma (Windows, Mac y Linux).

    •  Entorno de programación simple y claro.

    •  Software libre y ampliable por cualquiera.

    • 

    Hardware libre.

    Descripción básica de la placa ARDUINO UNO:

  • 8/17/2019 Guion Practicas Arduino

    2/25

    0*123,24 5667 " 8.-3*.94-+. %-4 (49,+4 +,:,349

    Parte 1: ¿Que vamos a hacer? 

    Este proyecto básico consiste en aprender a activar una salidadigital de nuestra placa Arduino a la que conectaremos medianteuna resistencia, un diodo LED que parpadeará en intervalos de unsegundo.

    Esto tan sencillo a priori, nos será de gran utilidad pues con unLED podremos monitorizar todo tipo de acciones en nuestro Arduino

    Material necesario:

    •  1 x placa Arduino.

    •  1 x resistencia de 470!. (Amarillo, morado, marrón)

    • 

    1 x diodo LED.

    •  1 x protoboard.

    Parte 2: Diseñando el Hardware… 

    Antes de nada, veamos una breve descripción de los componenteselegidos y como utilizarlos, si queréis indagar más sobre estos,o ver más ejemplos, podéis hacerlo a través de Arduino Academy!!:

    La protoboard:

    Una protoboard o breadboard, es una placa perforada conconexiones internas en la que podemos “pinchar” nuestroscomponentes para realizar nuestros prototipos sin tener querealizar un solo punto de soldadura tantas veces como queramos.

  • 8/17/2019 Guion Practicas Arduino

    3/25

     

    Las resistencias

    Un resistor o resistencia, es un componente electrónico utilizadopara añadir una resistencia eléctrica entre dos puntos de un

    circuito de manera que nos permite distribuir adecuadamentetensiones y corrientes a lo largo del mismo. La unidad de medidade una resistencia es el Ohmio (!).

    Para identificar los valores de las resistencias (fijas) enaquellas que por su tamaño no es posible serigrafiarlo en suencapsulado por su pequeño tamaño, debemos interpretar una seriede líneas de colores dispuestas a lo largo de la resistencia,para esto disponemos de la siguiente tabla de colores:

    Para empezar a leer el código, debemos colocar a la derecha labanda de tolerancia, normalmente dorada o plateada y empezar aleer de izquierda a derecha, la primera y segunda franja latomaremos solamente como un número y la tercera franja como sumultiplicador, es decir, si tenemos marrón – rojo – amarillo

    tendremos una resistencia de 1 – 2 – x 10000 = 120000 ! o 120K.

  • 8/17/2019 Guion Practicas Arduino

    4/25

    El Diodo LED

    Ahora pensemos que tiene que hacer nuestro circuito!!

    Debemos lograr, mediante el programa de nuestro Arduino, que seencienda y apague un LED conectado a una salida digital, a travésde una resistencia que nos regulará la intensidad que debe llegaral diodo, así que pongámonos a calcular!

    Tenemos que, como la tensión de salida digital de la placa deArduino es de 5v, la tensión de nuestro LED rojo es de 1,8v y lacorriente que debe pasar es de 15 mA nos quedará la siguientefórmula gracias a la ley de Ohm (R = V/I):

    Por lo que la resistencia ideal sería de 220!, la más cercana aese valor existente en el mercado, en nuestro caso, adaptándonosa los diodos y resistencias del StarterKit usaremos una de 470 !.

    Ahora solo nos queda calcular la potencia de dicha resistencia,recordando que P=VxI tenemos que

    P = (5-1,8) x 0,015 = 0,048w 

    Es decir como mínimo debe ser de 48mW por lo que nos vale la másestándar de las resistencias, la de 1/4 de vatio.

    Un LED (Light Emitting Diode)básicamente es

    un diodo semiconductor queemite luz.

    Cuando un LED se encuentra enpolarización directa, los

    electrones pueden recombinarsecon los huecos en el

    dispositivo, liberando energíaen forma de fotones. Este

    efecto esllamado electroluminiscencia y

    el color de la luz

    (correspondiente a la energíadel fotón) se determina apartir de la banda de energía

    del semiconductor. 

  • 8/17/2019 Guion Practicas Arduino

    5/25

     Veamos el esquema eléctrico:

    Y una posible distribución en la protoboard:

  • 8/17/2019 Guion Practicas Arduino

    6/25

    3ª Parte: Programando…

    Primero observemos la estructura básica de un Sketch (Programa)para Arduino y diferenciemos sus dos partes básicas:

    Abrir el archivo Proyecto_001.ino proporcionado en la

    documentación del curso en vuestro ordenador y observémoslo alcompleto:

    /* www.arduinoacademy.comProyecto 001

    BlinkEnciende y apaga un Led en intervalosde un segundo repetidamente.Este código de ejemplo es de uso público.

    */

    //Configuración de nuestra salida.

    void setup(){pinMode(12, OUTPUT); // Pin 12 como Salida.}

    //Ahora le decimos que hacer con esa salida.

    void loop(){

    digitalWrite(12, HIGH); // Pone la salida 12 a ONdelay(1000); // Espera un segundodigitalWrite(12, LOW); // Pone la salida 12 a OFFdelay(1000); // Espera un segundo} 

    void setup() { Aquí vendrán las configuraciones de nuestro pines

    como entradas o salidas entre otras.Como veis debe estar todo incluido entre llaves ysolose ejecutará una vez.}

    void loop() { Aquí pondremos las instrucciones que ejecutaránuestro programa nuestro programa una y otra vez.}

  • 8/17/2019 Guion Practicas Arduino

    7/25

    0*123,24 566; "

  • 8/17/2019 Guion Practicas Arduino

    8/25

     

    Posible esquema de montaje en la protoboard:

    3ª Parte: Programando…

    Aquí es donde va a residir la complejidad de nuestro proyecto, loque tenemos que hacer es, mediante programación, que se enciendan

    los LED secuencialmente y al llegar a cada extremo, vuelva haciael otro lado y así sucesivamente, emulando el efecto de “KIT”,además veremos nuevas instrucciones como “for”   que nos va apermitir ahorrar muchas líneas de código, así como el uso devariables en nuestros Sketch.

    Para ello, hemos hecho tres versiones de programa, la primera conlas instrucciones básicas, observando la longitud que alcanza elprograma al tener que declarar una y otra vez el estado de cadasalida, la segunda con el ciclo “for” incluido y una tercera conun pequeño efecto de estela añadido.

    Abrir el segundo proyecto, primera versión de la documentacióndel curso llamado Proyecto_002_1.ino

    Una vez analizado el primer ejemplo, abrir Proyecto_002_2.inopara observar los cambios en las líneas de programa.

    Para finalizar abrir Proyecto_002_3.ino para ver como hemosconseguido el efecto estela en los LED.

  • 8/17/2019 Guion Practicas Arduino

    9/25

    0*123,24 566? "

  • 8/17/2019 Guion Practicas Arduino

    10/25

     

    Como podemos ver, debemos colocar uno de los extremos a masa,otro a +Vcc y nuestra patilla central será nuestra tensión desalida regulable, esta salida será la que conectemos a Arduino yque variará de 0v a 5v dependiendo de la posición de nuestropotenciómetro.

    Entradas analógicas

    Si estamos utilizando un Arduino Uno, las entradas analógicasvienen identificadas desde A0 hasta A5 como podemos ver en lasiguiente imagen:

    En cuanto a la salida, colocaremos la ya conocida configuraciónde LED más resistencia, pero deberemos tener algo en cuenta, parael primer ejemplo nos daría igual la salida digital a elegir,pero para el segundo es necesario que seleccionemos una salidacon PWM, así que las salidas serán la 3, 5, 6, 9, 10 y 11 como sepuede ver en la siguiente imagen: 

  • 8/17/2019 Guion Practicas Arduino

    11/25

     

    Pero.. ¿Qué es el PWM? 

    A menudo necesitaremos algo más que una señal de 0 o 1 ennuestros proyectos, para variar la velocidad de giro de un motor,

    para variar la intensidad con la que luce un diodo, paratransmitir los grados de giro de un servo, etc..

    Para todo esto, y mucho más, nos servirá el PWM, que emula unaseñal analógica a partir de una señal digital.

    Las siglas PWM vienen de Pulse Width Modultation, o Modulación deAncho de Pulso.

    Lo que hace este tipo de señal es emitir, en lugar de una señalcontinua en nuestra salida, emite una serie de pulsos quepodremos variar su duración pero con una frecuencia constante deaproximadamente 490Hz, de manera que la tensión promedioresultante, es directamente proporcional a la duración de estosdentro del rango de nuestro periodo, es decir, cuanto más juntosestén esos pulsos de +5v, mayor será la tensión promedio denuestra salida, y cuanto más distantes sean estos, menor serádicha tensión:

  • 8/17/2019 Guion Practicas Arduino

    12/25

     

    Con todo esto, veamos los circuitos resultantes:

    Y la posible distribución en protoboard:

  • 8/17/2019 Guion Practicas Arduino

    13/25

     

    Parte 3: Programando… 

    El primer ejemplo que vamos a tratar es la adquisición de datosen la entrada analógica A0 para variar la frecuencia de parpadeo

    de un diodo LED conectado a una salida digital cualquiera, paraello abrir el proyecto Proyecto_003_1.ino de la documentación delcurso.

    Como novedad veremos la instrucción analogRead(entrada a leer)

    Sin variar el circuito, vamos a introducir un nuevo código pararealizar un ejemplo diferente, abrir el archivoProyecto_003_2.ino, en este proyecto, nuestro diodo LED variarásu intensidad lumínica en función del valor que esté aportando el

    potenciómetro a nuestra entrada analógica, esto es el llamadoefecto fading (desvanecimiento), puede observarse que se haelegido la salida número 9, ya que esta sí que es compatible conla opción PWW.

    En este código veremos el uso de la instrucción analagogWrite(salida PWM, valor). 

  • 8/17/2019 Guion Practicas Arduino

    14/25

     

    0*123,24 566D "

  • 8/17/2019 Guion Practicas Arduino

    15/25

    De igual manera, si tuviéramos la necesidad de mantener un 1lógico en una entrada mientras el circuito está en reposo, se lepuede aplicar una resistencia entre la entrada y +5v paraasegurarnos que le llega suficiente tensión como para que seainterpretada correctamente por nuestro Arduino, a esta última sele denomina PULL-UP.

    Aquí podéis ver como se conectaría la resistencia en un circuitobásico de 0 o 1 en la entrada 8 de Arduino. 

    Esquema eléctrico:

  • 8/17/2019 Guion Practicas Arduino

    16/25

     

    Distribución en protoboard:

    3ª Parte: Programando…

    En este programa vamos a descubrir como leer una entrada digital,además de la instrucción condicional “if” con la que hacercomparaciones, en nuestro caso, comprobaremos si la entradadigital está activada, y si lo está (condición) ejecutará lasinstrucciones de su interior.

    Para ello abrir el archivo Proyecto_004.ino

  • 8/17/2019 Guion Practicas Arduino

    17/25

    0*123,24 566G " H'-(.* IJK

    Parte 1: ¿Que vamos a hacer? 

    En este proyecto, vamos a utilizar un LDR (Light DependentResistor o resistencia dependiente de la luz) para simular unahipotética compensación lumínica de 5 niveles, es decir, a travésde una resistencia que varia su valor dependiendo de la luzrecibida, aprovecharemos dicha variación para hacer un programaque nos encienda o apague una serie de LED dependiendo de si haymás luz o menos luz, esto podríamos extrapolarlo a un sistema deregulación de luz de un jardín con cinco líneas de luz que sevayan encendiendo según va cayendo la noche compensandoprogresivamente la deficiencia de luz.

    Además le hemos implementado un potenciómetro para ajustar el

    nivel crítico mínimo de luz que queremos soportar, a partir delcual se activará nuestro circuito y empezará a aumentar la luzdel lugar progresivamente.

    Material necesario para este proyecto:

    1 x Arduino Uno 1 x Protoboard 1 x LDR 

    1 x Potenciómetro 1k! 5 x Diodos LED 5 x Resistencias 470! 1 x Resistencia 1K! 1 x Juego de Cables 

    Parte 2: Diseñando el hardware… 

    En este proyecto lo que queremos conseguir es que, a partir de

    una resistencia que varía su valor óhmico en función de que hayamás o menos luz, controlar 5 salidas de nuestro Arduino, a lasque podríamos conectar líneas de iluminación para un jardín porejemplo, de manera que según va anocheciendo, nuestra iluminaciónartificial va aumentando.

    Además, vamos a colocar un potenciómetro para regular el umbralde luz mínima, a partir del cual, comenzará a funcionar nuestrocircuito de luz artificial para que sea adaptable a cualquierentorno.

  • 8/17/2019 Guion Practicas Arduino

    18/25

    Para el diseño de este circuito, dividámoslo en tres partes:

    Salidas para los LED

    Para las salidas, ya hemos aprendido como conectar unos diodosLED y como calcular su resistencia óptima.

    Conexión LDR a una entrada analógica

    Aquí tenemos un componente nuevo, el LDR funciona como unaresistencia variable de manera que, cuanta más cantidad de luzreciba, menor será su resistencia, para que quede claro, si en unpotenciómetro variábamos la resistencia deslizando un patín porla pista de material resistivo, aquí lo hará la cantidad de luzque reciba la foto-resistencia.

    ¿Qué podemos deducir con esto? 

    Que si añadimos una resistencia más, podemos utilizar el LDR parahacer el ya conocido divisor de tensión  de donde sacaremos lavariación de señal para conectar a nuestra entrada analógica deArduino.

    Podemos conectarlo de dos maneras diferentes:

    Si utilizamos el LDR como resistencia inferior del divisor detensión, nos dará la tensión máxima cuando tengamos el LDR enplena oscuridad, ya que estará oponiendo el máximo de suresistencia al paso de la corriente derivándose esta por Vout al

    completo, si lo utilizamos como resistencia superior, elresultado será el inverso, tendremos la tensión máxima cuandoesté completamente iluminado, ya que se comportará prácticamentecomo un cortocircuito, con una resistencia de 50! o 100!.

  • 8/17/2019 Guion Practicas Arduino

    19/25

    En este caso lo hemos utilizado como resistencia superior, demanera que cuanta más luz haya, más tensión tendremos a laentrada de nuestra entrada analógica pudiendo ajustar así, de unamanera muy intuitiva, la tensión de referencia que ahoraexplicaré.

    El regulador de luz mínima

    Como tercera parte del circuito, hemos colocado un potenciómetroconfigurado como divisor de tensión para hacer las funciones deregulación del rango de iluminación a partir del cual se activaránuestro circuito de iluminación.

    ¿Como hemos conseguido esto? 

    Primero hay que pensar un par de cosas, nuestra foto-resistencia

    configurada como divisor resistivo, nos va a dar 0v cuando esteCOMPLETAMENTE a oscuras, y +5v cuando esté COMPLETAMENTEiluminada, situaciones que pueden ser difíciles de conseguirdependiendo del entorno en el que trabajemos, y por otra parte,ese rango de 0v a 5v habrá que dividirlo en 1024 “pasos” que va aleer nuestro Arduino, pero quizás solo vayamos a trabajar en 500o 600 pasos, desperdiciando mucha resolución.

    Para solucionar esto, además de evitar cambiar el programa deArduino cada vez que lo cambiemos de entorno, usamos una función

    que nos proporciona Arduino muy internaste, el pin “Aref”

    ¿Qué es el pin AREF? 

    Cuando Arduino toma una señal analógica y la convierte a digitalen 1024 cachitos, lo hace por defecto pensando que la señal queva a recibir puede variar entre 0v y 5v lo que nos daaproximadamente un valor por cada 4,88 mV, pero nosotros podemosdecirle que no, que realmente va a trabajar entre 0v y 3v,

    obteniendo así 1024 cachitos distribuidos entre 0v y 3v, lo quenos da un valor por cada 2,9 mV, es decir una resolución muchomayor.

  • 8/17/2019 Guion Practicas Arduino

    20/25

    Debemos tener en cuenta que este pin lleva internamente unaresistencia de 32K! para evitar dañar el chip, de manera que sivamos a conectar el pin mediante una resistencia fija, se va aproducir un nuevo divisor de tensión, con lo que habrá quecalcular la resistencia adecuada para la tensión exacta quequeremos introducir mediante una sencilla fórmula:

    Donde:

    Vin = Tensión que introducimos a VrefRinterna = Resistencia interna de Arduino de 32K! 

    Rexterna = Resistencia mediante la cual alimentamos VrefVrefencia = La tensión sobre que tomará referencia nuestroprograma.

    De manera que si por ejemplo, estamos introduciendo una tensiónde +3v a través de una resistencia de 5K!, la tensión real dereferencia en nuestro Arduino será de:

    (32000/(32000+5000)) x 3 = 2,59v 

    ¿Porqué evita cambiar el programa continuamente? 

    Por que variando la señal de referencia, le estamos diciendo quenos tome 1024 valores entre 0v una determinada tensión máxima, yel reparto de esos valores ya los hemos fijado equitativamente ennuestro programa para que haga una activación progresiva de laslíneas de iluminación, por tanto, aunque tengamos un rango muybajo de iluminación con el que jugar, de 1v por ejemplo, nos va adistribuir siempre proporcionalmente la activación de lassalidas.

    Esa tensión de referencia, será el punto de iluminación a partirdel cual, si decrece la luz ambiente, empezará a decrecer losvalores obtenidos en la señal analógica de entrada.

    Si ponemos esa referencia muy baja, empezará a funcionar los ledcon menos luz ambiente que si ponemos una señal muy alta,recordemos:

    Más luz = Menos Resistencia = Mayor VoutMenos luz = Mayor resistencia = Menor Vout

  • 8/17/2019 Guion Practicas Arduino

    21/25

    Veamos el circuito final

    Y una posible distribución en protoboard:

  • 8/17/2019 Guion Practicas Arduino

    22/25

     3ª Parte: Programando…

    Abrir el proyecto Proyecto_005.ino de la documentación y observarel programa para empezar a entenderlo, es algo más largo que losanteriores, pero en realidad la única instrucción nueva esanalogReference(EXTERNAL);

    En cuanto a la sucesión de comparaciones os dejo este diagrama deflujo que os hará más sencilla su comprensión:

  • 8/17/2019 Guion Practicas Arduino

    23/25

    0*123,24 566L " IJK A H'*M.N.3.*

    Parte 1: ¿Que vamos a hacer. 

    En esta práctica vamos a tomar la configuración del LDR y delpotenciómetro para transportar esa toma de datos a un movimientofísico en un servomotor de una manera muy sencilla.

    Para ello usaremos los siguientes materiales:

    1 x Arduino Uno 1 x Protoboard 1 x LDR 1 x Potenciómetro 1k! 1 x Resistencia 1K! 1 x ServoMotor1 x Juego de Cables 

    Parte 2: Diseñando el hardware… 

    La única novedad de este circuito reside en la conexión de unservomotor a nuestro Arduino, de manera que veámoslo a fondo:

    ¿Que es un servomotor?

    Un servomotor, es un motor con un eje de rendimiento controlado,es decir, que podemos posicionarlo a nuestro antojo, siempredentro de su rango de actuación. Por lo general los servomotoressuelen tener un rango de 180º aunque existen de 210º e incluso derotación continua.

    ¿Como funcionan los servomotores? 

    Bien, los servomotores son en realidad motores de corrientecontinua con una serie de engranajes que transforman suvelocidad, en torque (fuerza) y un sistema de control que utilizaun potenciómetro para saber constantemente la ubicación del eje,este sistema de control, además, responderá a una señal quenosotros le enviemos para establecer la posición del eje…

  • 8/17/2019 Guion Practicas Arduino

    24/25

    La señal que introducimos al servo, es una señal parecida, que noigual, a la del tipo PWM que ya conocemos, digo esto ya que lafunción PWM de Arduino, recordemos que la utilizábamos parasimular una señal analógica con la función analogWrite(), demanera que dependiendo del ancho de los pulsos digitales emitidoscon una frecuencia de 416Hz, nos emulaba una señal analógica,pero para los servos no queremos eso, vamos a emitir pulsos conuna frecuencia mucho menor, 50Hz, y serán meramente digitales,

    sin intención de querer ser nada analógico y dependiendo delancho del pulso que le enviemos (he ahí el parecido), nuestroservo se situará en una posición o en otra, los pulsos debenllevar una frecuencia de 20ms (los 50Hz) entre ellos para que elservomotor los interprete correctamente, aunque podríanfuncionarnos igualmente en un intervalo entre 10ms y 30ms, conesto queremos decir que el servomotor va a leer cada 20ms suentrada de señal, y dependiendo de lo que dure el 1 lógico (anchodel pulso de +5v) calculará el grado del eje en el que se debesituar.

    Aquí un pequeño esquema de conexión de los principales servos:

  • 8/17/2019 Guion Practicas Arduino

    25/25

     De manera que nos quedarían un esquema de la siguiente manera:

    Y la siguiente conexión en protoboard:

    3ª Parte: Programando…

    Abrir el archivo Proyecto_006.ino de la documentaciónproporcionada y observar el programa.

    Descubrimos como añadir la librería que nos permite trabajar con

    servomotores además de la instrucción:

     map(valor, fromLow, fromHigh, toLow, toHigh)