Curso Arduino Nivel i Lz

96
TALLER DE ARDUINO NIVEL I DURACIÓN 16 HORAS PROF. LUIS ZURITA www.arduino.cc

description

Arduino, curso básico

Transcript of Curso Arduino Nivel i Lz

  • TALLER DE ARDUINO NIVEL I DURACIN 16 HORAS

    PROF. LUIS ZURITA

    www.arduino.cc

  • CONTENIDO DEL CURSO

    1. QU ES ARDUINO?

    2. MICROCONTROLADOR ATMEGA 328P

    3. RECURSOS DE LOS MICROCONTROLADORES

    4. INSTALA EL IDE DE ARDUINO

    5. CONOCIENDO EL ENTORNO ARDUINO

    6. SALIDAS DIGITALES:

    PRCTICA 1: LED BLINK

    PRCTICA 2 : SEMFORO

    PRCTICA 3 : DISPLAY 7 SEGMENTOS

    www.arduino.cc Prof. Luis Zurita

  • www.arduino.cc Prof. Luis Zurita

    7. ENTRADAS DIGITALES:

    PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

    PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

    PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

    8. ENTRADAS ANALGICAS:

    PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA

    CONTENIDO DEL CURSO

  • www.arduino.cc Prof. Luis Zurita

    9. SALIDAS ANALGICAS:

    PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)

    10. COMUNICACIN SERIAL RS232/USB:

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA CON LM35

    PRCTICA 10: TERMOSTTO SERIAL

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

    PRCTICA 12: RECEPCIN DE DATOS Y COMUNICACIN SERIAL

    11. PLUS:

    SIMULACIN EN PROTEUS DEL ARDUINO UNO

    CONTENIDO DEL CURSO

  • www.arduino.cc Prof. Luis Zurita

    QU ES ARDUINO?

    Arduino es una plataforma de prototipos electrnica de cdigo abierto (open-source) basada en hardware y software flexibles y fciles de usar. Est pensado para artistas, diseadores, como hobby y para cualquiera interesado en crear objetos o entornos interactivos.

    Arduino puede sentir el entorno mediante la recepcin de entradas desde una variedad de sensores y puede afectar a su alrededor mediante el control de luces, motores y otros artefactos. El microcontrolador de la placa se programa usando el Arduino Programming Language (basado en Wiring) y el Arduino Development Environment (basado en Processing).

  • www.arduino.cc Prof. Luis Zurita

    QU ES ARDUINO?

    Los proyectos de Arduino pueden ser autnomos o se pueden comunicar con software en ejecucin en un ordenador (por ejemplo con Flash, Processing, MaxMSP, etc.).

    Las placas se pueden ensamblar a mano o encargarlas preensambladas; el software se puede descargar gratuitamente. Los diseos de referencia del hardware (archivos CAD) estn disponibles bajo licencia open-source, por lo que eres libre de adaptarlas a tus necesidades.

    Arduino recibi una mencin honorfica en la seccin Digital Communities del Ars Electronica Prix en 2006.

  • www.arduino.cc Prof. Luis Zurita

    POR QU ARDUINO?

    Hay muchos otros microcontroladores y plataformas de microcontroladores disponibles para la computacin fsica. Microchip, Parallax Basic Stamp, Netmedia de BX-24, Phidgets, Handyboard del MIT, y muchos otros ofrecen una funcionalidad similar. Todas estas herramientas toman los detalles complicados de la programacin de microcontroladores y se envuelve en un paquete fcil de usar. Arduino tambin simplifica el proceso de trabajar con los microcontroladores, pero ofrece algunas ventajas para los profesores, estudiantes y aficionados interesados sobre otros sistemas:

    Asequible: Las placas Arduino son relativamente baratas en comparacin con otras plataformas de microcontroladores. La versin menos costosa del mdulo Arduino puede ser ensamblado a mano, e incluso los mdulos de Arduino preensamblados cuestan menos de 50 $.

  • www.arduino.cc Prof. Luis Zurita

    POR QU ARDUINO?

    Multiplataforma: El software de Arduino se ejecuta en Windows, Macintosh OSX y sistemas operativos Linux. La mayora de los sistemas de microcontrolador se limitan a Windows.

    Simple medio ambiente, programacin clara: El entorno de programacin de Arduino es fcil de usar para los principiantes, pero lo suficientemente complejo para usuarios avanzados para aprovechar as la flexibilidad. Para los profesores, se basa convenientemente en el entorno de programacin Processing, para que los estudiantes que estn aprendiendo a programar en ese entorno estarn familiarizados con la apariencia de Arduino

  • www.arduino.cc Prof. Luis Zurita

    El cdigo abierto y el software de Arduino extensible: se publica como herramientas de cdigo abierto, disponible para la extensin por programadores experimentados. El idioma se puede ampliar a travs de bibliotecas de C ++, y la gente que quiere entender los detalles tcnicos se puede dar el salto de Arduino para el lenguaje de programacin AVR C en el que se basa. Del mismo modo, puede agregar cdigo AVR-C directamente en sus programas de Arduino si quieres.

    El cdigo abierto y el hardware ampliable: El Arduino se basa en la familia de microcontroladores de Atmel ATMEGA8 y ATmega168. Los planes para los mdulos estn publicados bajo una licencia de Creative Commons, por lo que los diseadores de circuitos con experiencia pueden hacer su propia versin del mdulo, amplindolo y mejorndolo. Incluso los usuarios con poca experiencia pueden construir la versin tablero del mdulo con el fin de entender cmo funciona y ahorrar dinero.

    POR QU ARDUINO?

  • www.arduino.cc Prof. Luis Zurita

    MICROCONTROLADOR ATMEGA 328P

  • www.arduino.cc Prof. Luis Zurita

    MICROCONTROLADOR ATMEGA 16U2

    www.arduino.cc

  • www.arduino.cc Prof. Luis Zurita

    CARACTERSTICAS Y RECURSOS ESPECIALES

    CARACTERSTICAS PIC 16F873 CARACTERSTICAS ATMEGA 328P

    HASTA 20 MHZ HASTA 20 MHZ

    8K FLASH 32K FLASH

    368 BYTES RAM 2K RAM

    256 BYTES EEPROM 1K EEPROM

    3 TIMERS 4 TIMERS

    2 MDULOS PWM (10 BITS RESOLUCIN) 6 PWM (8 BITS RESOLUCIN)

    5 CONVERTIDORES A/D 10 BITS RESOLUCIN

    6 CONVERTIDORES A/D 10 BITS RESOLUCIN

    COMUNICACIN I2C COMUNICACIN I2C

    COMUNICACIN SERIAL SNCRONA (SSP) COMUNICACIN SERIAL SNCRONA (SSP)

    COMUNICACIN SERIAL ASNCRONA (USART)

    COMUNICACIN SERIAL ASNCRONA (USART)

    COMUNICACIN PUERTO PARALELO NO POSEE

  • www.arduino.cc Prof. Luis Zurita

    PRIMEROS PASOS CON ARDUINO EN WINDOWS

  • www.arduino.cc Prof. Luis Zurita

    1. Obtener una placa Arduino y un cable.

  • www.arduino.cc Prof. Luis Zurita

    CONECTOR USB

    CONECTOR ALIMENTACIN

    9-12VDC

    CONECTOR ICSP

    PINES COMUNICACIN

    SERIAL

    PINES ENTRADAS/SALIDAS DIGITALES

    PINES ENTRADAS ANALGICAS

    ATMEGA328P

    Los pines 0,1,2,3,4,5,6,7,8,9,10,11,12,13 se pueden utilizar como entradas o salidas digitales Si realizamos transmisiones a travs de TX/RX estos pines quedan inutilizados para E/S Los pines 3,5,6,9,10,11 se pueden utilizar como salidas analgicas tipo PWM

    PULSADOR RESET

  • www.arduino.cc Prof. Luis Zurita

    2. Descargar el entorno Arduino. http://arduino.cc/en/Main/Software Adicionalmente puedes encontrar amplia informacin sobre Arduino, tutoriales, ejemplos en su pgina web oficial: http://arduino.cc/en/Guide/HomePage 3. Conectar la placa. El Arduino Uno, Mega, Duemilanove y

    Arduino Nano muestran automticamente la alimentacin de la conexin USB a la computadora o mediate una fuente de alimentacin externa.

    Conecte la placa Arduino al ordenador mediante el cable USB. El LED verde de alimentacin (etiquetado PWR ) debe continuar.

  • www.arduino.cc Prof. Luis Zurita

    PRIMERA CONEXIN ARUINO

  • www.arduino.cc Prof. Luis Zurita

    PRIMERA CONEXIN ARUINO

  • www.arduino.cc Prof. Luis Zurita

    4. Instalar los drivers USB. Instalacin de controladores para el Arduino

    UNO o Arduino Mega 2560 con Windows 7, Vista o XP:

    Conecte su tarjeta y espere a que Windows para comenzar es el proceso de instalacin del controlador. Despus de unos momentos, el proceso fallar, a pesar de sus mejores esfuerzos

    Haga clic en el men Inicio y abra el Panel de control.

    Mientras que en el Panel de control, vaya a Sistema (System). A continuacin, haga clic en Sistema. Una vez que la ventana del sistema se ha terminado, abra el Administrador de dispositivos (Device Manager).

  • www.arduino.cc Prof. Luis Zurita

    4. Instalar los drivers USB.

    Busque debajo Puertos (COM y LPT). Usted debe ver a un puerto abierto llamado "Arduino UNO ( COMxx ) ". Si no hay una seccin de LPT, COM y busque en la seccin "Otros dispositivos" para "Dispositivo desconocido".

    Haga clic derecho en el "UNO Arduino ( COMxx ) "puerto y elegir la opcin" Actualizar software de controlador ".

    A continuacin, seleccione la opcin "Buscar software de controlador".

    Por ltimo, busque y seleccione el archivo controlador llamado "arduino.inf" , ubicado en la carpeta "Drivers" de la descarga del software de Arduino (no el "de los controladores USB FTDI" sub-directorio). Si est utilizando una versin antigua del IDE (1.0.3 o anterior), seleccione el archivo del controlador Uno llamado "Arduino UNO.inf"

  • www.arduino.cc Prof. Luis Zurita

    Windows terminar la instalacin del controlador de all.

    5. Inicie la aplicacin Arduino.

    Haga doble clic en la aplicacin Arduino. (Nota: si se carga el software de Arduino en un idioma incorrecto, puede cambiarlo en el dilogo de preferencias.

  • www.arduino.cc Prof. Luis Zurita

    CAMBIO DE IDIOMA

    Seleccione: Archivo Preferencias

  • www.arduino.cc Prof. Luis Zurita

    CONOCIENDO EL ENTORNO ARDUINO

    ZONA DE ESTADO Y MENSAJES DE ERROR

    Qu es un Sketch? Es el nombre que usa Arduino para un programa. Es la unidad de cdigo que se sube y ejecuta en la placa Arduino

    REA DE TRABAJO

    Sketch: Bosquejo, esquema, croquis

  • ESTRUCTURA DE UN PROGRAMA

    void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } www.arduino.cc Prof. Luis Zurita

    La funcin void setup ( ) se utiliza cuando se inicia un boceto (Sketch). Se usa para inicializar variables, modos de pines, uso de libreras, etc La funcin de setup slo se ejecutar una vez, despus de cada arranque o reinicio de la placa Arduino.

    Despus de crear la funcin setup ( ), la funcin void loop ( ) no hace exactamente lo que su nombre indica, y se ejecuta bucles de forma consecutiva, lo que permite al programa cambiar y responder mientras se ejecuta. La seccin del cdigo en el loop ( ) se utiliza para controlar activamente la placa Arduino.

    ESTRUCTURA DE UN PROGRAMA

  • ESTRUCTURA DE UN PROGRAMA

    void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } www.arduino.cc Prof. Luis Zurita

    Los comentarios se pueden realizar de dos maneras:

    Por bloque de lneas:

    /*

    Comentario del programa

    */

    Por lneas:

    // Comentario del

    // Programa

    Los comentarios no son ledos por el compilador, por lo que puedes escribir lo que quieras despus de ella. Al comentar su cdigo como este puede ser particularmente til para explicar, tanto a s mismo y a otros, cmo funciona su programa paso a paso.

    ESTRUCTURA DE UN PROGRAMA

  • www.arduino.cc Prof. Luis Zurita

    ESTRUCTURA DE UN PROGRAMA

    Variables:

    Una variable es un lugar donde se almacena un dato. Posee un nombre, un tipo y un valor. Por ejemplo, la lnea del sketch Blink declara una variable con el nombre led, de tipo int, y con el valor inicial 13. Esta siendo utilizada para indicar que pin de Arduino se conecta al LED. Cada vez que el nombre led aparece en el cdigo, su valor ser utilizado.

    En este caso, la persona que escribi el cdigo podra no haberse molestado en definir la variable led y utilizar simplemente 13 en todas las partes en que debiese especificar el nmero del pin.

  • www.arduino.cc Prof. Luis Zurita

    ESTRUCTURA DE UN PROGRAMA

    La ventaja de utilizar una variable es que se hace mucho ms fcil mover el LED a un pin diferente: solo necesitas editar la lnea en que se asigna el valor inicial a la variable.

    Con frecuencia, el valor de una variable cambiar a medida que se ejecuta el sketch.

    int led = 13; // Pin 13 tiene un LED conectado en la

    // mayora de las placas Arduino

    // darle un nombre: El mensaje " Pin 13 tiene un LED

    // conectado en la mayora de las placas Arduino " es un

    // comentario.

  • www.arduino.cc Prof. Luis Zurita

    TIPOS DE DATOS.

    Arduino trabaja con los siguientes tipos de variables: Especificacin Significado Tamao Rango

    int entero 2 bytes -32768 to 32767

    unsigned int Entero positivo 2 bytes 0 a 65536 (sin signo)

    long Entero de 32 bits 4 bytes -2147483648 a 2147483647

    unsigned long Entero de 32 bits positivo

    4 bytes 0 a 4294967295

    float Coma flotante 4 bytes 3.4028235E+38 to -3.4028235E+38

    double Coma flotante 4 bytes Mismo que float

    boolean Booleano 1 byte false (0) or true (1)

    char Carcter 1 byte -128 to 127

    byte Entero 8 bits 1 byte 0 to 255

    string Cadena de caracteres usados para textos

    void Sin valor nulo Ninguno

  • www.arduino.cc Prof. Luis Zurita

  • www.arduino.cc Prof. Luis Zurita

  • www.arduino.cc Prof. Luis Zurita

  • www.arduino.cc Prof. Luis Zurita

    CONECTOR USB

    CONECTOR ALIMENTACIN

    9-12VDC

    CONECTOR ICSP

    PINES COMUNICACIN

    SERIAL

    PINES ENTRADAS/SALIDAS DIGITALES

    PINES ENTRADAS ANALGICAS

    ATMEGA328P

    Los pines 0,1,2,3,4,5,6,7,8,9,10,11,12,13 se pueden utilizar como entradas o salidas digitales Si realizamos transmisiones a travs de TX/RX estos pines quedan inutilizados para E/S Los pines 3,5,6,9,10,11 se pueden utilizar como salidas analgicas tipo PWM

    PULSADOR RESET

  • www.arduino.cc

    PRCTICA 1: LED BLINK

    Sin resistencia (Solo con el pin 13)

    Prof. Luis Zurita

    Con resistencia

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 1: LED BLINK

    Diagrama de flujo (Planificacin)

  • Abra el ejemplo LED Blink: Archivo> Ejemplos> 1.Basics> Blink .

    Prof. Luis Zurita www.arduino.cc

    PRCTICA 1: LED BLINK

  • www.arduino.cc Prof. Luis Zurita

    //INTERMITENTE ledPin = 13; / / Definicin de la salida en el PIN 13 void setup() //Configuracin { pinMode(ledPin, OUTPUT); // designa la salida digital al PIN 1 } void loop() // bucle de funcionamiento { digitalWrite(ledPin, HIGH); // activa el LED delay(1000); // espera 1 seg. (tiempo encendido) digitalWrite(ledPin, LOW); // desactiva el LED delay(1000); // espera 1 seg. (tiempo apagado) }

    PRCTICA 1 : LED BLINK A

    SIG

    NA

    CI

    N

    VA

    RIA

    BLE

    S C

    ON

    FIG

    UR

    AC

    IN

    P

    UER

    TOS

    E/S

    PR

    OG

    RA

    MA

    P

    RIN

    CIP

    AL

  • www.arduino.cc Prof. Luis Zurita

    Seleccione su tarjeta

    PRCTICA 1: LED BLINK

  • www.arduino.cc Prof. Luis Zurita

    Seleccione el Puerto Serie: Seleccione el dispositivo de serie de la placa Arduino desde el men Tools | Serial Port. Esto es probable que sea COM3 o superior (COM1 y COM2 son generalmente reservados para los puertos serie de hardware). Para averiguarlo, se puede desconectar la placa Arduino y vuelva a abrir el men; la entrada que desaparece debe ser la placa Arduino. Vuelva a conectar el tablero y seleccionar ese puerto serie.

    PRCTICA 1: LED BLINK

  • www.arduino.cc Prof. Luis Zurita

    Compila el Programa Blink

    En la parte inferior se verificar que el programa est compilado correctamente, en caso contrario se mostrar la lnea en donde se encuentra el error:

    Ahora, simplemente haga clic en el botn verificar en el IDE.

    PRCTICA 1: LED BLINK

  • www.arduino.cc Prof. Luis Zurita

    Carga el Programa Blink

    Espere unos segundos para que pueda observar el led parpadeando.

    Si la carga se realiza correctamente, el mensaje carga terminada" aparecer en la barra de estado. Unos segundos despus de que finalice la carga, debera ver el pin 13 (LED) en la tarjeta que empieza a parpadear (en naranja). Si es as has logrado completar tu primer programa en Arduino.

    Ahora, simplemente haga clic en el botn cargar en el IDE.

    PRCTICA 1: LED BLINK

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 1 : LED BLINK

    Salidas Digitales (Instrucciones relacionadas)

    pinMode(pin, mode);

    N pin modo INPUT (entrada) OUTPUT (salida)

    digitalWrite(pin, value);

    digitalWrite(pin, HIGH); //coloca en el pin un valor HIGH (alto 1)

    digitalWrite(pin, LOW); //coloca en el pin un valor LOW (bajo 0)

    delay() hace a Arduino esperar por el numero especificado de

    milisegundos antes de continuar con la siguiente lnea. Hay

    1000 milisegundos en un segundo, por lo que la linea:

    delay(1000); // esperar un segundo

  • www.arduino.cc Prof. Luis Zurita

    R1

    330R

    R2

    330R

    R3

    330R

    D1

    D1

    D1GND

    ROJO

    AMARILLO

    VERDE

    PRCTICA 2 : SEMFORO

    Diagrama de flujo (Planificacin)

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 2 : SEMFORO

  • www.arduino.cc Prof. Luis Zurita

    // Encedido y apagado de 3 LEDs Del semforo

    int ROJO= 6; // Define las salidas de los LEDs

    int AMARILLO = 7;

    int VERDE= 8;

    void setup() { // Configura las SALIDAS

    pinMode(ROJO, OUTPUT); // declarar LEDs como SALIDAS

    pinMode(AMARILLO, OUTPUT);

    pinMode(VERDE, OUTPUT);

    digitalWrite(ROJO, LOW); // Apaga los LEDs

    digitalWrite(AMARILLO, LOW);

    digitalWrite(VERDE, LOW);

    }

    PRCTICA 2 : SEMFORO A

    SIG

    NA

    CI

    N

    VA

    RIA

    BLE

    S C

    ON

    FIG

    UR

    AC

    IN

    P

    UER

    TOS

    E/S

  • www.arduino.cc Prof. Luis Zurita

    void loop(){ //Bucle de Funcionamiento

    digitalWrite(ROJO, HIGH); // Apaga y enciende los leds

    //cada 200 ms

    delay(3000);

    digitalWrite(ROJO, LOW);

    digitalWrite(AMARILLO, HIGH);

    delay(1000);

    digitalWrite(AMARILLO, LOW);

    digitalWrite(VERDE, HIGH);

    delay(3000);

    digitalWrite(VERDE, LOW);

    }

    PRCTICA 2 : SEMFORO P

    RO

    GR

    AM

    A

    PR

    INC

    IPA

    L

  • www.arduino.cc Prof. Luis Zurita

    a

    f

    b

    g

    e

    c

    d

    CATODO COMUN

    a

    f

    e

    d DP

    c

    g b

    PRCTICA 3 : DISPLAY 7 SEGMENTOS

  • www.arduino.cc Prof. Luis Zurita

    a

    f

    AC

    e d

    DP

    c

    g

    b

    AC

    LTS4710AR

    7= a 8= b 9= c 10= d 11= e 12= f 13= g

    PRCTICA 3 : DISPLAY 7 SEGMENTOS

  • www.arduino.cc Prof. Luis Zurita

    7= a 8= b 9= c 10= d 11= e 12= f 13= g

    a f

    AC e d DP c

    g b AC

    HDSP-515L

    PRCTICA 3 : DISPLAY 7 SEGMENTOS

  • www.arduino.cc Prof. Luis Zurita

    int pausa=1000; // Variable que define el intervalo // de tiempo entre cada digito void setup() { pinMode(7, OUTPUT); // Asignacin de las salidas digitales pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void display (int a, int b, int c, int d, int e, int f, int g) // Funcion del display { digitalWrite (7,a); //Se reciben 7 variables y se asignan digitalWrite (8,b); //a cada una de las salidas digitalWrite (9,c); digitalWrite (10,d); digitalWrite (11,e); digitalWrite (12,f); digitalWrite (13,g); }

    ASI

    GN

    AC

    IN

    V

    AR

    IAB

    LES

    CO

    NFI

    GU

    RA

    CI

    N

    PU

    ERTO

    S E/

    S FU

    NC

    IN

    D

    E D

    ISP

    LAY

  • www.arduino.cc Prof. Luis Zurita

    void loop() //Funcion principal // Dependiendo de cada dgito, se enva a la funcin display // los estados (0 y 1) a cada uno de los segmentos { display (0,0,0,0,0,0,1); //escribe 0 para display nodo comn delay(pausa); display (1,0,0,1,1,1,1); //escribe 1 para display nodo comn delay(pausa); display (0,0,1,0,0,1,0); //escribe 2 para display nodo comn delay(pausa); display (0,0,0,0,1,1,0); //escribe 3 para display nodo comn delay(pausa); display (1,0,0,1,1,0,0); //escribe 4 para display nodo comn delay(pausa); display (0,1,0,0,1,0,0); //escribe 5 para display nodo comn delay(pausa); display (0,1,0,0,0,0,0); //escribe 6 para display nodo comn delay(pausa); display (0,0,0,1,1,1,1); //escribe 7 para display nodo comn delay(pausa); display (0,0,0,0,0,0,0); //escribe 8 para display nodo comn delay(pausa); display (0,0,0,1,1,0,0); //escribe 9 para display nodo comn delay(pausa); } PARA NODO COMN

    PR

    OG

    RA

    MA

    P

    RIN

    CIP

    AL

  • www.arduino.cc Prof. Luis Zurita

    void loop() //Funcion principal // Dependiendo de cada dgito, se enva a la funcin display // los estados (0 y 1) a cada uno de los segmentos { display (1,1,1,1,1,1,0); //escribe 0 para display ctodo comn delay(pausa); display (0,1,1,0,0,0,0); //escribe 1 para display ctodo comn delay(pausa); display (1,1,0,1,1,0,1); //escribe 2 para display ctodo comn delay(pausa); display (1,1,1,1,0,0,1); //escribe 3 para display ctodo comn delay(pausa); display (0,1,1,0,0,1,1); //escribe 4 para display ctodo comn delay(pausa); display (1,0,1,1,0,1,1); //escribe 5 para display ctodo comn delay(pausa); display (1,0,1,1,1,1,1); //escribe 6 para display ctodo comn delay(pausa); display (1,1,1,0,0,0,0); //escribe 7 para display ctodo comn delay(pausa); display (1,1,1,1,1,1,1); //escribe 8 para display ctodo comn delay(pausa); display (1,1,1,0,0,1,1); //escribe 9 para display ctodo comn delay(pausa); } PARA CTODO COMN

    PR

    OG

    RA

    MA

    P

    RIN

    CIP

    AL

  • www.arduino.cc Prof. Luis Zurita

    R11k

    R21k

    GND

    VCC

    SALIDA

    VCC

    SALIDA

    GND

    Divisor de tensin especfico. Lee el estado lgico sin ambigedades

    PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

    PullUp PullDown

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

    Diagrama de flujo (Planificacin)

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

  • www.arduino.cc Prof. Luis Zurita

    /* Pulsador Detecta si el botn ha sido presionado o no y enciende el LED el o no. */ int ledPin = 13; // PIN del LED int inPin = 10; // PIN del pulsador int value = 0; // Valor del pulsador void setup() { pinMode(ledPin, OUTPUT); // Inicializa el pin 13 como salida digital pinMode(inPin, INPUT); // Inicializa el pin 10 como entrada digital } void loop() { value = digitalRead(inPin); // Lee el valor de la entrada digital digitalWrite(ledPin, value); }

    PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

    ASI

    GN

    AC

    IN

    V

    AR

    IAB

    LES

    CO

    NFI

    GU

    RA

    CI

    N

    PU

    ERTO

    S E/

    S P

    RO

    GR

    AM

    A

    PR

    INC

    IPA

    L

  • www.arduino.cc Prof. Luis Zurita

    Salidas Digitales (Instrucciones relacionadas)

    pinMode(pin, mode);

    N pin modo INPUT (entrada) OUTPUT (salida)

    digitalRead(pin);

    valor=digitalRead(pin); //La lectura del pin es guardado en valor

    PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

  • www.arduino.cc Prof. Luis Zurita

    Rel electromecnico

    Q12N3904

    R3

    1k

    D11N4004

    RL1RLY-SPCO

    GND

    VCC

    PIN10

    Circuito Elctrico

    el Rel es un dispositivo, que funciona como un interruptor controlado por un circuito elctrico en el que, por medio de un electroimn, se acciona un juego de uno o varios contactos que permiten abrir o cerrar otros circuitos elctricos independientes.

    PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

  • www.arduino.cc Prof. Luis Zurita

    Rel de estado slido

    1

    2

    6

    4

    U1

    MOC3021

    R4

    330R

    GND

    PIN uC

    R5

    1k

    U2BT136

    12

    HACIA LA CARGA 110VAC

    PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

    Optoacoplador (Optotriac)

    TRIAC

  • www.arduino.cc Prof. Luis Zurita

    Montaje en el Arduino

    PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

    MEMO es una variable para memorizar el estado del LED

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

  • www.arduino.cc Prof. Luis Zurita

    // MANDO DESDE DOS PULSADORES DE UNA CARGA int LED = 4; // PIN del LED int PULSADOR1 = 7; // PIN del pulsador int PULSADOR2 = 8; // PIN del pulsador int MEMO= 0; // BANDERA int VALOR=0; void setup() { pinMode(LED, OUTPUT); // Inicializa el pin 4 como salida digital pinMode(PULSADOR1, INPUT); // Inicializa el pin 10 como entrada digital pinMode(PULSADOR2, INPUT); // Inicializa el pin 10 como entrada digital } void loop() { VALOR = digitalRead(PULSADOR1); // lee el valor de la entrada digital pin 7 if (VALOR==1){ while (VALOR==1){ VALOR = digitalRead(PULSADOR1); // lee el valor de la entrada digital pin 7 delay(20);} if (MEMO==0){ digitalWrite(LED, HIGH); MEMO=1; delay(20);}

    PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

    ASI

    GN

    AC

    IN

    V

    AR

    IAB

    LES

    CO

    NFI

    GU

    RA

    CI

    N

    PU

    ERTO

    S E/

    S P

    RO

    GR

    AM

    A

    PR

    INC

    IPA

    L

  • www.arduino.cc Prof. Luis Zurita

    else { digitalWrite(LED, LOW); MEMO=0; delay(20);} } else { VALOR = digitalRead(PULSADOR2); // lee el valor de la entrada digital pin 8 if (VALOR==1){ while (VALOR==1){ VALOR = digitalRead(PULSADOR2); // lee el valor de la entrada digital pin 8 delay(20);} if (MEMO==0){ digitalWrite(LED, HIGH); MEMO=1; delay(20);} else { digitalWrite(LED, LOW); MEMO=0; delay(20);} } } }

    PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

    CO

    NTI

    NU

    AC

    IN

    DE

    PR

    OG

    RA

    MA

    PR

    INC

    IPA

    L

  • www.arduino.cc Prof. Luis Zurita

    PINES ENTRADAS ANALGICAS

    ATMEGA328P

    Existen 6 canales de entradas analgicas: AN0 .. AN5.

    Las entradas analgicas deben variar entre 0 y 5v.

    La conversin se realiza con una precisin de 10 Bits (0 a 1024)

    PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA

  • www.arduino.cc Prof. Luis Zurita

    El uso de un potencimetro y uno de los pines de entrada analgica/digital de Arduino (ADC) permite leer valores analgicos que se convertirn en valores dentro del rango de 0-1024.

    Es posible utilizar un potencimetro simular una entrada analgica o bien un sensor de tipo resistivo. Es posible tambin conectar Sensores cuya salida sea de 0 a 5v.

    PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA

  • www.arduino.cc Prof. Luis Zurita

    analogRead (pin)

    Lee el valor de un determinado pin definido como entrada analgica con una resolucin de 10 bits. Esta instruccin slo funciona en los pines (0-5). El rango de valor que podemos leer oscila de 0 a 1023.

    Valor= analogRead(pin);//asigna a valor lo que lee en la

    //entrada pin.

    Nota: Los pines analgicos (0-5) a diferencia de los pines digitales, no necesitan ser declarados como INPUT u OUTPUT porque son siempre INPUTs.

    PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA

  • www.arduino.cc Prof. Luis Zurita

    int POTEN = 0; // seleccionamos el pin de entrada para el //potencimetro int LEDV = 2; // seleccionamos los pines de los leds int LEDA = 3; int LEDR = 4; int valor; // variable para almacenar el valor del potencimetro void setup() { // declaramos los Pines de los leds como OUTPUT: pinMode(LEDV, OUTPUT); pinMode(LEDA, OUTPUT); pinMode(LEDR, OUTPUT); digitalWrite(LEDR, LOW); digitalWrite(LEDA, LOW); digitalWrite(LEDV, LOW); }

    PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA

    ASI

    GN

    AC

    IN

    V

    AR

    IAB

    LES

    CO

    NFI

    GU

    RA

    CI

    N

    PU

    ERTO

    S E/

    S

  • www.arduino.cc Prof. Luis Zurita

    void loop() { // Lee el valor del Potenciometro: valor = analogRead(POTEN); delay(100); if (valor

  • www.arduino.cc Prof. Luis Zurita

    analogWrite(pin, valor)

    Esta instruccin sirve para escribir un pseudo-valor analgico utilizando el procedimiento de modulacin por ancho de pulso (PWM) a uno de los pines de Arduino marcados como pin PWM. El valor que se puede enviar a estos pines de salida analgica puede darse en forma de variable o constante, pero siempre con un margen de 0-255.

    PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)

    Amplitud

  • www.arduino.cc Prof. Luis Zurita

    Debido a que esta es una funcin de hardware, en el pin de salida analgica (PWN) se generar una onda constante despus de ejecutada la instruccin analogWrite hasta que se llegue a ejecutar otra instruccin analogWrite (o una llamada a digitalRead o digitalWrite en el mismo pin). Nota: Las salidas analgicas a diferencia de las digitales, no necesitan ser declaradas como INPUT u OUTPUT.

    PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)

    0 volts

    5 volts

    0 volts

    5 volts

    0 volts

    5 volts 3.75 volts

    2.5 volts

    1.0 volts

    20% 80%

    50% 50%

    80% 20%

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)

  • www.arduino.cc Prof. Luis Zurita

    La siguiente prctica lee un valor analgico de un pin de entrada analgica, convierte el valor dividindolo por 4, y enva el nuevo valor convertido a una salida del tipo PWM o salida analgica, esto se debe a que la conversin analgica proveniente del potencimetro es de 10 bits, es decir estar entre 0 a 1023 y la escritura analgica mediante la PWM es de 8 bits, es decir estar entre 0 a 255.

    PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)

    POTENCIOMETRO A VALOR VALOR

    4 = =

    (0 1023)

    4 = (0 255)

    SALIDA= map(valor,mino,maxo,mind,maxd); // Funcin Escalar

    SALIDA= map(valor,0,1023,0,255); // Cambia el rango. Funcin Escalar

  • www.arduino.cc Prof. Luis Zurita

    int led = 9; // define el pin 10 como led int POTEN = 0; // define el pin 0 como POTEN int valor; // define la variable valor void setup( ) { // no es necesario configurar entradas y salidas } void loop() { valor = analogRead(POTEN); // lee el potencimetro y //lo guarda en valor valor= valor/4; //divide valor entre 4 y lo reasigna a valor analogWrite (led, valor); // escribe en el pin10 valor }

    PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)

  • www.arduino.cc Prof. Luis Zurita

    Dispositivo Externo

    C

    TX

    TX

    RX

    RX

    GND

    TX

    RX

    C

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

    ARDUINO

    Mdulo USB

    En los sistemas con microcontroladores puede existir la necesidad de conectarse con el mundo exterior, y esto se logra mediante las comunicaciones seriales y paralelas.

  • www.arduino.cc Prof. Luis Zurita

    PROTOCOLO RS-232

    Este protocolo es el utilizado por Arduino. Cada dato se enva independientemente de los

    dems. Consta de 8 bits de datos Consta de 1 bit de Inicio (START) Consta de 1 bit de Parada (STOP)

    BIT INICIO BIT PARADA

    DATO LSB MSB

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    El sensor de temperatura LM35 produce un voltaje analgico directamente proporcional a la temperatura medida con una salida de 1 milivoltio por cada 0.1C (10 mV por grado)

    El sketch convierte el valor del sensor (analogRead) a milivoltios y lo divide por 10 para obtener los grados.

    La precisin del sensor ronda los 0.5 C, y en muchos casos podremos usar recursos en lugar de clculos matemticos de puntos flotantes.

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    Algunas instrucciones y/o funciones de la comunicacin serial:

    Serial.begin(9600); //9600 baud

    Establece la velocidad de comunicacin deseada.

    Baud (Baudios) es una medida del nmero de bits transmitidos por segundo.

    Se pueden elegir otros rangos de velocidad entre ms bajos y ms altos (300 a 115,200 baudios), pero hay que asegurarse de que ambos lados utilicen la misma velocidad. Para estas prcticas trabajaremos a 9600 baudios.

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    Serial.print("Coloca tu texto= ");

    Con esta instruccin puedes enviar una lnea de texto y/o cadena de caracteres (String). Para tal fin se considerar una cadena de caracteres todo lo que este entre las comillas (" ") . Se considera un mensaje esttico o constante pues no cambiar su valor una vez transmitido.

    Serial.print(Variable);

    Con esta instruccin se puede enviar un dato variable tipo entero. Para otros formatos tendramos:

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

    Tipo de Dato

    Print Print Print Print Print Print (valor) (valor,DEC) (valor,BYTE) (valor, HEX) (valor,OCT) (valor,BIN)

    char A 65 A 41 101 1000001 int 65 65 A 41 101 1000001 long El formato de long es el mismo que el entero float 65.00 Formato no es soportado para valores de punto flotante double 65.00 El formato de double es el mismo que el float

    char asciiValue = 'A'; // ASCII A has a value of 65 char chrValue = 65; // an 8 bit character, this also is ASCII 'A' int intValue = 65; // a 16 bit integer set to a value of 65 float floatValue = 65.0; // float with a value of 65 Serial.println("chrValue: "); Serial.println(chrValue); Serial.println(chrValue,BYTE); Serial.println(chrValue,DEC); Serial.println("intValue: "); Serial.println(intValue); Serial.println(intValue,BYTE);

    Serial.println(intValue,DEC); Serial.println(intValue,HEX); Serial.println(intValue,OCT); Serial.println(intValue,BIN); Serial.println("floatValue: "); Serial.println(floatValue);

  • www.arduino.cc Prof. Luis Zurita

    Serial.println("Texto" o variable)

    Con esta instruccin se puede enviar una cadena de caracteres o una variable tipo entero, con la diferencia de que las letras ln permiten el cambio automtico de lnea hacia una nueva lnea.

    Se pueden combinar ambas funciones para escribir un mensaje variable. Por ejemplo, si se desea enviar:

    La Temperatura es= xxx Grados Centgrados, donde xxx es la variable medida.

    Podemos hacerlo de dos formas:

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    Por lneas separadas:

    Serial.print(" La Temperatura es= ");

    Serial.print(valor);

    Serial.println( Grados Centgrados");//cambio de lnea

    Otra forma de escribir lo mismo en una misma lnea: Serial.print(" La Temperatura es= "); Serial.print(valor); Serial.println( Grados Centgrados");

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

  • www.arduino.cc Prof. Luis Zurita

    //lm35 sketch //Muetra la temperatura en el monitor serial int inPin = 0; // pin del sensor analgico void setup() { Serial.begin(9600); // Establece la velocidad de comunicacin } void loop() { int value = analogRead(inPin); Serial.print(value); Serial.print(" > "); float millivolts = (value / 1024.0) * 5000; float celsius = millivolts / 10; // salida del sensor es 10mV por grado celsius Serial.print(celsius); Serial.print(" grados Celsius, "); Serial.print( (celsius * 9)/ 5 + 32 ); // convierte a fahrenheit Serial.println(" grados Fahrenheit"); delay(1000); // espera un segundo }

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

    ASI

    GN

    AC

    IN

    V

    AR

    IAB

    LES

    CO

    NFI

    GU

    RA

    CI

    N

    PU

    ERTO

    S E/

    S P

    RO

    GR

    AM

    A

    PR

    INC

    IPA

    L

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA

    Presione el Monitor Serial una vez cargado el programa para observar la temperatura desde el Arduino UNO

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 10: TERMOSTTO SERIAL

  • www.arduino.cc Prof. Luis Zurita

    const int inPin = 0; // LM35 conectado al pin analgico const int outPin = 13; // Pin de alarma const int umbral= 25; // Los grados Celsius que dispararn el pin de alarma void setup() { Serial.begin(9600); pinMode(outPin, OUTPUT); } void loop() { int value = analogRead(inPin); long celsius = (value * 500L) /1024; // 10 mV por grados Celsius Serial.print(celsius); Serial.print(" grados Celsius: "); if(celsius > umbral)//compara lectura del sensor con el margen de disparo { digitalWrite(outPin, HIGH); Serial.println("ALARMA ACTIVADA"); }

    PRCTICA 10: TERMOSTTO SERIAL

  • www.arduino.cc Prof. Luis Zurita

    El sketch usa enteros largos de 32 bits (long integers) para calcular el valor. La letra L despus del nmero ocasiona que el clculo sea optimizado usando matemticas de entero largo. As que la multiplicacin de la mxima temperatura (500 para 5V de Arduino) y el valor leido de la entrada analgica no desbordar el formato de 32 bits. Si se necesitan los valores en Fahrenheit, podremos convertir el valor usando la siguiente frmula: float f = (celsius * 9)/ 5 + 32 );

    PRCTICA 10: TERMOSTTO SERIAL

    else { digitalWrite(outPin, LOW); Serial.println("ALARMA DESACTIVADA"); } delay(1000); // Delay de 1 segundo }

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

  • www.arduino.cc Prof. Luis Zurita

    int LED = 13; int Boton = 10; int valor = 0; int contador = 0; void setup(){ Serial.begin(9600); // Configura velocidad de transmisin a 9600 pinMode(LED, OUTPUT); // inicializa como salida digital el pin 13 pinMode(Boton, INPUT); // inicializa como entrada digital el 7 } void loop() { valor = digitalRead(Boton); // lee el valor de la entrada digital pin 7 digitalWrite(LED, valor); while(valor==0){ digitalWrite(LED, LOW); valor = digitalRead(Boton); } digitalWrite(LED, HIGH); delay(20); while(valor==1){ digitalWrite(LED, HIGH); valor = digitalRead(Boton); } contador++; Serial.println(contador); }

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

  • www.arduino.cc Prof. Luis Zurita

    int LED = 13; int Boton =10; int valor = 0; int contador = 0; int estadoanteriorboton = 0; void setup() { Serial.begin(9600); // Configura velocidad de transmisin a 9600 pinMode(LED, OUTPUT); // inicializa como salida digital el pin 13 pinMode(Boton, INPUT); // inicializa como entrada digital el 7 } void loop() { valor = digitalRead(Boton); // lee el valor de la entrada digital pin 7 digitalWrite(LED, valor); if(valor != estadoanteriorboton){ if(valor == 1){ contador++; Serial.println(contador); } } estadoanteriorboton = valor; }

    Problemas con rebote

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

  • www.arduino.cc Prof. Luis Zurita

    Presione el Monitor Serial una vez cargado el programa para observar la cuenta desde el Arduino Uno

    PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 12: RECEPCIN DE DATOS Y COMUNICACIN SERIAL

    /* * Sketch de recepcin serial * Blink al LED proporcional al valor del dgito recibido + ON/OFF manual */ const int ledPin = 13; // Conectamos el LED a este pin int blinkRate=0; // Rata (tiempo) del blink es almacenado en esta variable int memo=0; //memoriza y mantiene activado o no el blink void setup() { Serial.begin(9600); // Inicializa el puerto serial para enviar y recibir a 9600 baudios pinMode(ledPin, OUTPUT); // Se coloca este pin como salida } void loop() { if ( Serial.available()||memo==1) // chequea para ver si hay un caracter disponible { char ch = Serial.read(); if(ch >= '0' && ch

  • www.arduino.cc Prof. Luis Zurita

    PRCTICA 12: RECEPCIN DE DATOS Y COMUNICACIN SERIAL

    //Modificacin 'o' apaga el led if(ch=='o'){ digitalWrite(ledPin,LOW); memo=0;} if(ch=='p'){ digitalWrite(ledPin,HIGH); memo=0;} if(ch=='a'){ memo=1;} if(ch=='d'){ memo=0;} if (memo==1){ blink(); } } } // blink sobre el LED con tiempo on y off determinado por blinkRate void blink() { digitalWrite(ledPin,HIGH); delay(blinkRate); // delay depende del valor sobre el blinkrate digitalWrite(ledPin,LOW); delay(blinkRate); }